From 553a5ec407ddc922ffca7f542e280b6150396cb9 Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Tue, 2 Jul 2013 12:28:03 -0700 Subject: [PATCH] mmap: Don't call madvise if mmap fails Fix improper check of return value from __mmap2. On a failed mmap(), it returns MAP_FAILED, not 0. This ended up clobbering errno when madvise subsequently failed. Change-Id: I364fb2f158fe258c55a73e552195384b2c11c193 --- libc/bionic/mmap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libc/bionic/mmap.c b/libc/bionic/mmap.c index e097086cb..36aee85f2 100644 --- a/libc/bionic/mmap.c +++ b/libc/bionic/mmap.c @@ -43,8 +43,9 @@ void* mmap(void *addr, size_t size, int prot, int flags, int fd, long offset) ret = __mmap2(addr, size, prot, flags, fd, (size_t)offset >> MMAP2_SHIFT); - if (ret && (flags & (MAP_PRIVATE | MAP_ANONYMOUS))) - madvise(ret, size, MADV_MERGEABLE); + if ((ret != MAP_FAILED) && (flags & (MAP_PRIVATE | MAP_ANONYMOUS))) { + madvise(ret, size, MADV_MERGEABLE); + } return ret; }