diff options
| -rw-r--r-- | kernel/cgroup.c | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index feda81487be..b5c64327e71 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -3856,6 +3856,7 @@ static int cgroup_write_event_control(struct cgroup *cgrp, struct cftype *cft,  				      const char *buffer)  {  	struct cgroup_event *event = NULL; +	struct cgroup *cgrp_cfile;  	unsigned int efd, cfd;  	struct file *efile = NULL;  	struct file *cfile = NULL; @@ -3911,6 +3912,16 @@ static int cgroup_write_event_control(struct cgroup *cgrp, struct cftype *cft,  		goto fail;  	} +	/* +	 * The file to be monitored must be in the same cgroup as +	 * cgroup.event_control is. +	 */ +	cgrp_cfile = __d_cgrp(cfile->f_dentry->d_parent); +	if (cgrp_cfile != cgrp) { +		ret = -EINVAL; +		goto fail; +	} +  	if (!event->cft->register_event || !event->cft->unregister_event) {  		ret = -EINVAL;  		goto fail;  |