From: Borislav Petkov <bp@alien8.de>
To: "Luck, Tony" <tony.luck@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>, X86 ML <x86@kernel.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Taint addresses
Date: Thu, 26 May 2022 14:11:12 +0200 [thread overview]
Message-ID: <Yo9uYL9eL9KBuzam@zn.tnic> (raw)
In-Reply-To: <Yo5SupgZjT/a1p5m@zn.tnic>
I guess something like this:
...
[ 2.591532] x86/mm: Checked W+X mappings: passed, no W+X pages found.
[ 2.592678] CPU: 2 PID: 1 Comm: swapper/0 Tainted: G S C 5.18.0+ #7
[ 2.593079] Last taint addresses:
[ 2.593079] S:start_kernel+0x614/0x634
[ 2.593079] C:kernel_init+0x70/0x140
[ 2.593079] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
[ 2.593079] Call Trace:
[ 2.593079] <TASK>
[ 2.593079] dump_stack_lvl+0x38/0x49
[ 2.593079] ? rest_init+0xd0/0xd0
[ 2.593079] kernel_init+0x75/0x140
[ 2.593079] ret_from_fork+0x22/0x30
[ 2.593079] </TASK>
---
I probably should put the taint addresses after the stack trace but
other than that, it gives you where the taint was added last.
diff --git a/include/linux/panic.h b/include/linux/panic.h
index f5844908a089..7e3aeddece5f 100644
--- a/include/linux/panic.h
+++ b/include/linux/panic.h
@@ -94,5 +94,6 @@ extern const char *print_tainted(void);
extern void add_taint(unsigned flag, enum lockdep_ok);
extern int test_taint(unsigned flag);
extern unsigned long get_taint(void);
+void print_tainted_addresses(const char *log_lvl);
#endif /* _LINUX_PANIC_H */
diff --git a/kernel/panic.c b/kernel/panic.c
index eb4dfb932c85..78b541c8da99 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -49,6 +49,7 @@ unsigned int __read_mostly sysctl_oops_all_cpu_backtrace;
int panic_on_oops = CONFIG_PANIC_ON_OOPS_VALUE;
static unsigned long tainted_mask =
IS_ENABLED(CONFIG_GCC_PLUGIN_RANDSTRUCT) ? (1 << TAINT_RANDSTRUCT) : 0;
+static unsigned long taint_addrs[TAINT_FLAGS_COUNT];
static int pause_on_oops;
static int pause_on_oops_flag;
static DEFINE_SPINLOCK(pause_on_oops_lock);
@@ -437,6 +438,23 @@ const char *print_tainted(void)
return buf;
}
+void print_tainted_addresses(const char *log_lvl)
+{
+ int i;
+
+ if (!tainted_mask)
+ return;
+
+ printk("%sLast taint addresses:\n", log_lvl);
+
+ for (i = 0; i < TAINT_FLAGS_COUNT; i++) {
+ const struct taint_flag *t = &taint_flags[i];
+
+ if (test_bit(i, &tainted_mask))
+ printk("%s %c:%pS\n", log_lvl, t->c_true, (void *)taint_addrs[i]);
+ }
+}
+
int test_taint(unsigned flag)
{
return test_bit(flag, &tainted_mask);
@@ -461,7 +479,11 @@ void add_taint(unsigned flag, enum lockdep_ok lockdep_ok)
if (lockdep_ok == LOCKDEP_NOW_UNRELIABLE && __debug_locks_off())
pr_warn("Disabling lock debugging due to kernel taint\n");
+ if (WARN_ON_ONCE(flag >= TAINT_FLAGS_COUNT))
+ return;
+
set_bit(flag, &tainted_mask);
+ taint_addrs[flag] = _RET_IP_;
if (tainted_mask & panic_on_taint) {
panic_on_taint = 0;
diff --git a/lib/dump_stack.c b/lib/dump_stack.c
index 6b7f1bf6715d..595fa8757916 100644
--- a/lib/dump_stack.c
+++ b/lib/dump_stack.c
@@ -62,6 +62,8 @@ void dump_stack_print_info(const char *log_lvl)
(int)strcspn(init_utsname()->version, " "),
init_utsname()->version, BUILD_ID_VAL);
+ print_tainted_addresses(log_lvl);
+
if (dump_stack_arch_desc_str[0] != '\0')
printk("%sHardware name: %s\n",
log_lvl, dump_stack_arch_desc_str);
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette
next prev parent reply other threads:[~2022-05-26 12:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-24 18:53 [RFC PATCH 0/3] x86/microcode: Drop old interface and default-disable late loading Borislav Petkov
2022-05-24 18:53 ` [RFC PATCH 1/3] x86/microcode: Rip out the OLD_INTERFACE Borislav Petkov
2022-05-24 18:53 ` [RFC PATCH 2/3] x86/microcode: Default-disable late loading Borislav Petkov
2022-05-27 10:37 ` Ingo Molnar
2022-05-27 10:58 ` Borislav Petkov
2022-05-24 18:53 ` [RFC PATCH 3/3] x86/microcode: Taint and warn on " Borislav Petkov
2022-05-25 1:03 ` Luck, Tony
2022-05-25 6:59 ` Peter Zijlstra
2022-05-25 7:37 ` Borislav Petkov
2022-05-25 14:50 ` Luck, Tony
2022-05-25 15:28 ` Borislav Petkov
2022-05-25 15:40 ` Luck, Tony
2022-05-25 16:00 ` Borislav Petkov
2022-05-26 12:11 ` Borislav Petkov [this message]
2022-05-26 16:41 ` Taint addresses Luck, Tony
2022-05-27 9:45 ` Borislav Petkov
2022-05-25 10:03 ` [RFC PATCH 3/3] x86/microcode: Taint and warn on late loading Peter Zijlstra
2022-05-25 12:52 ` [RFC PATCH -v2] " Borislav Petkov
2022-05-25 13:55 ` [PATCH 4/3] x86/microcode: Remove unnecessary perf callback default-disable " Borislav Petkov
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=Yo9uYL9eL9KBuzam@zn.tnic \
--to=bp@alien8.de \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).