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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.