[1] commit 1680939e9ecf ("rpmsg: virtio: Fix possible double free in rpmsg_virtio_add_ctrl_dev()") [2] commit c2eecefec5df ("rpmsg: virtio: Fix possible double free in rpmsg_probe()") [3] commit bb17d110cbf2 ("rpmsg: Fix calling device_lock() on non-initialized device") The above three patches merged at the same time introduced a new bug. [1] and [2] make rpmsg_ns_register_device and rpmsg_ctrldev_register_device need to call the callback function internally to free vch when it fails. [3] has an error return path not handled vch. Fix this by adding a put_device() to the error path. Fixes: bb17d110cbf2 ("rpmsg: Fix calling device_lock() on non-initialized device") Signed-off-by: Hangyu Hua <hbh25y@xxxxxxxxx> --- drivers/rpmsg/rpmsg_core.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index 290c1f02da10..5a47cad89fdc 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -618,6 +618,7 @@ int rpmsg_register_device_override(struct rpmsg_device *rpdev, strlen(driver_override)); if (ret) { dev_err(dev, "device_set_override failed: %d\n", ret); + put_device(dev); return ret; } } -- 2.25.1