For the first patch, I observed a crash on accessing this system being NULL on one game's hang log. I don't know if that is the actual problem or consequences of something else from the info I've got, but the check looks like the right thing to do: documentation [1] lists NULL as possible error return.
1. https://manpages.debian.org/stretch/libudev-dev/udev_device_get_subsystem.3....
From: Paul Gofman pgofman@codeweavers.com
--- dlls/winebus.sys/bus_udev.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c index e35cd9d3281..ca96c80a0d1 100644 --- a/dlls/winebus.sys/bus_udev.c +++ b/dlls/winebus.sys/bus_udev.c @@ -1233,7 +1233,13 @@ static void udev_add_device(struct udev_device *dev, int fd) get_device_subsystem_info(dev, "usb", "usb_device", &desc, &bus); if (bus == BUS_BLUETOOTH) desc.is_bluetooth = TRUE;
- subsystem = udev_device_get_subsystem(dev); + if (!(subsystem = udev_device_get_subsystem(dev))) + { + WARN("udev_device_get_subsystem failed for %s.\n", debugstr_a(devnode)); + close(fd); + return; + } + if (!strcmp(subsystem, "hidraw")) { static const WCHAR hidraw[] = {'h','i','d','r','a','w',0};
From: Paul Gofman pgofman@codeweavers.com
--- dlls/winebus.sys/bus_udev.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c index ca96c80a0d1..39b810b7588 100644 --- a/dlls/winebus.sys/bus_udev.c +++ b/dlls/winebus.sys/bus_udev.c @@ -1332,6 +1332,10 @@ static void udev_add_device(struct udev_device *dev, int fd) bus_event_queue_device_created(&event_queue, &impl->unix_device, &desc); } #endif + else + { + close(fd); + } }
#ifdef HAVE_SYS_INOTIFY_H
This merge request was approved by Rémi Bernon.