Public bug reported: When read() function takes an mmap'ed address as output buffer, it returns EFAULT. The expected behavior is it should just work.
The following code works for qemu-system-arm, but not for qemu-arm- static. QEMU version affected: latest release 2.12.0. Steps to reproduce (please substitute /path/to/qemu-arm-static with the path of the binary, and /tmp/a.cpp with the example source code attached): # First register binfmt_misc [hidden]$ docker run --rm --privileged multiarch/qemu-user-static:register --reset # Compile the code and run [hidden]$ docker run --rm -it -v /tmp/a.cpp:/tmp/a.cpp -v /path/to/qemu-arm-static:/usr/bin/qemu-arm-static arm32v7/ubuntu:18.04 bash -c '{ apt update -y && apt install -y g++; } >& /dev/null && g++ -std=c++14 /tmp/a.cpp -o /tmp/a.out && echo hehe > /tmp/haha.txt && /tmp/a.out' ofd=3 ftruncate=0 mmap=0xff3f5000 fd=4 0xff3f5023 -1 14 The expected result in qemu-system-arm as well as natively on x86_64 host: hidden$ ./a.out ofd=3 ftruncate=0 mmap=0xb6fb7000 fd=4 0xb6fb7023 5 0 ** Affects: qemu Importance: Undecided Status: New ** Attachment added: "a.cpp" https://bugs.launchpad.net/bugs/1779955/+attachment/5159341/+files/a.cpp ** Description changed: When read() function takes an mmap'ed address as output buffer, it returns EFAULT. The expected behavior is it should just work. The following code works for qemu-system-arm, but not for qemu-arm- static. + QEMU version affected: latest release 2.12.0. Steps to reproduce (please substitute /path/to/qemu-arm-static with the path of the binary, and /tmp/a.cpp with the example source code attached): # First register binfmt_misc [hidden]$ docker run --rm --privileged multiarch/qemu-user-static:register --reset # Compile the code and run [hidden]$ docker run --rm -it -v /tmp/a.cpp:/tmp/a.cpp -v /path/to/qemu-arm-static:/usr/bin/qemu-arm-static arm32v7/ubuntu:18.04 bash -c '{ apt update -y && apt install -y g++; } >& /dev/null && g++ -std=c++14 /tmp/a.cpp -o /tmp/a.out && echo hehe > /tmp/haha.txt && /tmp/a.out' ofd=3 ftruncate=0 mmap=0xff3f5000 fd=4 0xff3f5023 -1 14 - The expected result in qemu-system-arm as well as natively on x86_64 host: - hidden$ ./a.out - ofd=3 - ftruncate=0 - mmap=0xb6fb7000 - fd=4 + hidden$ ./a.out + ofd=3 + ftruncate=0 + mmap=0xb6fb7000 + fd=4 0xb6fb7023 5 0 -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1779955 Title: qemu-arm-static read() doesn't accept mmap address as destination Status in QEMU: New Bug description: When read() function takes an mmap'ed address as output buffer, it returns EFAULT. The expected behavior is it should just work. The following code works for qemu-system-arm, but not for qemu-arm- static. QEMU version affected: latest release 2.12.0. Steps to reproduce (please substitute /path/to/qemu-arm-static with the path of the binary, and /tmp/a.cpp with the example source code attached): # First register binfmt_misc [hidden]$ docker run --rm --privileged multiarch/qemu-user-static:register --reset # Compile the code and run [hidden]$ docker run --rm -it -v /tmp/a.cpp:/tmp/a.cpp -v /path/to/qemu-arm-static:/usr/bin/qemu-arm-static arm32v7/ubuntu:18.04 bash -c '{ apt update -y && apt install -y g++; } >& /dev/null && g++ -std=c++14 /tmp/a.cpp -o /tmp/a.out && echo hehe > /tmp/haha.txt && /tmp/a.out' ofd=3 ftruncate=0 mmap=0xff3f5000 fd=4 0xff3f5023 -1 14 The expected result in qemu-system-arm as well as natively on x86_64 host: hidden$ ./a.out ofd=3 ftruncate=0 mmap=0xb6fb7000 fd=4 0xb6fb7023 5 0 To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1779955/+subscriptions