diff options
author | Kristen Carlson Accardi <[email protected]> | 2021-10-13 10:57:42 -0700 |
---|---|---|
committer | Peter Zijlstra <[email protected]> | 2021-10-27 11:07:59 +0200 |
commit | ca136cac37eb51649d52d5bc4271c55e30ed354c (patch) | |
tree | 8ed1f98c0412e994c2bc030f2c7ec87fd7a222fa | |
parent | 33f98a9798f55fd77c36ce79d8cfa5329e55a789 (diff) |
vmlinux.lds.h: Have ORC lookup cover entire _etext - _stext
When using -ffunction-sections to place each function in its own text
section (so it can be randomized at load time in the future FGKASLR
series), the linker will place most of the functions into separate .text.*
sections. SIZEOF(.text) won't work here for calculating the ORC lookup
table size, so the total text size must be calculated to include .text
AND all .text.* sections.
Signed-off-by: Kristen Carlson Accardi <[email protected]>
[ alobakin: move it to vmlinux.lds.h and make arch-indep ]
Signed-off-by: Alexander Lobakin <[email protected]>
Signed-off-by: Kees Cook <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Reviewed-by: Tony Luck <[email protected]>
Reviewed-by: Kees Cook <[email protected]>
Acked-by: Josh Poimboeuf <[email protected]>
Tested-by: Tony Luck <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index f2984af2b85b..e8234911dc18 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -869,10 +869,11 @@ KEEP(*(.orc_unwind)) \ __stop_orc_unwind = .; \ } \ + text_size = _etext - _stext; \ . = ALIGN(4); \ .orc_lookup : AT(ADDR(.orc_lookup) - LOAD_OFFSET) { \ orc_lookup = .; \ - . += (((SIZEOF(.text) + LOOKUP_BLOCK_SIZE - 1) / \ + . += (((text_size + LOOKUP_BLOCK_SIZE - 1) / \ LOOKUP_BLOCK_SIZE) + 1) * 4; \ orc_lookup_end = .; \ } |