On Wed, Aug 08, 2007 at 04:03:07PM +0200, Jiri Kosina wrote:
> @@ -870,11 +917,15 @@ static int load_elf_binary(struct linux_binprm *bprm, 
> struct pt_regs *regs)
>                        * default mmap base, as well as whatever program they
>                        * might try to exec.  This is because the brk will
>                        * follow the loader, and is not movable.  */
> +#ifdef CONFIG_X86
> +                     load_bias = 0;
> +#else
>                       load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
> +#endif
>               }
>  
>               error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
> -                             elf_prot, elf_flags);
> +                             elf_prot, elf_flags,0);
>               if (BAD_ADDR(error)) {
>                       send_sig(SIGKILL, current, 0);
>                       retval = IS_ERR((void *)error) ?

If I'm reading the above hunk correctly, this means we will randomize
all PIEs and even all dynamic linkers invoked as executables on i?86 and
x86_64, and on the rest of arches we won't randomize at all, instead
load ET_DYN objects at ELF_ET_DYN_BASE address.

But I don't see anything i?86/x86_64 specific on this.

What would make much more sense to me would be conditionalizing on
whether we are loading a dynamic linker (in which case loading it
at ELF_ET_DYN_BASE is desirable or not (PIEs, ...; and for PIEs we
want to randomize on all architectures).

So something like
                        if (elf_interpreter)
                                load_bias = 0;
                        else
                                /* Probably dynamic linker invoked as
                                   /lib*/ld*so* program args - load at
                                   ELF_ET_DYN_BASE.  */
                                load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - 
vaddr);
instead of
#ifdef CONFIG_X86
                        load_bias = 0;
#else
                        load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
#endif

        Jakub
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to