diff -drupN a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
--- a/arch/arm64/kernel/stacktrace.c	2018-08-06 17:23:04.000000000 +0300
+++ b/arch/arm64/kernel/stacktrace.c	2022-06-12 05:28:14.000000000 +0300
@@ -22,6 +22,7 @@
 #include <linux/stacktrace.h>
 
 #include <asm/irq.h>
+#include <asm/stack_pointer.h>
 #include <asm/stacktrace.h>
 
 /*
@@ -186,6 +187,9 @@ void save_stack_trace_tsk(struct task_st
 	struct stack_trace_data data;
 	struct stackframe frame;
 
+	if (!try_get_task_stack(tsk))
+		return;
+
 	data.trace = trace;
 	data.skip = trace->skip;
 
@@ -207,6 +211,8 @@ void save_stack_trace_tsk(struct task_st
 	walk_stackframe(tsk, &frame, save_trace, &data);
 	if (trace->nr_entries < trace->max_entries)
 		trace->entries[trace->nr_entries++] = ULONG_MAX;
+
+	put_task_stack(tsk);
 }
 
 void save_stack_trace(struct stack_trace *trace)