From: Takashi Iwai <tiwai@suse.de>
To: Baul Lee <baul.lee@xbow.com>
Cc: perex@perex.cz, tiwai@suse.com, ramiserifpersia@gmail.com,
linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org,
federico.kirschbaum@xbow.com, stable@vger.kernel.org
Subject: Re: [PATCH] ALSA: us144mkii: re-anchor capture URBs on resubmission
Date: Tue, 04 Aug 2026 18:07:09 +0200 [thread overview]
Message-ID: <874ih9j2du.wl-tiwai@suse.de> (raw)
In-Reply-To: <20260804123625.91769-1-baul.lee@xbow.com>
On Tue, 04 Aug 2026 14:36:25 +0200,
Baul Lee wrote:
>
> capture_urb_complete() resubmits each capture URB without anchoring it:
>
> usb_get_urb(urb);
> ret = usb_submit_urb(urb, GFP_ATOMIC);
>
> Anchoring is a property of a submission, not of the URB. The giveback
> path calls usb_unanchor_urb() before urb->complete(), so an URB
> resubmitted from its own completion handler is off the anchor. The
> capture URBs are anchored once, at stream start, so from the first
> completion onward tascam->capture_anchor is empty.
>
> tascam_free_urbs(), tascam_disconnect(), tascam_suspend() and the
> stop-work path all call usb_kill_anchored_urbs(&tascam->capture_anchor)
> to reap the capture URBs before anything is freed. With the anchor empty
> those calls return immediately and the URBs stay queued on the host
> controller.
>
> tascam_free_urbs() then returns the capture transfer buffers with
> usb_free_coherent(), and snd_card_free() releases the snd_card
> allocation that embeds tascam (card->private_data). The controller
> completes the queued URBs afterwards, writing device-supplied data into
> the freed transfer buffer, and capture_urb_complete() dereferences the
> freed driver object.
>
> KASAN on 7.2.0-rc5 (arm64):
>
> BUG: KASAN: slab-use-after-free in dummy_timer
> Write of size 512 at addr ffff000015b62000
> __asan_memcpy
> dummy_timer
> hrtimer_run_softirq
> Allocated by task 64:
> usb_alloc_coherent
> tascam_alloc_urbs
> tascam_probe
> Freed by task 170:
> usb_free_coherent
> tascam_free_urbs
> tascam_disconnect
> usb_unbind_interface
>
> BUG: KASAN: slab-use-after-free in capture_urb_complete
> Read of size 4 at addr ffff0000170ee878
> Freed by task 170:
> release_card_device
> snd_card_free
> tascam_disconnect
>
> Restore the usb_anchor_urb() between the reference count bump and the
> resubmission. That also makes the handler's usb_unanchor_urb() failure
> arm meaningful again and restores usb_kill_anchored_urbs() as a barrier
> on the disconnect, suspend and stop-work paths.
>
> The anchoring was removed on the premise that the URB is already anchored
> from the initial submission, which does not hold once the first giveback
> has run.
>
> Discovered by XBOW, triaged by Baul Lee <baul.lee@xbow.com>
>
> Fixes: 5cff1529a2f9 ("ALSA: us144mkii: capture_urb_complete: redundant usb_anchor_urb corrupts anchor list on each resubmission")
> Reported-by: Federico Kirschbaum <federico.kirschbaum@xbow.com>
> Reported-by: Baul Lee <baul.lee@xbow.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Baul Lee <baul.lee@xbow.com>
Applied now. Thanks.
Takashi
prev parent reply other threads:[~2026-08-04 16:07 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-04 12:36 [PATCH] ALSA: us144mkii: re-anchor capture URBs on resubmission Baul Lee
2026-08-04 16:07 ` 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=874ih9j2du.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=baul.lee@xbow.com \
--cc=federico.kirschbaum@xbow.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=ramiserifpersia@gmail.com \
--cc=stable@vger.kernel.org \
--cc=tiwai@suse.com \
/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.