HIGH
gfs2 InlineData UAF
CVE-2026-45984
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI7.8HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: gfs2: Fix use-after-free in iomap inline data write path The inline data buffer head (dibh) is being released prematurely in gfs2_iomap_begin() via release_metapath() while iomap->inline_data still points to dibh->b_data. This causes a use-after-free when iomap_write_end_inline() later attempts to write to the inline data area. The bug sequence: 1. gfs2_iomap_begin() calls gfs2_meta_inode_buffer() to read inode metadata into dibh 2. Sets iomap->inline_data = dibh->b_data + sizeof(struct gfs2_dinode) 3. Calls release_metapath() which calls brelse(dibh), dropping refcount to 0 4. kswapd reclaims the page (~39ms later in the syzbot report) 5. iomap_write_end_inline() tries to memcpy() to iomap->inline_data 6. KASAN detects use-after-free write to freed memory Fix by storing dibh in iomap->private and incrementing its refcount with get_bh() in gfs2_iomap_begin(). The buffer is then properly released in gfs2_iomap_end() after the inline write completes, ensuring the page stays alive for the entire iomap operation. Note: A C reproducer is not available for this issue. The fix is based on analysis of the KASAN report and code review showing the buffer head is freed before use. [agruenba: Take buffer head reference in gfs2_iomap_begin() to avoid leaks in gfs2_iomap_get() and gfs2_iomap_alloc().]
02KernelScan AI Analysis
Risk summary
Local users with write access to GFS2 filesystems can trigger a use-after-free vulnerability in the inline data write path, potentially leading to privilege escalation or system crashes. The vulnerability affects systems using GFS2 cluster filesystems with inline data features enabled.
Vulnerability analysis
The root cause is premature release of a buffer head (dibh) in gfs2_iomap_begin() while iomap->inline_data still points to the freed memory. The function calls release_metapath() which drops the buffer head reference to zero, allowing kswapd to reclaim the page. Later, iomap_write_end_inline() attempts to write to the freed memory location, creating a use-after-free condition. The fix stores the buffer head in iomap->private with an incremented reference count in gfs2_iomap_begin() and properly releases it in gfs2_iomap_end(), ensuring the memory remains valid throughout the entire iomap operation. This vulnerability requires local access and the ability to perform write operations on GFS2 filesystems.
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 5.10 | 5.10.252 | 1403989d1b50 |
| 5.15 | 5.15.202 | 1cae1bafdf9c |
| 6.1 | 6.1.165 | 764c3c84b568 |
| 6.12 | 6.12.75 | 87d4954b5c59 |
| 6.18 | 6.18.14 | 6d76febba07c |
| 6.19 | 6.19.4 | 815ddd27c0c7 |
| 6.6 | 6.6.128 | d87268326b27 |
| mainline | 7.0 | faddeb848305 |