diff options
Diffstat (limited to 'results/classifier/118/PID/1760')
| -rw-r--r-- | results/classifier/118/PID/1760 | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/results/classifier/118/PID/1760 b/results/classifier/118/PID/1760 new file mode 100644 index 000000000..4e4b3050a --- /dev/null +++ b/results/classifier/118/PID/1760 @@ -0,0 +1,83 @@ +i386: 0.991 +PID: 0.966 +kernel: 0.957 +architecture: 0.944 +performance: 0.934 +graphic: 0.920 +device: 0.909 +files: 0.860 +debug: 0.831 +ppc: 0.775 +peripherals: 0.771 +network: 0.727 +permissions: 0.714 +user-level: 0.659 +assembly: 0.651 +arm: 0.622 +VMM: 0.616 +vnc: 0.615 +socket: 0.609 +TCG: 0.596 +boot: 0.551 +KVM: 0.516 +semantic: 0.502 +hypervisor: 0.476 +register: 0.449 +risc-v: 0.445 +mistranslation: 0.426 +x86: 0.321 +virtual: 0.169 + +qemu8-i386 gets wrong arguments for 32-bit old mmap syscall (_NR_mmap = 90) +Description of problem: +qemu8-i386 does not decode syscall arguments correctly for system call _NR_mmap = 90 on i386. +``` +$ strace ./oldmmap +execve("./oldmmap", ["./oldmmap"], 0x7fff46ba6d40 /* 61 vars */) = 0 +[ Process PID=405233 runs in 32 bit mode. ] +mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf7fa7000 +exit(5) = ? ++++ exited with 5 +++ + +$ build/qemu-i386 -strace ./oldmmap +405254 mmap(0x40800058,0,PROT_NONE,0,0,0) = 0x3fffb000 +405254 exit(5) +``` +Steps to reproduce: +1. gcc -m32 -o oldmmap -nostartfiles -nostdlib oldmmap.S # build 32-bit executable +2. strace ./oldmmap # run under strace +3. build/qemu-i386 -strace ./oldmmap # run under "qemu-i386 -strace" +4. Notice that qemu-i386 did not report the same arguments to the _NR_map syscall as /usr/bin/strace did. +Additional information: +``` +$ cat oldmmap.S +MAP_FIXED= 0x10 +MAP_PRIVATE= 0x02 +MAP_ANONYMOUS= 0x20 + +PROT_READ= 1 +PROT_WRITE= 2 +PROT_EXEC= 4 + +_NR_exit = 1 +_NR_mmap = 90 // oldmmap: %ebx -> array of 6 arguments + + .globl _start +_start: + push $0 // offset + push $-1 // fd + push $MAP_PRIVATE|MAP_ANONYMOUS // flags + push $PROT_READ|PROT_WRITE // protection + push $2<<12 // length + push $0 // addr (kernel chooses) + mov %esp,%ebx + mov $_NR_mmap,%eax + int $0x80 + nop + + mov $5,%ebx + mov $_NR_exit,%eax + int $0x80 + hlt +$ +``` |