]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: fix memory leak and unnecessary allocation
authorKarel Zak <kzak@redhat.com>
Tue, 7 Jun 2022 07:57:01 +0000 (09:57 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 7 Jun 2022 07:57:01 +0000 (09:57 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/lsblk.c

index 41fc922574eae53fbe044d7e3a2836cf773ba9a6..698c76c4084e12a2123d4a889648198c8f86b652 100644 (file)
@@ -467,7 +467,7 @@ static char *get_type(struct lsblk_device *dev)
 }
 
 /* Thanks to lsscsi code for idea of detection logic used here */
-static char *get_transport(struct lsblk_device *dev)
+static const char *get_transport(struct lsblk_device *dev)
 {
        struct path_cxt *sysfs = dev->sysfs;
        char *attr = NULL;
@@ -521,7 +521,7 @@ static char *get_transport(struct lsblk_device *dev)
        } else if (strncmp(dev->name, "vd", 2) == 0)
                trans = "virtio";
 
-       return trans ? xstrdup(trans) : NULL;
+       return trans;
 }
 
 static char *get_subsystems(struct lsblk_device *dev)
@@ -1077,8 +1077,12 @@ static char *device_get_data(
                break;
        }
        case COL_TRANSPORT:
-               str = get_transport(dev);
+       {
+               const char *trans = get_transport(dev);
+               if (trans)
+                       str = xstrdup(trans);
                break;
+       }
        case COL_SUBSYS:
                str = get_subsystems(dev);
                break;
@@ -1375,7 +1379,7 @@ static int initialize_device(struct lsblk_device *dev,
 
        /* ignore non-NVMe devices */
        if (lsblk->nvme) {
-               char *transport = get_transport(dev);
+               const char *transport = get_transport(dev);
 
                if (!transport || strcmp(transport, "nvme")) {
                        DBG(DEV, ul_debugobj(dev, "non-nvme device -- ignore"));
@@ -1385,7 +1389,7 @@ static int initialize_device(struct lsblk_device *dev,
 
        /* ignore non-virtio devices */
        if (lsblk->virtio) {
-               char *transport = get_transport(dev);
+               const char *transport = get_transport(dev);
 
                if (!transport || strcmp(transport, "virtio")) {
                        DBG(DEV, ul_debugobj(dev, "non-virtio device -- ignore"));