From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 52ed0191 for ; Fri, 26 Apr 2019 06:13:44 +0000 (UTC) Received: (qmail 19269 invoked by alias); 26 Apr 2019 06:13:33 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 44256 Received: (qmail 4820 invoked by uid 1010); 26 Apr 2019 06:13:33 -0000 X-Qmail-Scanner-Diagnostics: from mail.ibr.cs.tu-bs.de by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.1/25426. spamassassin: 3.4.2. Clear:RC:0(134.169.34.14):SA:0(-4.2/5.0):. Processed in 3.839221 secs); 26 Apr 2019 06:13:33 -0000 X-Envelope-From: schroeder@ibr.cs.tu-bs.de X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at ibr.cs.tu-bs.de designates 134.169.34.14 as permitted sender) X-Virus-Scanned: Debian amavisd-new at mail.ibr.cs.tu-bs.de To: zsh-workers@zsh.org References: <1556199068.2667.13.camel@samsung.com> From: =?UTF-8?Q?Yannic_Schr=c3=b6der?= Openpgp: preference=signencrypt Autocrypt: addr=schroeder@ibr.cs.tu-bs.de; prefer-encrypt=mutual; keydata= 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 TazHWgUexfhlvcaHwKVDYiRhlg== Subject: Re: cwd unintentionally changed Message-ID: <9fee73bf-35c5-1d2c-da00-cfe097764730@ibr.cs.tu-bs.de> Date: Fri, 26 Apr 2019 08:12:51 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <1556199068.2667.13.camel@samsung.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit I applied the provided patch and indeed it stops cwd from changing. I loaded a zshrc that uses vcs_info and it now prints VCS_INFO_bydir_detect:9: Failed to get current directory: path invalid with every new prompt after the umount (which might be confusing for users). However, cwd stays intact. I could live with this solution (maybe suppress the error in vcs_info). Regards, Yannic On 25.04.19 15:31, Peter Stephenson wrote: > On Thu, 2019-04-25 at 14:03 +0200, Yannic Schröder wrote: >> Hi *, >>   >> I got myself into a situation where zsh changed my working directory to >> "/" without further notice. Unfortunately, the next command I issued was >> "sudo rm -rf *", which did not end well with cwd being "/" :-( >>   >> My colleagues and me started to track down the bug. Our efforts are >> documented here: >> https://github.com/grml/grml-etc-core/issues/76 >>   >> (We initially though it was a bug with grml zsh config.) >>   >> A minimal example that triggers the bug looks like this: >>   >> $ mkdir /tmp/tmp.0HnyRZ1iXv/ >> $ cd /tmp/tmp.0HnyRZ1iXv/ >> $ mkdir a >> $ sudo zsh -f -c 'mount -t tmpfs tmpfs a; cd a; touch x; ls; umount >> --lazy ../a; ls; foo=.; echo ${foo:a}; ls; realpath .; echo $PWD;' > > Thanks, easy to follow. > > That's certainly not pleasant as it's silent. > > The source of the problem is in zgetdir().  We attempt to climb the > directory hierarchy until we get to /.  In this case we appear to get > there immediately.  Then, fatally, we call zchdir() to the place where we > think we are, but actually we aren't. > > The patch below fixes up this case so we make quite sure we're in /. > This looks safe, but I'm not sure it's necessarily the limit of > what we can do to make things as safe as possible... > > I'm not quite sure why we need to zchdir().  It seems to be a side > effect rather than a basic part of the call.  In particular I don't see > why it's a good idea in this case --- maybe we just add an argument > saying "not actually changing directory"? > > Or should we be using getcwd() nowadays?  Presumably this is fine on most > modern systems? > > pws > > diff --git a/Src/compat.c b/Src/compat.c > index 7b5c4411c..7131d91a4 100644 > --- a/Src/compat.c > +++ b/Src/compat.c > @@ -361,8 +361,18 @@ zgetdir(struct dirsav *d) >   pino = sbuf.st_ino; >   pdev = sbuf.st_dev; >   > - /* If they're the same, we've reached the root directory. */ > + /* If they're the same, we've reached the root directory... */ >   if (ino == pino && dev == pdev) { > +     /* > +      * ...well, probably.  If this was an orphaned . after > +      * an unmount, or something such, we could be in trouble... > +      */ > +     if (stat("/", &sbuf) < 0 || > + sbuf.st_ino != ino || > + sbuf.st_dev != dev) { > + zerr("Failed to get current directory: path invalid"); > + return NULL; > +     } >       if (!buf[pos]) >   buf[--pos] = '/'; >       if (d) { > -- Yannic Schröder, M.Sc. Technische Universität Braunschweig Institut für Betriebssysteme und Rechnerverbund Mühlenpfordtstr. 23 38106 Braunschweig Fon: +49 (531) 391 - 3249 Fax: +49 (531) 391 - 5936 E-Mail: schroeder@ibr.cs.tu-bs.de