From: Mariusz Tkaczyk Date: Tue, 23 Sep 2025 06:06:12 +0000 (+0200) Subject: udev: Fix memleak X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d478aff31f466d126eaa5b018c93654b58047b40;p=thirdparty%2Fmdadm.git udev: Fix memleak According to manual: On success, udev_monitor_receive_device() returns a pointer to a newly referenced device that was received via the monitor. The caller is responsible to drop this reference when done. Signed-off-by: Mariusz Tkaczyk --- diff --git a/udev.c b/udev.c index 961ca970..f857c723 100644 --- a/udev.c +++ b/udev.c @@ -147,9 +147,16 @@ enum udev_status udev_wait_for_events(int seconds) tv.tv_sec = seconds; tv.tv_usec = 0; - if (select(fd + 1, &readfds, NULL, NULL, &tv) > 0 && FD_ISSET(fd, &readfds)) - if (udev_monitor_receive_device(udev_monitor)) + if (select(fd + 1, &readfds, NULL, NULL, &tv) > 0 && FD_ISSET(fd, &readfds)) { + struct udev_device *dev = udev_monitor_receive_device(udev_monitor); + + if (dev) { + udev_device_unref(dev); return UDEV_STATUS_SUCCESS; /* event detected */ + } else { + return UDEV_STATUS_ERROR; + } + } return UDEV_STATUS_TIMEOUT; } #endif