[PATCH libevdev 1/3] uinput: close the managed fd on error
David Herrmann
dh.herrmann at gmail.com
Fri Aug 22 07:58:14 PDT 2014
Hi
On Fri, Aug 22, 2014 at 4:56 AM, Peter Hutterer
<peter.hutterer at who-t.net> wrote:
> 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 at who-t.net>
> ---
> 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);
You still need to fix the error-path exactly below into:
if (!new_device) {
rc = -ENOMEM;
goto error;
}
Otherwise, looks good.
Thanks
David
> 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;
> }
>
> --
> 1.9.3
>
> _______________________________________________
> Input-tools mailing list
> Input-tools at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/input-tools
More information about the Input-tools
mailing list