CVE-2026-89600
massUse-After-Free in Linux Kernel fanotify Permission Event Handling
The Linux kernel's fanotify subsystem contains a use-after-free in which a permission event stores a pointer to file-range information living on the triggering task's kernel stack. If a signal interrupts the triggering task while the event reader has marked the event FAN_EVENT_REPORTED and is sleeping to prepare a file descriptor, the task unwinds the stack frame while the reader still owns the event, and the reader then copies the stale stack value (via pevent->ppos) to userspace, as confirmed by a KASAN report in fanotify_read. A local attacker with low privileges who can trigger fanotify permission/pre-content events and win this race could leak kernel stack contents or corrupt memory, with CVSS 3.1 rating this high (7.8) for confidentiality, integrity, and availability impact. Any system running a kernel with this fanotify code path is affected, though triggering it requires local access and use of the fanotify permission-event interface (typically used by file-content inspection, HSM/tiering, or anti-malware software). There is no public proof of concept and no known exploitation in the wild; the issue is fixed upstream by storing the range position directly in the permission event.
What to do: Patch to a kernel release containing the upstream fanotify fix once your distro ships it (the fix stores the range position in the permission event and uses FANOTIFY_NO_RANGE when range info is unavailable). In the meantime, audit and restrict local, untrusted code execution on hosts running fanotify-based content-scanning or tiering agents, and watch kernel logs for KASAN/slab use-after-free reports in fanotify_read as an indicator of attempted triggering.
| Linux kernel | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: fanotify: fix use-after-free of file range info fsnotify_pre_content() builds its file_range on the triggering task's stack. fanotify_alloc_perm_event() saves a pointer to range.pos in the heap-allocated permission event so copy_range_info_to_user() can report the offset later. The event reader can set the event state to FAN_EVENT_REPORTED and then sleep while preparing the file descriptor. If a signal interrupts the triggering task at that point, fanotify_get_response() changes the state to FAN_EVENT_CANCELED and returns. This unwinds the file_range stack frame while the reader still owns the event. The reader then dereferences pevent->ppos and copies the stale stack value to userspace. KASAN reported: BUG: KASAN: use-after-free in fanotify_read+0x293e/0x2970 Read of size 8 at addr ffff88811434fc50 by task fanotify_inotif/95 Call Trace: fanotify_read+0x293e/0x2970 vfs_read+0x177/0xa20 ksys_read+0xf7/0x1c0 do_syscall_64+0xf9/0x540 entry_SYSCALL_64_after_hwframe+0x77/0x7f Store the range position directly in the permission event and use FANOTIFY_NO_RANGE when range information is unavailable. The event remains alive until the reader finishes, so the reported offset no longer depends on the triggering task's stack.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.