[Bug 312156] Re: zsh's pwd gets confused with $PWD unset in mounted dir (bind/nfs)

Axel Beckert abe at debian.org
Tue May 28 23:39:41 UTC 2013


Seems still the case with zsh 5.0.2.

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

Title:
  zsh's pwd gets confused with $PWD unset in mounted dir (bind/nfs)

Status in “zsh” package in Ubuntu:
  Triaged

Bug description:
  When starting zsh in a subdirectory mounted using a bind mount,
  without the PWD variable being set, zsh becomes confused, and is
  unable to determine its working directory. Moreover, during the
  attempt to find out its working directory, it moves to a different
  place.

  In order to test 32-bit software on my 64-bit system, I've set up a
  chroot under /home/chroot/ubuntu-8.04-i386 under which I've mounted
  the real home using mount -o bind:

  mount -o bind /home /home/chroot/ubuntu-8.04-i386/home

  When I cd into any subdirectory of a subdirectory of
  /home/chroot/ubuntu-8.04-i386/home , unset PWD, and start zsh, zsh
  becomes confused as soon as its pwd algorithm crosses the bind
  mountpoint.

  Other shells, such as bash, handle this situation just fine.

  In the "wild" this situation happens when using schroot to execute a
  zsh in my 32 bit chroot environment (because by default, schroot
  unsets PWD before calling the shell). However, as shown above, the
  reason for the behavior is unrelated to the chroot system call, but
  can be reproduced with bind mounts alone.

  I suspect that the reason for this bug is some bogus "optimization" on
  how zsh detects mountpoints. Rather than assuming a mountpoint as soon
  as none of the inode numbers of the subdirectories of the parent match
  that of the current directory, zsh relies solely on a comparison of
  the device number of parent and current. However, in case of a bind
  mount both may match, even though a mountpoint is present.

  -----------------------------
  > lsb_release -rd
  Description:    Ubuntu 8.04.1
  Release:        8.04
  > apt-cache policy zsh
  zsh:
    Installé : 4.3.4-24ubuntu1
    Candidat : 4.3.4-24ubuntu1
   Table de version :
   *** 4.3.4-24ubuntu1 0
          500 http://be.archive.ubuntu.com hardy/main Packages
          100 /var/lib/dpkg/status

  How to reproduce:
  ----------------------------
  mkdir -p /home/alain/tmp
  mkdir -p /home /home/chroot/ubuntu-8.04-i386/home
  mount -o bind /home /home/chroot/ubuntu-8.04-i386/home
  cd /home /home/chroot/ubuntu-8.04-i386/home/alain/tmp
  unset PWD
  zsh

  What I expect to happen:
  ---------------------------------------

  zsh's current dir should be
  /home/chroot/ubuntu-8.0.4-i386/home/alain/tmp , and pwd should show
  same

  What happened instead:
  -------------------------------------

  zsh's current dir is /home/chroot/ubuntu-8.0.4-i386/home , and pwd
  shows "."

  
  TEST CASE:
  mkdir /tmp/foo
  mkdir /tmp/bar
  sudo mount -o bind /tmp/foo /tmp/bar
  cd /tmp/bar
  unset PWD
  zsh
  pwd

  => /tmp/foo
  But should be /tmp/bar

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




More information about the foundations-bugs mailing list