]> Git Repo - J-linux.git/commitdiff
rpmsg: core: Clean up resources on announce_create failure.
authorArnaud Pouliquen <[email protected]>
Mon, 6 Dec 2021 19:07:58 +0000 (20:07 +0100)
committerMathieu Poirier <[email protected]>
Wed, 8 Dec 2021 17:16:50 +0000 (10:16 -0700)
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: 5e619b48677c ("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]>
drivers/rpmsg/rpmsg_core.c

index f031b2b1b21c77e2f4ec6755c02031f4a93878b5..d9e612f4f0f21b734ee7b2d79bfe5a1c23360941 100644 (file)
@@ -540,13 +540,25 @@ static int rpmsg_dev_probe(struct device *dev)
        err = rpdrv->probe(rpdev);
        if (err) {
                dev_err(dev, "%s: failed: %d\n", __func__, err);
-               if (ept)
-                       rpmsg_destroy_ept(ept);
-               goto out;
+               goto destroy_ept;
        }
 
-       if (ept && rpdev->ops->announce_create)
+       if (ept && rpdev->ops->announce_create) {
                err = rpdev->ops->announce_create(rpdev);
+               if (err) {
+                       dev_err(dev, "failed to announce creation\n");
+                       goto remove_rpdev;
+               }
+       }
+
+       return 0;
+
+remove_rpdev:
+       if (rpdrv->remove)
+               rpdrv->remove(rpdev);
+destroy_ept:
+       if (ept)
+               rpmsg_destroy_ept(ept);
 out:
        return err;
 }
This page took 0.048705 seconds and 4 git commands to generate.