CVE-2026-99179

watch_queue: Fix note pool publication race in watch_queue_set_size()

State
Published
Severity
Not scored
Published
Oct 28, 2026
Updated
Oct 30, 2026
Reserved
Sep 25, 2026

Read the record on cve.org

Description

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

watch_queue: Fix note pool publication race in watch_queue_set_size()

There is a race between watch_queue_set_size() and post_one_notification(). watch_queue_set_size() publishes wqueue->notes, notes_bitmap, nr_pages and nr_notes with plain stores, and post_one_notification() reads them with plain loads under a different lock, so nothing orders the four stores against the poster's loads: depending on the build, notes can be stored last (gcc 14 on x86-64 does this). Since keyctl_watch_key() lets a watch attach to a queue before it is sized, post_one_notification() can already be running on another CPU at that moment: it reads nr_notes > 0, passes its bounds check, and then reads notes while it is still NULL, dereferencing notes[0].

An unprivileged user triggers this reliably by watching one of its own keys through a notification pipe and racing ioctl(IOC_WATCH_QUEUE_SET_SIZE) on that pipe against keyctl(KEYCTL_SETPERM) on the key from another CPU, triggering:

BUG: kernel NULL pointer dereference, address: 0000000000000000 RIP: 0010:post_one_notification.isra.0+0xa2/0x1e0 Call Trace: __post_watch_notification+0x148/0x180 keyctl_setperm_key+0x119/0x130 do_syscall_64+0x108/0x4c0 entry_SYSCALL_64_after_hwframe+0x77/0x7f Kernel panic - not syncing: Fatal exception in interrupt

Fix this by publishing nr_notes last with smp_store_release(), and by reading it once with smp_load_acquire() in post_one_notification() before the bitmap and the page array are touched. A poster that observes a non-zero nr_notes then also observes the pool behind it; one that observes zero drops the notification as before.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • c73be61cede5882f9605a852414db559c0ebedfd to before 2137d487b25eefa862be70de489b64f4c679fe1fAffected
  • c73be61cede5882f9605a852414db559c0ebedfd to before 6aaa6c1a1b61aae332d6e7e0083140b86ea51e14Affected
  • c73be61cede5882f9605a852414db559c0ebedfd to before 4b20867d80e7e91fb7db531f34035d91591ba405Affected
  • c73be61cede5882f9605a852414db559c0ebedfd to before da52e5fcb2cae6acdc0d5722ff83499f8232b9d1Affected
  • c73be61cede5882f9605a852414db559c0ebedfd to before f94c45f83e688e41dfe1b3a589806a0a25567260Affected
  • c73be61cede5882f9605a852414db559c0ebedfd to before 811fb6d0b07605e8e8d93bde8748be4b3028809aAffected
  • c73be61cede5882f9605a852414db559c0ebedfd to before 9e73a6754457ffed8399b835552013b9363e51d1Affected
  • c73be61cede5882f9605a852414db559c0ebedfd to before 5e531d62f1f8834faf7a4eed0d41105cf6570a8fAffected
LinuxLinux
  • 5.8Affected
  • before 5.8Not affected
  • 5.10.273 through 5.10.*Not affected
  • 5.15.224 through 5.15.*Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.161 through 6.6.*Not affected
  • 6.12.115 through 6.12.*Not affected
  • 6.18.59 through 6.18.*Not affected
  • 7.2.13 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.