When the device_register() in __video_register_device() fails, current implementation does not decrement the refcount of the device which was obtained in device_initialize(). Balance the refcount by calling put_device() before jumping to the cleanup label. This bug was found by an experimental static analysis tool that I am developing. Fixes: 5bc3cb743bba ("[media] v4l: move v4l2 core into a separate directory") Signed-off-by: Joe Hattori <joe@xxxxxxxxxxxxxxxxxxxxx> --- drivers/media/v4l2-core/v4l2-dev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index 5bcaeeba4d09..1e48778cd7de 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c @@ -1058,6 +1058,7 @@ int __video_register_device(struct video_device *vdev, mutex_lock(&videodev_lock); ret = device_register(&vdev->dev); if (ret < 0) { + put_device(&vdev->dev); mutex_unlock(&videodev_lock); pr_err("%s: device_register failed\n", __func__); goto cleanup; -- 2.34.1