summary refs log tree commit diff stats
path: root/results/classifier/zero-shot/105/graphic/829
blob: 561b8a3ebaa37a2ccd345684422f4790d9abbf12 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
graphic: 0.848
instruction: 0.804
device: 0.788
mistranslation: 0.696
other: 0.585
boot: 0.572
semantic: 0.545
network: 0.477
vnc: 0.424
socket: 0.411
KVM: 0.215
assembly: 0.105

user space emulation: openat() seems to defeat sysroot path translation
Description of problem:
It appears that the user space emulation code is doing some path manipulation of some syscalls to sometimes prefix them with the sysroot.  This seems to be interacting badly sometimes with certain usage patterns.  This was noticed because a test suite of various libc calls was failing under `qemu-arm`, and a `strace` of the qemu-arm process revealed that the translated paths were being inconsistently applied.

In particular, the sequence which fails is:
* create a file in `/tmp/`.
* open `/tmp` itself.  This succeeds, but `strace` reveals that it actually opened `SYSROOT/tmp/`.
* `openat(tmpfd, tmpfile_name)` then fails, as the fd provided to openat is actually inside the sysroot, not at `/tmp` as expected.
Steps to reproduce:
1. Get toolchain https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--uclibc--bleeding-edge-2021.11-1.tar.bz2
2. Compile attached test program [test_openat.c](/uploads/69eb997256ff29d2178be85531c6b3c6/test_openat.c)
3. Try to run under `qemu-arm`.

This code passes in non-emulated situations, but fails under user-space emulation.  Presumably it would also pass under full system emulation.