Commit 6a909ea
tracing: Limit access to parser->buffer when trace_get_user failed
When the length of the string written to set_ftrace_filter exceeds
FTRACE_BUFF_MAX, the following KASAN alarm will be triggered:
BUG: KASAN: slab-out-of-bounds in strsep+0x18c/0x1b0
Read of size 1 at addr ffff0000d00bd5ba by task ash/165
CPU: 1 UID: 0 PID: 165 Comm: ash Not tainted 6.16.0-g6bcdbd62bd56-dirty
Hardware name: linux,dummy-virt (DT)
Call trace:
show_stack+0x34/0x50 (C)
dump_stack_lvl+0xa0/0x158
print_address_description.constprop.0+0x88/0x398
print_report+0xb0/0x280
kasan_report+0xa4/0xf0
__asan_report_load1_noabort+0x20/0x30
strsep+0x18c/0x1b0
ftrace_process_regex.isra.0+0x100/0x2d8
ftrace_regex_release+0x484/0x618
__fput+0x364/0xa58
____fput+0x28/0x40
task_work_run+0x154/0x278
do_notify_resume+0x1f0/0x220
el0_svc+0xec/0xf0
el0t_64_sync_handler+0xa0/0xe8
el0t_64_sync+0x1ac/0x1b0
The reason is that trace_get_user will fail when processing a string
longer than FTRACE_BUFF_MAX, but not set the end of parser->buffer to 0.
Then an OOB access will be triggered in ftrace_regex_release->
ftrace_process_regex->strsep->strpbrk. We can solve this problem by
limiting access to parser->buffer when trace_get_user failed.
Cc: [email protected]
Link: https://lore.kernel.org/[email protected]
Fixes: 8c9af47 ("ftrace: Handle commands when closing set_ftrace_filter file")
Signed-off-by: Pu Lehui <[email protected]>
Signed-off-by: Steven Rostedt (Google) <[email protected]>1 parent 7b128f1 commit 6a909ea
2 files changed
+19
-7
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1816 | 1816 | | |
1817 | 1817 | | |
1818 | 1818 | | |
1819 | | - | |
| 1819 | + | |
1820 | 1820 | | |
1821 | 1821 | | |
1822 | 1822 | | |
| |||
1830 | 1830 | | |
1831 | 1831 | | |
1832 | 1832 | | |
1833 | | - | |
| 1833 | + | |
1834 | 1834 | | |
1835 | 1835 | | |
1836 | 1836 | | |
| |||
1848 | 1848 | | |
1849 | 1849 | | |
1850 | 1850 | | |
1851 | | - | |
1852 | | - | |
| 1851 | + | |
| 1852 | + | |
| 1853 | + | |
| 1854 | + | |
1853 | 1855 | | |
1854 | 1856 | | |
1855 | 1857 | | |
1856 | | - | |
| 1858 | + | |
1857 | 1859 | | |
1858 | 1860 | | |
1859 | 1861 | | |
| |||
1868 | 1870 | | |
1869 | 1871 | | |
1870 | 1872 | | |
1871 | | - | |
| 1873 | + | |
| 1874 | + | |
1872 | 1875 | | |
1873 | 1876 | | |
1874 | 1877 | | |
1875 | 1878 | | |
| 1879 | + | |
| 1880 | + | |
| 1881 | + | |
1876 | 1882 | | |
1877 | 1883 | | |
1878 | 1884 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1292 | 1292 | | |
1293 | 1293 | | |
1294 | 1294 | | |
| 1295 | + | |
1295 | 1296 | | |
1296 | 1297 | | |
1297 | 1298 | | |
1298 | 1299 | | |
1299 | 1300 | | |
1300 | 1301 | | |
1301 | 1302 | | |
1302 | | - | |
| 1303 | + | |
1303 | 1304 | | |
1304 | 1305 | | |
1305 | 1306 | | |
| |||
1313 | 1314 | | |
1314 | 1315 | | |
1315 | 1316 | | |
| 1317 | + | |
| 1318 | + | |
| 1319 | + | |
| 1320 | + | |
| 1321 | + | |
1316 | 1322 | | |
1317 | 1323 | | |
1318 | 1324 | | |
| |||
0 commit comments