[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Qemu and mmap_min_addr
From: |
Jussi Hakala |
Subject: |
[Qemu-devel] Qemu and mmap_min_addr |
Date: |
Wed, 30 Apr 2008 14:43:09 +0300 |
User-agent: |
Mozilla-Thunderbird 2.0.0.9 (X11/20080110) |
Depending on the setting of mmap_min_addr, the userspace qemu may just
die with permission denied when trying to run a program with recent
linux kernels.
The newest Ubuntu, Hardy Heron, ships with a default value of 65536 in
/proc/sys/vm/mmap_min_addr which will cause the following problem (the
test program is a simple hello world compiled for arm architecture).
$ sudo sh -c 'echo 65536 > /proc/sys/vm/mmap_min_addr'
$ qemu-arm ./a.out
mmap: Permission denied
$ sudo sh -c 'echo 32768 > /proc/sys/vm/mmap_min_addr'
$ qemu-arm ./a.out
hello world
$ qemu-arm -h
qemu-arm version 0.9.1, Copyright (c) 2003-2008 Fabrice Bellard
usage: qemu-arm [options] program [arguments...]
Linux CPU emulator (compiled for arm emulation)
The problem is present in every version of qemu I've tried, from 0.8.2
to a quite recent cvs snapshot.
Seems that the problem is related to the mmap2 call and the first
argument interpreted as a fixed address with MAP_FIXED flag set...
here's an excerpt from strace for details:
mmap2(0x40000000, 528384, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40000000
mprotect(0x40080000, 4096, PROT_NONE) = 0
mmap2(0x8000, 434176, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0) = -1 EACCES (Permission denied)
dup(2) = 4
fcntl64(4, F_GETFL) = 0x2 (flags O_RDWR)
fstat64(4, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 10), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
0) = 0xb7f5f000
_llseek(4, 0, 0xbfe5bf48, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(4, "mmap: Permission denied\n", 24mmap: Permission denied
) = 24
close(4) = 0
munmap(0xb7f5f000, 4096) = 0
exit_group(-1) = ?
So, basically I'm asking if this is an easy thing to fix, ie. if it's
easy to increment the address value to begin with or if the MAP_FIXED
can be somehow done away with...
Regards,
Jussi
- [Qemu-devel] Qemu and mmap_min_addr,
Jussi Hakala <=