Thread (5 messages) 5 messages, 4 authors, 2021-07-22

Re: [PATCH -next v2] riscv: add VMAP_STACK overflow detection

From: Jisheng Zhang <hidden>
Date: 2021-07-22 14:30:39
Also in: lkml

Possibly related (same subject, not in this thread)

On Thu, 22 Jul 2021 21:37:24 +0800
Jisheng Zhang  wrote:
On Thu, 22 Jul 2021 01:35:23 -0700
Atish Patra [off-list ref] wrote:
quoted
On Wed, Jul 21, 2021 at 11:12 PM Palmer Dabbelt [off-list ref] wrote:  
quoted
On Mon, 19 Jul 2021 00:23:06 PDT (-0700), schwab@linux-m68k.org wrote:    
quoted
On Jul 19 2021, tongtiangen wrote:
   
quoted
On 2021/7/17 14:55, Andreas Schwab wrote:    
quoted
Please use
https://download.opensuse.org/repositories/home:/Andreas_Schwab:/riscv:/jeos/images/openSUSE-Tumbleweed-RISC-V-JeOS-efi.riscv64.raw.xz
and run it in qemu with u-boot as kernel.

Andreas.
   
Hi andreas:
I used today's latest mainline code and .config provided by you, and I
can't reproduce this panic.    
Did you test it like I said above?

Andreas.    
I'm getting this on and off, with just

CONFIG_VMAP_STACK=y

on top of defconfig, when running on QEMU.  It's not showing up right
now: I'd thought it was an issue with that initrd patch, but it went
away when I re-ran the tests so I'm guessing it's something
non-deterministic.  I'll try to take a look if it comes back.
   
I got it very frequently on beagleV with the following branch & config.
https://github.com/esmil/linux/commits/beaglev

beaglev_defconfig

Disabling CONFIG_VMAP_STACK avoids the crash.  
Hi all,

I think we need to pin the stack before calling get_wchan(), could you please
Typo: s/get_wchan/walk_stackframe
quoted hunk ↗ jump to hunk
try below patch?

Thanks
diff --git a/arch/riscv/kernel/stacktrace.c b/arch/riscv/kernel/stacktrace.c
index ff467b98c3e3..ac7593607fa6 100644
--- a/arch/riscv/kernel/stacktrace.c
+++ b/arch/riscv/kernel/stacktrace.c
@@ -132,8 +132,12 @@ unsigned long get_wchan(struct task_struct *task)
 {
 	unsigned long pc = 0;
 
-	if (likely(task && task != current && !task_is_running(task)))
+	if (likely(task && task != current && !task_is_running(task))) {
+		if (!try_get_task_stack(task))
+			return 0;
 		walk_stackframe(task, NULL, save_wchan, &pc);
+		put_task_stack(task);
+	}
 	return pc;
 }
 

quoted
  
quoted
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv    

  


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv


_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help