Vincent Fazio <vfa...@xes-inc.com> writes:
> From: Vincent Fazio <vfa...@gmail.com> > > Previously, pgd_find_hole_fallback assumed that if the build host's libc > had MAP_FIXED_NOREPLACE defined that the address returned by mmap would > match the requested address. This is not a safe assumption for Linux > kernels prior to 4.17 It doesn't as we have in osdep.h: #ifndef MAP_FIXED_NOREPLACE #define MAP_FIXED_NOREPLACE 0 #endif which is to say to assume if MAP_FIXED_NOREPLACE is defined the kernel should have given us what we want otherwise we do the check. > > Now, we always compare mmap's resultant address with the requested > address and no longer short-circuit based on MAP_FIXED_NOREPLACE. > > Fixes: 2667e069e7b5 ("linux-user: don't use MAP_FIXED in > pgd_find_hole_fallback") > Signed-off-by: Vincent Fazio <vfa...@gmail.com> > --- > linux-user/elfload.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/linux-user/elfload.c b/linux-user/elfload.c > index 5f5f23d2e5..8d425f9ed0 100644 > --- a/linux-user/elfload.c > +++ b/linux-user/elfload.c > @@ -2217,8 +2217,7 @@ static uintptr_t pgd_find_hole_fallback(uintptr_t > guest_size, uintptr_t brk, > PROT_NONE, flags, -1, 0); > if (mmap_start != MAP_FAILED) { > munmap(mmap_start, guest_size); > - if (MAP_FIXED_NOREPLACE != 0 || > - mmap_start == (void *) align_start) { > + if (mmap_start == (void *) align_start) { > return (uintptr_t) mmap_start + offset; > } > } -- Alex Bennée