diff options
| author | Michael Grzeschik <mgr@kernel.org> | 2026-09-22 00:25:57 +0200 |
|---|---|---|
| committer | Dominique Martinet <asmadeus@codewreck.org> | 2026-09-22 08:11:44 +0000 |
| commit | cd1988cf723c2eae87112b198bf90b0aebfeaf31 (patch) | |
| tree | 51a35f84b79ddf9645a876a8dc2d225f4b5c6a39 /scripts/basic/split-include.c | |
| parent | 08c6b9f484a406d9d87c5b2580725d2e0597f3b9 (diff) | |
| download | linux-cd1988cf723c2eae87112b198bf90b0aebfeaf31.tar.gz linux-cd1988cf723c2eae87112b198bf90b0aebfeaf31.zip | |
net/9p/usbg: call disable_usb9pfs() from usb9pfs_disable()
usb9pfs_disable() is the usb_function ->disable callback, invoked by
the composite gadget core whenever the host resets or unconfigures
the gadget. The gadget function API requires this callback to disable
its endpoints; every other in-tree function driver does so from its
->disable hook.
usb9pfs_disable() never called disable_usb9pfs(), so the IN/OUT
endpoints and their usb_request objects were left active and
allocated across a host-driven disable. When the host later
reconfigures the device, enable_usb9pfs() calls alloc_requests() again
and unconditionally overwrites usb9pfs->in_req/out_req, permanently
leaking the previous allocations, while the endpoints themselves are
left enabled underneath the function's own idea of being disabled.
Call disable_usb9pfs() before reinit_completion(&usb9pfs->send),
mirroring the same sequence already used in p9_usbg_close(). Placing
it before the reinit_completion() also ensures usb_ep_disable() has
synchronously flushed any requests still queued in hardware before the
completion is reset, closing the same race that motivated resetting
the completion here in the first place.
Fixes: a3be076dc174 ("net/9p/usbg: Add new usb gadget function transport")
Assisted-by: Claude:claude-opus-4.8
Cc: stable@vger.kernel.org
Signed-off-by: Michael Grzeschik <mgr@kernel.org>
Message-ID: <20260922-usb9pfsfixes-v1-4-9d8dcc52904c@kernel.org>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
Diffstat (limited to 'scripts/basic/split-include.c')
0 files changed, 0 insertions, 0 deletions
