From 53958c56cd486378800fe2db247fd7923a73cf6a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 22 Aug 2014 11:42:10 +1000 Subject: [PATCH] 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 --- libevdev/libevdev-uinput.c | 3 +++ 1 file changed, 3 insertions(+) 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; }