linux/scripts
Ard Biesheuvel 8c996940b3 kallsyms: don't overload absolute symbol type for percpu symbols
Commit c6bda7c988 ("kallsyms: fix percpu vars on x86-64 with
relocation") overloaded the 'A' (absolute) symbol type to signify that a
symbol is not subject to dynamic relocation.  However, the original A
type does not imply that at all, and depending on the version of the
toolchain, many A type symbols are emitted that are in fact relative to
the kernel text, i.e., if the kernel is relocated at runtime, these
symbols should be updated as well.

For instance, on sparc32, the following symbols are emitted as absolute
(kindly provided by Guenter Roeck):

  f035a420 A _etext
  f03d9000 A _sdata
  f03de8c4 A jiffies
  f03f8860 A _edata
  f03fc000 A __init_begin
  f041bdc8 A __init_text_end
  f0423000 A __bss_start
  f0423000 A __init_end
  f044457d A __bss_stop
  f044457d A _end

On x86_64, similar behavior can be observed:

  ffffffff81a00000 A __end_rodata_hpage_align
  ffffffff81b19000 A __vvar_page
  ffffffff81d3d000 A _end

Even if only a couple of them pass the symbol range check that results
in them to be taken into account for the final kallsyms symbol table, it
is obvious that 'A' does not mean the symbol does not need to be updated
at relocation time, and overloading its meaning to signify that is
perhaps not a good idea.

So instead, add a new percpu_absolute member to struct sym_entry, and
when --absolute-percpu is in effect, use it to record symbols whose
addresses should be emitted as final values rather than values that
still require relocation at runtime.  That way, we can drop the check
against the 'A' type.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Kees Cook <keescook@chromium.org>
Tested-by: Kees Cook <keescook@chromium.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Michal Marek <mmarek@suse.cz>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2016-03-15 16:55:16 -07:00
..
basic fixdep: constify strrcmp arguments 2015-12-07 12:42:55 +01:00
coccinelle coccinelle: tests: unsigned value cannot be lesser than zero 2016-01-12 17:47:47 +01:00
dtc scripts/dtc: Update to upstream version 9d3649bd3be245c9 2015-04-29 17:17:27 -05:00
gdb scripts/gdb: remove useless global instruction 2015-06-30 19:44:58 -07:00
genksyms genksyms: Handle string literals with spaces in reference files 2015-12-09 15:19:23 +01:00
kconfig kconfig: fix qconf segfault by deleting heap objects 2016-01-11 09:45:08 +01:00
ksymoops
mod powerpc: Simplify module TOC handling 2016-01-21 14:10:56 +11:00
package package Makefile: fix perf-tar targets when outdir is set 2015-11-24 17:49:42 +01:00
selinux selinux: explicitly declare the role "base_r" 2015-07-13 13:32:00 -04:00
tracing kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
.gitignore DocBook: Use a fixed encoding for output 2015-09-28 01:31:48 -06:00
analyze_suspend.py PM / tools: analyze_suspend.py: update to v3.0 2014-08-09 02:47:58 +02:00
asn1_compiler.c ASN.1: Copy string names to tokens in ASN.1 compiler 2015-08-07 16:26:13 +01:00
bloat-o-meter scripts/bloat-o-meter: fix python3 syntax error 2016-01-14 16:00:49 -08:00
bootgraph.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
check-lc_ctype.c DocBook: Use a fixed encoding for output 2015-09-28 01:31:48 -06:00
check_extable.sh scripts: add check_extable.sh script. 2015-04-13 21:03:02 +09:30
checkincludes.pl
checkkconfigsymbols.py checkkconfigsymbols.py: find similar symbols 2015-12-14 10:54:23 -08:00
checkpatch.pl checkpatch: fix another left brace warning 2016-03-15 16:55:16 -07:00
checkstack.pl Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2014-10-07 21:16:26 -04:00
checksyscalls.sh x86/asm/entry: Move the arch/x86/syscalls/ definitions to arch/x86/entry/syscalls/ 2015-06-04 07:37:37 +02:00
checkversion.pl
cleanfile
cleanpatch
coccicheck Coccinelle: fix incorrect -include option transformation 2015-10-26 21:32:09 +01:00
config kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
conmakehash.c kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
decode_stacktrace.sh scripts: decode_stacktrace: fix ARM architecture decoding 2015-09-04 16:54:41 -07:00
decodecode scripts/decodecode: make faulting insn ptr more robust 2013-04-29 15:54:27 -07:00
depmod.sh depmod: pass -P $CONFIG_SYMBOL_PREFIX 2013-02-22 11:52:31 +01:00
diffconfig vfs,ext2: remove CONFIG_EXT2_FS_XIP and rename CONFIG_FS_XIP to CONFIG_FS_DAX 2015-02-16 17:56:04 -08:00
docproc.c kbuild: trivial - use tabs for code indent where possible 2014-06-10 14:00:53 +02:00
export_report.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
extract-cert.c KEYS: Remove unnecessary header #inclusions from extract-cert.c 2015-09-25 16:31:45 +01:00
extract-ikconfig scripts/extract-ikconfig: Support LZ4-compressed images. 2015-04-15 14:01:12 +02:00
extract-module-sig.pl KEYS: Provide a script to extract a module signature 2015-10-21 15:18:36 +01:00
extract-sys-certs.pl KEYS: Provide a script to extract the sys cert list from a vmlinux file 2015-10-21 15:18:36 +01:00
extract-vmlinux
gcc-goto.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-ld kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-version.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-x86_32-has-stack-protector.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gcc-x86_64-has-stack-protector.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
gen_initramfs_list.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
get_maintainer.pl scripts/get_maintainer.pl: handle file names beginning with ./ 2016-01-20 17:09:18 -08:00
gfp-translate
headerdep.pl
headers.sh CRIS: Fix headers_install 2014-12-20 00:01:12 +01:00
headers_check.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
headers_install.sh Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-10-14 09:22:26 +02:00
kallsyms.c kallsyms: don't overload absolute symbol type for percpu symbols 2016-03-15 16:55:16 -07:00
Kbuild.include Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2015-09-08 14:12:19 -07:00
kernel-doc A relatively boring cycle in the docs tree. There's a few kernel-doc 2016-01-17 11:55:07 -08:00
kernel-doc-xml-ref scripts/kernel-doc: Adding cross-reference links to html documentation. 2015-08-16 22:11:16 -06:00
ld-version.sh ld-version: Fix awk regex compile failure 2016-03-13 10:54:42 +01:00
Lindent scripts/Lindent: handle missing indent gracefully 2015-09-04 16:54:41 -07:00
link-vmlinux.sh x86: kallsyms: disable absolute percpu symbols on !SMP 2016-03-15 16:55:16 -07:00
Makefile DocBook: Use a fixed encoding for output 2015-09-28 01:31:48 -06:00
Makefile.asm-generic kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
Makefile.build kbuild: Allow to specify composite modules with modname-m 2015-11-25 11:23:25 +01:00
Makefile.clean Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2015-02-19 10:07:08 -08:00
Makefile.dtbinst kbuild: include $(src)/Makefile rather than $(obj)/Makefile 2015-04-02 16:42:08 +02:00
Makefile.extrawarn kbuild: Demote 'sign-compare' warning to W=2 2016-01-12 16:07:03 +01:00
Makefile.fwinst kbuild: include $(src)/Makefile rather than $(obj)/Makefile 2015-04-02 16:42:08 +02:00
Makefile.headersinst kbuild: collect shorthands into scripts/Kbuild.include 2014-11-26 14:36:52 +01:00
Makefile.help
Makefile.host kbuild: handle the dependency of multi-objs hostprogs appropriately 2014-08-19 10:26:20 +02:00
Makefile.kasan arm64: add KASAN support 2015-10-12 17:46:36 +01:00
Makefile.lib UBSAN: run-time undefined behavior sanity checker 2016-01-20 17:09:18 -08:00
Makefile.modbuiltin
Makefile.modinst modsign: Abort modules_install when signing fails 2015-08-07 16:26:13 +01:00
Makefile.modpost modpost: Add flag -E for making section mismatches fatal 2015-10-06 10:46:21 +10:30
Makefile.modsign modsign: lookup lines ending in .ko in .mod files 2014-08-27 21:54:11 +09:30
Makefile.ubsan UBSAN: run-time undefined behavior sanity checker 2016-01-20 17:09:18 -08:00
makelst
markup_oops.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
mkcompile_h kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
mkmakefile kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
mksysmap mksysmap: Add h8300 local symbol pattern 2015-06-23 13:35:47 +09:00
mkuboot.sh
mkversion
module-common.lds kernel: add support for .init_array.* constructors 2015-02-13 21:21:42 -08:00
namespace.pl
objdiff scripts: objdiff: support directories for the augument of record command 2014-06-10 14:59:33 +02:00
patch-kernel kbuild: trivial - remove trailing spaces 2014-04-30 17:34:32 +02:00
pnmtologo.c kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
profile2linkerlist.pl kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00
prune-kernel scripts: add "prune-kernel" script to clean up old kernel images 2016-02-09 10:09:52 -08:00
recordmcount.c ftrace/scripts: Fix incorrect use of sprintf in recordmcount 2016-01-04 11:13:16 -05:00
recordmcount.h recordmcount: Fix endianness handling bug for nop_mcount 2015-11-03 10:45:26 -05:00
recordmcount.pl scripts/recordmcount.pl: support data in text section on powerpc 2016-01-13 12:35:41 +11:00
setlocalversion Fix detectition of kernel git repository in setlocalversion script [take #2] 2014-01-03 14:48:42 +01:00
show_delta kbuild: trivial - remove trailing empty lines 2014-06-10 00:04:06 +02:00
sign-file.c MODSIGN: Change from CMS to PKCS#7 signing if the openssl is too old 2015-09-25 16:31:46 +01:00
sortextable.c x86/mm: Expand the exception table logic to allow new handling options 2016-02-18 09:21:46 +01:00
sortextable.h scripts/sortextable: suppress warning: `relocs_size' may be used uninitialized 2014-10-14 02:18:23 +02:00
spelling.txt scripts/spelling.txt: add some typo-words 2015-09-04 16:54:41 -07:00
stackdelta scripts: add stackdelta script 2015-08-28 17:04:40 +02:00
stackusage scripts: add stackusage script 2015-08-28 17:04:40 +02:00
tags.sh Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2016-01-20 10:10:23 -08:00
unifdef.c
ver_linux ver_linux: proc/modules, limit text processing to 'sed' 2015-10-17 21:55:26 -07:00
xen-hypercalls.sh xen: build infrastructure for generating hypercall depending symbols 2015-03-16 14:49:13 +00:00
xz_wrap.sh kbuild: Make scripts executable 2014-08-20 16:03:45 +02:00