← Back to team overview

kernel-packages team mailing list archive

[Bug 1588056] Re: cgroupfs mounts can hang

 

** Description changed:

+ SRU Justification
+ 
+ Impact: In some circumstances mount(2) of cgroup can endlessly return
+ ERESTARTNOINTR, causing mount(8) to endlessly spin in loop.
+ 
+ Fix: Drop sauce patches for making cgroupfs work with s_user_ns in favor
+ of patches from linux-next which do not have this problem.
+ 
+ Regression potential: The changes go beyond simply fixing the bug in
+ order to sync up with upstream, but the upstream patches are by and
+ large functionally equivalent. One consequence is that the bpf fs will
+ no longer be mountable in a user namespace, but this fs is new in 4.4,
+ unused as far as I can tell, and broken for user namespace mounts
+ anyway.
+ 
+ ---
+ 
  Consider the following,
  
  root@dev:/tmp# mkdir foo
  root@dev:/tmp# mount -t cgroup -o none,name=foo none foo
  root@dev:/tmp# mkdir -p foo/bad
  root@dev:/tmp# umount -l foo
  root@dev:/tmp# mount -t cgroup -o none,name=foo none foo # hangs forever
  ^C
  root@dev:/tmp# uname -a
  Linux dev 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  
  When I strace the mount task, I get a whole bunch of,
  
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  
  Which I think means that we're looping on,
  
  https://github.com/torvalds/linux/blob/master/kernel/cgroup.c#L2137

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1588056

Title:
  cgroupfs mounts can hang

Status in linux package in Ubuntu:
  Confirmed
Status in linux source package in Xenial:
  In Progress

Bug description:
  SRU Justification

  Impact: In some circumstances mount(2) of cgroup can endlessly return
  ERESTARTNOINTR, causing mount(8) to endlessly spin in loop.

  Fix: Drop sauce patches for making cgroupfs work with s_user_ns in
  favor of patches from linux-next which do not have this problem.

  Regression potential: The changes go beyond simply fixing the bug in
  order to sync up with upstream, but the upstream patches are by and
  large functionally equivalent. One consequence is that the bpf fs will
  no longer be mountable in a user namespace, but this fs is new in 4.4,
  unused as far as I can tell, and broken for user namespace mounts
  anyway.

  ---

  Consider the following,

  root@dev:/tmp# mkdir foo
  root@dev:/tmp# mount -t cgroup -o none,name=foo none foo
  root@dev:/tmp# mkdir -p foo/bad
  root@dev:/tmp# umount -l foo
  root@dev:/tmp# mount -t cgroup -o none,name=foo none foo # hangs forever
  ^C
  root@dev:/tmp# uname -a
  Linux dev 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

  When I strace the mount task, I get a whole bunch of,

  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)
  mount("none", "/tmp/foo", "cgroup", MS_MGC_VAL, "none,name=foo") = ? ERESTARTNOINTR (To be restarted)

  Which I think means that we're looping on,

  https://github.com/torvalds/linux/blob/master/kernel/cgroup.c#L2137

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1588056/+subscriptions


References