linux-user: guard mmap_next_start from specific maps

Submitted by Alexander Graf on March 3, 2012, 11:22 p.m.

Details

Message ID 1330816936-21772-1-git-send-email-agraf@suse.de
State New
Headers show

Commit Message

Alexander Graf March 3, 2012, 11:22 p.m.
If the guest process tells us to map at a specific address, we shouldn't
increase the "last automatic mapping ended here" variable.

This patch brings the reserved_va code in line with the default case.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 linux-user/mmap.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

Comments

Paul Brook March 4, 2012, 12:43 a.m.
> If the guest process tells us to map at a specific address, we shouldn't
> increase the "last automatic mapping ended here" variable.

That sounds reasonable, in fact I'd go further.  Tests on an x86-linux machine 
(both 32-bit and 64-bit userspace) show that if the requested address is not 
available then it is completely ignored.

> +    if (start == mmap_next_start && addr >= TASK_UNMAPPED_BASE) {
> +        mmap_next_start = addr;

Code does not match description.

Paul

Patch hide | download patch | download mbox

diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index 2245f40..a0c1347 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -253,7 +253,11 @@  static abi_ulong mmap_find_vma_reserved(abi_ulong start, abi_ulong size)
             }
         }
     }
-    mmap_next_start = addr;
+
+    if (start == mmap_next_start && addr >= TASK_UNMAPPED_BASE) {
+        mmap_next_start = addr;
+    }
+
     return last_addr;
 }
 #endif