]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: lirc: Fix error handling in lirc_register()
authorMa Ke <make24@iscas.ac.cn>
Fri, 18 Jul 2025 09:50:54 +0000 (17:50 +0800)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Fri, 15 Aug 2025 07:47:13 +0000 (09:47 +0200)
When cdev_device_add() failed, calling put_device() to explicitly
release dev->lirc_dev. Otherwise, it could cause the fault of the
reference count.

Found by code review.

Cc: stable@vger.kernel.org
Fixes: a6ddd4fecbb0 ("media: lirc: remove last remnants of lirc kapi")
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/rc/lirc_dev.c

index a2257dc2f25d6b06990c8802011fb33be572f0a2..7d4942925993a35844d733cef49fae5787ab8121 100644 (file)
@@ -736,11 +736,11 @@ int lirc_register(struct rc_dev *dev)
 
        cdev_init(&dev->lirc_cdev, &lirc_fops);
 
+       get_device(&dev->dev);
+
        err = cdev_device_add(&dev->lirc_cdev, &dev->lirc_dev);
        if (err)
-               goto out_ida;
-
-       get_device(&dev->dev);
+               goto out_put_device;
 
        switch (dev->driver_type) {
        case RC_DRIVER_SCANCODE:
@@ -764,7 +764,8 @@ int lirc_register(struct rc_dev *dev)
 
        return 0;
 
-out_ida:
+out_put_device:
+       put_device(&dev->lirc_dev);
        ida_free(&lirc_ida, minor);
        return err;
 }