From: Takashi Iwai <tiwai@suse.de>
To: WenTao Liang <vulab@iscas.ac.cn>
Cc: perex@perex.cz, tiwai@suse.com, kees@kernel.org,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH] fix: sound/usb: snd_media_device_create: incorrect media_device_delete on borrowed reference
Date: Mon, 29 Jun 2026 12:15:48 +0200 [thread overview]
Message-ID: <87a4sdr6sr.wl-tiwai@suse.de> (raw)
In-Reply-To: <20260627040907.60784-1-vulab@iscas.ac.cn>
On Sat, 27 Jun 2026 06:09:07 +0200,
WenTao Liang wrote:
>
> In snd_media_device_create(), when chip->media_dev is already set, mdev
> borrows the reference without incrementing the refcount. On error paths
> through create_fail, media_device_delete() is called which releases the
> borrowed reference, corrupting the reference count. Additionally,
> chip->media_dev is set to NULL, losing the original reference.
>
> Introduce an 'allocated' flag to distinguish between borrowed and
> self-allocated references, and only call media_device_delete() when the
> reference was actually acquired by this function invocation.
Does this really happen? The code in question is after the check by
media_devnode_is_registered(), and if chip->media_dev has been already
set, it means that it should have been already registered, hence this
code path won't hit.
thanks,
Takashi
>
> Cc: stable@vger.kernel.org
> Fixes: 66354f18fe5f ("media: sound/usb: Use Media Controller API to share media resources")
> Signed-off-by: WenTao Liang <vulab@iscas.ac.cn>
> ---
> sound/usb/media.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/sound/usb/media.c b/sound/usb/media.c
> index b7497d18ee3f..290bd24bf301 100644
> --- a/sound/usb/media.c
> +++ b/sound/usb/media.c
> @@ -255,6 +255,7 @@ int snd_media_device_create(struct snd_usb_audio *chip,
> struct media_device *mdev;
> struct usb_device *usbdev = interface_to_usbdev(iface);
> int ret = 0;
> + bool allocated = false;
>
> /* usb-audio driver is probed for each usb interface, and
> * there are multiple interfaces per device. Avoid calling
> @@ -272,6 +273,7 @@ int snd_media_device_create(struct snd_usb_audio *chip,
>
> /* save media device - avoid lookups */
> chip->media_dev = mdev;
> + allocated = true;
>
> snd_mixer_init:
> /* Create media entities for mixer and control dev */
> @@ -292,9 +294,11 @@ int snd_media_device_create(struct snd_usb_audio *chip,
> create_fail:
> if (ret) {
> snd_media_mixer_delete(chip);
> - media_device_delete(mdev, KBUILD_MODNAME, THIS_MODULE);
> - /* clear saved media_dev */
> - chip->media_dev = NULL;
> + if (allocated) {
> + media_device_delete(mdev, KBUILD_MODNAME, THIS_MODULE);
> + /* clear saved media_dev */
> + chip->media_dev = NULL;
> + }
> dev_err(&usbdev->dev,
> "Couldn't register media device. Error: %d\n",
> ret);
> --
> 2.39.5 (Apple Git-154)
>
prev parent reply other threads:[~2026-06-29 10:15 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-27 4:09 [PATCH] fix: sound/usb: snd_media_device_create: incorrect media_device_delete on borrowed reference WenTao Liang
2026-06-29 10:15 ` Takashi Iwai [this message]
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=87a4sdr6sr.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=stable@vger.kernel.org \
--cc=tiwai@suse.com \
--cc=vulab@iscas.ac.cn \
/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.