From: Greg Kroah-Hartman Date: Fri, 27 Sep 2013 23:07:22 +0000 (-0700) Subject: 3.4-stable patches X-Git-Tag: v3.0.98~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8c61a3364c57b035673cba2e87534c57f63f96d6;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: cgroup-fail-if-monitored-file-and-event_control-are-in-different-cgroup.patch --- diff --git a/queue-3.4/cgroup-fail-if-monitored-file-and-event_control-are-in-different-cgroup.patch b/queue-3.4/cgroup-fail-if-monitored-file-and-event_control-are-in-different-cgroup.patch new file mode 100644 index 00000000000..330836555dc --- /dev/null +++ b/queue-3.4/cgroup-fail-if-monitored-file-and-event_control-are-in-different-cgroup.patch @@ -0,0 +1,54 @@ +From f169007b2773f285e098cb84c74aac0154d65ff7 Mon Sep 17 00:00:00 2001 +From: Li Zefan +Date: Mon, 18 Feb 2013 14:13:35 +0800 +Subject: cgroup: fail if monitored file and event_control are in different cgroup + +From: Li Zefan + +commit f169007b2773f285e098cb84c74aac0154d65ff7 upstream. + +If we pass fd of memory.usage_in_bytes of cgroup A to cgroup.event_control +of cgroup B, then we won't get memory usage notification from A but B! + +What's worse, if A and B are in different mount hierarchy, we'll end up +accessing NULL pointer! + +Disallow this kind of invalid usage. + +Signed-off-by: Li Zefan +Acked-by: Kirill A. Shutemov +Signed-off-by: Tejun Heo +Cc: Weng Meiling +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/cgroup.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +--- a/kernel/cgroup.c ++++ b/kernel/cgroup.c +@@ -3476,6 +3476,7 @@ static int cgroup_write_event_control(st + const char *buffer) + { + struct cgroup_event *event = NULL; ++ struct cgroup *cgrp_cfile; + unsigned int efd, cfd; + struct file *efile = NULL; + struct file *cfile = NULL; +@@ -3531,6 +3532,16 @@ static int cgroup_write_event_control(st + 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; diff --git a/queue-3.4/series b/queue-3.4/series index a43cfb18184..a60c15bc1ad 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -13,3 +13,4 @@ drm-radeon-update-line-buffer-allocation-for-dce6.patch drm-radeon-fix-resume-on-some-rs4xx-boards-v2.patch drm-radeon-fix-handling-of-variable-sized-arrays-for-router-objects.patch drm-radeon-atom-workaround-vbios-bug-in-transmitter-table-on-rs880-v2.patch +cgroup-fail-if-monitored-file-and-event_control-are-in-different-cgroup.patch