Commit 4528fd0595847c2078b59f24800e751c2d6b7e41
Committed by
Linus Torvalds
1 parent
ef2b9b0545
Exists in
master
and in
4 other branches
cgroups: fix to return errno in a failure path
In cgroup_create(), if alloc_css_id() returns failure, the errno is not propagated to userspace, so mkdir will fail silently. To trigger this bug, we mount blkio (or memory subsystem), and create more then 65534 cgroups. (The number of cgroups is limited to 65535 if a subsystem has use_id == 1) # mount -t cgroup -o blkio xxx /mnt # for ((i = 0; i < 65534; i++)); do mkdir /mnt/$i; done # mkdir /mnt/65534 (should return ENOSPC) # Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Acked-by: Serge Hallyn <serue@us.ibm.com> Acked-by: Paul Menage <menage@google.com> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 5 additions and 2 deletions Side-by-side Diff
kernel/cgroup.c
... | ... | @@ -2936,14 +2936,17 @@ |
2936 | 2936 | |
2937 | 2937 | for_each_subsys(root, ss) { |
2938 | 2938 | struct cgroup_subsys_state *css = ss->create(ss, cgrp); |
2939 | + | |
2939 | 2940 | if (IS_ERR(css)) { |
2940 | 2941 | err = PTR_ERR(css); |
2941 | 2942 | goto err_destroy; |
2942 | 2943 | } |
2943 | 2944 | init_cgroup_css(css, ss, cgrp); |
2944 | - if (ss->use_id) | |
2945 | - if (alloc_css_id(ss, parent, cgrp)) | |
2945 | + if (ss->use_id) { | |
2946 | + err = alloc_css_id(ss, parent, cgrp); | |
2947 | + if (err) | |
2946 | 2948 | goto err_destroy; |
2949 | + } | |
2947 | 2950 | /* At error, ->destroy() callback has to free assigned ID. */ |
2948 | 2951 | } |
2949 | 2952 |