summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authormjacob <mjacob@FreeBSD.org>2001-07-04 07:43:10 +0000
committermjacob <mjacob@FreeBSD.org>2001-07-04 07:43:10 +0000
commitb1c9f4a4616e32e7eaa61b9c53060ae68bf8e5c1 (patch)
tree485683b31fb4390e7b645725ccb8cc007203b903 /lib
parentcf78624010e44cddc7d7e38ddffa6bc539813183 (diff)
downloadFreeBSD-src-b1c9f4a4616e32e7eaa61b9c53060ae68bf8e5c1.zip
FreeBSD-src-b1c9f4a4616e32e7eaa61b9c53060ae68bf8e5c1.tar.gz
Make sure you don't have a file descriptor leak for the 'real'
underlying CAM device. This needs to be checked not only in the open routine, but the device->fd has to be initialized as well. PR: 28688 Submitted (partially) by: T. William Wells <bill@twwells.com> MFC after: 2 weeks
Diffstat (limited to 'lib')
-rw-r--r--lib/libcam/camlib.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/libcam/camlib.c b/lib/libcam/camlib.c
index 7c2a6cd..1c76303 100644
--- a/lib/libcam/camlib.c
+++ b/lib/libcam/camlib.c
@@ -554,7 +554,7 @@ cam_real_open_device(const char *path, int flags, struct cam_device *device,
char newpath[MAXPATHLEN+1];
char *func_name = "cam_real_open_device";
union ccb ccb;
- int fd, malloced_device = 0;
+ int fd = -1, malloced_device = 0;
/*
* See if the user wants us to malloc a device for him.
@@ -567,6 +567,7 @@ cam_real_open_device(const char *path, int flags, struct cam_device *device,
strerror(errno));
return(NULL);
}
+ device->fd = -1;
malloced_device = 1;
}
@@ -691,6 +692,9 @@ cam_real_open_device(const char *path, int flags, struct cam_device *device,
crod_bailout:
+ if (fd >= 0)
+ close(fd);
+
if (malloced_device)
free(device);
OpenPOWER on IntegriCloud