CVE-2025-71102CVE-2025-71102是Linux内核中的一个代码逻辑错误漏洞,存在于Shadow Call Stack (SCS)功能的调试功能中。漏洞根源在于`__scs_magic()`函数调用时传入了错误类型的参数——应传入`void *`类型的shadow call stack地址,却错误地传入了`struct task_struct *`类型的任务结构指针。当内核编译时启用了CONFIG_DEBUG_STACK_USAGE配置选项,scs_check_usage函数会扫描错误的内存范围,可能导致内核栈使用统计不准确。更严重的情况下,如果错误计算的内存地址超出合法范围,可能引发内核访问未映射内存,进而导致系统崩溃。由于该功能仅在启用调试选项时生效,因此对正常生产系统的影响有限。
该漏洞位于Linux内核的shadow call stack实现代码中。Shadow Call Stack是一种安全机制,用于防止内核栈溢出攻击。在调试功能中,`__scs_magic()`函数用于检查shadow call stack的magic值以确定栈的使用情况。原始代码中,`scs_check_usage()`函数在遍历shadow call stack检查使用情况时,错误地调用了`__scs_magic(tsk)`而非`__scs_magic(task_scs(tsk))`。前者传入的是task_struct结构体指针,后者才是shadow call stack的起始地址。这导致函数访问错误的内存区域,可能读取到无效的magic值。影响分为两种情况:一是统计报告不准确,显示错误的栈使用量;二是当`__scs_magic(tsk)`返回值大于`__scs_magic(task_scs(tsk))`时,循环可能访问未映射内存。虽然第二种情况概率较低(因task_struct通常分配在低地址的slab区域,而shadow call stack通过vmalloc分配在高地址区域),但一旦发生将导致kernel panic。