Skip to contentSkip to conversation

linux-user: hide reserved mmap in /proc/self/mmap

PATCH In review Mikhail Ilin 1 participant 2 messages Jul 18, 2014 – Jul 23, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 linux-user: hide reserved mmap in /proc/self/mmap

Hi,

Running 32-bits binaries with address sanitizer (ASAN) instrumentations fails under 64-bits qemu. During initialization ASAN relies on the output from /proc/self/mmap then tries to find a big chunk for shadow memory but it is not happened.

Reserved memory for guest address space is used privately by qemu to satisfy user anonymous mmap calls but in the same time it is not hidden from an application and is reported when a user reads /proc/self/mmap. Qemu is not fully transparent for a guest.

The patch covers the case and cleans up the reserved memory map from the output.

From 167c42e6a9521c05ddd7c6dfbb108d2ae65de098 Mon Sep 17 00:00:00 2001
From: Mikhail Ilyin <[email protected]>
Date: Fri, 18 Jul 2014 10:14:06 +0400
Subject: [PATCH] Clean up the reserved memory map from /proc/self/mmap output which doesn't belong to an emulated process.

---
 linux-user/syscall.c | 7 +++++++
 1 file changed, 7 insertions(+)
linux-user/syscall.c +7 -0
index a50229d..8f406e4 100644
@@ -5122,6 +5122,13 @@ static int open_self_maps(void *cpu_env, int fd)
             continue;
         }
         if (h2g_valid(min) && h2g_valid(max)) {
+#ifdef CONFIG_USE_GUEST_BASE
+            if (RESERVED_VA) {
+                if (mmap_next_start == h2g(max)) {
+                    continue;
+                }
+            }
+#endif
             dprintf(fd, TARGET_ABI_FMT_lx "-" TARGET_ABI_FMT_lx
                     " %c%c%c%c %08" PRIx64 " %02x:%02x %d %s%s\n",
                     h2g(min), h2g(max), flag_r, flag_w,
Signature · 1 line
1.9.1
#1 lore raw

Adding Riku Voipio

Quoted 46 lines · Mikhail Ilin

Hi,

Running 32-bits binaries with address sanitizer (ASAN) instrumentations fails under 64-bits qemu. During initialization ASAN relies on the output from /proc/self/mmap then tries to find a big chunk for shadow memory but it is not happened.

Reserved memory for guest address space is used privately by qemu to satisfy user anonymous mmap calls but in the same time it is not hidden from an application and is reported when a user reads /proc/self/mmap. Qemu is not fully transparent for a guest.

The patch covers the case and cleans up the reserved memory map from the output.

From 167c42e6a9521c05ddd7c6dfbb108d2ae65de098 Mon Sep 17 00:00:00 2001
From: Mikhail Ilyin <[email protected]>
Date: Fri, 18 Jul 2014 10:14:06 +0400
Subject: [PATCH] Clean up the reserved memory map from /proc/self/mmap output
which doesn't belong to an emulated process.

---
  linux-user/syscall.c | 7 +++++++
  1 file changed, 7 insertions(+)
linux-user/syscall.c +7 -0
index a50229d..8f406e4 100644
@@ -5122,6 +5122,13 @@ static int open_self_maps(void *cpu_env, int fd)
              continue;
          }
          if (h2g_valid(min) && h2g_valid(max)) {
+#ifdef CONFIG_USE_GUEST_BASE
+            if (RESERVED_VA) {
+                if (mmap_next_start == h2g(max)) {
+                    continue;
+                }
+            }
+#endif
              dprintf(fd, TARGET_ABI_FMT_lx "-" TARGET_ABI_FMT_lx
                      " %c%c%c%c %08" PRIx64 " %02x:%02x %d %s%s\n",
                      h2g(min), h2g(max), flag_r, flag_w,