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.ailus@xxxxxxxxxxxxxxx> Reviewed-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> > --- > 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; >