diff options
| -rw-r--r-- | kernel/perf_event.c | 15 | 
1 files changed, 7 insertions, 8 deletions
| diff --git a/kernel/perf_event.c b/kernel/perf_event.c index 86f394e15d53..ce95617f5d2c 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c @@ -5550,17 +5550,11 @@ SYSCALL_DEFINE5(perf_event_open,  	if (event_fd < 0)  		return event_fd; -	event = perf_event_alloc(&attr, cpu, group_leader, NULL, NULL); -	if (IS_ERR(event)) { -		err = PTR_ERR(event); -		goto err_fd; -	} -  	if (group_fd != -1) {  		group_leader = perf_fget_light(group_fd, &fput_needed);  		if (IS_ERR(group_leader)) {  			err = PTR_ERR(group_leader); -			goto err_alloc; +			goto err_fd;  		}  		group_file = group_leader->filp;  		if (flags & PERF_FLAG_FD_OUTPUT) @@ -5569,6 +5563,12 @@ SYSCALL_DEFINE5(perf_event_open,  			group_leader = NULL;  	} +	event = perf_event_alloc(&attr, cpu, group_leader, NULL, NULL); +	if (IS_ERR(event)) { +		err = PTR_ERR(event); +		goto err_fd; +	} +  	/*  	 * Special case software events and allow them to be part of  	 * any hardware group. @@ -5653,7 +5653,6 @@ err_context:  	put_ctx(ctx);  err_group_fd:  	fput_light(group_file, fput_needed); -err_alloc:  	free_event(event);  err_fd:  	put_unused_fd(event_fd); | 
