linux-yocto/arch/parisc
Helge Deller fd9f30d103 parisc: Avoid crash due to unaligned access in unwinder
Guenter Roeck reported this kernel crash on his emulated B160L machine:

Starting network: udhcpc: started, v1.36.1
 Backtrace:
  [<104320d4>] unwind_once+0x1c/0x5c
  [<10434a00>] walk_stackframe.isra.0+0x74/0xb8
  [<10434a6c>] arch_stack_walk+0x28/0x38
  [<104e5efc>] stack_trace_save+0x48/0x5c
  [<105d1bdc>] set_track_prepare+0x44/0x6c
  [<105d9c80>] ___slab_alloc+0xfc4/0x1024
  [<105d9d38>] __slab_alloc.isra.0+0x58/0x90
  [<105dc80c>] kmem_cache_alloc_noprof+0x2ac/0x4a0
  [<105b8e54>] __anon_vma_prepare+0x60/0x280
  [<105a823c>] __vmf_anon_prepare+0x68/0x94
  [<105a8b34>] do_wp_page+0x8cc/0xf10
  [<105aad88>] handle_mm_fault+0x6c0/0xf08
  [<10425568>] do_page_fault+0x110/0x440
  [<10427938>] handle_interruption+0x184/0x748
  [<11178398>] schedule+0x4c/0x190
  BUG: spinlock recursion on CPU#0, ifconfig/2420
  lock: terminate_lock.2+0x0/0x1c, .magic: dead4ead, .owner: ifconfig/2420, .owner_cpu: 0

While creating the stack trace, the unwinder uses the stack pointer to guess
the previous frame to read the previous stack pointer from memory.  The crash
happens, because the unwinder tries to read from unaligned memory and as such
triggers the unalignment trap handler which then leads to the spinlock
recursion and finally to a deadlock.

Fix it by checking the alignment before accessing the memory.

Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Helge Deller <deller@gmx.de>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Cc: stable@vger.kernel.org # v6.12+
2025-11-04 12:21:59 +01:00
..
boot parisc: fix building with gcc-15 2025-05-20 18:01:02 +02:00
configs Use CONFIG_EXT4_FS instead of CONFIG_EXT3_FS in all of the defconfigs 2025-10-13 21:50:40 -04:00
include parisc architecture updates for kernel v6.18-rc1: 2025-10-10 10:01:55 -07:00
kernel parisc: Avoid crash due to unaligned access in unwinder 2025-11-04 12:21:59 +01:00
lib parisc: Remove spurious if statement from raw_copy_from_user() 2025-10-07 16:44:29 +02:00
math-emu parisc: Fix double SIGFPE crash 2025-05-04 17:30:03 +02:00
mm parisc: Try to fixup kernel exception in bad_area_nosemaphore path of do_page_fault() 2025-07-25 22:45:23 +02:00
net parisc: fix unaligned accesses in BPF 2024-07-29 16:19:07 +02:00
video arch: Rename fbdev header and source files 2024-05-03 17:07:50 +02:00
defpalo.conf
install.sh kbuild: Abort make on install failures 2024-07-20 13:34:54 +09:00
Kbuild
Kconfig parisc architecture updates for kernel v6.18-rc1: 2025-10-10 10:01:55 -07:00
Kconfig.debug
Makefile parisc: Makefile: explain that 64BIT requires both 32-bit and 64-bit compilers 2025-07-25 22:45:23 +02:00