linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).