]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
um: virtio_uml: Fix use-after-free after put_device in probe
authorMiaoqian Lin <linmq006@gmail.com>
Thu, 28 Aug 2025 07:00:51 +0000 (15:00 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Sep 2025 09:13:42 +0000 (11:13 +0200)
[ Upstream commit 7ebf70cf181651fe3f2e44e95e7e5073d594c9c0 ]

When register_virtio_device() fails in virtio_uml_probe(),
the code sets vu_dev->registered = 1 even though
the device was not successfully registered.
This can lead to use-after-free or other issues.

Fixes: 04e5b1fb0183 ("um: virtio: Remove device on disconnect")
Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/um/drivers/virtio_uml.c

index 2b6e701776b6b81339c3c48bcfb28152c887c807..e2cba5117fd25b90812d2a542d5161097e130d8f 100644 (file)
@@ -1231,10 +1231,12 @@ static int virtio_uml_probe(struct platform_device *pdev)
        device_set_wakeup_capable(&vu_dev->vdev.dev, true);
 
        rc = register_virtio_device(&vu_dev->vdev);
-       if (rc)
+       if (rc) {
                put_device(&vu_dev->vdev.dev);
+               return rc;
+       }
        vu_dev->registered = 1;
-       return rc;
+       return 0;
 
 error_init:
        os_close_file(vu_dev->sock);