mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] mctp: route: verify socket ownership in mctp_lookup_prealloc_tag()
@ 2026-09-19 21:28 Hui Peng
  2026-09-20  8:38 ` Jeremy Kerr
  0 siblings, 1 reply; 2+ messages in thread
From: Hui Peng @ 2026-09-19 21:28 UTC (permalink / raw)
  To: jk, matt, davem, edumazet, kuba, pabeni; +Cc: horms, netdev, linux-kernel

When a socket transmits a packet with `MCTP_TAG_PREALLOC` set,
mctp_lookup_prealloc_tag() iterates over the per-netns `&mns->keys` list
and matches `netid`, `req_tag`, `peer_addr`, and `manual_alloc`, but
omits checking whether `tmp->sk == &msk->sk`.

Because all preallocated tags (`0..7`) reside in the shared per-netns
`&mns->keys` list, any local `AF_MCTP` socket can specify another
socket's preallocated tag and cause incoming replies to be matched
against the victim socket's `mctp_sk_key` or reset its expiry state.

Verify `tmp->sk == &msk->sk` in `mctp_lookup_prealloc_tag()`.

Fixes: 63ed1aab3d40 ("mctp: Add SIOCMCTP{ALLOC,DROP}TAG ioctls for tag control")
Assisted-by: LLM
Signed-off-by: Hui Peng <benquike@gmail.com>

---
 net/mctp/route.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/net/mctp/route.c b/net/mctp/route.c
index a2c1517ff447..e411ebeca631 100644
--- a/net/mctp/route.c
+++ b/net/mctp/route.c
@@ -826,6 +826,9 @@ static struct mctp_sk_key *mctp_lookup_prealloc_tag(struct mctp_sock *msk,
 	spin_lock_irqsave(&mns->keys_lock, flags);
 
 	hlist_for_each_entry(tmp, &mns->keys, hlist) {
+		if (tmp->sk != &msk->sk)
+			continue;
+
 		if (tmp->net != netid)
 			continue;
 
-- 
2.55.0.1082.g2b9226bbc0-goog


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

* Re: [PATCH] mctp: route: verify socket ownership in mctp_lookup_prealloc_tag()
  2026-09-19 21:28 [PATCH] mctp: route: verify socket ownership in mctp_lookup_prealloc_tag() Hui Peng
@ 2026-09-20  8:38 ` Jeremy Kerr
  0 siblings, 0 replies; 2+ messages in thread
From: Jeremy Kerr @ 2026-09-20  8:38 UTC (permalink / raw)
  To: Hui Peng, matt, davem, edumazet, kuba, pabeni; +Cc: horms, netdev, linux-kernel

Hi Hui,

> When a socket transmits a packet with `MCTP_TAG_PREALLOC` set,
> mctp_lookup_prealloc_tag() iterates over the per-netns `&mns->keys`
> list and matches `netid`, `req_tag`, `peer_addr`, and `manual_alloc`,
> but omits checking whether `tmp->sk == &msk->sk`.

OK, good catch.


> Verify `tmp->sk == &msk->sk` in `mctp_lookup_prealloc_tag()`.

Or we could instead iterate the socket's tag list?

Cheers,


Jeremy


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

end of thread, other threads:[~2026-09-20  8:39 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-19 21:28 [PATCH] mctp: route: verify socket ownership in mctp_lookup_prealloc_tag() Hui Peng
2026-09-20  8:38 ` Jeremy Kerr

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®