qemu seems to lack support for pid namespace.

Bug #1829459 reported by anonymous
30
This bug affects 5 people
Affects Status Importance Assigned to Milestone
QEMU
Expired
Undecided
Unassigned

Bug Description

# Version

qemu-4.0.0
glibc-2.28

# commands used to launch qemu-aarch64 in user mode.

: ${QEMU_BINFMT_FLAGS:=OC}

printf '%s\n' ':qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64:'"${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register

> sudo cp /usr/bin/qemu-aarch64 $RPI/usr/bin
> sudo chroot $RPI /bin/ksh -l

# host

Gentoo Linux amd64

# Guest

Gentoo Linux aarch64

# The problem that I have

"emerge" program fails due to the error, "qemu: qemu_thread_create: Invalid argument".
"emerge" is Gentoo's package manager that compiles and installs packages.

# Workaround

Disable pid-sandbox in emerge.

# How to reproduce the issue

Execute

unshare --pid -- echo hello world

or

python -c "import portage.process; portage.process.spawn(['echo', 'hello', 'world'], unshare_pid=True)"

description: updated
description: updated
description: updated
summary: - qemu: qemu_thread_create: Invalid argument
+ qemu seems to lack support for pid namespace.
Revision history for this message
Laurent Vivier (laurent-vivier) wrote :

PID namespace prevents to execute some syscalls, even if you use --map-root-user. This is managed at kernel level by the capabilities.

Could you try to do the exact same thing with the native architecture binaries in the chroot to see if the problem really comes from qemu-user?

Could you try to use the latest unshare version (util-linux package) that adds a "--keep-caps" parameter (v2.35-rc1) to preserve the capabilities?

Revision history for this message
anonymous (anonymous-anonymous-1234) wrote :

In a native chroot, `sudo unshare --pid -- echo hello world` works without a problem.

In a qemu-aarch64 chroot, `sudo unshare --keep-caps --pid -- echo hello world` fails with the same error described in this issue.

`qemu: qemu_thread_create: Invalid argument`

Revision history for this message
anonymous (anonymous-anonymous-1234) wrote :

According to `man unshare`, --keep-caps seems to apply only to user namespace.

Revision history for this message
anonymous (anonymous-anonymous-1234) wrote :

I think you should investigate

`qemu: qemu_thread_create: Invalid argument`

Revision history for this message
- (ubi-one-kenubi) wrote :

The same issue persists in qemu-5.2.0.

-----------------------------------------
# qemu-aarch64 --version
qemu-aarch64 version 5.2.0
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers
-----------------------------------------

Symptoms when running inside the aarch64 chroot, with both aarch64 and x86_64 binaries:
-----------------------------------------
# which unshare bash
/usr/bin/unshare
/bin/bash
# file $(!!)
file $(which unshare bash)
/usr/bin/unshare: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, stripped
/bin/bash: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, stripped
# unshare --pid -- bash -c 'echo hello world'
qemu: qemu_thread_create: Invalid argument
Aborted (core dumped)
# # --- switch to an x86_64 shell _inside_ the chroot
# LD_LIBRARY_PATH=/x86_64/lib64 PATH=/x86_64/bin:$PATH bash
# which unshare bash
/x86_64/bin/unshare
/x86_64/bin/bash
# file $(!!)
file $(which unshare bash)
/x86_64/bin/unshare: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
/x86_64/bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
# unshare --pid -- bash -c 'echo hello world'
hello world
#
-----------------------------------------

I can share the core dump, in case that's useful.

On this system, the qemu-aarch64 binary on the host is statically built
and binfmt_misc is configured as follows:
-----------------------------------------
:aarch64:M::\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7:\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-aarch64:CF
-----------------------------------------

Revision history for this message
Thomas Huth (th-huth) wrote : Moved bug report

This is an automated cleanup. This bug report has been moved to QEMU's
new bug tracker on gitlab.com and thus gets marked as 'expired' now.
Please continue with the discussion here:

 https://gitlab.com/qemu-project/qemu/-/issues/172

Changed in qemu:
status: New → Expired
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.