virtio_uclass_post_probe() duplicates the name for the child device with
strdup() and passes it to device_bind_driver(). If the driver for the
reported device type is not built, device_bind_driver() returns -ENOENT
and the function returns 0 without freeing the name. Ownership of the
name only passes to the device through device_set_name_alloced() after
a successful bind.
This happens on each probe of a virtio transport whose device type is
listed in virtio_drv_name[] but whose driver is disabled, e.g. a
virtio-9p device on a QEMU target without CONFIG_VIRTIO_9P, or the
virtio-blk node of the sandbox test device tree, as sandbox_defconfig
does not enable CONFIG_VIRTIO_BLK.
Free the name on this path as well.
Fixes: 8fb49b4c7a82 ("dm: Add a new uclass driver for VirtIO transport devices")
Signed-off-by: Yuho Choi <[email protected]>
---
drivers/virtio/virtio-uclass.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/virtio/virtio-uclass.c b/drivers/virtio/virtio-uclass.c
index c163b2fd7d5..e745369b257 100644
--- a/drivers/virtio/virtio-uclass.c
+++ b/drivers/virtio/virtio-uclass.c
@@ -239,6 +239,7 @@ static int virtio_uclass_post_probe(struct udevice *udev)
ret = device_bind_driver(udev, name, str, &vdev);
if (ret == -ENOENT) {
debug("(%s): %s driver not configured\n", udev->name, name);
+ free(str);
return 0;
}
if (ret) {
--
2.43.0