dropbear cpu卡死问题

2020-07-01  本文已影响0人  叶迎宪

在一块Hi3536的开发板上面,一有ssh连接进来,dropbear经常会cpu飙升到100%,导致ssh无法连接进来。开始以为是dropbear版本的问题,但是换了好几个dropbear版本之后,问题依旧。于是,采用strace跟踪dropbear,发现这时候dropbear一直在循环调用read函数

read(6, "up, S:01\n # expires at 156946407"..., 4096) = 4096
read(6, ">, hrtimer_wakeup, S:01\n # expir"..., 4096) = 4096
read(6, "\n #9: <ebd35e48>, hrtimer_wakeup"..., 4096) = 4096
read(6, "nsecs\njiffies: 627568\n\ncpu: 3\n c"..., 4096) = 4096
...

一直停不下来。通过lsof,可以看到dropbear进程所有打开的fd
3427 /usr/local/dropbear /dev/null
3427 /usr/local/dropbear /dev/null
3427 /usr/local/dropbear /dev/null
3427 /usr/local/dropbear socket:[158367]
3427 /usr/local/dropbear socket:[158368]
3427 /usr/local/dropbear socket:[163614]
3427 /usr/local/dropbear /proc/timer_list

fd为6的是/proc/timer_list。手动cat /proc/timer_list,发现确实会一直输出,停不下来。通过搜索,可以发现以下信息
https://lore.kernel.org/lkml/20130719152800.GA20792@xiaoyu.lan/
这是3.10内核timer方面的一个bug,会导致/proc/timer_list一直循环输出

https://github.com/bvwelch/dropbear/blob/master/random.c
dropbear打开/proc/timer_list主要是为了产生随机数

解决办法:一、升级linux内核;二、修改dropbear源码,注释掉读取/proc/timer_list

上一篇下一篇

猜你喜欢

热点阅读