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)
...
Valgrind 分析截图

分析 auditd 服务存在内存泄露问题,位置在 /usr/lib64/libaudit.so.1.0.0get_file_sys_info 处,malloc 以后未释放。

问题修复方法

1

升级 audit 包

将 audit 包升级至 audit-3.0-5.se.08.ky10 或更高版本。

2

验证服务

完成升级后重启 audit 服务,并通过 systemctl 验证服务状态。

systemctl restart auditd
systemctl status auditd