From: Jing Lin via B4 Relay <devnull+kayano050408.gmail.com@kernel.org>
To: Neill Kapron <nkapron@google.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jing Lin <kayano050408@gmail.com>,
stable@vger.kernel.org, linux-usb@vger.kernel.org,
syzbot+c73e1942197af9f54ca3@syzkaller.appspotmail.com,
Alan Stern <stern@rowland.harvard.edu>,
linux-kernel@vger.kernel.org
Subject: [PATCH v7 0/4] usb: gadget: gadgetfs: fix ep0 request lifetime and event counter
Date: Tue, 10 Nov 2026 11:40:46 +0900 [thread overview]
Message-ID: <20261110-gadgetfs-v7-v7-0-6d05409cc61a@gmail.com> (raw)
This series fixes the ep0 request lifetime and shared request buffer
races in gadgetfs, and the pre-existing event counter underflow.
The first patch covers request lifetime and buffer ownership, the second
the ep0 setup abort and unbind state races, the third the event counter
underflow, and the fourth removes the const cast in gadgetfs_setup().
The setup() callback runs in interrupt context and may not sleep, so a
mutex cannot be used to serialize it against ep0_read() and ep0_write().
The shared request state remains protected by dev->lock and the control
payloads are handed off through private buffers.
Changes in v7:
- Split the former lifetime patch into separate request lifetime and
buffer ownership and setup abort and unbind state race patches, as
requested by Alan Stern.
- Submit ep0 requests through a shared queue_ep0_req() helper and wake
dev->wait on every runtime clear of ep0_req_queued, including failed
submissions.
- Wait for the asynchronous dequeue completion under dev->lock in
gadgetfs_unbind(). If the controller rejects ep0 dequeue, keep the
request and its dev reference and let completion free it after
udc_stop() drains ep0.
- Destroy non-ep0 endpoint files before tearing down dev->req, matching
the order in which the endpoints are created and destroyed.
- Record setup_abort before gadgetfs_setup() early returns, keep
ep0_poll() from consuming it, include state changes and setup_generation
in the ep0_read() wait, and return -ESRCH from event reads after
unbind.
- Ignore zero-length ep0_read() calls while a non-zero control OUT data
stage is pending so they cannot clobber its payload.
- Address the remaining Sashiko findings from v6 patch 1, including the
ep0_write() state transition around copy_from_user() and the unbind
event path.
- Write only event->u.setup.wLength in the const setup pointer patch, as
suggested by Alan Stern.
- Link to v6: https://patch.msgid.link/20261109-b4-gadgetfs-ep0-v6-0-b410e3dced89@gmail.com
The series was tested with the syzbot reproducer and with targeted
lifecycle, request-reuse, abort, unbind, and event-counter tests on
arm64 QEMU with dummy_hcd, KASAN, and lockdep. The syzbot reproducer
still exits 137 on the fixed kernel without a BUG, WARNING, KASAN
report, or lockdep splat.
Signed-off-by: Jing Lin <kayano050408@gmail.com>
---
Jing Lin (4):
usb: gadget: gadgetfs: fix ep0 request lifetime and buffer races
usb: gadget: gadgetfs: fix ep0 setup abort and unbind state races
usb: gadget: gadgetfs: prevent ep0 event counter underflow
usb: gadget: gadgetfs: avoid writing through the const setup pointer
drivers/usb/gadget/legacy/inode.c | 395 ++++++++++++++++++++++++++------------
1 file changed, 276 insertions(+), 119 deletions(-)
---
base-commit: f66469d9905b39d2c260a15d7d6db450f4db67c1
change-id: 20261110-gadgetfs-v7-e529a852a027
Best regards,
--
Jing Lin <kayano050408@gmail.com>
next reply other threads:[~2026-11-10 2:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-10 2:40 Jing Lin via B4 Relay [this message]
2026-11-10 2:40 ` [PATCH v7 1/4] usb: gadget: gadgetfs: fix ep0 request lifetime and buffer races Jing Lin via B4 Relay
2026-11-10 2:40 ` [PATCH v7 2/4] usb: gadget: gadgetfs: fix ep0 setup abort and unbind state races Jing Lin via B4 Relay
2026-11-10 2:40 ` [PATCH v7 3/4] usb: gadget: gadgetfs: prevent ep0 event counter underflow Jing Lin via B4 Relay
2026-11-10 2:40 ` [PATCH v7 4/4] usb: gadget: gadgetfs: avoid writing through the const setup pointer Jing Lin via B4 Relay
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=20261110-gadgetfs-v7-v7-0-6d05409cc61a@gmail.com \
--to=devnull+kayano050408.gmail.com@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=kayano050408@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=nkapron@google.com \
--cc=stable@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=syzbot+c73e1942197af9f54ca3@syzkaller.appspotmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®