if (fstat(fd, &statb) < 0) {
clib_unix_warning("fstat");
+ close (fd);
return -2;
}
if (statb.st_mode & S_IFREG) {
if (statb.st_size == 0) {
- lseek(fd, map_size, SEEK_SET);
- if (write(fd, &junk, 1) != 1)
+ if (lseek(fd, map_size, SEEK_SET) == (off_t) -1) {
+ clib_unix_warning ("seek region size");
+ close (fd);
+ return -3;
+ }
+ if (write(fd, &junk, 1) != 1) {
clib_unix_warning ("set region size");
+ close (fd);
+ return -3;
+ }
} else {
map_size = rnd_pagesize (statb.st_size);
}
if (mmap (rp->data_base, map_size, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_FIXED, fd, 0) == MAP_FAILED) {
clib_unix_warning("mmap");
+ close (fd);
return -3;
}
close(fd);
if (fstat(fd, &statb) < 0) {
clib_unix_warning("fstat");
+ close (fd);
return -2;
}
if (statb.st_mode & S_IFREG) {
if (statb.st_size == 0) {
- lseek(fd, map_size, SEEK_SET);
- if (write(fd, &junk, 1) != 1)
+ if (lseek(fd, map_size, SEEK_SET) == (off_t) -1) {
+ clib_unix_warning ("seek region size");
+ close (fd);
+ return -3;
+ }
+ if (write(fd, &junk, 1) != 1) {
clib_unix_warning ("set region size");
+ close (fd);
+ return -3;
+ }
} else {
map_size = rnd_pagesize (statb.st_size);
}
if (mmap (rp->data_base, map_size, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_FIXED, fd, 0) == MAP_FAILED) {
clib_unix_warning("mmap");
+ close (fd);
return -3;
}
close(fd);
vec_free(shm_name);
- lseek(svm_fd, a->size, SEEK_SET);
- if (write(svm_fd, &junk, 1) != 1)
+ if (lseek(svm_fd, a->size, SEEK_SET) == (off_t) -1) {
+ clib_warning ("seek region size");
+ close (svm_fd);
+ return (0);
+ }
+ if (write(svm_fd, &junk, 1) != 1) {
clib_warning ("set region size");
+ close (svm_fd);
+ return (0);
+ }
rp = mmap((void *)a->baseva, a->size,
PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, svm_fd, 0);
if (rp == (svm_region_t *) MAP_FAILED) {
clib_unix_warning ("mmap create");
+ close (svm_fd);
return (0);
}
close(svm_fd);
while (1) {
if (0 != fstat(svm_fd, &stat)) {
clib_warning("fstat failed: %d", errno);
+ close (svm_fd);
return (0);
}
if (stat.st_size > 0) {
}
if (0 == time_left) {
clib_warning("waiting for resize of shm file timed out");
+ close (svm_fd);
return (0);
}
ts.tv_sec = 0;
* <bleep>-ed?
*/
if (rp->version == 0) {
- close(svm_fd);
- munmap(rp, a->size);
clib_warning("rp->version %d not %d", rp->version,
SVM_VERSION);
+ close(svm_fd);
+ munmap(rp, a->size);
return (0);
}
/* Remap now that the region has been placed */
MAP_SHARED | MAP_FIXED, svm_fd, 0);
if ((uword)rp == (uword)MAP_FAILED) {
clib_unix_warning ("mmap");
+ close (svm_fd);
return (0);
}
}
fd = socket(PF_INET, SOCK_DGRAM, 0);
+ if (fd < 0)
+ {
+ error = clib_error_return_unix (0, "socket");
+ goto done;
+ }
while((e = readdir (dir)))
{
memset(&ifr, 0, sizeof ifr);
memset(&drvinfo, 0, sizeof drvinfo);
ifr.ifr_data = (char *) &drvinfo;
- strncpy(ifr.ifr_name, e->d_name, IFNAMSIZ);
+ strncpy(ifr.ifr_name, e->d_name, IFNAMSIZ - 1);
drvinfo.cmd = ETHTOOL_GDRVINFO;
- ioctl (fd, SIOCETHTOOL, &ifr);
+ if (ioctl (fd, SIOCETHTOOL, &ifr) < 0)
+ {
+ if (errno == ENOTSUP)
+ /* Some interfaces (eg "lo") don't support this ioctl */
+ continue;
+
+ error = clib_error_return_unix (0, "ioctl fetch intf %s bus info",
+ e->d_name);
+ close (fd);
+ goto done;
+ }
if (strcmp ((char *) s, drvinfo.bus_info))
continue;
memset (&ifr, 0, sizeof(ifr));
- strncpy (ifr.ifr_name, e->d_name, IFNAMSIZ);
- ioctl (fd, SIOCGIFFLAGS, &ifr);
- close (fd);
+ strncpy (ifr.ifr_name, e->d_name, IFNAMSIZ - 1);
+ if (ioctl (fd, SIOCGIFFLAGS, &ifr) < 0)
+ {
+ error = clib_error_return_unix (0, "ioctl fetch intf %s flags",
+ e->d_name);
+ close (fd);
+ goto done;
+ }
if (ifr.ifr_flags & IFF_UP)
{
"interface %s is up",
format_vlib_pci_addr, &d->bus_address,
e->d_name);
+ close (fd);
goto done;
}
}
done:
if (error)
{
- if (fd > 0)
+ if (fd >= 0)
close (fd);
}
vec_free (file_name);
{
pool_put (pm->pci_devs, dev);
error = clib_error_return_unix (0, "read `%s'", f);
+ close (fd);
goto done;
}
{
pool_put (pm->pci_devs, dev);
error = clib_error_return (0, "invalid PCI config for `%s'", f);
+ close (fd);
goto done;
}
}