In the Linux kernel, the following vulnerability has been resolved:
ftrace: Fix invalid address access in lookup_rec() when index is 0
KASAN reported follow problem:
BUG: KASAN: use-after-free in lookup_rec Read of size 8 at addr ffff000199270ff0 by task modprobe CPU: 2 Comm: modprobe Call trace: kasan_report __asan_load8 lookup_rec ftrace_location arch_check_ftrace_location check_kprobe_address_safe register_kprobe
When checking pg->records[pg->index - 1].ip in lookup_rec(), it can get a pg which is newly added to ftrace_pages_start in ftrace_process_locs(). Before the first pg->index++, index is 0 and accessing pg->records[-1].ip will cause this problem.
Don't check the ip when pg->index is 0.
| Software | From | Fixed in |
|---|---|---|
| linux / linux_kernel | 3.5 | 4.14.311 |
| linux / linux_kernel | 4.15 | 4.19.279 |
| linux / linux_kernel | 4.20 | 5.4.238 |
| linux / linux_kernel | 5.5 | 5.10.176 |
| linux / linux_kernel | 5.11 | 5.15.104 |
| linux / linux_kernel | 5.16 | 6.1.21 |
| linux / linux_kernel | 6.2 | 6.2.8 |
| linux / linux_kernel | 6.3-rc1 | 6.3-rc1.x |
| linux / linux_kernel | 6.3-rc2 | 6.3-rc2.x |