|
|
@@ -298,15 +298,13 @@ int perf_uprobe_init(struct perf_event *p_event, bool is_retprobe)
|
|
|
|
|
|
if (!p_event->attr.uprobe_path)
|
|
|
return -EINVAL;
|
|
|
- path = kzalloc(PATH_MAX, GFP_KERNEL);
|
|
|
- if (!path)
|
|
|
- return -ENOMEM;
|
|
|
- ret = strncpy_from_user(
|
|
|
- path, u64_to_user_ptr(p_event->attr.uprobe_path), PATH_MAX);
|
|
|
- if (ret == PATH_MAX)
|
|
|
- return -E2BIG;
|
|
|
- if (ret < 0)
|
|
|
- goto out;
|
|
|
+
|
|
|
+ path = strndup_user(u64_to_user_ptr(p_event->attr.uprobe_path),
|
|
|
+ PATH_MAX);
|
|
|
+ if (IS_ERR(path)) {
|
|
|
+ ret = PTR_ERR(path);
|
|
|
+ return (ret == -EINVAL) ? -E2BIG : ret;
|
|
|
+ }
|
|
|
if (path[0] == '\0') {
|
|
|
ret = -EINVAL;
|
|
|
goto out;
|