Re: [PATCH v3] media: v4l2-core: Drop manual fwnode_handle_put() via scope-based cleanup
Sakari Ailus <[email protected]>
| Newsgroups | org.kernel.vger.linux-media,org.kernel.vger.linux-kernel |
|---|---|
| Organization | Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo |
| Message-ID | <[email protected]> |
Hi Biren, On the subject: s/core/subdev/ . On Fri, Jun 19, 2026 at 01:31:33PM +0530, Biren Pandya wrote: > Simplify v4l2_subdev_get_fwnode_pad_1_to_1() by converting the local > fwnode variable to use the __free(fwnode_handle) scope-based cleanup > macro. > > This removes the need for manual fwnode_handle_put() calls and naturally > ensures the fwnode reference is held during the device_match_fwnode() > comparison. > > Signed-off-by: Biren Pandya <[email protected]> > --- > Changes in v3: > - Resend as a standalone patch to resolve Media CI robot grouping error caused by duplicate Message-IDs in the v2 thread. No code changes. > - Link to v2: https://lore.kernel.org/all/[email protected]/ > > Changes in v2: > - Updated the commit message to remove the "Use-After-Free" language, > as there is no vulnerability in practice. > - Adjusted the implementation to declare `struct fwnode_handle *fwnode` > directly at the point of initialization, rather than at the top of the > block, conforming to recommended usage. > - Renamed the patch subject to better reflect the true nature of the change. > - Link to v1: https://lore.kernel.org/all/[email protected]/ > > drivers/media/v4l2-core/v4l2-subdev.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c > index e6b133ef7850..806b059410ce 100644 > --- a/drivers/media/v4l2-core/v4l2-subdev.c > +++ b/drivers/media/v4l2-core/v4l2-subdev.c > @@ -1243,15 +1243,14 @@ const struct v4l2_file_operations v4l2_subdev_fops = { > int v4l2_subdev_get_fwnode_pad_1_to_1(struct media_entity *entity, > struct fwnode_endpoint *endpoint) > { > - struct fwnode_handle *fwnode; > + struct fwnode_handle *fwnode __free(fwnode_handle) = __free() is declared in linux/cleanup.h. > + fwnode_graph_get_port_parent(endpoint->local_fwnode); Can you declare this where fwnode_graph_get_port_parent() was called previously? > struct v4l2_subdev *sd; > > if (!is_media_entity_v4l2_subdev(entity)) > return -EINVAL; > > sd = media_entity_to_v4l2_subdev(entity); > > - fwnode = fwnode_graph_get_port_parent(endpoint->local_fwnode); > - fwnode_handle_put(fwnode); > > if (device_match_fwnode(sd->dev, fwnode)) > return endpoint->port; > -- Regards, Sakari Ailus