Skip to content

Commit

Permalink
media: rcar_drif: Fix fwnode reference leak when parsing DT
Browse files Browse the repository at this point in the history
[ Upstream commit cdd4f78 ]

The fwnode reference corresponding to the endpoint is leaked in an error
path of the rcar_drif_parse_subdevs() function. Fix it, and reorganize
fwnode reference handling in the function to release references early,
simplifying error paths.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Laurent Pinchart authored and gregkh committed Oct 29, 2020
1 parent 0aafed1 commit 871586c
Showing 1 changed file with 5 additions and 11 deletions.
16 changes: 5 additions & 11 deletions drivers/media/platform/rcar_drif.c
Expand Up @@ -1227,28 +1227,22 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
if (!ep)
return 0;

/* Get the endpoint properties */
rcar_drif_get_ep_properties(sdr, ep);

fwnode = fwnode_graph_get_remote_port_parent(ep);
fwnode_handle_put(ep);
if (!fwnode) {
dev_warn(sdr->dev, "bad remote port parent\n");
fwnode_handle_put(ep);
return -EINVAL;
}

sdr->ep.asd.match.fwnode = fwnode;
sdr->ep.asd.match_type = V4L2_ASYNC_MATCH_FWNODE;
ret = v4l2_async_notifier_add_subdev(notifier, &sdr->ep.asd);
if (ret) {
fwnode_handle_put(fwnode);
return ret;
}

/* Get the endpoint properties */
rcar_drif_get_ep_properties(sdr, ep);

fwnode_handle_put(fwnode);
fwnode_handle_put(ep);

return 0;
return ret;
}

/* Check if the given device is the primary bond */
Expand Down

0 comments on commit 871586c

Please sign in to comment.