On 8/19/19 2:47 PM, Sakari Ailus wrote:
> The subdev's video device node was only assigned after registering the
> device node in the system. While it is unlikely that a driver needed to
> use this field in handling system calls to its file handle, there remains
> a slim chance the devnode field remains NULL while the driver expects to
> find a video node there.
> 
> Assign the devnode field before registering the device, and assign it back
> to NULL if the registration failed.
> 
> Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>

Reviewed-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

> ---
>  drivers/media/v4l2-core/v4l2-device.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-device.c 
> b/drivers/media/v4l2-core/v4l2-device.c
> index aa277f5bc862..8c79699b1be7 100644
> --- a/drivers/media/v4l2-core/v4l2-device.c
> +++ b/drivers/media/v4l2-core/v4l2-device.c
> @@ -248,13 +248,14 @@ int v4l2_device_register_subdev_nodes(struct 
> v4l2_device *v4l2_dev)
>               vdev->fops = &v4l2_subdev_fops;
>               vdev->release = v4l2_device_release_subdev_node;
>               vdev->ctrl_handler = sd->ctrl_handler;
> +             sd->devnode = vdev;
>               err = __video_register_device(vdev, VFL_TYPE_SUBDEV, -1, 1,
>                                             sd->owner);
>               if (err < 0) {
> +                     sd->devnode = NULL;
>                       kfree(vdev);
>                       goto clean_up;
>               }
> -             sd->devnode = vdev;
>  #if defined(CONFIG_MEDIA_CONTROLLER)
>               sd->entity.info.dev.major = VIDEO_MAJOR;
>               sd->entity.info.dev.minor = vdev->minor;
> 

Reply via email to