]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: cec: mark devnode as registered before actually registering it
authorHans Verkuil <hverkuil@xs4all.nl>
Fri, 10 May 2019 15:15:04 +0000 (11:15 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 22 May 2019 19:33:57 +0000 (15:33 -0400)
The cec device node can be used right after it was created, but that
leaves a race condition where the device was created, but devnode->registered
was still false. So an ioctl() would result in an error.

So set it to true before calling cdev_device_add() and to false again if
cdev_device_add returned an error.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/cec/cec-core.c

index f5d1578e256a7ac3d3257780aa3299061f3e0d68..db7adffcdc76f9c5e901f8cf621f54b7a0a52226 100644 (file)
@@ -128,13 +128,14 @@ static int __must_check cec_devnode_register(struct cec_devnode *devnode,
        devnode->cdev.owner = owner;
        kobject_set_name(&devnode->cdev.kobj, "cec%d", devnode->minor);
 
+       devnode->registered = true;
        ret = cdev_device_add(&devnode->cdev, &devnode->dev);
        if (ret) {
+               devnode->registered = false;
                pr_err("%s: cdev_device_add failed\n", __func__);
                goto clr_bit;
        }
 
-       devnode->registered = true;
        return 0;
 
 clr_bit: