stacktrace and panic functions assume that the kernel stack size is
THREAD_SIZE.

The allocated kernel stack size may not be THREAD_SIZE anymore, rely
on the newly introduced helpers task_stack_{low, high}()

Signed-off-by: Mostafa Saleh <[email protected]>
---
 arch/arm64/include/asm/stacktrace.h | 4 ++--
 arch/arm64/kernel/traps.c           | 5 +++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/stacktrace.h 
b/arch/arm64/include/asm/stacktrace.h
index eb18d7cee62f..cbc93cf213a7 100644
--- a/arch/arm64/include/asm/stacktrace.h
+++ b/arch/arm64/include/asm/stacktrace.h
@@ -41,8 +41,8 @@ static inline bool on_irq_stack(unsigned long sp, unsigned 
long size)
 
 static inline struct stack_info stackinfo_get_task(const struct task_struct 
*tsk)
 {
-       unsigned long low = (unsigned long)task_stack_page(tsk);
-       unsigned long high = low + THREAD_SIZE;
+       unsigned long low = (unsigned long)task_stack_low(tsk);
+       unsigned long high = (unsigned long)task_stack_high(tsk);
 
        return (struct stack_info) {
                .low = low,
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index ce0e213d772d..b91b154843ef 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -902,7 +902,8 @@ DEFINE_PER_CPU(unsigned long 
[KERNEL_EXC_STACK_SIZE/sizeof(long)],
 
 void __noreturn panic_bad_stack(struct pt_regs *regs, unsigned long esr, 
unsigned long far)
 {
-       unsigned long tsk_stk = (unsigned long)current->stack;
+       unsigned long tsk_stk = (unsigned long)task_stack_low(current);
+       unsigned long tsk_stk_end = (unsigned long)task_stack_high(current);
        unsigned long irq_stk = (unsigned long)this_cpu_read(irq_stack_ptr);
        unsigned long exc_stk = (unsigned 
long)this_cpu_ptr(kernel_exception_stack);
 
@@ -913,7 +914,7 @@ void __noreturn panic_bad_stack(struct pt_regs *regs, 
unsigned long esr, unsigne
        pr_emerg("FAR: 0x%016lx\n", far);
 
        pr_emerg("Task stack:      [0x%016lx..0x%016lx]\n",
-                tsk_stk, tsk_stk + THREAD_SIZE);
+                tsk_stk, tsk_stk_end);
        pr_emerg("IRQ stack:       [0x%016lx..0x%016lx]\n",
                 irq_stk, irq_stk + IRQ_STACK_SIZE);
        pr_emerg("Exception stack: [0x%016lx..0x%016lx]\n",
-- 
2.56.0.rc1.315.gc6ed9934b7-goog


Reply via email to