summaryrefslogtreecommitdiffstats
path: root/include/asm-generic
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2020-03-13 13:49:51 +0100
committerThomas Gleixner <tglx@linutronix.de>2020-06-11 15:14:36 +0200
commit5916d5f9b3347344a3d96ba6b54cf8e290eba96a (patch)
tree371d7a89374c7fc5f74b22b5a8210b71a76f44c6 /include/asm-generic
parent126f21f0e8d46e2c0e9daafb67546dbfb316d325 (diff)
downloadlinux-5916d5f9b3347344a3d96ba6b54cf8e290eba96a.tar.gz
linux-5916d5f9b3347344a3d96ba6b54cf8e290eba96a.tar.bz2
linux-5916d5f9b3347344a3d96ba6b54cf8e290eba96a.zip
bug: Annotate WARN/BUG/stackfail as noinstr safe
Warnings, bugs and stack protection fails from noinstr sections, e.g. low level and early entry code, are likely to be fatal. Mark them as "safe" to be invoked from noinstr protected code to avoid annotating all usage sites. Getting the information out is important. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com> Acked-by: Peter Zijlstra <peterz@infradead.org> Link: https://lkml.kernel.org/r/20200505134100.376598577@linutronix.de
Diffstat (limited to 'include/asm-generic')
-rw-r--r--include/asm-generic/bug.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
index 384b5c835ced..c94e33ae3e7b 100644
--- a/include/asm-generic/bug.h
+++ b/include/asm-generic/bug.h
@@ -83,14 +83,19 @@ extern __printf(4, 5)
void warn_slowpath_fmt(const char *file, const int line, unsigned taint,
const char *fmt, ...);
#define __WARN() __WARN_printf(TAINT_WARN, NULL)
-#define __WARN_printf(taint, arg...) \
- warn_slowpath_fmt(__FILE__, __LINE__, taint, arg)
+#define __WARN_printf(taint, arg...) do { \
+ instrumentation_begin(); \
+ warn_slowpath_fmt(__FILE__, __LINE__, taint, arg); \
+ instrumentation_end(); \
+ } while (0)
#else
extern __printf(1, 2) void __warn_printk(const char *fmt, ...);
#define __WARN() __WARN_FLAGS(BUGFLAG_TAINT(TAINT_WARN))
#define __WARN_printf(taint, arg...) do { \
+ instrumentation_begin(); \
__warn_printk(arg); \
__WARN_FLAGS(BUGFLAG_NO_CUT_HERE | BUGFLAG_TAINT(taint));\
+ instrumentation_end(); \
} while (0)
#define WARN_ON_ONCE(condition) ({ \
int __ret_warn_on = !!(condition); \