是谁在LINUX内核中开了这个大洞?

最近一段时间,一个诡异的内核问题困扰着格蠹的内核开发团队。在测试幽兰的系统镜像时,有一个随机的内核oops。

一旦这个oops发生,那么便产生一系列连锁的不良反应:比如声音无法播放,reboot失败等等。

内存越界

7月30日那天,我一边准备关于Windows 719大蓝屏的讲义,一边看这个oops,并在直播中提到了这个诡异的oops。

b68fe29b25c2728e987f9a424888f278.png

这个oops与719大蓝屏类似,也是非法访问内存,也就是通常所说的越界。内存是软件的舞台,内存问题就是人类社会的住房问题,千头万绪,盘根错节。

173c903198cd024d525d3e3a125d5941.png

有趣的是,越界访问的内存地址非常奇怪,不是一般的0指针,也不是明显的小指针(小于4096的地址),而是一个很长的地址:

003a72656c646e69

根据多年的经验,我一眼看出这个地址中包含很多可读的ASCII字符,使用windbg的.formats命令转换,果然如此:

0:000> .formats 203a72656c646e69
Evaluate expression:
  Hex:     203a7265`6c646e69
  Decimal: 2322294337798696553
  Octal:   0200723446255431067151
  Binary:  00100000 00111010 01110010 01100101 01101100 01100100 01101110 01101001
  Chars:    :reldni
  Time:    Wed Jan 23 00:02:59.869 8960 (UTC + 8:00)
  Float:   low 1.10463e+027 high 1.57927e-019
  Double:  1.9725e-153

也就是错误地址刚好对应的是" :reldni"这8个字符。把字节序调整一下,就是"indler: "。注意冒号后面还有一个空格(在栈上找到,有时体现在寄存器里)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值