diff --git a/kernel/binfmt-elf-for-cr-5 b/kernel/binfmt-elf-for-cr-5 index a6c6423ef..849006cfc 100644 --- a/kernel/binfmt-elf-for-cr-5 +++ b/kernel/binfmt-elf-for-cr-5 @@ -27,16 +27,16 @@ Signed-off-by: Cyrill Gorcunov arch/x86/include/asm/elf.h | 3 arch/x86/include/asm/elf_ckpt.h | 80 ++++++++ arch/x86/kernel/Makefile | 2 - arch/x86/kernel/elf_ckpt.c | 161 +++++++++++++++++ + arch/x86/kernel/elf_ckpt.c | 161 ++++++++++++++++ arch/x86/vdso/vma.c | 22 ++ fs/Kconfig.binfmt | 11 + fs/Makefile | 1 fs/binfmt_elf.c | 17 + - fs/binfmt_elf_ckpt.c | 378 ++++++++++++++++++++++++++++++++++++++++ + fs/binfmt_elf_ckpt.c | 389 ++++++++++++++++++++++++++++++++++++++++ fs/exec.c | 27 +- include/linux/binfmts.h | 1 - include/linux/elf_ckpt.h | 97 ++++++++++ - 12 files changed, 788 insertions(+), 12 deletions(-) + include/linux/elf_ckpt.h | 97 +++++++++ + 12 files changed, 799 insertions(+), 12 deletions(-) Index: linux-2.6.git/arch/x86/include/asm/elf.h =================================================================== @@ -429,7 +429,7 @@ Index: linux-2.6.git/fs/binfmt_elf_ckpt.c =================================================================== --- /dev/null +++ linux-2.6.git/fs/binfmt_elf_ckpt.c -@@ -0,0 +1,378 @@ +@@ -0,0 +1,389 @@ +#include +#include +#include @@ -616,6 +616,11 @@ Index: linux-2.6.git/fs/binfmt_elf_ckpt.c + for (i = 0; i < nr_vma_found; i++) { + vma_entry_ptr = flex_array_get(fa, i); + ++ /* ++ * This [heap] area is not explicitly existing on old kernels ++ * so if it's not found we need to setup brk area from saved ++ * brk value. ++ */ + if (vma_entry_ptr->status & VMA_AREA_HEAP) + start_brk = vma_entry_ptr->start; + @@ -708,6 +713,12 @@ Index: linux-2.6.git/fs/binfmt_elf_ckpt.c + + bprm->p = start_stack; + ++ if (start_brk == -1UL) { ++ pr_err("elf-ckpt: Can't find brk area\n"); ++ ret = -ENOEXEC; ++ goto out_unmap; ++ } ++ + current->mm->start_code = start_code; + current->mm->end_code = end_code; + current->mm->start_data = start_data;