diff options
author | mjacob <mjacob@FreeBSD.org> | 2001-07-04 07:43:10 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2001-07-04 07:43:10 +0000 |
commit | b1c9f4a4616e32e7eaa61b9c53060ae68bf8e5c1 (patch) | |
tree | 485683b31fb4390e7b645725ccb8cc007203b903 /lib | |
parent | cf78624010e44cddc7d7e38ddffa6bc539813183 (diff) | |
download | FreeBSD-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.c | 6 |
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); |