OSDN Git Service

mmap: Don't call madvise if mmap fails
authorNick Kralevich <nnk@google.com>
Tue, 2 Jul 2013 19:28:03 +0000 (12:28 -0700)
committerNick Kralevich <nnk@google.com>
Tue, 2 Jul 2013 19:31:07 +0000 (12:31 -0700)
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

index e097086..36aee85 100644 (file)
@@ -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;
 }