KernelScan.io

HIGH

xfs AIL UAF

CVE-2026-31453

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI5.7MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: xfs: avoid dereferencing log items after push callbacks After xfsaild_push_item() calls iop_push(), the log item may have been freed if the AIL lock was dropped during the push. Background inode reclaim or the dquot shrinker can free the log item while the AIL lock is not held, and the tracepoints in the switch statement dereference the log item after iop_push() returns. Fix this by capturing the log item type, flags, and LSN before calling xfsaild_push_item(), and introducing a new xfs_ail_push_class trace event class that takes these pre-captured values and the ailp pointer instead of the log item pointer.

02

Engine v0.2.0

Risk summary

Local users with low privileges can trigger a use-after-free read vulnerability in the XFS filesystem's Active Item List (AIL) processing when tracepoints are enabled. A race between AIL pushing and background inode reclaim or the dquot shrinker allows the log item to be freed before tracepoints dereference it, leading to information disclosure or system crashes when XFS filesystems are mounted and under memory pressure.

Affectedfs/xfs/xfs_trans_ail.c (XFS filesystem AIL processing)

Vulnerability analysis

The vulnerability exists in the xfsaild AIL push loop. After xfsaild_push_item() calls iop_push(), the AIL lock is dropped, allowing background inode reclaim or the dquot shrinker to free the log item. The original code then passed the potentially stale log-item pointer to tracepoints (trace_xfs_ail_push, trace_xfs_ail_flushing, trace_xfs_ail_pinned, trace_xfs_ail_locked), which read fields from the freed object. This results in a use-after-free read. Exploitation requires winning a race under memory pressure. If the freed memory is unmapped or contains invalid pointers, the kernel may panic. If the slab is reallocated with attacker-controlled data, limited kernel information may be leaked into the trace buffer. There is no direct integrity impact because the post-push code path does not write to the freed object.

03

BranchFixed inPatch commit
6.16.1.168c8a2ab339b88
6.126.12.80c4d603e8e58a
6.186.18.2195fb5d643cc7
6.196.19.11451c6329d9af
6.66.6.1317121b22b0bac
mainline7.079ef34ec0554