Description
In the Linux kernel, the following vulnerability has been resolved: mm: shrinker: fix NULL pointer dereference in debugfs shrinker_debugfs_add() creates both "count" and "scan" debugfs files unconditionally. That assumes every shrinker implements both count_objects() and scan_objects(), which is not guaranteed. For example, the xen-backend shrinker sets count_objects() but leaves scan_objects() NULL, so writing to its scan file calls through a NULL function pointer and panics the kernel: BUG: kernel NULL pointer dereference, address: 0000000000000000 RIP: 0010:0x0 Code: Unable to access opcode bytes at 0xffffffffffffffd6. Call Trace: <TASK> shrinker_debugfs_scan_write+0x12e/0x270 full_proxy_write+0x5f/0x90 vfs_write+0xde/0x420 ? filp_flush+0x75/0x90 ? filp_close+0x1d/0x30 ? do_dup2+0xb8/0x120 ksys_write+0x68/0xf0 ? filp_flush+0x75/0x90 do_syscall_64+0xb3/0x5b0 entry_SYSCALL_64_after_hwframe+0x76/0x7e The count path has the same issue in principle if a shrinker omits count_objects(). To fix it, only create "count" and "scan" debugfs files when the corresponding callbacks are present.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
bbf535fd6f06b94b9d07ed6f09397a936d4a58d8 to < ebb45c2648b1f60715fd283700f651e05e431231affectedbbf535fd6f06b94b9d07ed6f09397a936d4a58d8 to < 09d2407985b8ce3e831f9d4310fe7ac06a6b3ae9affectedbbf535fd6f06b94b9d07ed6f09397a936d4a58d8 to < 36f8534f461222291a74156ab91f3ba9f09b6f93affectedbbf535fd6f06b94b9d07ed6f09397a936d4a58d8 to < 006467ab932698612398f853344a7405164541f4affectedbbf535fd6f06b94b9d07ed6f09397a936d4a58d8 to < b9beed2322f3538b0d2d53307062da4102b8d8d8affectedbbf535fd6f06b94b9d07ed6f09397a936d4a58d8 to < e30453c61e185e914fde83c650e268067b140218affected
Linux Linux
Default version status: affected
6.0affected0 to < 6.0unaffected6.1.178 to ≤ 6.1.*unaffected6.6.145 to ≤ 6.6.*unaffected6.12.96 to ≤ 6.12.*unaffected6.18.39 to ≤ 6.18.*unaffected7.1.4 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/ebb45c2648b1f60715fd283700f651e05e431231 ↗
- https://git.kernel.org/stable/c/09d2407985b8ce3e831f9d4310fe7ac06a6b3ae9 ↗
- https://git.kernel.org/stable/c/36f8534f461222291a74156ab91f3ba9f09b6f93 ↗
- https://git.kernel.org/stable/c/006467ab932698612398f853344a7405164541f4 ↗
- https://git.kernel.org/stable/c/b9beed2322f3538b0d2d53307062da4102b8d8d8 ↗
- https://git.kernel.org/stable/c/e30453c61e185e914fde83c650e268067b140218 ↗