| From 8066c615cb69b7da8a94f59379847b037b3a5e46 Mon Sep 17 00:00:00 2001 |
| From: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com> |
| Date: Mon, 6 Dec 2021 20:07:58 +0100 |
| Subject: rpmsg: core: Clean up resources on announce_create failure. |
| |
| From: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com> |
| |
| commit 8066c615cb69b7da8a94f59379847b037b3a5e46 upstream. |
| |
| 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 <bjorn.andersson@linaro.org> |
| Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com> |
| Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org> |
| Cc: stable <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20211206190758.10004-1-arnaud.pouliquen@foss.st.com |
| Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/rpmsg/rpmsg_core.c | 20 ++++++++++++++++---- |
| 1 file changed, 16 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/rpmsg/rpmsg_core.c |
| +++ b/drivers/rpmsg/rpmsg_core.c |
| @@ -473,13 +473,25 @@ static int rpmsg_dev_probe(struct device |
| 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; |
| } |