All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] 9p: release the request when the response tag is not in flight
@ 2026-11-04  2:28 Wentao Liang
  2026-11-04  2:32 ` sashiko-bot
  2026-11-04  7:41 ` Krzysztof Kozlowski
  0 siblings, 2 replies; 3+ messages in thread
From: Wentao Liang @ 2026-11-04  2:28 UTC (permalink / raw)
  To: Eric Van Hensbergen, Latchesar Ionkov, Dominique Martinet,
	Christian Schoenebeck
  Cc: v9fs

usb9pfs_rx_header() takes a reference on the request returned by
p9_tag_lookup(), but the shared error check returns NULL without
dropping it when the lookup succeeds and the request is no longer in
REQ_STATUS_SENT. That state is reachable: a cancelled request can still
be found in the idr with REQ_STATUS_FLSHD, and a duplicate reply can
arrive while the client still holds the request in REQ_STATUS_RCVD.
Only the parse and lookup failures may return without a reference.

Split the check and put the reference on the unexpected tag path, like
the other error paths in the function.

Fixes: a3be076dc174 ("net/9p/usbg: Add new usb gadget function transport")
Cc: stable@vger.kernel.org
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
 net/9p/trans_usbg.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/net/9p/trans_usbg.c b/net/9p/trans_usbg.c
index 419cda13a7b5..c677ca0e4440 100644
--- a/net/9p/trans_usbg.c
+++ b/net/9p/trans_usbg.c
@@ -203,11 +203,17 @@ static struct p9_req_t *usb9pfs_rx_header(struct f_usb9pfs *usb9pfs, void *buf)
 		 usb9pfs, rc.size, rc.tag);
 
 	p9_rx_req = p9_tag_lookup(usb9pfs->client, rc.tag);
-	if (!p9_rx_req || p9_rx_req->status != REQ_STATUS_SENT) {
+	if (!p9_rx_req) {
 		p9_debug(P9_DEBUG_ERROR, "Unexpected packet tag %d\n", rc.tag);
 		return NULL;
 	}
 
+	if (p9_rx_req->status != REQ_STATUS_SENT) {
+		p9_debug(P9_DEBUG_ERROR, "Unexpected packet tag %d\n", rc.tag);
+		p9_req_put(usb9pfs->client, p9_rx_req);
+		return NULL;
+	}
+
 	if (rc.size > p9_rx_req->rc.capacity) {
 		p9_debug(P9_DEBUG_ERROR,
 			 "requested packet size too big: %d for tag %d with capacity %zd\n",
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-11-04  7:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-04  2:28 [PATCH] 9p: release the request when the response tag is not in flight Wentao Liang
2026-11-04  2:32 ` sashiko-bot
2026-11-04  7:41 ` Krzysztof Kozlowski

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.