All of lore.kernel.org
 help / color / mirror / Atom feed
* CVE-2026-52946: fs/fcntl: fix SOFTIRQ-unsafe lock order in fasync signaling
@ 2026-06-24 16:25 Greg Kroah-Hartman
  0 siblings, 0 replies; only message in thread
From: Greg Kroah-Hartman @ 2026-06-24 16:25 UTC (permalink / raw)
  To: linux-cve-announce; +Cc: Greg Kroah-Hartman

From: Greg Kroah-Hartman <gregkh@kernel.org>

Description
===========

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

fs/fcntl: fix SOFTIRQ-unsafe lock order in fasync signaling

A SOFTIRQ-safe to SOFTIRQ-unsafe lock order deadlock can occur in
send_sigio() and send_sigurg() when a process group receives a signal.

When FASYNC is configured for a process group (PIDTYPE_PGID), both
functions use read_lock(&tasklist_lock) to traverse the task list.
However, they are frequently called from softirq context:
- send_sigio() via input_inject_event -> kill_fasync
- send_sigurg() via tcp_check_urg -> sk_send_sigurg (NET_RX_SOFTIRQ)

The deadlock is caused by the rwlock writer fairness mechanism:
1. CPU 0 (process context) holds read_lock(&tasklist_lock) in do_wait().
2. CPU 1 (process context) attempts write_lock(&tasklist_lock) in
   fork() or exit() and spins, which blocks all new readers.
3. CPU 0 is interrupted by a softirq (e.g., TCP URG packet reception).
4. The softirq calls send_sigurg() and attempts to acquire
   read_lock(&tasklist_lock), deadlocking because CPU 1 is waiting.

Since PID hashing and do_each_pid_task() traversals are already
RCU-protected, the read_lock on tasklist_lock is no longer strictly
required for safe traversal. Fix this by replacing tasklist_lock with
rcu_read_lock(), aligning the process group signaling path with the
single-PID path. This also mitigates a potential remote denial of
service vector via TCP URG packets.

Lockdep splat:
=====================================================
WARNING: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected
[...]
Chain exists of:
  &dev->event_lock --> &f_owner->lock --> tasklist_lock

Possible interrupt unsafe locking scenario:
       CPU0                    CPU1
       ----                    ----
  lock(tasklist_lock);
                           local_irq_disable();
                           lock(&dev->event_lock);
                           lock(&f_owner->lock);
  <Interrupt>
    lock(&dev->event_lock);

*** DEADLOCK ***

The Linux kernel CVE team has assigned CVE-2026-52946 to this issue.


Affected and fixed versions
===========================

	Fixed in 5.10.259 with commit 54626335ea4174ab2d9a183b511d825f6765e47b
	Fixed in 5.15.210 with commit 897d6a7247739fb1528f98c575df4f2e5de7f994
	Fixed in 6.1.176 with commit 32dbd5ce4be3a3ed7e00f8af18795cc84fc50a33
	Fixed in 6.6.143 with commit b5fa9e32fb6718f70c986ee14dd5d01b4846f331
	Fixed in 6.12.94 with commit 1bee417678f1135e35b25a37734db46aa94258d2
	Fixed in 6.18.36 with commit 20a93e397abe850c49b6fa0e8cc827b5f634a8f5
	Fixed in 7.0.13 with commit bfcc8e8d8a495bb34cae9e620adfb75fb13a3954
	Fixed in 7.1.1 with commit 36c1b57b2ecf3c61ac93f5f07bd29b6f21e226ed

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2026-52946
will be updated if fixes are backported, please check that for the most
up to date information about this issue.


Affected files
==============

The file(s) affected by this issue are:
	fs/fcntl.c


Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/54626335ea4174ab2d9a183b511d825f6765e47b
	https://git.kernel.org/stable/c/897d6a7247739fb1528f98c575df4f2e5de7f994
	https://git.kernel.org/stable/c/32dbd5ce4be3a3ed7e00f8af18795cc84fc50a33
	https://git.kernel.org/stable/c/b5fa9e32fb6718f70c986ee14dd5d01b4846f331
	https://git.kernel.org/stable/c/1bee417678f1135e35b25a37734db46aa94258d2
	https://git.kernel.org/stable/c/20a93e397abe850c49b6fa0e8cc827b5f634a8f5
	https://git.kernel.org/stable/c/bfcc8e8d8a495bb34cae9e620adfb75fb13a3954
	https://git.kernel.org/stable/c/36c1b57b2ecf3c61ac93f5f07bd29b6f21e226ed
	https://git.kernel.org/stable/c/00633c4683828acd5256fa8d5163f440d74bbe71

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-06-24 16:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-24 16:25 CVE-2026-52946: fs/fcntl: fix SOFTIRQ-unsafe lock order in fasync signaling Greg Kroah-Hartman

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.