Skip to content

Commit 19ba6c8

Browse files
Xiu Jianfengrostedt
Xiu Jianfeng
authored andcommitted
ftrace: Fix null pointer dereference in ftrace_add_mod()
The @ftrace_mod is allocated by kzalloc(), so both the members {prev,next} of @ftrace_mode->list are NULL, it's not a valid state to call list_del(). If kstrdup() for @ftrace_mod->{func|module} fails, it goes to @out_free tag and calls free_ftrace_mod() to destroy @ftrace_mod, then list_del() will write prev->next and next->prev, where null pointer dereference happens. BUG: kernel NULL pointer dereference, address: 0000000000000008 Oops: 0002 [#1] PREEMPT SMP NOPTI Call Trace: <TASK> ftrace_mod_callback+0x20d/0x220 ? do_filp_open+0xd9/0x140 ftrace_process_regex.isra.51+0xbf/0x130 ftrace_regex_write.isra.52.part.53+0x6e/0x90 vfs_write+0xee/0x3a0 ? __audit_filter_op+0xb1/0x100 ? auditd_test_task+0x38/0x50 ksys_write+0xa5/0xe0 do_syscall_64+0x3a/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd Kernel panic - not syncing: Fatal exception So call INIT_LIST_HEAD() to initialize the list member to fix this issue. Link: https://lkml.kernel.org/r/[email protected] Cc: [email protected] Fixes: 673feb9 ("ftrace: Add :mod: caching infrastructure to trace_array") Signed-off-by: Xiu Jianfeng <[email protected]> Signed-off-by: Steven Rostedt (Google) <[email protected]>
1 parent 56f4ca0 commit 19ba6c8

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

kernel/trace/ftrace.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,6 +1289,7 @@ static int ftrace_add_mod(struct trace_array *tr,
12891289
if (!ftrace_mod)
12901290
return -ENOMEM;
12911291

1292+
INIT_LIST_HEAD(&ftrace_mod->list);
12921293
ftrace_mod->func = kstrdup(func, GFP_KERNEL);
12931294
ftrace_mod->module = kstrdup(module, GFP_KERNEL);
12941295
ftrace_mod->enable = enable;

0 commit comments

Comments
 (0)