]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
objtool: Split noinstr validation from --vmlinux
authorSami Tolvanen <samitolvanen@google.com>
Wed, 30 Sep 2020 21:36:59 +0000 (14:36 -0700)
committerKees Cook <keescook@chromium.org>
Tue, 23 Feb 2021 20:46:57 +0000 (12:46 -0800)
This change adds a --noinstr flag to objtool to allow us to specify
that we're processing vmlinux.o without also enabling noinstr
validation. This is needed to avoid false positives with LTO when we
run objtool on vmlinux.o without CONFIG_DEBUG_ENTRY.

Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
scripts/link-vmlinux.sh
tools/objtool/builtin-check.c
tools/objtool/builtin.h
tools/objtool/check.c

index 423a4106f0dd1f709c40a37d91cdd04b12dbd221..18aed761f9c04aea62f293927d7020fd90c55225 100755 (executable)
@@ -106,7 +106,7 @@ objtool_link()
        local objtoolopt;
 
        if [ -n "${CONFIG_VMLINUX_VALIDATION}" ]; then
-               objtoolopt="check --vmlinux"
+               objtoolopt="check --vmlinux --noinstr"
                if [ -z "${CONFIG_FRAME_POINTER}" ]; then
                        objtoolopt="${objtoolopt} --no-fp"
                fi
index facfc10bc5dc3d4ffc7cc3f2a250ed31c7ddf09e..b84cdc72b51f1b398d7dc230bdf0304d717c8449 100644 (file)
@@ -18,7 +18,7 @@
 #include "builtin.h"
 #include "objtool.h"
 
-bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount;
+bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount, noinstr;
 
 static const char * const check_usage[] = {
        "objtool check [<options>] file.o",
@@ -34,6 +34,7 @@ const struct option check_options[] = {
        OPT_BOOLEAN('a', "uaccess", &uaccess, "enable uaccess checking"),
        OPT_BOOLEAN('s', "stats", &stats, "print statistics"),
        OPT_BOOLEAN('d', "duplicate", &validate_dup, "duplicate validation for vmlinux.o"),
+       OPT_BOOLEAN('n', "noinstr", &noinstr, "noinstr validation for vmlinux.o"),
        OPT_BOOLEAN('l', "vmlinux", &vmlinux, "vmlinux.o validation"),
        OPT_BOOLEAN('M', "mcount", &mcount, "generate __mcount_loc"),
        OPT_END(),
index 94565a72b7010ac589b5c51b92c87160fca985fa..2502bb27de171ef8702a782aef2a757aa4dbd3d1 100644 (file)
@@ -8,7 +8,7 @@
 #include <subcmd/parse-options.h>
 
 extern const struct option check_options[];
-extern bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount;
+extern bool no_fp, no_unreachable, retpoline, module, backtrace, uaccess, stats, validate_dup, vmlinux, mcount, noinstr;
 
 extern int cmd_check(int argc, const char **argv);
 extern int cmd_orc(int argc, const char **argv);
index ab87fb92793ce2cf7f24a45539cdc82f008be80a..85993e606782b3e161dd8188da76a7399c9f4cdc 100644 (file)
@@ -244,7 +244,7 @@ static void init_insn_state(struct insn_state *state, struct section *sec)
         * not correctly determine insn->call_dest->sec (external symbols do
         * not have a section).
         */
-       if (vmlinux && sec)
+       if (vmlinux && noinstr && sec)
                state->noinstr = sec->noinstr;
 }