summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2015-06-23 16:57:57 +0200
committerTom Gundersen <teg@jklm.no>2015-06-23 17:20:12 +0200
commite448a1c3a3eac4d73261bf8648110fc9f7aae806 (patch)
tree3989d3079b42e240b3177c138aca39415db856bb
parent9261d42e6d4c166fe4d56c6bf6929cc9e7fda3c8 (diff)
udev: bulitin-hwdb - fix memory leak
This fixes CID#1292782.
-rw-r--r--src/udev/udev-builtin-hwdb.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c
index 7dfc74e6fa..b656204c46 100644
--- a/src/udev/udev-builtin-hwdb.c
+++ b/src/udev/udev-builtin-hwdb.c
@@ -26,6 +26,7 @@
#include "sd-hwdb.h"
#include "hwdb-util.h"
+#include "udev-util.h"
static sd_hwdb *hwdb;
@@ -87,6 +88,9 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device
assert(dev);
+ if (!srcdev)
+ srcdev = dev;
+
for (d = srcdev; d && !last; d = udev_device_get_parent(d)) {
const char *dsubsys;
const char *modalias = NULL;
@@ -133,7 +137,7 @@ static int builtin_hwdb(struct udev_device *dev, int argc, char *argv[], bool te
const char *device = NULL;
const char *subsystem = NULL;
const char *prefix = NULL;
- struct udev_device *srcdev;
+ _cleanup_udev_device_unref_ struct udev_device *srcdev = NULL;
if (!hwdb)
return EXIT_FAILURE;
@@ -176,8 +180,7 @@ static int builtin_hwdb(struct udev_device *dev, int argc, char *argv[], bool te
srcdev = udev_device_new_from_device_id(udev_device_get_udev(dev), device);
if (!srcdev)
return EXIT_FAILURE;
- } else
- srcdev = dev;
+ }
if (udev_builtin_hwdb_search(dev, srcdev, subsystem, prefix, filter, test) > 0)
return EXIT_SUCCESS;