Skip to content

Commit 8066c61

Browse files
arnopomathieupoirier
authored andcommitted
rpmsg: core: Clean up resources on announce_create failure.
During the rpmsg_dev_probe, if rpdev->ops->announce_create returns an error, the rpmsg device and default endpoint should be freed before exiting the function. Fixes: 5e619b4 ("rpmsg: Split rpmsg core and virtio backend") Suggested-by: Bjorn Andersson <[email protected]> Signed-off-by: Arnaud Pouliquen <[email protected]> Reviewed-by: Bjorn Andersson <[email protected]> Cc: stable <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mathieu Poirier <[email protected]>
1 parent 631af6e commit 8066c61

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

drivers/rpmsg/rpmsg_core.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -540,13 +540,25 @@ static int rpmsg_dev_probe(struct device *dev)
540540
err = rpdrv->probe(rpdev);
541541
if (err) {
542542
dev_err(dev, "%s: failed: %d\n", __func__, err);
543-
if (ept)
544-
rpmsg_destroy_ept(ept);
545-
goto out;
543+
goto destroy_ept;
546544
}
547545

548-
if (ept && rpdev->ops->announce_create)
546+
if (ept && rpdev->ops->announce_create) {
549547
err = rpdev->ops->announce_create(rpdev);
548+
if (err) {
549+
dev_err(dev, "failed to announce creation\n");
550+
goto remove_rpdev;
551+
}
552+
}
553+
554+
return 0;
555+
556+
remove_rpdev:
557+
if (rpdrv->remove)
558+
rpdrv->remove(rpdev);
559+
destroy_ept:
560+
if (ept)
561+
rpmsg_destroy_ept(ept);
550562
out:
551563
return err;
552564
}

0 commit comments

Comments
 (0)