]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix for bug 72006 by Tom Hughes: report proper error returns for mmap()
authorJeremy Fitzhardinge <jeremy@valgrind.org>
Wed, 7 Jan 2004 08:44:43 +0000 (08:44 +0000)
committerJeremy Fitzhardinge <jeremy@valgrind.org>
Wed, 7 Jan 2004 08:44:43 +0000 (08:44 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2191

coregrind/vg_syscalls.c

index a5dcc941f199aad046ce8b739d4166c6d5a1a42a..10a174c950099452efe0c428a2e1a6366b2f5a98 100644 (file)
@@ -3555,11 +3555,13 @@ PRE(mmap2)
 
 POST(mmap2)
 {
-   if (!valid_client_addr(res, arg2, tid, "mmap2")) {
-      VG_(munmap)((void *)res, arg2);
-      res = -VKI_ENOMEM;
-   } else
-      mmap_segment( (Addr)res, arg2, arg3, arg4, arg5, arg6 * (ULong)VKI_BYTES_PER_PAGE );
+   if (!VG_(is_kerror)(res)) {
+      if (!valid_client_addr(res, arg2, tid, "mmap2")) {
+         VG_(munmap)((void *)res, arg2);
+         res = -VKI_ENOMEM;
+      } else
+         mmap_segment( (Addr)res, arg2, arg3, arg4, arg5, arg6 * (ULong)VKI_BYTES_PER_PAGE );
+   }
 }
 
 PRE(mmap)
@@ -3596,15 +3598,24 @@ PRE(mmap)
    }
 
    if (res != -VKI_ENOMEM) {
-      res = (Int)VG_(mmap)((void *)a1, a2, a3, a4 | VKI_MAP_CLIENT, a5, a6);
+      UInt new_arg_block[6];
+
+      new_arg_block[0] = a1;
+      new_arg_block[1] = a2;
+      new_arg_block[2] = a3;
+      new_arg_block[3] = a4;
+      new_arg_block[4] = a5;
+      new_arg_block[5] = a6;
       
-      if (res == -1)
-        res = -VKI_ENOMEM;
-      else if (!valid_client_addr(res, a2, tid, "mmap")) {
-        VG_(munmap)((void *)res, a2);
-        res = -VKI_ENOMEM;
-      } else
-        mmap_segment( (Addr)res, a2, a3, a4, a5, a6 );
+      res = VG_(do_syscall)(__NR_mmap, new_arg_block);
+
+      if (!VG_(is_kerror)(res)) {
+         if (!valid_client_addr(res, a2, tid, "mmap")) {
+           VG_(munmap)((void *)res, a2);
+           res = -VKI_ENOMEM;
+         } else
+           mmap_segment( (Addr)res, a2, a3, a4, a5, a6 );
+      }
    }
 }