Re: [PATCH v4 01/19] media: rc: Ensure registered is cleared in error path

From: Hans Verkuil

Date: Fri Sep 11 2026 - 03:57:03 EST


On 08/09/2026 17:51, Sean Young wrote:
> If rc_register_device() fails, ensure that registered is not set to true.
> If lirc_register() succeeded, then userspace could have an open file
> descriptor open. This leads to a use-after-free.
>
> Fixes: dccc0c3ddf8f ("media: rc: fix race between unregister and urb/irq callbacks")
> Signed-off-by: Sean Young <sean@xxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> ---
> drivers/media/rc/rc-main.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
> index d93e98189c1a..1f99540456f1 100644
> --- a/drivers/media/rc/rc-main.c
> +++ b/drivers/media/rc/rc-main.c
> @@ -1934,7 +1934,8 @@ int rc_register_device(struct rc_dev *dev)
> goto out_raw;
> }
>
> - dev->registered = true;
> + scoped_guard(mutex, &dev->lock)
> + dev->registered = true;

Is the guard actually needed?

>
> rc = device_add(&dev->dev);
> if (rc)
> @@ -1982,6 +1983,8 @@ int rc_register_device(struct rc_dev *dev)
> out_dev:
> device_del(&dev->dev);
> out_rx_free:
> + scoped_guard(mutex, &dev->lock)
> + dev->registered = false;

Same question here. I think the real fix is setting dev->registered to
false, but I'm not sure the guard makes a difference.

The commit log mentions nothing about that change either.

Regards,

Hans

> ir_free_table(&dev->rc_map);
> out_raw:
> ida_free(&rc_ida, minor);