diff options
Diffstat (limited to 'results/classifier/118/none/1346769')
| -rw-r--r-- | results/classifier/118/none/1346769 | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/results/classifier/118/none/1346769 b/results/classifier/118/none/1346769 new file mode 100644 index 000000000..cd9b2b6e5 --- /dev/null +++ b/results/classifier/118/none/1346769 @@ -0,0 +1,72 @@ +peripherals: 0.688 +PID: 0.635 +graphic: 0.614 +user-level: 0.599 +network: 0.588 +permissions: 0.575 +virtual: 0.572 +ppc: 0.571 +debug: 0.566 +semantic: 0.561 +arm: 0.560 +register: 0.552 +device: 0.546 +TCG: 0.544 +hypervisor: 0.541 +VMM: 0.540 +risc-v: 0.540 +performance: 0.532 +architecture: 0.503 +i386: 0.497 +boot: 0.494 +mistranslation: 0.485 +x86: 0.462 +vnc: 0.460 +socket: 0.441 +files: 0.424 +kernel: 0.424 +assembly: 0.384 +KVM: 0.332 + +/proc/self/maps content returned to 32-bits guest under 64-bits qemu + +Reading /proc/self/maps a user doesn't get a stack record. Not all programs relies on the maps file but some do. + +The bug found by running 32-bits binaries with address sanitizer (Asan) instrumentations under 64-bit qemu. + +$ echo "int main() { return 0; }" > /tmp/test.c +$ gcc -m32 -fsanitize=address -fno-common -Wall -g -fPIC -o /tmp/test /tmp/test.c +$ qemu-i386-static /tmp/test +==4092==AddressSanitizer CHECK failed: /home/michail/Downloads/gcc-4.9.0/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cc:63 "(((uptr)&rl >= start && (uptr)&rl < end)) != (0)" (0x0, 0x0) + #0 0xf632ff01 (/home/michail/build/lib32/libasan.so.1+0x53f01) + #1 0xf6333f49 (/home/michail/build/lib32/libasan.so.1+0x57f49) + #2 0xf6338785 (/home/michail/build/lib32/libasan.so.1+0x5c785) + #3 0xf6338bd1 (/home/michail/build/lib32/libasan.so.1+0x5cbd1) + #4 0xf6331baf (/home/michail/build/lib32/libasan.so.1+0x55baf) + #5 0xf6331dca (/home/michail/build/lib32/libasan.so.1+0x55dca) + #6 0xf6331f5a (/home/michail/build/lib32/libasan.so.1+0x55f5a) + #7 0xf6330bd4 (/home/michail/build/lib32/libasan.so.1+0x54bd4) + #8 0xf67ebeec (/lib/ld-linux.so.2+0xeeec) + #9 0xf67de10e (/lib/ld-linux.so.2+0x110e) + +This happened because during initialization Asan can't find stack boundaries. + +For some reasons Qemu wants to report stack boundaries just for several arch targets skipping other ones. This is from linux-user/syscall.c open_self_maps() + +#if defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_UNICORE32) + dprintf(fd, "%08llx-%08llx rw-p %08llx 00:00 0 [stack]\n", + (unsigned long long)ts->info->stack_limit, + (unsigned long long)(ts->info->start_stack + + (TARGET_PAGE_SIZE - 1)) & TARGET_PAGE_MASK, + (unsigned long long)0); +#endif + +Not very clear why the case covers just specific targets. + +This bug continues the previously reported issue with not hiden system map http://lists.nongnu.org/archive/html/qemu-devel/2014-07/msg02793.html. + +I think the ifdefs are just accident of history and we can safely remove them. + +We removed the ifdefs at some point; the test case in this bug report now runs successfully. + + |