-

CVE-2026-72166

net/9p: fix infinite loop in p9_client_rpc on fatal signal

In the Linux kernel, the following vulnerability has been resolved:

net/9p: fix infinite loop in p9_client_rpc on fatal signal

When p9_client_rpc() is called with type P9_TFLUSH and the transport
has no peer (e.g. fd transport backed by pipes with no 9p server),
a fatal signal causes an infinite loop:

  again:
	err = io_wait_event_killable(req->wq, ...)
	/* SIGKILL wakes the task, returns -ERESTARTSYS */

	if (err == -ERESTARTSYS && c->status == Connected &&
		type == P9_TFLUSH) {
		sigpending = 1;
		clear_thread_flag(TIF_SIGPENDING);
		goto again;
	}

clear_thread_flag() clears TIF_SIGPENDING before jumping back to
io_wait_event_killable(). signal_pending_state() checks TIF_SIGPENDING,
finds it zero, and the task goes to sleep again. The task can only wake
on the next signal delivery that calls signal_wake_up() and sets
TIF_SIGPENDING again. When that happens the loop repeats, clears
TIF_SIGPENDING, and sleeps again indefinitely.

This is triggered in practice by coredump_wait(): when a thread in a
multi-threaded process causes a coredump (e.g. via SIGSYS from Syscall
User Dispatch), coredump_wait() sends SIGKILL to all other threads and
waits for them to call mm_release(). If one of those threads is blocked
in p9_client_rpc() over an fd transport with no peer, it enters the
P9_TFLUSH loop and never calls mm_release(), so coredump_wait() stalls
forever:

INFO: task syz.0.18:676 blocked for more than 143 seconds.
      Not tainted 6.12.77+ #1
task:syz.0.18 state:D stack:27600 pid:676 tgid:673 ppid:630 flags:0x00000004
Call Trace:
 <TASK>
 context_switch kernel/sched/core.c:5344 [inline]
 __schedule+0xcb4/0x5d50 kernel/sched/core.c:6724
 __schedule_loop kernel/sched/core.c:6801 [inline]
 schedule+0xe5/0x350 kernel/sched/core.c:6816
 schedule_timeout+0x253/0x290 kernel/time/timer.c:2593
 do_wait_for_common kernel/sched/completion.c:95 [inline]
 __wait_for_common+0x409/0x600 kernel/sched/completion.c:116
 wait_for_common kernel/sched/completion.c:127 [inline]
 wait_for_completion_state+0x1d/0x40 kernel/sched/completion.c:264
 coredump_wait fs/coredump.c:448 [inline]
 do_coredump+0x854/0x4350 fs/coredump.c:629
 get_signal+0x1425/0x2730 kernel/signal.c:2903
 arch_do_signal_or_restart+0x81/0x880 arch/x86/kernel/signal.c:337
 exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
 exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
 __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
 syscall_exit_to_user_mode+0xf9/0x160 kernel/entry/common.c:218
 do_syscall_64+0x102/0x220 arch/x86/entry/common.c:84
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
 </TASK>

Fix: check fatal_signal_pending() before clearing TIF_SIGPENDING in the
P9_TFLUSH retry loop. At that point TIF_SIGPENDING is still set, so
fatal_signal_pending() works correctly. If a fatal signal is pending,
jump to recalc_sigpending to restore TIF_SIGPENDING and return
-ERESTARTSYS to the caller.

The same defect is present in stable kernels back to 5.4. On those
kernels the infinite loop is broken earlier by a second SIGKILL from
the parent process (e.g. kill_and_wait() retrying after a timeout),
resulting in a zombie process and a shutdown delay rather than a
permanent D-state hang, but the underlying flaw is the same.

Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
Daten sind bereitgestellt durch das CVE Programm von einer CVE Numbering Authority (CNA) (Unstrukturiert).
HerstellerLinux
≫
Produkt Linux
Default Statusunaffected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < 18a3427526e2141f80050f82c1d26b19a454707d
Status affected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < 378481cc60a937ef8ea4ef6e4f95f0dbc4e21414
Status affected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < 4f621ae3a2d99b0bac50e8d66cbf7f68323c01e8
Status affected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < f62a1f245a71680033260a6f6d74011cc3acb3cd
Status affected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < dc892cbb1e4341d427b1f940ebd6abd69bf8e479
Status affected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < a8874c34c4a973f9922908a4b8be1d1278f01e42
Status affected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < 823886a1b089b49bcd349bc8bd3417b7910cd1ac
Status affected
Version 91b8534fa8f5e01f249b1bf8df0a2540053549ad
Version < 6b4f48728faa8bb514368f7eacda05565dea8696
Status affected
HerstellerLinux
≫
Produkt Linux
Default Statusaffected
Version 2.6.28
Status affected
Version 0
Version < 2.6.28
Status unaffected
Version <= 5.10.*
Version 5.10.266
Status unaffected
Version <= 5.15.*
Version 5.15.212
Status unaffected
Version <= 6.1.*
Version 6.1.178
Status unaffected
Version <= 6.6.*
Version 6.6.145
Status unaffected
Version <= 6.12.*
Version 6.12.97
Status unaffected
Version <= 6.18.*
Version 6.18.40
Status unaffected
Version <= 7.1.*
Version 7.1.5
Status unaffected
Version <= *
Version 7.2
Status unaffected
VulnDex Vulnerability Enrichment
Diese Information steht angemeldeten Benutzern zur Verfügung. Login Login
Zu dieser CVE wurde keine Warnung gefunden.
EPSS Metriken
Typ Quelle Score Percentile
EPSS FIRST.org 0.21% 0.11
CVSS Metriken
Quelle Base Score Exploit Score Impact Score Vector String
Es wurden noch keine Informationen zu CWE veröffentlicht.
https://git.kernel.org/stable/c/378481cc60a937ef8ea4ef6e4f95f0dbc4e21414
https://git.kernel.org/stable/c/4f621ae3a2d99b0bac50e8d66cbf7f68323c01e8
https://git.kernel.org/stable/c/f62a1f245a71680033260a6f6d74011cc3acb3cd
https://git.kernel.org/stable/c/dc892cbb1e4341d427b1f940ebd6abd69bf8e479
https://git.kernel.org/stable/c/a8874c34c4a973f9922908a4b8be1d1278f01e42
https://git.kernel.org/stable/c/823886a1b089b49bcd349bc8bd3417b7910cd1ac
https://git.kernel.org/stable/c/6b4f48728faa8bb514368f7eacda05565dea8696
https://git.kernel.org/stable/c/18a3427526e2141f80050f82c1d26b19a454707d