Browse Source

powerpc: Randomise PIEs

Randomise ELF_ET_DYN_BASE, which is used when loading position independent
executables.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Anton Blanchard 16 years ago
parent
commit
501cb16d3c
2 changed files with 12 additions and 1 deletions
  1. 2 1
      arch/powerpc/include/asm/elf.h
  2. 10 0
      arch/powerpc/kernel/process.c

+ 2 - 1
arch/powerpc/include/asm/elf.h

@@ -179,7 +179,8 @@ typedef elf_fpreg_t elf_vsrreghalf_t32[ELF_NVSRHALFREG];
    the loader.  We need to make sure that it is out of the way of the program
    the loader.  We need to make sure that it is out of the way of the program
    that it will "exec", and that there is sufficient room for the brk.  */
    that it will "exec", and that there is sufficient room for the brk.  */
 
 
-#define ELF_ET_DYN_BASE         (0x20000000)
+extern unsigned long randomize_et_dyn(unsigned long base);
+#define ELF_ET_DYN_BASE		(randomize_et_dyn(0x20000000))
 
 
 /*
 /*
  * Our registers are always unsigned longs, whether we're a 32 bit
  * Our registers are always unsigned longs, whether we're a 32 bit

+ 10 - 0
arch/powerpc/kernel/process.c

@@ -1170,3 +1170,13 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
 
 
 	return ret;
 	return ret;
 }
 }
+
+unsigned long randomize_et_dyn(unsigned long base)
+{
+	unsigned long ret = PAGE_ALIGN(base + brk_rnd());
+
+	if (ret < base)
+		return base;
+
+	return ret;
+}