[Bug 1795764] Re: systemd: core: Fix edge case when processing /proc/self/mountinfo

Eric Desrochers eric.desrochers at canonical.com
Tue Dec 11 23:16:52 UTC 2018


** Description changed:

+ [Impact]
+ 
+ kubernetes loaded inactive dead transient mount points grows
+ https://github.com/kubernetes/kubernetes/issues/57345
+ 
+ [Test Case]
+ 
+ # cd /tmp
+ # mkdir -p bind-test/abc 
+ # mount --bind bind-test bind-test 
+ # mount -t tmpfs tmpfs bind-test/abc 
+ # umount bind-test/abc 
+ # systemctl list-units --all | grep bind-test 
+ root-bind\x2dtest-abc.mount loaded inactive dead /root/bind-test/abc 
+ root-bind\x2dtest.mount loaded active mounted /root/bind-test
+ 
+ [Regression Potential]
+ 
+ This is a adapted version of 2 upstream fixes as the original upstream
+ commit has been made on top on 2 functions mount_setup_new_unit() &
+ mount_setup_existing_unit() that not yet exist systemd 229. It is easily
+ adaptable because the current function mount_setup_unit() is dealing
+ with both of at the moment instead of being individually separate in two
+ distinct function.
+ 
+ It is an adaptation of commits : 
+ 65d36b495
+ 03b8cfede
+ 
+ This patch changes mount_setup_unit() to prevent the just_mounted mount
+ setup flag from being overwritten if it is set to true. This will allow
+ all mount units created from /proc/self/mountinfo entries to be
+ initialised properly.
+ 
+ 
+ [Other Info]
+  
+ One line fix in https://github.com/systemd/systemd/pull/7811/files
+ 
+ Referenced issue: https://github.com/systemd/systemd/issues/7798
+ 
+ Related kubernetes issue:
+ https://github.com/kubernetes/kubernetes/issues/57345
+ 
+ systemd v237 has this fix, but we'd like to have it fixed in 16.04.
+ 
+ 
+ It only affect systemd for Xenial, later release already has the fix:
+ 
+ $ git describe --contains 65d36b495
+ v237~140
+ 
+ ==>  systemd | 229-4ubuntu21.4  | xenial-updates
+      systemd | 237-3ubuntu10.3  | bionic-updates
+      systemd | 239-7ubuntu9     | cosmic
+ 
+ [Original Description]
+ 
  From the PR:
  Currently, if there are two /proc/self/mountinfo entries with the same
  mount point path, the mount setup flags computed for the second of
  these two entries will overwrite the mount setup flags computed for
  the first of these two entries. This is the root cause of issue #7798.
  This patch changes mount_setup_existing_unit to prevent the
  just_mounted mount setup flag from being overwritten if it is set to
  true. This will allow all mount units created from /proc/self/mountinfo
  entries to be initialized properly.
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345
- 
- systemd v237 has this fix, but we'd like to have it fixed in 16.04.
- 
- [Other Informations]
- 
- It only affect systemd for Xenial, later release already has the fix:
- 
- $ git describe --contains 65d36b495
- v237~140
- 
- ==>   systemd | 229-4ubuntu21.4  | xenial-updates
-      systemd | 237-3ubuntu10.3  | bionic-updates
-      systemd | 239-7ubuntu9     | cosmic

** Description changed:

  [Impact]
  
  kubernetes loaded inactive dead transient mount points grows
  https://github.com/kubernetes/kubernetes/issues/57345
  
  [Test Case]
  
  # cd /tmp
- # mkdir -p bind-test/abc 
- # mount --bind bind-test bind-test 
- # mount -t tmpfs tmpfs bind-test/abc 
- # umount bind-test/abc 
- # systemctl list-units --all | grep bind-test 
- root-bind\x2dtest-abc.mount loaded inactive dead /root/bind-test/abc 
+ # mkdir -p bind-test/abc
+ # mount --bind bind-test bind-test
+ # mount -t tmpfs tmpfs bind-test/abc
+ # umount bind-test/abc
+ # systemctl list-units --all | grep bind-test
+ root-bind\x2dtest-abc.mount loaded inactive dead /root/bind-test/abc
  root-bind\x2dtest.mount loaded active mounted /root/bind-test
+ 
+ Expected outcome (w/ the fix) :
+ 
+ # cd /tmp
+ # mkdir -p bind-test/abc
+ # mount --bind bind-test bind-test
+ # mount -t tmpfs tmpfs bind-test/abc
+ # umount bind-test/abc
+ # systemctl list-units --all | grep bind-test
+ root-bind\x2dtest.mount loaded active mounted /root/bind-test
+ 
  
  [Regression Potential]
  
  This is a adapted version of 2 upstream fixes as the original upstream
  commit has been made on top on 2 functions mount_setup_new_unit() &
  mount_setup_existing_unit() that not yet exist systemd 229. It is easily
  adaptable because the current function mount_setup_unit() is dealing
  with both of at the moment instead of being individually separate in two
  distinct function.
  
- It is an adaptation of commits : 
+ It is an adaptation of commits :
  65d36b495
  03b8cfede
  
  This patch changes mount_setup_unit() to prevent the just_mounted mount
  setup flag from being overwritten if it is set to true. This will allow
  all mount units created from /proc/self/mountinfo entries to be
  initialised properly.
  
+ [Other Info]
  
- [Other Info]
-  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345
  
  systemd v237 has this fix, but we'd like to have it fixed in 16.04.
- 
  
  It only affect systemd for Xenial, later release already has the fix:
  
  $ git describe --contains 65d36b495
  v237~140
  
  ==>  systemd | 229-4ubuntu21.4  | xenial-updates
       systemd | 237-3ubuntu10.3  | bionic-updates
       systemd | 239-7ubuntu9     | cosmic
  
  [Original Description]
  
  From the PR:
  Currently, if there are two /proc/self/mountinfo entries with the same
  mount point path, the mount setup flags computed for the second of
  these two entries will overwrite the mount setup flags computed for
  the first of these two entries. This is the root cause of issue #7798.
  This patch changes mount_setup_existing_unit to prevent the
  just_mounted mount setup flag from being overwritten if it is set to
  true. This will allow all mount units created from /proc/self/mountinfo
  entries to be initialized properly.
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345

** Changed in: systemd (Ubuntu Xenial)
       Status: Confirmed => In Progress

** Changed in: systemd (Ubuntu Xenial)
     Assignee: (unassigned) => Eric Desrochers (slashd)

** Description changed:

  [Impact]
  
  kubernetes loaded inactive dead transient mount points grows
  https://github.com/kubernetes/kubernetes/issues/57345
  
  [Test Case]
  
  # cd /tmp
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest-abc.mount loaded inactive dead /root/bind-test/abc
  root-bind\x2dtest.mount loaded active mounted /root/bind-test
  
  Expected outcome (w/ the fix) :
  
  # cd /tmp
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest.mount loaded active mounted /root/bind-test
  
- 
  [Regression Potential]
  
  This is a adapted version of 2 upstream fixes as the original upstream
  commit has been made on top on 2 functions mount_setup_new_unit() &
  mount_setup_existing_unit() that not yet exist systemd 229. It is easily
  adaptable because the current function mount_setup_unit() is dealing
  with both of at the moment instead of being individually separate in two
  distinct function.
  
  It is an adaptation of commits :
  65d36b495
  03b8cfede
  
  This patch changes mount_setup_unit() to prevent the just_mounted mount
  setup flag from being overwritten if it is set to true. This will allow
  all mount units created from /proc/self/mountinfo entries to be
  initialised properly.
+ 
+ Additionally, the patch got the blessing of 'xnox' who looked at it and
+ mention it looks fine to him.
  
  [Other Info]
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345
  
  systemd v237 has this fix, but we'd like to have it fixed in 16.04.
  
  It only affect systemd for Xenial, later release already has the fix:
  
  $ git describe --contains 65d36b495
  v237~140
  
  ==>  systemd | 229-4ubuntu21.4  | xenial-updates
       systemd | 237-3ubuntu10.3  | bionic-updates
       systemd | 239-7ubuntu9     | cosmic
  
  [Original Description]
  
  From the PR:
  Currently, if there are two /proc/self/mountinfo entries with the same
  mount point path, the mount setup flags computed for the second of
  these two entries will overwrite the mount setup flags computed for
  the first of these two entries. This is the root cause of issue #7798.
  This patch changes mount_setup_existing_unit to prevent the
  just_mounted mount setup flag from being overwritten if it is set to
  true. This will allow all mount units created from /proc/self/mountinfo
  entries to be initialized properly.
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345

** Description changed:

  [Impact]
  
  kubernetes loaded inactive dead transient mount points grows
  https://github.com/kubernetes/kubernetes/issues/57345
  
  [Test Case]
  
- # cd /tmp
+ # cd /root
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest-abc.mount loaded inactive dead /root/bind-test/abc
  root-bind\x2dtest.mount loaded active mounted /root/bind-test
  
  Expected outcome (w/ the fix) :
  
- # cd /tmp
+ # cd /root
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest.mount loaded active mounted /root/bind-test
  
  [Regression Potential]
  
  This is a adapted version of 2 upstream fixes as the original upstream
  commit has been made on top on 2 functions mount_setup_new_unit() &
  mount_setup_existing_unit() that not yet exist systemd 229. It is easily
  adaptable because the current function mount_setup_unit() is dealing
  with both of at the moment instead of being individually separate in two
  distinct function.
  
  It is an adaptation of commits :
  65d36b495
  03b8cfede
  
  This patch changes mount_setup_unit() to prevent the just_mounted mount
  setup flag from being overwritten if it is set to true. This will allow
  all mount units created from /proc/self/mountinfo entries to be
  initialised properly.
  
  Additionally, the patch got the blessing of 'xnox' who looked at it and
  mention it looks fine to him.
  
  [Other Info]
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345
  
  systemd v237 has this fix, but we'd like to have it fixed in 16.04.
  
  It only affect systemd for Xenial, later release already has the fix:
  
  $ git describe --contains 65d36b495
  v237~140
  
  ==>  systemd | 229-4ubuntu21.4  | xenial-updates
       systemd | 237-3ubuntu10.3  | bionic-updates
       systemd | 239-7ubuntu9     | cosmic
  
  [Original Description]
  
  From the PR:
  Currently, if there are two /proc/self/mountinfo entries with the same
  mount point path, the mount setup flags computed for the second of
  these two entries will overwrite the mount setup flags computed for
  the first of these two entries. This is the root cause of issue #7798.
  This patch changes mount_setup_existing_unit to prevent the
  just_mounted mount setup flag from being overwritten if it is set to
  true. This will allow all mount units created from /proc/self/mountinfo
  entries to be initialized properly.
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345

** Description changed:

  [Impact]
  
  kubernetes loaded inactive dead transient mount points grows
  https://github.com/kubernetes/kubernetes/issues/57345
  
  [Test Case]
  
  # cd /root
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest-abc.mount loaded inactive dead /root/bind-test/abc
  root-bind\x2dtest.mount loaded active mounted /root/bind-test
  
  Expected outcome (w/ the fix) :
  
  # cd /root
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest.mount loaded active mounted /root/bind-test
  
  [Regression Potential]
  
  This is a adapted version of 2 upstream fixes as the original upstream
  commit has been made on top on 2 functions mount_setup_new_unit() &
  mount_setup_existing_unit() that not yet exist systemd 229. It is easily
  adaptable because the current function mount_setup_unit() is dealing
  with both of at the moment instead of being individually separate in two
  distinct function.
  
  It is an adaptation of commits :
- 65d36b495
- 03b8cfede
+ [65d36b495] core: Fix edge case when processing /proc/self/mountinfo
+ [03b8cfede] core: make sure to init mount params before calling mount_is_extrinsic()
  
  This patch changes mount_setup_unit() to prevent the just_mounted mount
  setup flag from being overwritten if it is set to true. This will allow
  all mount units created from /proc/self/mountinfo entries to be
  initialised properly.
  
  Additionally, the patch got the blessing of 'xnox' who looked at it and
  mention it looks fine to him.
  
  [Other Info]
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345
  
  systemd v237 has this fix, but we'd like to have it fixed in 16.04.
  
  It only affect systemd for Xenial, later release already has the fix:
  
  $ git describe --contains 65d36b495
  v237~140
  
  ==>  systemd | 229-4ubuntu21.4  | xenial-updates
       systemd | 237-3ubuntu10.3  | bionic-updates
       systemd | 239-7ubuntu9     | cosmic
  
  [Original Description]
  
  From the PR:
  Currently, if there are two /proc/self/mountinfo entries with the same
  mount point path, the mount setup flags computed for the second of
  these two entries will overwrite the mount setup flags computed for
  the first of these two entries. This is the root cause of issue #7798.
  This patch changes mount_setup_existing_unit to prevent the
  just_mounted mount setup flag from being overwritten if it is set to
  true. This will allow all mount units created from /proc/self/mountinfo
  entries to be initialized properly.
  
  One line fix in https://github.com/systemd/systemd/pull/7811/files
  
  Referenced issue: https://github.com/systemd/systemd/issues/7798
  
  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/1795764

Title:
  systemd: core: Fix edge case when processing /proc/self/mountinfo

Status in systemd package in Ubuntu:
  Fix Released
Status in systemd source package in Xenial:
  In Progress

Bug description:
  [Impact]

  kubernetes loaded inactive dead transient mount points grows
  https://github.com/kubernetes/kubernetes/issues/57345

  [Test Case]

  # cd /root
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest-abc.mount loaded inactive dead /root/bind-test/abc
  root-bind\x2dtest.mount loaded active mounted /root/bind-test

  Expected outcome (w/ the fix) :

  # cd /root
  # mkdir -p bind-test/abc
  # mount --bind bind-test bind-test
  # mount -t tmpfs tmpfs bind-test/abc
  # umount bind-test/abc
  # systemctl list-units --all | grep bind-test
  root-bind\x2dtest.mount loaded active mounted /root/bind-test

  [Regression Potential]

  This is a adapted version of 2 upstream fixes as the original upstream
  commit has been made on top on 2 functions mount_setup_new_unit() &
  mount_setup_existing_unit() that not yet exist systemd 229. It is
  easily adaptable because the current function mount_setup_unit() is
  dealing with both of at the moment instead of being individually
  separate in two distinct function.

  It is an adaptation of commits :
  [65d36b495] core: Fix edge case when processing /proc/self/mountinfo
  [03b8cfede] core: make sure to init mount params before calling mount_is_extrinsic()

  This patch changes mount_setup_unit() to prevent the just_mounted
  mount setup flag from being overwritten if it is set to true. This
  will allow all mount units created from /proc/self/mountinfo entries
  to be initialised properly.

  Additionally, the patch got the blessing of 'xnox' who looked at it
  and mention it looks fine to him.

  [Other Info]

  One line fix in https://github.com/systemd/systemd/pull/7811/files

  Referenced issue: https://github.com/systemd/systemd/issues/7798

  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345

  systemd v237 has this fix, but we'd like to have it fixed in 16.04.

  It only affect systemd for Xenial, later release already has the fix:

  $ git describe --contains 65d36b495
  v237~140

  ==>  systemd | 229-4ubuntu21.4  | xenial-updates
       systemd | 237-3ubuntu10.3  | bionic-updates
       systemd | 239-7ubuntu9     | cosmic

  [Original Description]

  From the PR:
  Currently, if there are two /proc/self/mountinfo entries with the same
  mount point path, the mount setup flags computed for the second of
  these two entries will overwrite the mount setup flags computed for
  the first of these two entries. This is the root cause of issue #7798.
  This patch changes mount_setup_existing_unit to prevent the
  just_mounted mount setup flag from being overwritten if it is set to
  true. This will allow all mount units created from /proc/self/mountinfo
  entries to be initialized properly.

  One line fix in https://github.com/systemd/systemd/pull/7811/files

  Referenced issue: https://github.com/systemd/systemd/issues/7798

  Related kubernetes issue:
  https://github.com/kubernetes/kubernetes/issues/57345

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



More information about the foundations-bugs mailing list