Fix memory leaks when failing to create a uinput device
authorPeter Hutterer <peter.hutterer@who-t.net>
Thu, 27 Feb 2014 01:29:19 +0000 (11:29 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 27 Feb 2014 03:22:50 +0000 (13:22 +1000)
For an invalid fd, or a failure to open the device, the pre-allocated uinput
device struct would leak.

We can drop the open_uinput() function now, since skipping to the error
handling means we'll return -errno anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
libevdev/libevdev-uinput.c

index ea9cf780674e84cae54d98388c18c5704a54d721..09b70442c1ba0ee0e13b91f74586e2cb60bf29b3 100644 (file)
@@ -155,16 +155,6 @@ set_props(const struct libevdev *dev, int fd, struct uinput_user_dev *uidev)
        return rc;
 }
 
-static int
-open_uinput(void)
-{
-       int fd = open("/dev/uinput", O_RDWR|O_CLOEXEC);
-       if (fd < 0)
-               return -errno;
-
-       return fd;
-}
-
 LIBEVDEV_EXPORT int
 libevdev_uinput_get_fd(const struct libevdev_uinput *uinput_dev)
 {
@@ -277,14 +267,15 @@ libevdev_uinput_create_from_device(const struct libevdev *dev, int fd, struct li
                return -ENOMEM;
 
        if (fd == LIBEVDEV_UINPUT_OPEN_MANAGED) {
-               fd = open_uinput();
+               fd = open("/dev/uinput", O_RDWR|O_CLOEXEC);
                if (fd < 0)
-                       return fd;
+                       goto error;
 
                new_device->fd_is_managed = 1;
        } else if (fd < 0) {
                log_bug("Invalid fd %d\n", fd);
-               return -EBADF;
+               errno = EBADF;
+               goto error;
        }
 
        memset(&uidev, 0, sizeof(uidev));