CVE-2023-53642
Medium · 5.5CVSS
5.5
EPSS
0.2%
Published
Oct 7, 2025
CISA due date
—
Cloudanix analysis
A local user can crash the operating system by performing certain file reads, because an internal bookkeeping error prevents the kernel from handling a memory problem gracefully.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Incorrect exception table annotation on the final rep movsb in clear_user_rep_good causes page faults during user memory clearing to be mishandled, turning what should be an -EFAULT return into an unhandled kernel page fault and oops.
Why it matters to the business
Local users can trigger kernel crashes during common file and I/O operations on affected kernels, producing denial-of-service conditions; the issue appears in a widely used code path with nearly 10,000 downstream dependents.
How an attack unfolds
An attacker with local access issues a read or preadv2 call that reaches iov_iter_zero and then iomap_dio on a non-present user page; the faulty annotation prevents the exception handler from locating the instruction, so the kernel reports an oops instead of returning an error to userspace.
How to fix it
Apply the one-line exception-table annotation fix for clear_user_rep_good or backport the upstream x86 memory-copy cleanup series (minimum commits d2c95f9d6802 and e046fe5a36a9). Update to a kernel containing the corrected annotation; no configuration workaround exists.
How to confirm the fix worked
Confirm the exception-table entry for clear_user_rep_good points at the actual rep movsb instruction rather than the preceding register move; test by forcing a user-page fault during the affected clear path and verifying -EFAULT is returned instead of an oops.
Typical attack path
- Obtain local shell on the target system
- Trigger a readv/preadv2 or equivalent that exercises ext4 direct I/O and iov_iter_zero
- Force a page fault on the target user buffer during the rep movsb
- Observe kernel oops and potential system instability or crash
How to detect it
Search kernel logs for the exact oops pattern containing clear_user_rep_good+0x1c and the call trace through iov_iter_zero and ext4_file_read_iter; correlate with preadv2 or readv syscalls from untrusted local processes.
- BUG: unable to handle page fault for address
- clear_user_rep_good+0x1c/0x30
- iov_iter_zero
- __iomap_dio_rw
- ext4_file_read_iter
What your security team should do
- Prioritize patching kernels that still contain clear_user_rep_good within the next maintenance window
- Monitor for local denial-of-service attempts that produce the described oops signature
- After upgrade, re-run I/O stress tests that exercise direct-io and iov_iter paths to validate stability
The record
In the Linux kernel, the following vulnerability has been resolved: x86: fix clear_user_rep_good() exception handling annotation This code no longer exists in mainline, because it was removed in commit d2c95f9d6802 ("x86: don't use REP_GOOD or ERMS for user memory clearing") upstream. However, rather than backport the full range of x86 memory clearing and copying cleanups, fix the exception table annotation placement for the final 'rep movsb' in clear_user_rep_good(): rather than pointing at the actual instruction that did the user space access, it pointed to the register move just before it. That made sense from a code flow standpoint, but not from an actual usage standpoint: it means that if user access takes an exception, the exception handler won't actually find the instruction in the exception tables. As a result, rather than fixing it up and returning -EFAULT, it would then turn it into a kernel oops report instead, something like: BUG: unable to handle page fault for address: 0000000020081000 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page ... RIP: 0010:clear_user_rep_good+0x1c/0x30 arch/x86/lib/clear_page_64.S:147 ... Call Trace: __clear_user arch/x86/include/asm/uaccess_64.h:103 [inline] clear_user arch/x86/include/asm/uaccess_64.h:124 [inline] iov_iter_zero+0x709/0x1290 lib/iov_iter.c:800 iomap_dio_hole_iter fs/iomap/direct-io.c:389 [inline] iomap_dio_iter fs/iomap/direct-io.c:440 [inline] __iomap_dio_rw+0xe3d/0x1cd0 fs/iomap/direct-io.c:601 iomap_dio_rw+0x40/0xa0 fs/iomap/direct-io.c:689 ext4_dio_read_iter fs/ext4/file.c:94 [inline] ext4_file_read_iter+0x4be/0x690 fs/ext4/file.c:145 call_read_iter include/linux/fs.h:2183 [inline] do_iter_readv_writev+0x2e0/0x3b0 fs/read_write.c:733 do_iter_read+0x2f2/0x750 fs/read_write.c:796 vfs_readv+0xe5/0x150 fs/read_write.c:916 do_preadv+0x1b6/0x270 fs/read_write.c:1008 __do_sys_preadv2 fs/read_write.c:1070 [inline] __se_sys_preadv2 fs/read_write.c:1061 [inline] __x64_sys_preadv2+0xef/0x150 fs/read_write.c:1061 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd which then looks like a filesystem bug rather than the incorrect exception annotation that it is. [ The alternative to this one-liner fix is to take the upstream series that cleans this all up: 68674f94ffc9 ("x86: don't use REP_GOOD or ERMS for small memory copies") 20f3337d350c ("x86: don't use REP_GOOD or ERMS for small memory clearing") adfcf4231b8c ("x86: don't use REP_GOOD or ERMS for user memory copies") * d2c95f9d6802 ("x86: don't use REP_GOOD or ERMS for user memory clearing") 3639a535587d ("x86: move stac/clac from user copy routines into callers") 577e6a7fd50d ("x86: inline the 'rep movs' in user copies for the FSRM case") 8c9b6a88b7e2 ("x86: improve on the non-rep 'clear_user' function") 427fda2c8a49 ("x86: improve on the non-rep 'copy_user' function") * e046fe5a36a9 ("x86: set FSRS automatically on AMD CPUs that have FSRM") e1f2750edc4a ("x86: remove 'zerorest' argument from __copy_user_nocache()") 034ff37d3407 ("x86: rewrite '__copy_user_nocache' function") with either the whole series or at a minimum the two marked commits being needed to fix this issue ]
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Linux | Kernel | 6.1.0 | 6.1.29 |
Related vulnerabilities
- CVE-2026-23226 In the Linux kernel, the following vulnerability has been resolved: ksmbd: add chann_lock… Also affects Kernel
- CVE-2026-23225 In the Linux kernel, the following vulnerability has been resolved: sched/mmcid: Don't… Also affects Kernel
- CVE-2026-23230 In the Linux kernel, the following vulnerability has been resolved: smb: client: split… Also affects Kernel
- CVE-2026-23224 In the Linux kernel, the following vulnerability has been resolved: erofs: fix UAF issue… Also affects Kernel
- CVE-2026-23227 In the Linux kernel, the following vulnerability has been resolved: drm/exynos: vidi: use… Also affects Kernel
- CVE-2026-23223 In the Linux kernel, the following vulnerability has been resolved: xfs: fix UAF in… Also affects Kernel
- CVE-2026-23228 In the Linux kernel, the following vulnerability has been resolved: smb: server: fix leak… Also affects Kernel
- CVE-2026-23229 In the Linux kernel, the following vulnerability has been resolved: crypto: virtio - Add… Also affects Kernel