From: Thomas Garnier <thgarnie@google.com>
To: kernel-hardening@lists.openwall.com
Cc: Thomas Garnier <thgarnie@google.com>,
Ingo Molnar <mingo@kernel.org>,
Masahiro Yamada <yamada.masahiro@socionext.com>,
Thomas Gleixner <tglx@linutronix.de>,
Kees Cook <keescook@chromium.org>,
"Peter Zijlstra (Intel)" <peterz@infradead.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Randy Dunlap <rdunlap@infradead.org>,
Nicholas Piggin <npiggin@gmail.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH v5 16/27] compiler: Option to add PROVIDE_HIDDEN replacement for weak symbols
Date: Mon, 25 Jun 2018 15:39:04 -0700 [thread overview]
Message-ID: <20180625224014.134829-17-thgarnie@google.com> (raw)
In-Reply-To: <20180625224014.134829-1-thgarnie@google.com>
Provide an option to have a PROVIDE_HIDDEN (linker script) entry for
each weak symbol. This option solves an error in x86_64 where the linker
optimizes PIE generated code to be non-PIE because --emit-relocs was used
instead of -pie (to reduce dynamic relocations).
Signed-off-by: Thomas Garnier <thgarnie@google.com>
---
init/Kconfig | 7 +++++++
scripts/link-vmlinux.sh | 14 ++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/init/Kconfig b/init/Kconfig
index d4f90cc38ede..2d7431a8b108 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1974,6 +1974,13 @@ config ASN1
inform it as to what tags are to be expected in a stream and what
functions to call on what tags.
+config WEAK_PROVIDE_HIDDEN
+ bool
+ help
+ Generate linker script PROVIDE_HIDDEN entries for all weak symbols. It
+ allows to prevent non-PIE code being replaced by the linker if the
+ emit-relocs option is used instead of PIE (useful for x86_64 PIE).
+
source "kernel/Kconfig.locks"
config ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 4bf811c09f59..f5d31119b9d7 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -142,6 +142,17 @@ kallsyms()
${CC} ${aflags} -c -o ${2} ${afile}
}
+gen_weak_provide_hidden()
+{
+ if [ -n "${CONFIG_WEAK_PROVIDE_HIDDEN}" ]; then
+ local pattern="s/^\s\+ w \(\w\+\)$/PROVIDE_HIDDEN(\1 = .);/gp"
+ echo -e "SECTIONS {\n. = _end;" > .tmp_vmlinux_hiddenld
+ ${NM} ${1} | sed -n "${pattern}" >> .tmp_vmlinux_hiddenld
+ echo "}" >> .tmp_vmlinux_hiddenld
+ LDFLAGS_vmlinux="${LDFLAGS_vmlinux} -T .tmp_vmlinux_hiddenld"
+ fi
+}
+
# Create map file with all symbols from ${1}
# See mksymap for additional details
mksysmap()
@@ -226,6 +237,9 @@ modpost_link vmlinux.o
# modpost vmlinux.o to check for section mismatches
${MAKE} -f "${srctree}/scripts/Makefile.modpost" vmlinux.o
+# Generate weak linker script
+gen_weak_provide_hidden vmlinux.o
+
kallsymso=""
kallsyms_vmlinux=""
if [ -n "${CONFIG_KALLSYMS}" ]; then
--
2.18.0.rc2.346.g013aa6912e-goog
next prev parent reply other threads:[~2018-06-25 22:42 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20180625224014.134829-1-thgarnie@google.com>
2018-06-25 22:38 ` [PATCH v5 01/27] x86/crypto: Adapt assembly for PIE support Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 02/27] x86: Use symbol name on bug table " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 03/27] x86: Use symbol name in jump " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 04/27] x86: Add macro to get symbol address " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 05/27] x86: relocate_kernel - Adapt assembly " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 06/27] x86/entry/64: " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 07/27] x86: pm-trace - " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 08/27] x86/CPU: " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 09/27] x86/acpi: " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 10/27] x86/boot/64: " Thomas Garnier
2018-06-25 22:38 ` [PATCH v5 11/27] x86/power/64: " Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 12/27] x86/paravirt: " Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 13/27] x86/boot/64: Build head64.c as mcmodel large when PIE is enabled Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 14/27] x86/percpu: Adapt percpu for PIE support Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 15/27] compiler: Option to default to hidden symbols Thomas Garnier
2018-06-25 23:25 ` Randy Dunlap
2018-06-25 22:39 ` Thomas Garnier [this message]
2018-06-25 22:39 ` [PATCH v5 17/27] x86/relocs: Handle PIE relocations Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 18/27] xen: Adapt assembly for PIE support Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 19/27] kvm: " Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 20/27] x86: Support global stack cookie Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 21/27] x86/ftrace: Adapt function tracing for PIE support Thomas Garnier
2018-06-26 15:21 ` Steven Rostedt
2018-06-25 22:39 ` [PATCH v5 22/27] x86/modules: Add option to start module section after kernel Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 23/27] x86/modules: Adapt module loading for PIE support Thomas Garnier
2018-06-25 23:51 ` Randy Dunlap
2018-06-25 23:53 ` Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 24/27] x86/mm: Make the x86 GOT read-only Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 25/27] x86/pie: Add option to build the kernel as PIE Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 26/27] x86/relocs: Add option to generate 64-bit relocations Thomas Garnier
2018-06-25 22:39 ` [PATCH v5 27/27] x86/kaslr: Add option to extend KASLR range from 1GB to 3GB Thomas Garnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180625224014.134829-17-thgarnie@google.com \
--to=thgarnie@google.com \
--cc=keescook@chromium.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=npiggin@gmail.com \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=tglx@linutronix.de \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome