udev: bulitin-hwdb - fix memory leak
authorTom Gundersen <teg@jklm.no>
Tue, 23 Jun 2015 14:57:57 +0000 (16:57 +0200)
committerTom Gundersen <teg@jklm.no>
Tue, 23 Jun 2015 15:20:12 +0000 (17:20 +0200)
This fixes CID#1292782.

src/udev/udev-builtin-hwdb.c

index 7dfc74e..b656204 100644 (file)
@@ -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;