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@xxxxxxxxxx> > Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@xxxxxxxxxxx> Reviewed-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx> 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 >