mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
libudev: fix memleak when enumerating childs
We need to free udev-devices again if they don't match. Funny that no-one noticed it yet since valgrind is quite verbose about it. Fix it and free non-matching devices.
This commit is contained in:
parent
ee2babf4c3
commit
51cc07576e
@ -829,23 +829,27 @@ nomatch:
|
||||
static int parent_add_child(struct udev_enumerate *enumerate, const char *path)
|
||||
{
|
||||
struct udev_device *dev;
|
||||
int r = 0;
|
||||
|
||||
dev = udev_device_new_from_syspath(enumerate->udev, path);
|
||||
if (dev == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
if (!match_subsystem(enumerate, udev_device_get_subsystem(dev)))
|
||||
return 0;
|
||||
goto nomatch;
|
||||
if (!match_sysname(enumerate, udev_device_get_sysname(dev)))
|
||||
return 0;
|
||||
goto nomatch;
|
||||
if (!match_property(enumerate, dev))
|
||||
return 0;
|
||||
goto nomatch;
|
||||
if (!match_sysattr(enumerate, dev))
|
||||
return 0;
|
||||
goto nomatch;
|
||||
|
||||
syspath_add(enumerate, udev_device_get_syspath(dev));
|
||||
r = 1;
|
||||
|
||||
nomatch:
|
||||
udev_device_unref(dev);
|
||||
return 1;
|
||||
return r;
|
||||
}
|
||||
|
||||
static int parent_crawl_children(struct udev_enumerate *enumerate, const char *path, int maxdepth)
|
||||
|
Loading…
Reference in New Issue
Block a user