From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45600) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecZd1-0005yk-J3 for qemu-devel@nongnu.org; Fri, 19 Jan 2018 11:34:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecZcx-0006mc-II for qemu-devel@nongnu.org; Fri, 19 Jan 2018 11:34:55 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:55828) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ecZcx-0006kr-8A for qemu-devel@nongnu.org; Fri, 19 Jan 2018 11:34:51 -0500 References: <1515286904-86418-1-git-send-email-riemensberger@cadami.net> From: Laurent Vivier Message-ID: Date: Fri, 19 Jan 2018 17:34:37 +0100 MIME-Version: 1.0 In-Reply-To: <1515286904-86418-1-git-send-email-riemensberger@cadami.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH v2] linux-user/mmap.c: Avoid choosing NULL as start address List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Maximilian Riemensberger , qemu-devel Cc: Peter Maydell , Riku Voipio Le 07/01/2018 à 02:01, Maximilian Riemensberger a écrit : > mmap() is required by the linux kernel ABI and POSIX to return a > non-NULL address when the implementation chooses a start address for the > mapping. > > The current implementation of mmap_find_vma_reserved() can return NULL > as start address of a mapping which leads to subsequent crashes inside > the guests glibc, e.g. output of qemu-arm-static --strace executing a > test binary stx_test: > > 1879 mmap2(NULL,8388608,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS|0x20000,-1,0) = 0x00000000 > 1879 write(2,0xf6fd39d0,79) stx_test: allocatestack.c:514: allocate_stack: Assertion `mem != NULL' failed. > > This patch fixes mmap_find_vma_reserved() by skipping NULL as start > address while searching for a suitable mapping start address. > > CC: Riku Voipio > CC: Laurent Vivier > CC: Peter Maydell > Signed-off-by: Maximilian Riemensberger > --- > Changes since v1: > - Applied feedback from Laurent Vivier > > linux-user/mmap.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/linux-user/mmap.c b/linux-user/mmap.c > index 4888f53..0fbfd6d 100644 > --- a/linux-user/mmap.c > +++ b/linux-user/mmap.c > @@ -234,7 +234,7 @@ static abi_ulong mmap_find_vma_reserved(abi_ulong start, abi_ulong size) > if (prot) { > end_addr = addr; > } > - if (addr + size == end_addr) { > + if (addr && addr + size == end_addr) { > break; > } > addr -= qemu_host_page_size; > Applied to my linux-user branch. Thanks, Laurent