auditd 审计服务内存泄露问题
作者:高瑞琪 | 适用版本:V10 SP1/SP2
问题描述
audit 审计服务存在内存泄露现象,随着运行时间增长,内存占用持续增加。
影响产品
- 银河麒麟高级服务器操作系统 V10 SP1
- 银河麒麟高级服务器操作系统 V10 SP2
问题复现步骤
1
产生日志
通过不断的在系统中执行 SSH 远程连接,产生用户登录的 audit 日志。
2
监控内存
watch -n 1 -d cat "/proc/"`ps -ef | grep -w auditd |grep -v grep | awk 'NR==1 {print $2}'`"/status"
结果: 内存使用情况会不断增加。
问题分析过程
对比版本(audit-3.0-5)和问题版本(audit-3.0-5.se.06),发现正常版本不存在内存泄漏问题。分析 se.06 版本的补丁代码,发现存在申请内存后未及时释放的问题。
Valgrind 分析结果:
==5037== HEAP SUMMARY:
==5037== in use at exit: 3,022 bytes in 210 blocks
==5037== total heap usage: 415 allocs, 205 frees, 159,455 bytes allocated
==5037==
==5037== 122 bytes in 35 blocks are definitely lost in loss record 1 of 6
==5037== at 0x483479B: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==5037== by 0x488435C: xmalloc (in /usr/lib64/libaudit.so.1.0.0)
==5037== by 0x4884393: xmemdup (in /usr/lib64/libaudit.so.1.0.0)
...
==5037== by 0x4884B4C: get_file_sys_info (in /usr/lib64/libaudit.so.1.0.0)
...
分析 auditd 服务存在内存泄露问题,位置在 /usr/lib64/libaudit.so.1.0.0 的
get_file_sys_info
处,malloc 以后未释放。
问题修复方法
1
升级 audit 包
将 audit 包升级至 audit-3.0-5.se.08.ky10 或更高版本。
2
验证服务
完成升级后重启 audit 服务,并通过 systemctl 验证服务状态。
systemctl restart auditd
systemctl status auditd