{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-89600","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-11T19:38:34.732Z","datePublished":"2026-09-11T19:45:03.450Z","dateUpdated":"2026-09-13T06:31:32.178Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-09-13T06:31:32.178Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nfanotify: fix use-after-free of file range info\n\nfsnotify_pre_content() builds its file_range on the triggering task's\nstack. fanotify_alloc_perm_event() saves a pointer to range.pos in the\nheap-allocated permission event so copy_range_info_to_user() can report\nthe offset later.\n\nThe event reader can set the event state to FAN_EVENT_REPORTED and then\nsleep while preparing the file descriptor. If a signal interrupts the\ntriggering task at that point, fanotify_get_response() changes the state\nto FAN_EVENT_CANCELED and returns. This unwinds the file_range stack\nframe while the reader still owns the event. The reader then dereferences\npevent->ppos and copies the stale stack value to userspace.\n\nKASAN reported:\n\n  BUG: KASAN: use-after-free in fanotify_read+0x293e/0x2970\n  Read of size 8 at addr ffff88811434fc50 by task fanotify_inotif/95\n  Call Trace:\n   fanotify_read+0x293e/0x2970\n   vfs_read+0x177/0xa20\n   ksys_read+0xf7/0x1c0\n   do_syscall_64+0xf9/0x540\n   entry_SYSCALL_64_after_hwframe+0x77/0x7f\n\nStore the range position directly in the permission event and use\nFANOTIFY_NO_RANGE when range information is unavailable. The event remains\nalive until the reader finishes, so the reported offset no longer depends\non the triggering task's stack."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The bug is reached only through local syscalls: fanotify_init/fanotify_mark to install a FAN_CLASS_PRE_CONTENT watch, read() on the fanotify fd, and a local read/write/mmap/truncate of a watched regular file that hits fsnotify_pre_content(). No network protocol handler delivers these events to an attacker.\nAC:L - The attacker owns both sides of the race: a listener that sets FAN_EVENT_REPORTED then sleeps in create_fd() or copy_to_user, and a triggering task they SIGKILL while it waits in fanotify_get_response(). That cancels the wait, unwinds the file_range stack, and leaves pevent->ppos dangling for the reader.\nPR:L - FAN_CLASS_PRE_CONTENT requires capable(CAP_SYS_ADMIN), which a user-namespace root obtains via unshare. Inode FAN_PRE_ACCESS marks do not require init-namespace root; FANOTIFY_UNPRIV only suppresses event fds/pids and does not block permission events or the copy_range_info_to_user() UAF.\nUI:N - The attacker creates the watch, triggers pre-content access on their own file, and reads the fanotify fd themselves. No other user must open, mount, or otherwise interact with the system.\nS:U - The use-after-free and its impact stay inside the host kernel. This is a same-authority memory-safety issue, not a VM escape, IOMMU bypass, or other cross-boundary sandbox breakout.\nC:H - copy_range_info_to_user() dereferences the dangling pevent->ppos and copies eight bytes of the triggering task's freed kernel stack to userspace. After that task exits, the stack can be reused, so the UAF read discloses kernel pointers or other object contents.\nI:H - This is a kernel use-after-free of stack memory retained via a heap permission event. After the triggering task is killed, the freed stack can be reallocated while the dangling pointer remains, which is a UAF memory-corruption primitive usable for write/control-flow hijack.\nA:H - KASAN already reports a use-after-free in fanotify_read(). If the triggering task exits and its vmap kernel stack is unmapped before the listener loads *ppos, the kernel takes a fault/oops and the system crashes."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/notify/fanotify/fanotify.c","fs/notify/fanotify/fanotify.h","fs/notify/fanotify/fanotify_user.c"],"versions":[{"version":"870499bc1d4dc04cba1f63dd5e7bc02b983e2458","lessThan":"66aa9a9e6481bfa512ee5b6380eaaec455a954d2","status":"affected","versionType":"git"},{"version":"870499bc1d4dc04cba1f63dd5e7bc02b983e2458","lessThan":"b8f73b163b646bc56d4dce9c697a578e333f4894","status":"affected","versionType":"git"},{"version":"870499bc1d4dc04cba1f63dd5e7bc02b983e2458","lessThan":"d7f1cf5be33ef0175a4e8ed8687aeb98fb00a851","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/notify/fanotify/fanotify.c","fs/notify/fanotify/fanotify.h","fs/notify/fanotify/fanotify_user.c"],"versions":[{"version":"6.14","status":"affected"},{"version":"0","lessThan":"6.14","status":"unaffected","versionType":"semver"},{"version":"6.18.50","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.2.4","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3-rc1","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.14","versionEndExcluding":"6.18.50"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.14","versionEndExcluding":"7.2.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.14","versionEndExcluding":"7.3-rc1"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/66aa9a9e6481bfa512ee5b6380eaaec455a954d2"},{"url":"https://git.kernel.org/stable/c/b8f73b163b646bc56d4dce9c697a578e333f4894"},{"url":"https://git.kernel.org/stable/c/d7f1cf5be33ef0175a4e8ed8687aeb98fb00a851"}],"title":"fanotify: fix use-after-free of file range info","x_generator":{"engine":"bippy-1.2.0"}}}}