我擦,我要上图,泄漏内存越界改写的程序员们都该烧死FFF
我已经死过多遍了。上图。
在协议栈内核处理进程中,有一个如影随形的trace模块,数据包进来以后会被trace记录信息,以供给各层协议进行只读操作。某天佛山网吧接入路由出现四五天定时断线死机,log模块也没记录那么多内容,而且四五天才会死机一次,所以复现也挺麻烦。组长找人跟进提测,N天之后找到我负责的ppp模块,在ppp模块有一个比较简单的用于回调的处理进程,用于专门处理auth、trace任务,任务栈空间4k。某日G君跟到ppp这里发现一层的ppp work处理函数赫然躺着char buff[4096];的数组这种不经内存申请检测的代码。我擦。。。。烧死FFF
建议:vxWorks属于平坦的整块内存,不像linux分层保护内存机制,所以一般在任务处理时需要对内存大小进行严格规划;另外一种方法是申请内存池,也能很好的规划好使用的内存空间而防止越界问题;设计hash时,空间以经验的4倍为宜可以在一定程度上取得空间大小和冲突避免的平衡。