* [PATCH 0/3] noinstr fixes
@ 2023-04-12 17:24 Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation Josh Poimboeuf
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Josh Poimboeuf @ 2023-04-12 17:24 UTC (permalink / raw)
To: x86; +Cc: linux-kernel, Peter Zijlstra, frederic, paulmck, keescook
Fix a few noinstr violations reported by objtool.
Josh Poimboeuf (3):
context_tracking: Fix KCSAN noinstr violation
sched: Fix KCSAN noinstr violation
lkdtm/stackleak: Fix noinstr violation
drivers/misc/lkdtm/stackleak.c | 6 ++++++
include/linux/context_tracking.h | 2 +-
include/linux/sched/task_stack.h | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation
2023-04-12 17:24 [PATCH 0/3] noinstr fixes Josh Poimboeuf
@ 2023-04-12 17:24 ` Josh Poimboeuf
2023-04-13 13:58 ` Frederic Weisbecker
2023-04-14 14:47 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 2/3] sched: " Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 3/3] lkdtm/stackleak: Fix " Josh Poimboeuf
2 siblings, 2 replies; 8+ messages in thread
From: Josh Poimboeuf @ 2023-04-12 17:24 UTC (permalink / raw)
To: x86; +Cc: linux-kernel, Peter Zijlstra, frederic, paulmck, keescook
With KCSAN enabled, even empty inline stubs can be out-of-lined.
Force the context_tracking_guest_exit() stub inline.
Fixes the following warnings:
vmlinux.o: warning: objtool: vmx_vcpu_enter_exit+0x1be: call to context_tracking_guest_exit() leaves .noinstr.text section
vmlinux.o: warning: objtool: svm_vcpu_enter_exit+0x85: call to context_tracking_guest_exit() leaves .noinstr.text section
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
---
include/linux/context_tracking.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h
index d4afa8508a80..5ae3abd767b4 100644
--- a/include/linux/context_tracking.h
+++ b/include/linux/context_tracking.h
@@ -97,7 +97,7 @@ static inline int exception_enter(void) { return 0; }
static inline void exception_exit(enum ctx_state prev_ctx) { }
static inline int ct_state(void) { return -1; }
static __always_inline bool context_tracking_guest_enter(void) { return false; }
-static inline void context_tracking_guest_exit(void) { }
+static __always_inline void context_tracking_guest_exit(void) { }
#define CT_WARN_ON(cond) do { } while (0)
#endif /* !CONFIG_CONTEXT_TRACKING_USER */
--
2.39.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] sched: Fix KCSAN noinstr violation
2023-04-12 17:24 [PATCH 0/3] noinstr fixes Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation Josh Poimboeuf
@ 2023-04-12 17:24 ` Josh Poimboeuf
2023-04-14 14:47 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 3/3] lkdtm/stackleak: Fix " Josh Poimboeuf
2 siblings, 1 reply; 8+ messages in thread
From: Josh Poimboeuf @ 2023-04-12 17:24 UTC (permalink / raw)
To: x86; +Cc: linux-kernel, Peter Zijlstra, frederic, paulmck, keescook
With KCSAN enabled, end_of_stack() can get out-of-lined. Force it
inline.
Fixes the following warnings:
vmlinux.o: warning: objtool: check_stackleak_irqoff+0x2b: call to end_of_stack() leaves .noinstr.text section
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
---
include/linux/sched/task_stack.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/sched/task_stack.h b/include/linux/sched/task_stack.h
index 5e799a47431e..f158b025c175 100644
--- a/include/linux/sched/task_stack.h
+++ b/include/linux/sched/task_stack.h
@@ -23,7 +23,7 @@ static __always_inline void *task_stack_page(const struct task_struct *task)
#define setup_thread_stack(new,old) do { } while(0)
-static inline unsigned long *end_of_stack(const struct task_struct *task)
+static __always_inline unsigned long *end_of_stack(const struct task_struct *task)
{
#ifdef CONFIG_STACK_GROWSUP
return (unsigned long *)((unsigned long)task->stack + THREAD_SIZE) - 1;
--
2.39.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] lkdtm/stackleak: Fix noinstr violation
2023-04-12 17:24 [PATCH 0/3] noinstr fixes Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 2/3] sched: " Josh Poimboeuf
@ 2023-04-12 17:24 ` Josh Poimboeuf
2023-04-14 14:47 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2 siblings, 1 reply; 8+ messages in thread
From: Josh Poimboeuf @ 2023-04-12 17:24 UTC (permalink / raw)
To: x86; +Cc: linux-kernel, Peter Zijlstra, frederic, paulmck, keescook
Fixes the following warning:
vmlinux.o: warning: objtool: check_stackleak_irqoff+0x2b6: call to _printk() leaves .noinstr.text section
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
---
drivers/misc/lkdtm/stackleak.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/misc/lkdtm/stackleak.c b/drivers/misc/lkdtm/stackleak.c
index 025b133297a6..f1d022160913 100644
--- a/drivers/misc/lkdtm/stackleak.c
+++ b/drivers/misc/lkdtm/stackleak.c
@@ -43,12 +43,14 @@ static void noinstr check_stackleak_irqoff(void)
* STACK_END_MAGIC, and in either casee something is seriously wrong.
*/
if (current_sp < task_stack_low || current_sp >= task_stack_high) {
+ instrumentation_begin();
pr_err("FAIL: current_stack_pointer (0x%lx) outside of task stack bounds [0x%lx..0x%lx]\n",
current_sp, task_stack_low, task_stack_high - 1);
test_failed = true;
goto out;
}
if (lowest_sp < task_stack_low || lowest_sp >= task_stack_high) {
+ instrumentation_begin();
pr_err("FAIL: current->lowest_stack (0x%lx) outside of task stack bounds [0x%lx..0x%lx]\n",
lowest_sp, task_stack_low, task_stack_high - 1);
test_failed = true;
@@ -86,11 +88,14 @@ static void noinstr check_stackleak_irqoff(void)
if (*(unsigned long *)poison_low == STACKLEAK_POISON)
continue;
+ instrumentation_begin();
pr_err("FAIL: non-poison value %lu bytes below poison boundary: 0x%lx\n",
poison_high - poison_low, *(unsigned long *)poison_low);
test_failed = true;
+ goto out;
}
+ instrumentation_begin();
pr_info("stackleak stack usage:\n"
" high offset: %lu bytes\n"
" current: %lu bytes\n"
@@ -113,6 +118,7 @@ static void noinstr check_stackleak_irqoff(void)
} else {
pr_info("OK: the rest of the thread stack is properly erased\n");
}
+ instrumentation_end();
}
static void lkdtm_STACKLEAK_ERASING(void)
--
2.39.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation
2023-04-12 17:24 ` [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation Josh Poimboeuf
@ 2023-04-13 13:58 ` Frederic Weisbecker
2023-04-14 14:47 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
1 sibling, 0 replies; 8+ messages in thread
From: Frederic Weisbecker @ 2023-04-13 13:58 UTC (permalink / raw)
To: Josh Poimboeuf; +Cc: x86, linux-kernel, Peter Zijlstra, paulmck, keescook
Le Wed, Apr 12, 2023 at 10:24:06AM -0700, Josh Poimboeuf a écrit :
> With KCSAN enabled, even empty inline stubs can be out-of-lined.
>
> Force the context_tracking_guest_exit() stub inline.
>
> Fixes the following warnings:
>
> vmlinux.o: warning: objtool: vmx_vcpu_enter_exit+0x1be: call to context_tracking_guest_exit() leaves .noinstr.text section
> vmlinux.o: warning: objtool: svm_vcpu_enter_exit+0x85: call to context_tracking_guest_exit() leaves .noinstr.text section
>
> Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Acked-by: Frederic Weisbecker <frederic@kernel.org>
Thanks!
^ permalink raw reply [flat|nested] 8+ messages in thread
* [tip: objtool/core] context_tracking: Fix KCSAN noinstr violation
2023-04-12 17:24 ` [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation Josh Poimboeuf
2023-04-13 13:58 ` Frederic Weisbecker
@ 2023-04-14 14:47 ` tip-bot2 for Josh Poimboeuf
1 sibling, 0 replies; 8+ messages in thread
From: tip-bot2 for Josh Poimboeuf @ 2023-04-14 14:47 UTC (permalink / raw)
To: linux-tip-commits
Cc: Josh Poimboeuf, Peter Zijlstra (Intel), x86, linux-kernel
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: e8deb00c0c4808654d1bf96a8f79cf1deb59b631
Gitweb: https://git.kernel.org/tip/e8deb00c0c4808654d1bf96a8f79cf1deb59b631
Author: Josh Poimboeuf <jpoimboe@kernel.org>
AuthorDate: Wed, 12 Apr 2023 10:24:06 -07:00
Committer: Peter Zijlstra <peterz@infradead.org>
CommitterDate: Fri, 14 Apr 2023 16:08:27 +02:00
context_tracking: Fix KCSAN noinstr violation
With KCSAN enabled, even empty inline stubs can be out-of-lined.
Force the context_tracking_guest_exit() stub inline.
Fixes the following warnings:
vmlinux.o: warning: objtool: vmx_vcpu_enter_exit+0x1be: call to context_tracking_guest_exit() leaves .noinstr.text section
vmlinux.o: warning: objtool: svm_vcpu_enter_exit+0x85: call to context_tracking_guest_exit() leaves .noinstr.text section
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/dc93f45abdec90c171108b4b590b7fff5790963c.1681320026.git.jpoimboe@kernel.org
---
include/linux/context_tracking.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h
index d4afa85..5ae3abd 100644
--- a/include/linux/context_tracking.h
+++ b/include/linux/context_tracking.h
@@ -97,7 +97,7 @@ static inline int exception_enter(void) { return 0; }
static inline void exception_exit(enum ctx_state prev_ctx) { }
static inline int ct_state(void) { return -1; }
static __always_inline bool context_tracking_guest_enter(void) { return false; }
-static inline void context_tracking_guest_exit(void) { }
+static __always_inline void context_tracking_guest_exit(void) { }
#define CT_WARN_ON(cond) do { } while (0)
#endif /* !CONFIG_CONTEXT_TRACKING_USER */
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [tip: objtool/core] lkdtm/stackleak: Fix noinstr violation
2023-04-12 17:24 ` [PATCH 3/3] lkdtm/stackleak: Fix " Josh Poimboeuf
@ 2023-04-14 14:47 ` tip-bot2 for Josh Poimboeuf
0 siblings, 0 replies; 8+ messages in thread
From: tip-bot2 for Josh Poimboeuf @ 2023-04-14 14:47 UTC (permalink / raw)
To: linux-tip-commits
Cc: Josh Poimboeuf, Peter Zijlstra (Intel), x86, linux-kernel
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: f571da059f86fd9d432aea32c9c7e5aaa53245d8
Gitweb: https://git.kernel.org/tip/f571da059f86fd9d432aea32c9c7e5aaa53245d8
Author: Josh Poimboeuf <jpoimboe@kernel.org>
AuthorDate: Wed, 12 Apr 2023 10:24:08 -07:00
Committer: Peter Zijlstra <peterz@infradead.org>
CommitterDate: Fri, 14 Apr 2023 16:08:26 +02:00
lkdtm/stackleak: Fix noinstr violation
Fixes the following warning:
vmlinux.o: warning: objtool: check_stackleak_irqoff+0x2b6: call to _printk() leaves .noinstr.text section
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/ee5209f53aa0a62aea58be18f2b78b17606779a6.1681320026.git.jpoimboe@kernel.org
---
drivers/misc/lkdtm/stackleak.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/misc/lkdtm/stackleak.c b/drivers/misc/lkdtm/stackleak.c
index 025b133..f1d0221 100644
--- a/drivers/misc/lkdtm/stackleak.c
+++ b/drivers/misc/lkdtm/stackleak.c
@@ -43,12 +43,14 @@ static void noinstr check_stackleak_irqoff(void)
* STACK_END_MAGIC, and in either casee something is seriously wrong.
*/
if (current_sp < task_stack_low || current_sp >= task_stack_high) {
+ instrumentation_begin();
pr_err("FAIL: current_stack_pointer (0x%lx) outside of task stack bounds [0x%lx..0x%lx]\n",
current_sp, task_stack_low, task_stack_high - 1);
test_failed = true;
goto out;
}
if (lowest_sp < task_stack_low || lowest_sp >= task_stack_high) {
+ instrumentation_begin();
pr_err("FAIL: current->lowest_stack (0x%lx) outside of task stack bounds [0x%lx..0x%lx]\n",
lowest_sp, task_stack_low, task_stack_high - 1);
test_failed = true;
@@ -86,11 +88,14 @@ static void noinstr check_stackleak_irqoff(void)
if (*(unsigned long *)poison_low == STACKLEAK_POISON)
continue;
+ instrumentation_begin();
pr_err("FAIL: non-poison value %lu bytes below poison boundary: 0x%lx\n",
poison_high - poison_low, *(unsigned long *)poison_low);
test_failed = true;
+ goto out;
}
+ instrumentation_begin();
pr_info("stackleak stack usage:\n"
" high offset: %lu bytes\n"
" current: %lu bytes\n"
@@ -113,6 +118,7 @@ out:
} else {
pr_info("OK: the rest of the thread stack is properly erased\n");
}
+ instrumentation_end();
}
static void lkdtm_STACKLEAK_ERASING(void)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [tip: objtool/core] sched: Fix KCSAN noinstr violation
2023-04-12 17:24 ` [PATCH 2/3] sched: " Josh Poimboeuf
@ 2023-04-14 14:47 ` tip-bot2 for Josh Poimboeuf
0 siblings, 0 replies; 8+ messages in thread
From: tip-bot2 for Josh Poimboeuf @ 2023-04-14 14:47 UTC (permalink / raw)
To: linux-tip-commits
Cc: Josh Poimboeuf, Peter Zijlstra (Intel), x86, linux-kernel
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: e0b081d17a9f4e5c0cbb0e5fbeb1abe3de0f7e4e
Gitweb: https://git.kernel.org/tip/e0b081d17a9f4e5c0cbb0e5fbeb1abe3de0f7e4e
Author: Josh Poimboeuf <jpoimboe@kernel.org>
AuthorDate: Wed, 12 Apr 2023 10:24:07 -07:00
Committer: Peter Zijlstra <peterz@infradead.org>
CommitterDate: Fri, 14 Apr 2023 16:08:26 +02:00
sched: Fix KCSAN noinstr violation
With KCSAN enabled, end_of_stack() can get out-of-lined. Force it
inline.
Fixes the following warnings:
vmlinux.o: warning: objtool: check_stackleak_irqoff+0x2b: call to end_of_stack() leaves .noinstr.text section
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/cc1b4d73d3a428a00d206242a68fdf99a934ca7b.1681320026.git.jpoimboe@kernel.org
---
include/linux/sched/task_stack.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/linux/sched/task_stack.h b/include/linux/sched/task_stack.h
index 5e799a4..f158b02 100644
--- a/include/linux/sched/task_stack.h
+++ b/include/linux/sched/task_stack.h
@@ -23,7 +23,7 @@ static __always_inline void *task_stack_page(const struct task_struct *task)
#define setup_thread_stack(new,old) do { } while(0)
-static inline unsigned long *end_of_stack(const struct task_struct *task)
+static __always_inline unsigned long *end_of_stack(const struct task_struct *task)
{
#ifdef CONFIG_STACK_GROWSUP
return (unsigned long *)((unsigned long)task->stack + THREAD_SIZE) - 1;
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-04-14 14:48 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-12 17:24 [PATCH 0/3] noinstr fixes Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 1/3] context_tracking: Fix KCSAN noinstr violation Josh Poimboeuf
2023-04-13 13:58 ` Frederic Weisbecker
2023-04-14 14:47 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 2/3] sched: " Josh Poimboeuf
2023-04-14 14:47 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
2023-04-12 17:24 ` [PATCH 3/3] lkdtm/stackleak: Fix " Josh Poimboeuf
2023-04-14 14:47 ` [tip: objtool/core] " tip-bot2 for Josh Poimboeuf
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.