← Back to team overview

kernel-packages team mailing list archive

[Bug 1479468] Re: OverlayFS: Wrong mnt_id and path reported in /proc

 

** Also affects: linux (Ubuntu Trusty)
   Importance: Undecided
       Status: New

-- 
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/1479468

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

Status in linux package in Ubuntu:
  Fix Released
Status in linux source package in Trusty:
  In Progress
Status in linux source package in Vivid:
  Fix Released

Bug description:
  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
  /proc/<pid>/mountinfo)

   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 (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() {
   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
  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
  }

  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
  }

  finish() {
   kill -INT $PYTHON_PID > /dev/null 2>&1
   sudo umount z
   cd $ORIG_WD
   rm -rf overlay_test
  }

  main() {
   ORIG_WD=$(pwd)
   setup

   check_path
   check_mnt_id

   finish
   [[ $ERROR -eq 0 ]] && echo "OverlayFS looks good."
  }

  main

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


References