qemu seems to lack support for pid namespace. # Version qemu-4.0.0 # commands used to launch qemu-aarch64 in user mode. 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. # 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)" 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? 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` According to `man unshare`, --keep-caps seems to apply only to user namespace. I think you should investigate `qemu: qemu_thread_create: Invalid argument` 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 ----------------------------------------- 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