From 076c7b6c00e4f7956f125d7674fc441fe14d0fdb Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 9 Feb 2018 19:24:15 +1000 Subject: [PATCH] evdev: fail before open_restricted if the devnode doesn't exist https://bugzilla.redhat.com/show_bug.cgi?id=1536633 https://bugzilla.redhat.com/show_bug.cgi?id=1539046 https://bugzilla.redhat.com/show_bug.cgi?id=1539783 https://bugzilla.redhat.com/show_bug.cgi?id=1540662 https://bugs.freedesktop.org/show_bug.cgi?id=104278 Debugged-by: Jeff Smith Signed-off-by: Peter Hutterer (cherry picked from commit cb186abc17ad9e525609dc32385b0a7992e949a9) --- src/evdev.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/evdev.c b/src/evdev.c index d1ca243d..63b93ec3 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1917,6 +1917,11 @@ evdev_device_create(struct libinput_seat *seat, const char *devnode = udev_device_get_devnode(udev_device); const char *sysname = udev_device_get_sysname(udev_device); + if (!devnode) { + log_info(libinput, "%s: no device node associated\n", sysname); + return NULL; + } + if (udev_device_should_be_ignored(udev_device)) { log_debug(libinput, "%s: device is ignored\n", sysname); return NULL; @@ -2434,6 +2439,9 @@ evdev_device_resume(struct evdev_device *device) return -ENODEV; devnode = udev_device_get_devnode(device->udev_device); + if (!devnode) + return -ENODEV; + fd = open_restricted(libinput, devnode, O_RDWR | O_NONBLOCK | O_CLOEXEC);