CVE-2023-54132

Summary

In the Linux kernel, the following vulnerability has been resolved:

erofs: stop parsing non-compact HEAD index if clusterofs is invalid

Syzbot generated a crafted image [1] with a non-compact HEAD index of clusterofs 33024 while valid numbers should be 0 ~ lclustersize-1, which causes the following unexpected behavior as below:

BUG: unable to handle page fault for address: fffff52101a3fff9 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 23ffed067 P4D 23ffed067 PUD 0 Oops: 0000 [#1] PREEMPT SMP KASAN CPU: 1 PID: 4398 Comm: kworker/u5:1 Not tainted 6.3.0-rc6-syzkaller-g09a9639e56c0 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/30/2023 Workqueue: erofs_worker z_erofs_decompressqueue_work RIP: 0010:z_erofs_decompress_queue+0xb7e/0x2b40 … Call Trace: <TASK> z_erofs_decompressqueue_work+0x99/0xe0 process_one_work+0x8f6/0x1170 worker_thread+0xa63/0x1210 kthread+0x270/0x300 ret_from_fork+0x1f/0x30

Note that normal images or images using compact indexes are not impacted. Let's fix this now.

[1] https://lore.kernel.org/r/000000000000ec75b005ee97fbaa@google.com

Affected Software

VendorProductVersion RangeStatus
LinuxLinux02827e1796b33f1794966f5c3101f8da2dfa9c1d < 880c79bdb002b9d5b6940e52c2ad3829c2178207affected
LinuxLinux02827e1796b33f1794966f5c3101f8da2dfa9c1d < 7a4579cd6e4936de107c82499c3c9ee11b63401eaffected
LinuxLinux02827e1796b33f1794966f5c3101f8da2dfa9c1d < 060fecf1114ff9fcfe87953fe8c4fc5048777160affected
LinuxLinux02827e1796b33f1794966f5c3101f8da2dfa9c1d < 7ee7a86e28ce9ead7112286c388df8d254c373c6affected
LinuxLinux02827e1796b33f1794966f5c3101f8da2dfa9c1d < f01b2894928affa3339d355608713cf3db8360b8affected
LinuxLinux02827e1796b33f1794966f5c3101f8da2dfa9c1d < 96a845419b3722869f09883319de4d55c44d9aefaffected
LinuxLinux02827e1796b33f1794966f5c3101f8da2dfa9c1d < cc4efd3dd2ac9f89143e5d881609747ecff04164affected
LinuxLinux4.19affected
LinuxLinux0 < 4.19unaffected
LinuxLinux5.4.243 <= 5.4.*unaffected
LinuxLinux5.10.180 <= 5.10.*unaffected
LinuxLinux5.15.111 <= 5.15.*unaffected
LinuxLinux6.1.28 <= 6.1.*unaffected
LinuxLinux6.2.15 <= 6.2.*unaffected
LinuxLinux6.3.2 <= 6.3.*unaffected
LinuxLinux6.4 <= *unaffected

Weaknesses

References