** Changed in: linux (Ubuntu Vivid)
     Assignee: (unassigned) => Chris J Arges (arges)

** Description changed:

+ SRU Justification:
+ 
+ [Impact]
+ 
  I am running Ubuntu Vivid (3.19.0-22-generic #22-Ubuntu SMP Tue Jun 16
  17:15:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux).  There are two issues
  in OverlayFS as follows:
  
-  1. /proc/<pid>/fdinfo/<fd> reports wrong mnt_id (non-existent in
+  1. /proc/<pid>/fdinfo/<fd> reports wrong mnt_id (non-existent in
  /proc/<pid>/mountinfo)
  
-  2. /proc/<pid>/fd/<fd> shows incorrect path for the symlink target
+  2. /proc/<pid>/fd/<fd> shows incorrect path for the symlink target
+ 
+ [Fix]
  
  These problems can be easily reproduced with the shell script below.
  Fortunately, both problems have been fixed in the upstream's master
  branch of the kernel via the following commits:
  
-     torvalds 4.0:   155e35d4d VFS: Introduce inode-getting helpers for 
layered/unioned fs environments
-     torvalds 4.0:   df1a085af VFS: Add a fallthrough flag for marking virtual 
dentries
-     torvalds 4.2-rc2:   f25801ee4 overlay: Call ovl_drop_write() earlier in 
ovl_dentry_open()
-     torvalds 4.2-rc2:   4bacc9c92 overlayfs: Make f_path always point to the 
overlay and f_inode to the underlay
-     torvalds 4.2-rc2:   9391dd00d fix a braino in ovl_d_select_inode()
+     torvalds 4.0:   155e35d4d VFS: Introduce inode-getting helpers for
+ layered/unioned fs environments (this is already in ubuntu-vivid)
+ 
+     torvalds 4.0:   df1a085af VFS: Add a fallthrough flag for marking virtual 
dentries
+     torvalds 4.2-rc2:   f25801ee4 overlay: Call ovl_drop_write() earlier in 
ovl_dentry_open()
+     torvalds 4.2-rc2:   4bacc9c92 overlayfs: Make f_path always point to the 
overlay and f_inode to the underlay
+     torvalds 4.2-rc2:   9391dd00d fix a braino in ovl_d_select_inode()
  
  (The commit df1a085af may technically not be needed but it prevents a
  conflict when applying 4bacc9c92.)
+ 
+ [Test Case]
  
  Simple script to reproduce the problem:
  
  #!/bin/bash
  
  set -eu
  
  ERROR=0
  
  setup() {
-       setup_mount
-       start_python > /dev/null 2>&1 &
-       BASH_PID=$!
-       PYTHON_PID=$(ps -C python | awk '/python/ { print $1 }')
-       sleep 1
+  setup_mount
+  start_python > /dev/null 2>&1 &
+  BASH_PID=$!
+  PYTHON_PID=$(ps -C python | awk '/python/ { print $1 }')
+  sleep 1
  }
  
  setup_mount() {
-       mkdir overlay_test
-       cd overlay_test
-       mkdir a b c z
-       sudo mount -t overlay -o lowerdir=a,upperdir=b,workdir=c overlayfs z
+  mkdir overlay_test
+  cd overlay_test
+  mkdir a b c z
+  sudo mount -t overlay -o lowerdir=a,upperdir=b,workdir=c overlayfs z
  }
  
  start_python() {
-       python << EOF
+  python << EOF
  import time
  fd = open("z/file", "w")
  time.sleep(10)
  EOF
  }
  
  check_path() {
-       WD=$(pwd)
-       if ! ls -l /proc/$PYTHON_PID/fd | grep -qw "$WD/z/file"; then
-               ERROR=1
-               echo "ERROR! expected $WD/z/file"
-               set -x
-               ls -l /proc/$PYTHON_PID/fd
-               set +x
-       fi
+  WD=$(pwd)
+  if ! ls -l /proc/$PYTHON_PID/fd | grep -qw "$WD/z/file"; then
+   ERROR=1
+   echo "ERROR! expected $WD/z/file"
+   set -x
+   ls -l /proc/$PYTHON_PID/fd
+   set +x
+  fi
  }
  
  check_mnt_id() {
-       FDINFO_MNT_ID=$(awk '/mnt_id:/ { print $2 }' /proc/$PYTHON_PID/fdinfo/3)
-       MOUNTINFO_MNT_ID=$(awk '/overlayfs/ { print $1 }' /proc/self/mountinfo)
-       if [[ $FDINFO_MNT_ID -ne $MOUNTINFO_MNT_ID ]]; then
-               ERROR=1
-               echo "ERROR! mnt_id $FDINFO_MNT_ID not in /proc/self/mountinfo"
-               set -x
-               cat /proc/$PYTHON_PID/fdinfo/3
-               cat /proc/self/mountinfo
-               set +x
-       fi
+  FDINFO_MNT_ID=$(awk '/mnt_id:/ { print $2 }' /proc/$PYTHON_PID/fdinfo/3)
+  MOUNTINFO_MNT_ID=$(awk '/overlayfs/ { print $1 }' /proc/self/mountinfo)
+  if [[ $FDINFO_MNT_ID -ne $MOUNTINFO_MNT_ID ]]; then
+   ERROR=1
+   echo "ERROR! mnt_id $FDINFO_MNT_ID not in /proc/self/mountinfo"
+   set -x
+   cat /proc/$PYTHON_PID/fdinfo/3
+   cat /proc/self/mountinfo
+   set +x
+  fi
  }
  
  finish() {
-       kill -INT $PYTHON_PID > /dev/null 2>&1
-       sudo umount z
-       cd $ORIG_WD
-       rm -rf overlay_test
+  kill -INT $PYTHON_PID > /dev/null 2>&1
+  sudo umount z
+  cd $ORIG_WD
+  rm -rf overlay_test
  }
  
  main() {
-       ORIG_WD=$(pwd)
-       setup
+  ORIG_WD=$(pwd)
+  setup
  
-       check_path
-       check_mnt_id
+  check_path
+  check_mnt_id
  
-       finish
-       [[ $ERROR -eq 0 ]] && echo "OverlayFS looks good."
+  finish
+  [[ $ERROR -eq 0 ]] && echo "OverlayFS looks good."
  }
  
  main

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

Title:
  OverlayFS: Wrong mnt_id and path reported in /proc

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

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to