Re: Bug: getcwd: cannot access parent directories

From: Casey Schaufler
Date: Thu Sep 27 2018 - 15:46:37 EST


On 9/26/2018 6:54 PM, Roel Van de Paar wrote:
> Ping :)
>
> On 21 September 2018 at 18:16, Roel Van de Paar
> <roel.vandepaar@xxxxxxxxxxx> wrote:
>> [1.] One line summary of the problem:
>>
>> "cd: error retrieving current directory: getcwd: cannot access parent
>> directories: No such file or directory" on move of directories to
>> another volume
>>
>> [2.] Full description of the problem/report:
>>
>> Example output (testcase below):
>>
>> /tmp/1/2$ cd ..
>> cd: error retrieving current directory: getcwd: cannot access parent
>> directories: No such file or directory
>> /tmp/1/2/..$ cd ..
>> cd: error retrieving current directory: getcwd: cannot access parent
>> directories: No such file or directory
>> /tmp/1/2/../..$ cd ..
>> cd: error retrieving current directory: getcwd: cannot access parent
>> directories: No such file or directory
>> /tmp/1/2/../../..$ cd ..
>> cd: error retrieving current directory: getcwd: cannot access parent
>> directories: No such file or directory
>> /tmp/1/2/../../../..$ cd ..
>> cd: error retrieving current directory: getcwd: cannot access parent
>> directories: No such file or directory
>> /tmp/1/2/../../../../..$ cd ..
>> cd: error retrieving current directory: getcwd: cannot access parent
>> directories: No such file or directory
>> /tmp/1/2/../../../../../..$ cd ..
>> /tmp$
>>
>> - The number of ".." required is not correct
>> - The number of ".." matches the number of subdirs (see below)
>>
>> [4.] Kernel information
>>
>> Tested on latest updates of:
>> * Ubuntu Xenial
>> * Ubuntu Bionic
>> * Centos 7
>>
>> [7.] A small shell script or example program which triggers the
>> problem (if possible)
>>
>> In session 1
>> cd /tmp
>> mkdir -p 1/2
>> cd 1/2
>>
>> In session 2 (another terminal session)
>> cd /tmp
>> mkdir -p 3/4/5/6/7
>> mv 1 3/4/5/6/7
>> mv 3 /dev/shm # where /dev/shm is some other disk. /dev/shm
>> reproduction works too. If the disk is the same, the issue will not
>> show.

Please try doing this under strace, in particular

strace mv 3 /dev/shm

What you will see is that the mv command does a copy/delete
when changing filesystems. The original "2" directory, which
is your current working directory, will have no parent as the
original "1" will have been removed.

>>
>> Back to session 1
>> cd .. # fail
>> cd .. # fail
>> cd .. # fail
>> cd .. # fail
>> cd .. # fail
>> cd .. # fail
>> cd .. # works, but to completely incorrect directory given the
>> many 'cd ..'```
>>
>> The problem is made more clear here by using 3/4/5/6/7 but you can
>> also just use a single subdir to see it
> Roel Van de Paar, Technical Director - Quality Assurance, Percona

The system is working properly.