summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2014-02-27 11:29:19 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2014-03-07 13:53:32 +1000
commit6ac3da05b890f285ec240d1977bc17ec1df1392a (patch)
treeb3528d7d14a34e9eed31aa83f2cfe88e97942f02
parente9c820d582efc10a7aef3e8e51b92c997b5b5bfe (diff)
downloadlibevdev-6ac3da05b890f285ec240d1977bc17ec1df1392a.tar.gz
Fix memory leaks when failing to create a uinput device
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> (cherry picked from commit fdf737494ed940d68ce68c52ee029417bb68c8ff)
-rw-r--r--libevdev/libevdev-uinput.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/libevdev/libevdev-uinput.c b/libevdev/libevdev-uinput.c
index ea9cf78..09b7044 100644
--- a/libevdev/libevdev-uinput.c
+++ b/libevdev/libevdev-uinput.c
@@ -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));