summaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_event_perf.c
diff options
context:
space:
mode:
authorChuang Wang <nashuiliang@gmail.com>2022-11-21 16:08:31 +0800
committerSteven Rostedt (Google) <rostedt@goodmis.org>2022-11-23 19:08:31 -0500
commit9430cd62b6ccdf1f06915cc06561f0e364809604 (patch)
treeefa672b6262d43e9d4cb4caeb0994273c6356404 /kernel/trace/trace_event_perf.c
parent67543cd6b8eee53959e624b9ce420ca4d47be0c8 (diff)
downloadlinux-stable-9430cd62b6ccdf1f06915cc06561f0e364809604.tar.gz
linux-stable-9430cd62b6ccdf1f06915cc06561f0e364809604.tar.bz2
linux-stable-9430cd62b6ccdf1f06915cc06561f0e364809604.zip
tracing/perf: Use strndup_user instead of kzalloc/strncpy_from_user
This patch uses strndup_user instead of kzalloc + strncpy_from_user, which makes the code more concise. Link: https://lkml.kernel.org/r/20221121080831.707409-1-nashuiliang@gmail.com Signed-off-by: Chuang Wang <nashuiliang@gmail.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_event_perf.c')
-rw-r--r--kernel/trace/trace_event_perf.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index 61e3a2620fa3..05e791241812 100644
--- a/kernel/trace/trace_event_perf.c
+++ b/kernel/trace/trace_event_perf.c
@@ -251,16 +251,12 @@ int perf_kprobe_init(struct perf_event *p_event, bool is_retprobe)
struct trace_event_call *tp_event;
if (p_event->attr.kprobe_func) {
- func = kzalloc(KSYM_NAME_LEN, GFP_KERNEL);
- if (!func)
- return -ENOMEM;
- ret = strncpy_from_user(
- func, u64_to_user_ptr(p_event->attr.kprobe_func),
- KSYM_NAME_LEN);
- if (ret == KSYM_NAME_LEN)
- ret = -E2BIG;
- if (ret < 0)
- goto out;
+ func = strndup_user(u64_to_user_ptr(p_event->attr.kprobe_func),
+ KSYM_NAME_LEN);
+ if (IS_ERR(func)) {
+ ret = PTR_ERR(func);
+ return (ret == -EINVAL) ? -E2BIG : ret;
+ }
if (func[0] == '\0') {
kfree(func);