feat: debug kernel stack
目标: 检测内核栈溢出bug 实现: 在分配内核栈时手动在内核高位地址空间分配一个映射区间,同时保留一块未映射区域
@fslongjin 请帮我看看这段代码实现有什么错误吗?感觉没什么错误,但是无法运行
@fslongjin 请帮我看看这段代码实现有什么错误吗?感觉没什么错误,但是无法运行
具体是啥问题,贴一下报错?
运行到这里内核就结束了
运行到这里内核就结束了
是固定挂在这还是在启动阶段随机挂的
固定这个位置
具体位置是开启中断后,我打印了中断处理信息,发现发生了几次中断,然后就结束了
具体位置是开启中断后,我打印了中断处理信息,发现发生了几次中断,然后就结束了
刚才看了一下,暂时没发现问题,我明天认真看看。
我为x86加了kernel wp的保护,现在这个机制能检测到栈溢出了。但是还存在以下问题:
- 要分配多一倍的内存
- 栈溢出的时候,do_kern_addr_fault没实现。难以看到栈回溯。
我为x86加了kernel wp的保护,现在这个机制能检测到栈溢出了。但是还存在以下问题:
- 要分配多一倍的内存
- 栈溢出的时候,do_kern_addr_fault没实现。难以看到栈回溯。
内核栈的检测只是用来debug使用,在内核稳定后应该使用原有的实现,所以分配多一倍的内存并没有太多的副作用。 由于只有触发异常才能检测到栈溢出,很难从异常处理中进行堆栈回溯,这里只是暂时打印了触发该异常的函数
我在想,异常处理程序里面不是有发生异常时的栈指针吗?那为啥不能traceback哈哈哈
使用unwind进行堆栈展开时,它的工作方式是从当前栈帧逐步向上展开的,它不能对异常处理函数进行展开
运行到这里内核就结束了