Richard Henderson <richard.hender...@linaro.org> writes:
> Follow the lead of the linux kernel in fs/binfmt_elf.c, > in which an ET_DYN executable which uses an interpreter > (usually a PIE executable) is loaded away from where the > interpreter itself will be loaded. > > Tested-by: Helge Deller <del...@gmx.de> > Reviewed-by: Helge Deller <del...@gmx.de> > Reviewed-by: Akihiko Odaki <akihiko.od...@daynix.com> > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> <snip> > @@ -3155,13 +3178,13 @@ static void load_elf_image(const char *image_name, > int image_fd, > * > * Otherwise this is ET_DYN, and we are searching for a location > * that can hold the memory space required. If the image is > - * pre-linked, LOADDR will be non-zero, and the kernel should > + * pre-linked, LOAD_ADDR will be non-zero, and the kernel should > * honor that address if it happens to be free. > * > * In both cases, we will overwrite pages in this range with mappings > * from the executable. > */ > - load_addr = target_mmap(loaddr, (size_t)hiaddr - loaddr + 1, PROT_NONE, > + load_addr = target_mmap(load_addr, (size_t)hiaddr - loaddr + 1, > PROT_NONE, > MAP_PRIVATE | MAP_ANON | MAP_NORESERVE | > (ehdr->e_type == ET_EXEC ? MAP_FIXED_NOREPLACE : > 0), > -1, 0); See previous comment about verifying address. -- Alex Bennée Virtualisation Tech Lead @ Linaro