From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JrAg1-0006Uc-KW for qemu-devel@nongnu.org; Wed, 30 Apr 2008 07:40:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JrAg0-0006Tn-1h for qemu-devel@nongnu.org; Wed, 30 Apr 2008 07:40:45 -0400 Received: from [199.232.76.173] (port=49862 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JrAfz-0006TV-PT for qemu-devel@nongnu.org; Wed, 30 Apr 2008 07:40:43 -0400 Received: from smtp-69.nebula.fi ([83.145.220.69]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JrAfz-0008GE-Jc for qemu-devel@nongnu.org; Wed, 30 Apr 2008 07:40:43 -0400 Received: from [127.0.0.1] (nblzone-209-18.nblnetworks.fi [83.145.209.18]) by smtp-69.nebula.fi (Postfix) with ESMTP id 2172B65E911 for ; Wed, 30 Apr 2008 14:40:40 +0300 (EEST) Message-ID: <48185B4D.4060903@hut.fi> Date: Wed, 30 Apr 2008 14:43:09 +0300 From: Jussi Hakala MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Qemu and mmap_min_addr Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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