* [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c
@ 2022-05-23 14:51 andrey.konovalov
2022-05-23 14:51 ` [PATCH v2 2/2] arm64: stacktrace: use non-atomic __set_bit andrey.konovalov
2022-06-23 19:31 ` [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c Will Deacon
0 siblings, 2 replies; 5+ messages in thread
From: andrey.konovalov @ 2022-05-23 14:51 UTC (permalink / raw)
To: Will Deacon, Catalin Marinas
Cc: Andrey Konovalov, Marco Elver, Alexander Potapenko,
Dmitry Vyukov, Andrey Ryabinin, kasan-dev, Vincenzo Frascino,
Mark Rutland, linux-arm-kernel, linux-kernel, Andrey Konovalov
From: Andrey Konovalov <andreyknvl@google.com>
Disable KASAN instrumentation of arch/arm64/kernel/stacktrace.c.
This speeds up Generic KASAN by 5-20%.
As a side-effect, KASAN is now unable to detect bugs in the stack trace
collection code. This is taken as an acceptable downside.
Also replace READ_ONCE_NOCHECK() with READ_ONCE() in stacktrace.c.
As the file is now not instrumented, there is no need to use the
NOCHECK version of READ_ONCE().
Suggested-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
Changes v1->v2:
- Updated the comment in Makefile as suggested by Mark.
---
arch/arm64/kernel/Makefile | 5 +++++
arch/arm64/kernel/stacktrace.c | 4 ++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
index fa7981d0d917..7075a9c6a4a6 100644
--- a/arch/arm64/kernel/Makefile
+++ b/arch/arm64/kernel/Makefile
@@ -14,6 +14,11 @@ CFLAGS_REMOVE_return_address.o = $(CC_FLAGS_FTRACE)
CFLAGS_REMOVE_syscall.o = -fstack-protector -fstack-protector-strong
CFLAGS_syscall.o += -fno-stack-protector
+# When KASAN is enabled, a stack trace is recorded for every alloc/free, which
+# can significantly impact performance. Avoid instrumenting the stack trace
+# collection code to minimize this impact.
+KASAN_SANITIZE_stacktrace.o := n
+
# It's not safe to invoke KCOV when portions of the kernel environment aren't
# available or are out-of-sync with HW state. Since `noinstr` doesn't always
# inhibit KCOV instrumentation, disable it for the entire compilation unit.
diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
index e4103e085681..33e96ae4b15f 100644
--- a/arch/arm64/kernel/stacktrace.c
+++ b/arch/arm64/kernel/stacktrace.c
@@ -110,8 +110,8 @@ static int notrace unwind_frame(struct task_struct *tsk,
* Record this frame record's values and location. The prev_fp and
* prev_type are only meaningful to the next unwind_frame() invocation.
*/
- frame->fp = READ_ONCE_NOCHECK(*(unsigned long *)(fp));
- frame->pc = READ_ONCE_NOCHECK(*(unsigned long *)(fp + 8));
+ frame->fp = READ_ONCE(*(unsigned long *)(fp));
+ frame->pc = READ_ONCE(*(unsigned long *)(fp + 8));
frame->prev_fp = fp;
frame->prev_type = info.type;
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] arm64: stacktrace: use non-atomic __set_bit
2022-05-23 14:51 [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c andrey.konovalov
@ 2022-05-23 14:51 ` andrey.konovalov
2022-06-23 19:31 ` [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c Will Deacon
1 sibling, 0 replies; 5+ messages in thread
From: andrey.konovalov @ 2022-05-23 14:51 UTC (permalink / raw)
To: Will Deacon, Catalin Marinas
Cc: Andrey Konovalov, Marco Elver, Alexander Potapenko,
Dmitry Vyukov, Andrey Ryabinin, kasan-dev, Vincenzo Frascino,
Mark Rutland, linux-arm-kernel, linux-kernel, Andrey Konovalov
From: Andrey Konovalov <andreyknvl@google.com>
Use the non-atomic version of set_bit() in arch/arm64/kernel/stacktrace.c,
as there is no concurrent accesses to frame->prev_type.
This speeds up stack trace collection and improves the boot time of
Generic KASAN by 2-5%.
Suggested-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
arch/arm64/kernel/stacktrace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
index 33e96ae4b15f..03593d451b0a 100644
--- a/arch/arm64/kernel/stacktrace.c
+++ b/arch/arm64/kernel/stacktrace.c
@@ -103,7 +103,7 @@ static int notrace unwind_frame(struct task_struct *tsk,
if (fp <= frame->prev_fp)
return -EINVAL;
} else {
- set_bit(frame->prev_type, frame->stacks_done);
+ __set_bit(frame->prev_type, frame->stacks_done);
}
/*
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c
2022-05-23 14:51 [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c andrey.konovalov
2022-05-23 14:51 ` [PATCH v2 2/2] arm64: stacktrace: use non-atomic __set_bit andrey.konovalov
@ 2022-06-23 19:31 ` Will Deacon
2022-06-26 9:21 ` Mark Rutland
2022-06-28 13:14 ` Andrey Konovalov
1 sibling, 2 replies; 5+ messages in thread
From: Will Deacon @ 2022-06-23 19:31 UTC (permalink / raw)
To: andrey.konovalov, Catalin Marinas
Cc: kernel-team, Will Deacon, Alexander Potapenko, Mark Rutland,
Dmitry Vyukov, linux-arm-kernel, Vincenzo Frascino,
Andrey Konovalov, kasan-dev, Andrey Konovalov, Marco Elver,
Andrey Ryabinin, linux-kernel
On Mon, 23 May 2022 16:51:51 +0200, andrey.konovalov@linux.dev wrote:
> From: Andrey Konovalov <andreyknvl@google.com>
>
> Disable KASAN instrumentation of arch/arm64/kernel/stacktrace.c.
>
> This speeds up Generic KASAN by 5-20%.
>
> As a side-effect, KASAN is now unable to detect bugs in the stack trace
> collection code. This is taken as an acceptable downside.
>
> [...]
Applied to arm64 (for-next/stacktrace), thanks! I had to fix conflicts
in both of the patches, so please can you take a quick look at the result?
[1/2] arm64: kasan: do not instrument stacktrace.c
https://git.kernel.org/arm64/c/802b91118d11
[2/2] arm64: stacktrace: use non-atomic __set_bit
https://git.kernel.org/arm64/c/446297b28a21
Cheers,
--
Will
https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c
2022-06-23 19:31 ` [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c Will Deacon
@ 2022-06-26 9:21 ` Mark Rutland
2022-06-28 13:14 ` Andrey Konovalov
1 sibling, 0 replies; 5+ messages in thread
From: Mark Rutland @ 2022-06-26 9:21 UTC (permalink / raw)
To: Will Deacon
Cc: andrey.konovalov, Catalin Marinas, kernel-team,
Alexander Potapenko, Dmitry Vyukov, linux-arm-kernel,
Vincenzo Frascino, Andrey Konovalov, kasan-dev, Andrey Konovalov,
Marco Elver, Andrey Ryabinin, linux-kernel
On Thu, Jun 23, 2022 at 08:31:32PM +0100, Will Deacon wrote:
> On Mon, 23 May 2022 16:51:51 +0200, andrey.konovalov@linux.dev wrote:
> > From: Andrey Konovalov <andreyknvl@google.com>
> >
> > Disable KASAN instrumentation of arch/arm64/kernel/stacktrace.c.
> >
> > This speeds up Generic KASAN by 5-20%.
> >
> > As a side-effect, KASAN is now unable to detect bugs in the stack trace
> > collection code. This is taken as an acceptable downside.
> >
> > [...]
>
> Applied to arm64 (for-next/stacktrace), thanks! I had to fix conflicts
> in both of the patches, so please can you take a quick look at the result?
>
> [1/2] arm64: kasan: do not instrument stacktrace.c
> https://git.kernel.org/arm64/c/802b91118d11
> [2/2] arm64: stacktrace: use non-atomic __set_bit
> https://git.kernel.org/arm64/c/446297b28a21
I take it that was just the s/frame/state/ conflict?
FWIW, that looks good to me; thanks for sorting that out!
Mark.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c
2022-06-23 19:31 ` [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c Will Deacon
2022-06-26 9:21 ` Mark Rutland
@ 2022-06-28 13:14 ` Andrey Konovalov
1 sibling, 0 replies; 5+ messages in thread
From: Andrey Konovalov @ 2022-06-28 13:14 UTC (permalink / raw)
To: Will Deacon
Cc: andrey.konovalov, Catalin Marinas, kernel-team,
Alexander Potapenko, Mark Rutland, Dmitry Vyukov, Linux ARM,
Vincenzo Frascino, kasan-dev, Andrey Konovalov, Marco Elver,
Andrey Ryabinin, LKML
On Thu, Jun 23, 2022 at 9:31 PM Will Deacon <will@kernel.org> wrote:
>
> On Mon, 23 May 2022 16:51:51 +0200, andrey.konovalov@linux.dev wrote:
> > From: Andrey Konovalov <andreyknvl@google.com>
> >
> > Disable KASAN instrumentation of arch/arm64/kernel/stacktrace.c.
> >
> > This speeds up Generic KASAN by 5-20%.
> >
> > As a side-effect, KASAN is now unable to detect bugs in the stack trace
> > collection code. This is taken as an acceptable downside.
> >
> > [...]
>
> Applied to arm64 (for-next/stacktrace), thanks! I had to fix conflicts
> in both of the patches, so please can you take a quick look at the result?
>
> [1/2] arm64: kasan: do not instrument stacktrace.c
> https://git.kernel.org/arm64/c/802b91118d11
> [2/2] arm64: stacktrace: use non-atomic __set_bit
> https://git.kernel.org/arm64/c/446297b28a21
Hi Will,
The updated patches look good.
Thanks!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-06-28 13:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-23 14:51 [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c andrey.konovalov
2022-05-23 14:51 ` [PATCH v2 2/2] arm64: stacktrace: use non-atomic __set_bit andrey.konovalov
2022-06-23 19:31 ` [PATCH v2 1/2] arm64: kasan: do not instrument stacktrace.c Will Deacon
2022-06-26 9:21 ` Mark Rutland
2022-06-28 13:14 ` Andrey Konovalov
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).