Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Li Zefan and committed by
Linus Torvalds
4528fd05 ef2b9b05

+5 -2
+5 -2
kernel/cgroup.c
··· 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