Hi Tomi On Thu, Mar 02, 2023 at 12:07:52PM +0200, Tomi Valkeinen wrote: > We don't do a proper job at freeing resources in cal_camerarx_create's > error paths. > > Fix these, and also switch the phy allcation from kzalloc to > devm_kzalloc to simplify the code further. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx> > --- > drivers/media/platform/ti/cal/cal-camerarx.c | 23 +++++++++++--------- > 1 file changed, 13 insertions(+), 10 deletions(-) > > diff --git a/drivers/media/platform/ti/cal/cal-camerarx.c b/drivers/media/platform/ti/cal/cal-camerarx.c > index 267089b0fea0..97208d542f9e 100644 > --- a/drivers/media/platform/ti/cal/cal-camerarx.c > +++ b/drivers/media/platform/ti/cal/cal-camerarx.c > @@ -864,7 +864,7 @@ struct cal_camerarx *cal_camerarx_create(struct cal_dev *cal, > unsigned int i; > int ret; > > - phy = kzalloc(sizeof(*phy), GFP_KERNEL); > + phy = devm_kzalloc(cal->dev, sizeof(*phy), GFP_KERNEL); > if (!phy) > return ERR_PTR(-ENOMEM); > > @@ -882,7 +882,7 @@ struct cal_camerarx *cal_camerarx_create(struct cal_dev *cal, > if (IS_ERR(phy->base)) { > cal_err(cal, "failed to ioremap\n"); > ret = PTR_ERR(phy->base); > - goto error; > + goto err_destroy_mutex; I have your previous version applied, I'm probably on a different base as I don't see any phy->mutex at all! > } > > cal_dbg(1, cal, "ioresource %s at %pa - %pa\n", > @@ -890,11 +890,11 @@ struct cal_camerarx *cal_camerarx_create(struct cal_dev *cal, > > ret = cal_camerarx_regmap_init(cal, phy); > if (ret) > - goto error; > + goto err_destroy_mutex; > > ret = cal_camerarx_parse_dt(phy); > if (ret) > - goto error; > + goto err_destroy_mutex; > > /* Initialize the V4L2 subdev and media entity. */ > sd = &phy->subdev; > @@ -911,21 +911,25 @@ struct cal_camerarx *cal_camerarx_create(struct cal_dev *cal, > ret = media_entity_pads_init(&sd->entity, ARRAY_SIZE(phy->pads), > phy->pads); > if (ret) > - goto error; > + goto err_node_put; > > ret = cal_camerarx_sd_init_cfg(sd, NULL); > if (ret) > - goto error; > + goto err_entity_cleanup; > > ret = v4l2_device_register_subdev(&cal->v4l2_dev, sd); > if (ret) > - goto error; > + goto err_entity_cleanup; > > return phy; > > -error: > +err_entity_cleanup: > media_entity_cleanup(&phy->subdev.entity); > - kfree(phy); > +err_node_put: > + of_node_put(phy->source_ep_node); > + of_node_put(phy->source_node); good, these where leaked indeed! Missing mutex apart the patch is good to me Reviewed-by: Jacopo Mondi <jacopo.mondi@xxxxxxxxxxxxxxxx> > +err_destroy_mutex: > + mutex_destroy(&phy->mutex); > return ERR_PTR(ret); > } > > @@ -939,5 +943,4 @@ void cal_camerarx_destroy(struct cal_camerarx *phy) > of_node_put(phy->source_ep_node); > of_node_put(phy->source_node); > mutex_destroy(&phy->mutex); > - kfree(phy); > } > -- > 2.34.1 >