|
@@ -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;
|