Message ID | 20211206190758.10004-1-arnaud.pouliquen@foss.st.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | rpmsg: core: Clean up resources on announce_create failure. | expand |
On Mon 06 Dec 13:07 CST 2021, Arnaud Pouliquen wrote: > 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> Thanks, Bjorn > --- > drivers/rpmsg/rpmsg_core.c | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c > index 27aad6baf7c5..12d7b7c6e5f9 100644 > --- a/drivers/rpmsg/rpmsg_core.c > +++ b/drivers/rpmsg/rpmsg_core.c > @@ -612,13 +612,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; > } > -- > 2.17.1 >
On Mon, Dec 06, 2021 at 08:07:58PM +0100, Arnaud Pouliquen wrote: > 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> > --- > drivers/rpmsg/rpmsg_core.c | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c > index 27aad6baf7c5..12d7b7c6e5f9 100644 > --- a/drivers/rpmsg/rpmsg_core.c > +++ b/drivers/rpmsg/rpmsg_core.c > @@ -612,13 +612,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; Applied. Thanks, Mathieu > } > -- > 2.17.1 >
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c index 27aad6baf7c5..12d7b7c6e5f9 100644 --- a/drivers/rpmsg/rpmsg_core.c +++ b/drivers/rpmsg/rpmsg_core.c @@ -612,13 +612,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; }
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> --- drivers/rpmsg/rpmsg_core.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)