libevdev/0003-uinput-fix-race-condition-in-uinput-syspath-check.patch
Peter Hutterer 6e98b3ce31 Fix a couple of coverity warnings
- Fix a potential race condition when checking uinput device's syspath
  (inactive in Fedora, we use the ioctl and never get here)
2015-12-22 09:31:18 +10:00

50 lines
1.4 KiB
Diff

From 1c3a79543488399081a00f9405d5c64af62aa6c5 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue, 22 Dec 2015 09:02:46 +1000
Subject: [PATCH libevdev 3/3] uinput: fix race condition in uinput syspath
check
In theory, the device could change between stat() call and open(), resulting
in us opening the new device. Change to open() first, then fstat() on the fd.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
libevdev/libevdev-uinput.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/libevdev/libevdev-uinput.c b/libevdev/libevdev-uinput.c
index ba323ed..24e049f 100644
--- a/libevdev/libevdev-uinput.c
+++ b/libevdev/libevdev-uinput.c
@@ -225,19 +225,19 @@ fetch_syspath_and_devnode(struct libevdev_uinput *uinput_dev)
continue;
}
- if (stat(buf, &st) == -1)
- continue;
-
- /* created before UI_DEV_CREATE, or after it finished */
- if (st.st_ctime < uinput_dev->ctime[0] ||
- st.st_ctime > uinput_dev->ctime[1])
- continue;
-
/* created within time frame */
fd = open(buf, O_RDONLY);
if (fd < 0)
continue;
+ /* created before UI_DEV_CREATE, or after it finished */
+ if (fstat(fd, &st) == -1 ||
+ st.st_ctime < uinput_dev->ctime[0] ||
+ st.st_ctime > uinput_dev->ctime[1]) {
+ close(fd);
+ continue;
+ }
+
len = read(fd, buf, sizeof(buf));
close(fd);
if (len <= 0)
--
2.5.0