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

Reply via email to