LD_PREFIX option reads directories recursively in an endless loop

Bug #1245703 reported by Sebastian Macke
16
This bug affects 3 people
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned
qemu (Debian)
Fix Released
Unknown

Bug Description

If I run qemu user emulation with -L /path/to/my/sysroot/ in which also the proc and dev filesystem is mounted QEMU eats my memory until it gets killed by the kernel.

According to the strace output it follows the symbolic links in the proc filesystem running forever in a recursive loop.

The easiest solution would be to add in the function "add_dir_maybe" in the file util/path.c an additional check for symbolic links that it don't follow them.

Also I don't really understand the need of doing this. A lot of ressources are wasted everytime QEMU-user is started just by having the directory structure in memory. In my case this are more than 20000 entries which QEMU is loading every time.

Tags: linux-user
Revision history for this message
Peter Maydell (pmaydell) wrote : Re: [Qemu-devel] [Bug 1245703] [NEW] LD_PREFIX option reads directories recursively in an endless loop

On 28 October 2013 23:15, Sebastian Macke <email address hidden> wrote:
> If I run qemu user emulation with -L /path/to/my/sysroot/ in which also
> the proc and dev filesystem is mounted QEMU eats my memory until it gets
> killed by the kernel.
>
> According to the strace output it follows the symbolic links in the proc
> filesystem running forever in a recursive loop.
>
> The easiest solution would be to add in the function "add_dir_maybe" in
> the file util/path.c an additional check for symbolic links that it
> don't follow them.

Yeah, this -L code is just busted. It's really only intended to work
with extremely simple sysroot directories which don't have weird
stuff like proc mounts or symlinks and aren't very big.

If the thing you're looking at isn't like that then you might be better
off using the "static qemu and chroot into the directory" approach
instead.

-- PMM

Revision history for this message
Sebastian Macke (sebastian-4) wrote :

Ok, thanks for the info.
For me it looks like removing the whole path code and putting a one-liner combining two string is the best solution. But maybe I am missing something.

Revision history for this message
Antonis Kanouras (akanouras) wrote :

qemu-arm *and* qemu-arm-static 1.5.0+dfsg-3ubuntu5.1 (AMD64 13.10 host) are affected by this.

Steps to reproduce:
0. mkdir /mnt/mychroot
1. qemu-debootstrap --arch=armhf wheezy /mnt/mychroot http://ftp.debian.org/debian
2. qemu-arm-static -L /mnt/mychroot /mnt/mychroot/usr/sbin/chroot /mnt/mychroot /bin/sh

In this case, the loop starts when it meets /mnt/mychroot/dev/fd (which links to /proc/self/fd).

Revision history for this message
Antonis Kanouras (akanouras) wrote :

One ugly workaround is, in case anyone needs it:

cp -a /usr/bin/qemu-arm-static /mnt/mychroot/
chroot /mnt/mychroot /qemu-arm-static /bin/sh

Changed in qemu (Debian):
status: Unknown → Confirmed
Revision history for this message
Ross Burton (ross) wrote :

We're (Yocto Project) hit this often. We're building a root file system and then using userspace qemu to run binaries inside it (such as fc-cache). If a cyclic symlink appears in the rootfs, it blows up.

Revision history for this message
Peter Maydell (pmaydell) wrote : Re: [Qemu-devel] [Bug 1245703] Re: LD_PREFIX option reads directories recursively in an endless loop

On 26 March 2015 at 21:37, Ross Burton <email address hidden> wrote:
> We're (Yocto Project) hit this often. We're building a root file system
> and then using userspace qemu to run binaries inside it (such as fc-
> cache). If a cyclic symlink appears in the rootfs, it blows up.

If you're actually building a rootfs then you're probably
better off using binfmt-misc and chrooting into it rather
than using -L. -L really isn't intended to point at a
full rootfs.

-- PMM

Revision history for this message
Ross Burton (ross) wrote :

We need to be able to run qemu as not root. Has anyone tried using qemu with fakechroot?

Peter Maydell (pmaydell)
Changed in qemu:
status: New → Confirmed
tags: added: linux-user
Revision history for this message
Richard Henderson (rth) wrote :

I posted a patch a while back that would fix this:

https://patchwork.kernel.org/patch/9512083/

Changed in qemu (Debian):
status: Confirmed → Fix Released
Revision history for this message
Laurent Vivier (laurent-vivier) wrote :

Fixed by in 4.1.0 by:

f3a8bdc1d5b2 ("util/path: Do not cache all filenames at startup")

Changed in qemu:
status: Confirmed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.