blockd: fix vlist memory corruption
authorRafał Miłecki <rafal@milecki.pl>
Fri, 13 Dec 2019 10:05:11 +0000 (11:05 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Fri, 13 Dec 2019 13:48:31 +0000 (14:48 +0100)
vlist_add() expects key to point a persistent memory as it doesn't make
its copy. Passing blob_attr of current message was resulting in
undefined/random behavior including list corruption and possible
crashes.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
blockd.c

index 88fe1682fa2cb9202236f9d187dbf9f200a0d9dc..7375b2b7f8395ecabd01a7e4d66483e55e385110 100644 (file)
--- a/blockd.c
+++ b/blockd.c
@@ -255,7 +255,7 @@ block_hotplug(struct ubus_context *ctx, struct ubus_object *obj,
                strcpy(_name, devname);
                device->target = __target;
                strcpy(__target, target);
                strcpy(_name, devname);
                device->target = __target;
                strcpy(__target, target);
-               vlist_add(&devices, &device->node, blobmsg_get_string(data[MOUNT_DEVICE]));
+               vlist_add(&devices, &device->node, device->name);
        }
        vlist_flush(&devices);
 
        }
        vlist_flush(&devices);