diff options
Diffstat (limited to 'kernel/events/core.c')
| -rw-r--r-- | kernel/events/core.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index f85c0154b33..d7d71d6ec97 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -253,9 +253,9 @@ perf_cgroup_match(struct perf_event *event)  	return !event->cgrp || event->cgrp == cpuctx->cgrp;  } -static inline void perf_get_cgroup(struct perf_event *event) +static inline bool perf_tryget_cgroup(struct perf_event *event)  { -	css_get(&event->cgrp->css); +	return css_tryget(&event->cgrp->css);  }  static inline void perf_put_cgroup(struct perf_event *event) @@ -484,7 +484,11 @@ static inline int perf_cgroup_connect(int fd, struct perf_event *event,  	event->cgrp = cgrp;  	/* must be done before we fput() the file */ -	perf_get_cgroup(event); +	if (!perf_tryget_cgroup(event)) { +		event->cgrp = NULL; +		ret = -ENOENT; +		goto out; +	}  	/*  	 * all events in a group must monitor  |