summaryrefslogtreecommitdiffstats
path: root/kernel/events
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/events')
-rw-r--r--kernel/events/core.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 09866a330af8..1de0d709f69f 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -7081,20 +7081,26 @@ SYSCALL_DEFINE5(perf_event_open,
7081 } 7081 }
7082 } 7082 }
7083 7083
7084 if (task && group_leader &&
7085 group_leader->attr.inherit != attr.inherit) {
7086 err = -EINVAL;
7087 goto err_task;
7088 }
7089
7084 get_online_cpus(); 7090 get_online_cpus();
7085 7091
7086 event = perf_event_alloc(&attr, cpu, task, group_leader, NULL, 7092 event = perf_event_alloc(&attr, cpu, task, group_leader, NULL,
7087 NULL, NULL); 7093 NULL, NULL);
7088 if (IS_ERR(event)) { 7094 if (IS_ERR(event)) {
7089 err = PTR_ERR(event); 7095 err = PTR_ERR(event);
7090 goto err_task; 7096 goto err_cpus;
7091 } 7097 }
7092 7098
7093 if (flags & PERF_FLAG_PID_CGROUP) { 7099 if (flags & PERF_FLAG_PID_CGROUP) {
7094 err = perf_cgroup_connect(pid, event, &attr, group_leader); 7100 err = perf_cgroup_connect(pid, event, &attr, group_leader);
7095 if (err) { 7101 if (err) {
7096 __free_event(event); 7102 __free_event(event);
7097 goto err_task; 7103 goto err_cpus;
7098 } 7104 }
7099 } 7105 }
7100 7106
@@ -7256,8 +7262,9 @@ err_context:
7256 put_ctx(ctx); 7262 put_ctx(ctx);
7257err_alloc: 7263err_alloc:
7258 free_event(event); 7264 free_event(event);
7259err_task: 7265err_cpus:
7260 put_online_cpus(); 7266 put_online_cpus();
7267err_task:
7261 if (task) 7268 if (task)
7262 put_task_struct(task); 7269 put_task_struct(task);
7263err_group_fd: 7270err_group_fd: