AArch64内核模块修改SP指向全局结构触发栈溢出Panic求助
内核模块修改sp指向全局结构体触发栈溢出Panic问题
环境信息
- 架构:AArch64
- 设备:Pixel 8(shiba)
- 系统:CallyxOS + AOSP内核,内核版本:
5.15.137-android14-11-gbc062a78e195-ab12057991
需求
让sp寄存器指向模块中的全局结构体,将其作为栈内存使用。
现象
修改sp指向全局结构体并执行内存访问(如stp指令)时,立即触发kernel stack overflow内核Panic。
触发Panic的示例代码
mov x16, #0x12 mov x17, #0x34 mov x1, sp ldr x0, =new_stack mov sp, x0 stp x16, x17, [sp] <---- KP HERE mov sp, x1
内核Panic日志片段(/sys/fs/pstore/console-ramoops-0/RAMDUMP_MSG.txt)
reset message: KP: kernel stack overflow
UUID: a916fabb-7bb8-5a4e-aafa-7c7936d8d495
last kernel version: 5.15.137-android14-11-gb60f0c2a8346-ab12076200
aosp kernel version: 5.15.137-android14-11-gbc062a78e195-ab12057991
build: google/shiba/shiba:14/AP2A.240905.003/12231197:user/release-keys
RST_STAT: 0x80 - SYSTEM_SWRESET_SYSTEM
GSA_RESET_STATUS: 0x10 - GSA_INTERMEDIATE_RESET
Reboot reason: 0xbaba - Kernel PANIC
Reboot mode: 0x0 - Normal Boot
Stack backtrace:
Call trace: dump_backtrace+0xf8/0x1e8 sched_show_task+0x1f0/0x328 dbg_snapshot_dump_one_task_info+0x184/0x1a8 [dss] dbg_snapshot_dump_task_info+0xc4/0x128 [dss] dbg_snapshot_panic_handler+0x2dc/0x408 [dss] atomic_notifier_call_chain+0x84/0x128 panic+0x1a8/0x430 panic_bad_stack+0x1bc/0x1d8 patch_alternative+0x0/0x114 __bad_stack+0x8c/0x90 execute+0x280/0x380 [revisor_executor] trace+0x2c/0x48 [revisor_executor] revisor_ioctl+0x1d0/0x210 [revisor_executor] __arm64_sys_ioctl+0x178/0x1f8 invoke_syscall+0x58/0x138 el0_svc_common+0xb0/0xe8 do_el0_svc+0x20/0x7c el0_svc+0x28/0x9c el0t_64_sync_handler+0x7c/0xe4 el0t_64_sync+0x1b4/0x1b8
已完成的检查
- 确认
sp寄存器已按16字节对齐 - 使用其他寄存器(如
x8)执行相同内存访问逻辑可正常运行
问题
推测sp存在有效指向范围,请问如何修改该范围?
内容的提问来源于stack exchange,提问作者Gal Kaptsenel
相关产品推荐
相关产品推荐

