diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2014-08-22 11:42:10 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2014-08-22 11:50:13 +1000 |
commit | 53958c56cd486378800fe2db247fd7923a73cf6a (patch) | |
tree | 481e6a314e8ddb7cfc5522e04a5a761768f1dfa2 | |
parent | e4c315fc160355958c8db98c0b762e9d2d3bbdb9 (diff) | |
download | libevdev-53958c56cd486378800fe2db247fd7923a73cf6a.tar.gz |
uinput: close the managed fd on error
Using LIBEVDEV_UINPUT_OPEN_MANAGED can leak the fd if an error occurs after
opening it.
Found by Coverity.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | libevdev/libevdev-uinput.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libevdev/libevdev-uinput.c b/libevdev/libevdev-uinput.c index c1b20e0..ea2b025 100644 --- a/libevdev/libevdev-uinput.c +++ b/libevdev/libevdev-uinput.c @@ -279,6 +279,7 @@ libevdev_uinput_create_from_device(const struct libevdev *dev, int fd, struct li int rc; struct uinput_user_dev uidev; struct libevdev_uinput *new_device; + int close_fd_on_error = (fd == LIBEVDEV_UINPUT_OPEN_MANAGED); new_device = alloc_uinput_device(libevdev_get_name(dev)); if (!new_device) @@ -346,6 +347,8 @@ libevdev_uinput_create_from_device(const struct libevdev *dev, int fd, struct li error: rc = -errno; libevdev_uinput_destroy(new_device); + if (fd != -1 && close_fd_on_error) + close(fd); return rc; } |