From: "gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>
To: "Igor Klochko (Nokia)" <igor.klochko@nokia.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"stable@vger.kernel.org" <stable@vger.kernel.org>,
"Philippe Belet (Nokia)" <philippe.belet@nokia.com>
Subject: Re: [PATCH] uio: fix uio_unregister_device
Date: Fri, 13 Feb 2026 12:50:47 +0100 [thread overview]
Message-ID: <2026021306-shabby-overhead-0626@gregkh> (raw)
In-Reply-To: <AM9PR07MB720434A2B0CC99BC0BDCD74E8D61A@AM9PR07MB7204.eurprd07.prod.outlook.com>
On Fri, Feb 13, 2026 at 09:47:35AM +0000, Igor Klochko (Nokia) wrote:
> When uio devices are created end removed in parallel, then we sometimes
> encounter kernel traces along the following lines:
>
> sysfs: cannot create duplicate filename '/class/uio/uio899'
Nice fix, but what is causing these devices to be created and removed in
parallel? Shouldn't the initialization sequence be serialized? And the
same with removal?
>
> which stem from:
>
> sysfs_create_link+0x24/0x50
> device_add+0x2f0/0x780
> __uio_register_device+0x18c/0x550
>
> The sysfs directory creation is performed synchronously as part of the
> device_add call. The high level sequence for uio registration is:
>
> 1. uio_get_minor (idr call, in critical section)
> 2. device_add (leads to sysfs directory)
> 3. manage attributes (popuplates part of the sysfs directory)
>
> For unregistration we have by default the following flow:
>
> 1. clean-up attributes
> 2. uio_free_minor (idr call, in critical section)
> 3. device_unregister (cleans up sysfs directory)
>
> This creates a racing problem when we are in parallel creating and
> removing uio devices. The uio-minor that is freed when calling uio_free_minor can be
> claimed by a subsequent uio_get_minor call. The problem is that the device_add
> flow can end up triggered, leading to a sysfs directory creation; while the
> device_unregister flow has not yet cleaned up the sysfs directory.
Nit, line wrapping at the same column width :)
>
> This patch cleans up this problem by mirroring the registration and
> unregistration
> flow correctly. After this patch, the unregistration flow becomes:
>
> 1. clean-up attributes
> 2. device_unregister
> 3. uio_free_minor
>
> Fixes: 0c9ae0b86 ("uio: Fix use-after-free in uio_open")
Please use more digits, as the documentation mentions.
> Signed-off-by: Philippe Belet <philippe.belet@nokia.com>
> Reviewed-by: Igor Klochko <igor.klochko@nokia.com>
>
> diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
> index fa0d4e6aee16..5dd137a85576 100644
> --- a/drivers/uio/uio.c
> +++ b/drivers/uio/uio.c
> @@ -1125,8 +1125,8 @@ void uio_unregister_device(struct uio_info *info)
> wake_up_interruptible(&idev->wait);
> kill_fasync(&idev->async_queue, SIGIO, POLL_HUP);
>
> - uio_free_minor(minor);
> device_unregister(&idev->dev);
> + uio_free_minor(minor);
So no locking is needed here? It's only the minor that is getting
messed up?
And should this be cc: stable?
thanks,
greg k-h
next prev parent reply other threads:[~2026-02-13 11:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-13 9:47 [PATCH] uio: fix uio_unregister_device Igor Klochko (Nokia)
2026-02-13 11:50 ` gregkh [this message]
2026-02-13 12:09 ` Igor Klochko (Nokia)
2026-02-13 12:17 ` gregkh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2026021306-shabby-overhead-0626@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=igor.klochko@nokia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=philippe.belet@nokia.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.