CVE-2022-49706·Kernel vulnerability
In the Linux kernel, the following vulnerability has been resolved: zonefs: fix zonefs_iomap_begin() for reads If a readahead is issued to a sequential zone file with an offset exactly equal to the current file size, the iomap type is set to IOMAP_UNWRITTEN, which will prevent an IO, but the iomap length is calculated as 0. This causes a WARN_ON() in iomap_iter(): [17309.548939] WARNING: CPU: 3 PID: 2137 at fs/iomap/iter.c:34 iomap_iter+0x9cf/0xe80 [...] [17309.650907] RIP: 0010:iomap_iter+0x9cf/0xe80 [...] [17309.754560] Call Trace: [17309.757078] <TASK> [17309.759240] ? lock_is_held_type+0xd8/0x130 [17309.763531] iomap_readahead+0x1a8/0x870 [17309.767550] ? iomap_read_folio+0x4c0/0x4c0 [17309.771817] ? lockdep_hardirqs_on_prepare+0x400/0x400 [17309.778848] ? lock_release+0x370/0x750 [17309.784462] ? folio_add_lru+0x217/0x3f0 [17309.790220] ? reacquire_held_locks+0x4e0/0x4e0 [17309.796543] read_pages+0x17d/0xb60 [17309.801854] ? folio_add_lru+0x238/0x3f0 [17309.807573] ? readahead_expand+0x5f0/0x5f0 [17309.813554] ? policy_node+0xb5/0x140 [17309.819018] page_cache_ra_unbounded+0x27d/0x450 [17309.825439] filemap_get_pages+0x500/0x1450 [17309.831444] ? filemap_add_folio+0x140/0x140 [17309.837519] ? lock_is_held_type+0xd8/0x130 [17309.843509] filemap_read+0x28c/0x9f0 [17309.848953] ? zonefs_file_read_iter+0x1ea/0x4d0 [zonefs] [17309.856162] ? trace_contention_end+0xd6/0x130 [17309.862416] ? __mutex_lock+0x221/0x1480 [17309.868151] ? zonefs_file_read_iter+0x166/0x4d0 [zonefs] [17309.875364] ? filemap_get_pages+0x1450/0x1450 [17309.881647] ? __mutex_unlock_slowpath+0x15e/0x620 [17309.888248] ? wait_for_completion_io_timeout+0x20/0x20 [17309.895231] ? lock_is_held_type+0xd8/0x130 [17309.901115] ? lock_is_held_type+0xd8/0x130 [17309.906934] zonefs_file_read_iter+0x356/0x4d0 [zonefs] [17309.913750] new_sync_read+0x2d8/0x520 [17309.919035] ? __x64_sys_lseek+0x1d0/0x1d0 Furthermore, this causes iomap_readahead() to loop forever as iomap_readahead_iter() always returns 0, making no progress. Fix this by treating reads after the file size as access to holes, setting the iomap type to IOMAP_HOLE, the iomap addr to IOMAP_NULL_ADDR and using the length argument as is for the iomap length. To simplify the code with this change, zonefs_iomap_begin() is split into the read variant, zonefs_read_iomap_begin() and zonefs_read_iomap_ops, and the write variant, zonefs_write_iomap_begin() and zonefs_write_iomap_ops.
- Severity
- high
- Software
- Kernel
- Fixed in
- 5.18.7
- Published
- 2025-02-26
Affected versions
From: 5.16
Until: 5.18.7
Fixed in: 5.18.7
How to fix this CVE
Update your Linux kernel to version 5.18.7 or later to fix a critical zonefs read operation flaw that causes infinite loops and kernel warnings during readahead operations on sequential zone files. This vulnerability affects systems using zonefs with kernel versions 5.16 through 5.18.6, and the fix properly handles reads at file boundaries by treating them as hole accesses rather than unwritten areas. Apply this update during your next maintenance window to prevent system instability and potential denial-of-service conditions.
sudo dnf update kernel kernel-develDefensia detects this vulnerability
How to check if you are affected
- Step 1: Check your current kernel version with `uname -r` and confirm it falls within 5.16.0 to 5.18.6
- Step 2: Verify if zonefs is in use on your system by running `grep -i zonefs /proc/filesystems` or checking mounted filesystems with `mount | grep zonefs`
- Step 3: Search kernel logs for the WARN_ON message using `journalctl -b -1 | grep 'WARNING.*iomap_iter' or `dmesg | grep 'WARNING.*iomap_iter'`
- Step 4: After patching, reboot your system and verify the new kernel version with `uname -r`, confirming it is 5.18.7 or later
FAQ
What is CVE-2022-49706?
This vulnerability exists in zonefs, the Linux kernel's zone-managed filesystem driver, where readahead operations to sequential zone files at specific file boundaries trigger incorrect I/O mapping calculations, causing the iomap length to become zero and resulting in kernel warnings and infinite loop conditions.
Is CVE-2022-49706 being actively exploited?
No, this CVE is not listed on the CISA Known Exploited Vulnerabilities (KEV) catalog and no public exploits are available. However, it can cause denial-of-service conditions on affected systems running zonefs workloads.
What versions of Kernel are affected by CVE-2022-49706?
Linux kernel versions 5.16.0 through 5.18.6 are vulnerable. The fix was included in kernel 5.18.7 and later releases. Systems running zonefs on these kernel versions require immediate patching.
How do I check if my server is vulnerable to CVE-2022-49706?
Run `uname -r` to check your kernel version. If it shows 5.16.x to 5.18.6, and zonefs is active (verify with `mount | grep zonefs`), your system is vulnerable. Additionally, check for WARN_ON messages related to iomap_iter in your kernel logs using `journalctl -b | grep iomap_iter`.
Does Defensia detect CVE-2022-49706?
Yes — Defensia's CVE advisory scanner compares installed package versions against the NVD database. If Kernel is installed on a monitored server, CVE-2022-49706 will appear in your dashboard with remediation steps.
Related Kernel CVEs
References
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2022-49706. Free for 1 server.
Get started free