Commit 101cbf4
committed
rxrpc: Fix recvmsg() unconditional requeue
jira VULN-175573
cve CVE-2026-23066
commit-author David Howells <dhowells@redhat.com>
commit 2c28769
upstream-diff Used linux-6.12.y backport
cf969bd as the basis, which, unlike
the upstream, produces no conflicts in net/rxrpc/recvmsg.c and only
trivial conflicts in include/trace/events/rxrpc.h. The contentious
commit is the non-backported a2ea9a9
("Use irq-disabling spinlocks between app and I/O thread"), which
changes spin_lock()/spin_unlock() pairs to
spin_lock_irq()/spin_unlock_irq(). Spin locks are used in the CVE fix
which makes the upstream version incompatible. Linux 6.12 doesn't have
this commit backported either which makes it better suited for LTS
9.6. Conflicts left in include/trace/events/rxrpc.h are just a matter
of putting the newly defined trace points in a correct place on the
alphabetically-ordered list.
If rxrpc_recvmsg() fails because MSG_DONTWAIT was specified but the call at
the front of the recvmsg queue already has its mutex locked, it requeues
the call - whether or not the call is already queued. The call may be on
the queue because MSG_PEEK was also passed and so the call was not dequeued
or because the I/O thread requeued it.
The unconditional requeue may then corrupt the recvmsg queue, leading to
things like UAFs or refcount underruns.
Fix this by only requeuing the call if it isn't already on the queue - and
moving it to the front if it is already queued. If we don't queue it, we
have to put the ref we obtained by dequeuing it.
Also, MSG_PEEK doesn't dequeue the call so shouldn't call
rxrpc_notify_socket() for the call if we didn't use up all the data on the
queue, so fix that also.
Fixes: 540b1c4 ("rxrpc: Fix deadlock between call creation and sendmsg/recvmsg")
Reported-by: Faith <faith@zellic.io>
Reported-by: Pumpkin Chang <pumpkin@devco.re>
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Marc Dionne <marc.dionne@auristor.com>
cc: Nir Ohfeld <niro@wiz.io>
cc: Willy Tarreau <w@1wt.eu>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/95163.1768428203@warthog.procyon.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit cf969bd)
Signed-off-by: Marcin Wcisło <marcin.wcislo@conclusive.pl>1 parent 55d4230 commit 101cbf4
2 files changed
Lines changed: 19 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
273 | 273 | | |
274 | 274 | | |
275 | 275 | | |
| 276 | + | |
276 | 277 | | |
277 | 278 | | |
278 | 279 | | |
| |||
287 | 288 | | |
288 | 289 | | |
289 | 290 | | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
290 | 294 | | |
291 | 295 | | |
292 | 296 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
415 | 415 | | |
416 | 416 | | |
417 | 417 | | |
418 | | - | |
| 418 | + | |
| 419 | + | |
419 | 420 | | |
420 | 421 | | |
421 | 422 | | |
| |||
446 | 447 | | |
447 | 448 | | |
448 | 449 | | |
449 | | - | |
450 | | - | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
451 | 462 | | |
452 | 463 | | |
453 | | - | |
| 464 | + | |
454 | 465 | | |
455 | 466 | | |
456 | 467 | | |
| |||
0 commit comments