mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-13 16:40:22 +00:00
d69911a68c
Commit e6023367d779 ("x86, kaslr: Prevent .bss from overlaping initrd") added Perl to the required build environment. This reimplements in shell the Perl script used to find the size of the kernel with bss and brk added. Signed-off-by: Kees Cook <keescook@chromium.org> Reported-by: Rob Landley <rob@landley.net> Acked-by: Rob Landley <rob@landley.net> Cc: Anca Emanuel <anca.emanuel@gmail.com> Cc: Fengguang Wu <fengguang.wu@intel.com> Cc: Junjie Mao <eternal.n08@gmail.com> Cc: Kees Cook <keescook@chromium.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
43 lines
1.0 KiB
Bash
43 lines
1.0 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Calculate the amount of space needed to run the kernel, including room for
|
|
# the .bss and .brk sections.
|
|
#
|
|
# Usage:
|
|
# objdump -h a.out | sh calc_run_size.sh
|
|
|
|
NUM='\([0-9a-fA-F]*[ \t]*\)'
|
|
OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"$NUM$NUM$NUM$NUM"'.*/\1\4/p')
|
|
if [ -z "$OUT" ] ; then
|
|
echo "Never found .bss or .brk file offset" >&2
|
|
exit 1
|
|
fi
|
|
|
|
OUT=$(echo ${OUT# })
|
|
sizeA=$(printf "%d" 0x${OUT%% *})
|
|
OUT=${OUT#* }
|
|
offsetA=$(printf "%d" 0x${OUT%% *})
|
|
OUT=${OUT#* }
|
|
sizeB=$(printf "%d" 0x${OUT%% *})
|
|
OUT=${OUT#* }
|
|
offsetB=$(printf "%d" 0x${OUT%% *})
|
|
|
|
run_size=$(( $offsetA + $sizeA + $sizeB ))
|
|
|
|
# BFD linker shows the same file offset in ELF.
|
|
if [ "$offsetA" -ne "$offsetB" ] ; then
|
|
# Gold linker shows them as consecutive.
|
|
endB=$(( $offsetB + $sizeB ))
|
|
if [ "$endB" != "$run_size" ] ; then
|
|
printf "sizeA: 0x%x\n" $sizeA >&2
|
|
printf "offsetA: 0x%x\n" $offsetA >&2
|
|
printf "sizeB: 0x%x\n" $sizeB >&2
|
|
printf "offsetB: 0x%x\n" $offsetB >&2
|
|
echo ".bss and .brk are non-contiguous" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
printf "%d\n" $run_size
|
|
exit 0
|