还是越界惹的祸-MS抢救记之二

简介: 还是越界惹的祸-MS抢救记之二

     MS版本升级后,第三天,现场的同事告诉我,MS仍然有重启现象。


     我于是在现场开启了ulimit -c unlimited。等待第二次重启后产生的core文件,拿到core文件后,发现进程重启发生在会议模式。而我们MS本次采用了的是桥接模式,应该不会用到会议模式。


     我的直觉及多年的编程经验告诉,一旦程序走了不该走的分支,很有可能发生了内存越界赋值,导致该附近的变量的值被越界修改。


    我显示修改了内存池的部分代码,将潜在有导致内存错误赋值的地方修改了。版本升级后,结果仍然重启。


     于是思路一度闭塞,产品经理告诉我,一旦18号之前解决不了该问题,就需要我们的媒体服务器下线。该采购国外一款媒体服务器,那么就给别人做了嫁衣。


      内心一度很煎熬,也有些无助,但我知道肯定是个BUG惹的祸。它就藏在代码里等着我去发现。


       我于是静下心来,查看该变量附近和内存赋值相关的变量。逐渐我发现与RTP接收及转码的BUFFER。该BUFFER在使用FFMPEG进行转码时,对于转码后的BUFFER进行copy时,没有进行内存保护。


  memcpy( out, m_pEnPkt.data, outsize );


没有对于outsize进行判断,于是我对该处代码做了大小的保护。int ret = fetch( &m_pEnPkt );


    if ( ret >= 0 && m_pEnPkt.size > 0 )
    {       
       int outsize = m_pEnPkt.size;  
       if(outsize>MAXAUDIOBUFFERSIZE)
       {
        LOG(ERROR,"TEncoder::fetch outsize too long %d",outsize);
        outsize=MAXAUDIOBUFFERSIZE;        
       }
       memcpy( out, m_pEnPkt.data, outsize );
       av_free_packet(&m_pEnPkt);
       return outsize;
    }


版本修改后,上线试运行。我静静等待too long的日志,结果这个too long的日志如期而至。于是我知道了,MS的这个最后的虫子被我抓住了。


目前MS在稳定的运行,潜在为公司节省了百万的成本。

相关文章
|
3月前
外贸网站服务器该如何选择?别再踩雷了
以上因素都应在选择外贸网站服务器时考虑。在选择服务器时,不要只看价格,要全面考虑,避免踩雷。
110 0
|
人工智能 安全 开发者
大家都在吐槽GPT-4变「笨」了,可能是架构重新设计惹的祸
大家都在吐槽GPT-4变「笨」了,可能是架构重新设计惹的祸
|
设计模式 监控 Java
恭喜胡歌喜提小棉袄一件,彭于晏表示压力很大
恭喜胡歌喜提小棉袄一件,彭于晏表示压力很大
70 0
|
小程序 安全 Java
你还只会用 AtomicXXX ?!恭喜你,可以下岗了!
你还只会用 AtomicXXX ?!恭喜你,可以下岗了!
你还只会用 AtomicXXX ?!恭喜你,可以下岗了!
|
C语言
我读书少,你们得帮帮我
我读书少,你们得帮帮我
|
监控 Java 应用服务中间件
【创作赢红包】进线程有关的面试题
【创作赢红包】进线程有关的面试题
54 0
|
负载均衡 安全 应用服务中间件
美国服务器如何避免踩雷?
美国服务器如何避免踩雷? 企业在使用美国服务器建设网站是为了扩大业务,增加电子商务板块。但并非所有企业都需要使用高配置、高带宽的美国服务器,这是考虑到资源浪费和建设成本增加。以下将介绍美国服务器避免踩雷和误区的方法。
换人!小编连怎么能快速找到女朋友都不知道
换人!小编连怎么能快速找到女朋友都不知道
105 0
换人!小编连怎么能快速找到女朋友都不知道
|
存储 网络协议 Linux
麻了,被字节问懵逼了!
SYN 报文什么时候情况下会被丢弃?
麻了,被字节问懵逼了!
|
安全 编译器 C++
还在纠结VS用scanf会被报错,一招设置轻松解决问题
vs2019使用scanf会产生的问题的解决方案之一
310 0
还在纠结VS用scanf会被报错,一招设置轻松解决问题