You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RedHat8环境下Janus 0.9.2异常崩溃疑似与libmicrohttpd相关问题咨询

问题根因分析

该崩溃是glibc检测到堆内存结构被破坏后主动触发abort,出错点为libmicrohttpd处理新连接时申请内存的逻辑,属于堆内存越界、野指针访问或双重释放类问题,和libmicrohttpd 0.9.69版本的已知内存安全漏洞高度匹配。

#0  0x00007f02abb6c37f in raise () at /lib64/libc.so.6
#1  0x00007f02abb56db5 in abort () at /lib64/libc.so.6
#2  0x00007f02abbaf4e7 in __libc_message () at /lib64/libc.so.6
#3  0x00007f02abbb65ec in .annobin_top_check.start () at /lib64/libc.so.6
#4  0x00007f02abbb97f4 in _int_malloc () at /lib64/libc.so.6
#5  0x00007f02abbbb8d6 in calloc () at /lib64/libc.so.6
#6  0x00007f0272bd415a in internal_add_connection
    (daemon=daemon@entry=0x18fbd70, client_socket=client_socket@entry=23, addr=addr@entry=0x7f02723c84a0, addrlen=28, external_add=external_add@entry=false, non_blck=non_blck@entry=true) at daemon.c:2498
        connection = <optimized out>
        i = <optimized out>
        eno = 0
#7  0x00007f0272bd4ce5 in MHD_accept_connection (daemon=daemon@entry=0x18fbd70) at daemon.c:3317

排查思路

  • 优先验证版本问题:libmicrohttpd 0.9.69版本存在多个已公开的内存安全漏洞,包含处理HTTP连接时的堆溢出、连接对象释放后复用问题,完全匹配当前崩溃场景。可在测试环境将libmicrohttpd升级至0.9.73及以上稳定版,复现验证崩溃是否消失。
  • 内存问题定位:编译Janus时添加-fsanitize=address编译选项,复现崩溃后AddressSanitizer会直接输出内存破坏的具体触发位置,明确是libmicrohttpd本身的问题还是Janus自定义HTTP回调的内存操作问题。
  • 并发场景验证:如果崩溃仅在高并发HTTP请求时触发,先确认进程的最大文件句柄限制,可通过ulimit -n 65535调整上限后观察,过高的并发连接会放大内存问题的触发概率。

解决方案

  1. 版本升级(推荐):将libmicrohttpd升级至0.9.76最新稳定版,同时将Janus升级至0.10.x及以上版本,该版本组合已在大量生产环境验证,完全修复该类内存崩溃问题。
  2. 临时规避:如果暂时无法升级版本,可关闭Janus非必要的HTTP admin接口、限制HTTP服务的访问并发量,降低崩溃触发概率。
  3. 补丁回编:如果必须保留当前版本,可提取libmicrohttpd官方仓库中0.9.69版本之后所有和internal_add_connection、连接内存分配相关的修复补丁,手动打入当前libmicrohttpd源码重新编译使用。

内容的提问来源于stack exchange,提问作者zhanglinjian21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:45:01