From 5b960f01828aedfc68f51291d5cad62db4eb31c6 Mon Sep 17 00:00:00 2001 From: Matthieu Volat Date: Mon, 7 Nov 2016 14:17:15 +0100 Subject: [PATCH] When mmap-ing, ensute that offset is set to 0 if anon mmap Linux tolerate non-zero offset parameter (and ignore it), but others do not. --- src/xbt/mmalloc/mmorecore.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/xbt/mmalloc/mmorecore.c b/src/xbt/mmalloc/mmorecore.c index 5227d08d20..e876dd2ba5 100644 --- a/src/xbt/mmalloc/mmorecore.c +++ b/src/xbt/mmalloc/mmorecore.c @@ -45,6 +45,11 @@ ? -1 \ : (MDP) -> fd) +/* Return 0if MDP uses anonymous mapping. Otherwise, return off */ +#define MAP_ANON_OR_OFFSET(MDP, off) (((MDP) -> flags & MMALLOC_ANONYMOUS) \ + ? 0 \ + : off) + /** @brief Add memoty to this heap * * Get core for the memory region specified by MDP, using SIZE as the @@ -119,7 +124,7 @@ void *mmorecore(struct mdesc *mdp, ssize_t size) */ mapto = mmap(mdp->top, mapbytes, PROT_READ | PROT_WRITE, MAP_PRIVATE_OR_SHARED(mdp) | MAP_IS_ANONYMOUS(mdp) | - MAP_FIXED, MAP_ANON_OR_FD(mdp), foffset); + MAP_FIXED, MAP_ANON_OR_FD(mdp), MAP_ANON_OR_OFFSET(mdp, foffset)); if (mapto == MAP_FAILED) { char buff[1024]; -- 2.20.1