Overview
About vulnerability
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:
- gfs2_iomap_begin() calls gfs2_meta_inode_buffer() to read inode metadata into dibh
- Sets iomap->inline_data = dibh->b_data + sizeof(struct gfs2_dinode)
- Calls release_metapath() which calls brelse(dibh), dropping refcount to 0
- kswapd reclaims the page (~39ms later in the syzbot report)
- iomap_write_end_inline() tries to memcpy() to iomap->inline_data
- 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().]
Details
- Affected product:
- AlmaLinux 9.2 ESU , CentOS 7 ELS , CentOS 8.4 ELS , CentOS 8.5 ELS , CentOS Stream 8 ELS , TuxCare 9.6 ESU , Ubuntu 20.04 ELS
- Affected packages:
- kernel @ 5.14.0 (+6 more)
KernelCare state
Live-patch status from KernelCare for each operating system.
| Operating system | Status | Covered kernels |
|---|---|---|
| AlmaLinux 8 | Released |
112 kernels
|
| AlmaLinux 9 | Released |
110 kernels
|
| CentOS 8 | Released |
21 kernels
|
| CloudLinux OS 7h | Released |
105 kernels
|
| CloudLinux OS 8 | Released |
102 kernels
|
| Debian 11 | Planned | — |
| Debian 11 cloud | Planned | — |
| Debian 13 | Planned | — |
| Oracle Linux 8 | Released |
121 kernels
|
| Oracle Linux 9 | Released |
109 kernels
|
| RHEL 8 | Released |
116 kernels
|
| RHEL 9 | Released |
108 kernels
|
| Rocky Linux 8 | Released |
94 kernels
|
| Rocky Linux 9 | Released |
88 kernels
|
| Ubuntu 22.04 | Planned | — |
| Ubuntu 24.04 | Planned | — |
| Ubuntu 24.04 AWS | Planned | — |