From 80629a576c18dbf132cd9d6a3a6bfc7ae3af516d Mon Sep 17 00:00:00 2001 From: algorithmofdish Date: Wed, 26 Apr 2023 16:58:02 +0800 Subject: [PATCH] fix: fix fd leakage problem Conficts: src/probes/extends/ebpf.probe/src/{lib->stackprobe}/java_support.c --- src/probes/extends/ebpf.probe/src/haproxyprobe/trace_haproxy.c | 4 ++++ src/probes/extends/ebpf.probe/src/stackprobe/java_support.c | 2 ++ test/test_probes/test_probes.c | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/src/probes/extends/ebpf.probe/src/haproxyprobe/trace_haproxy.c b/src/probes/extends/ebpf.probe/src/haproxyprobe/trace_haproxy.c index 39e1827..cc5e771 100644 --- a/src/probes/extends/ebpf.probe/src/haproxyprobe/trace_haproxy.c +++ b/src/probes/extends/ebpf.probe/src/haproxyprobe/trace_haproxy.c @@ -55,8 +55,12 @@ static void get_host_ip(const unsigned char *value, unsigned short family) } fp = popen(cmd, "r"); + if (fp == NULL) { + return; + } if (fgets(buffer, INET6_ADDRSTRLEN, fp) == NULL) { printf("Fail get_host_ip.\n"); + (void)pclose(fp); return ; } (void)pclose(fp); diff --git a/src/probes/extends/ebpf.probe/src/stackprobe/java_support.c b/src/probes/extends/ebpf.probe/src/stackprobe/java_support.c index 1aacb99..4a2c736 100644 --- a/src/probes/extends/ebpf.probe/src/stackprobe/java_support.c +++ b/src/probes/extends/ebpf.probe/src/stackprobe/java_support.c @@ -211,6 +211,7 @@ static int __check_proc_to_attach(int proc_obj_map_fd) while (fgets(line, sizeof(line), f)) { if (sscanf(line, "%d", &pid) != 1) { + (void)pclose(f); return -1; } if (proc_obj_map_fd != 0) { // whitelist_enable @@ -241,6 +242,7 @@ static int __check_proc_to_attach(int proc_obj_map_fd) } } + (void)pclose(f); return ret; } diff --git a/test/test_probes/test_probes.c b/test/test_probes/test_probes.c index 6f23117..3c608ca 100644 --- a/test/test_probes/test_probes.c +++ b/test/test_probes/test_probes.c @@ -332,14 +332,17 @@ void TestSystemProcProbe(void) snprintf(cmd, COMMAND_LEN - 1, "touch /tmp/gala-gopher-app.conf"); f = popen(cmd, "r"); CU_ASSERT(f != NULL); + (void)pclose(f); snprintf(cmd, COMMAND_LEN - 1, "echo \'application = ({ comm = \"sleep\", cmdline = \"\"})\' >/tmp/gala-gopher-app.conf"); f = popen(cmd, "r"); CU_ASSERT(f != NULL); + (void)pclose(f); snprintf(cmd, COMMAND_LEN - 1, "sleep 60 &"); f = popen(cmd, "r"); CU_ASSERT(f != NULL); + (void)pclose(f); system_proc_init(¶ms.task_whitelist); CU_ASSERT(¶ms.task_whitelist != NULL); @@ -353,10 +356,12 @@ void TestSystemProcProbe(void) snprintf(cmd, COMMAND_LEN - 1, "rm -rf /tmp/gala-gopher-app.conf"); f = popen(cmd, "r"); CU_ASSERT(f != NULL); + (void)pclose(f); snprintf(cmd, COMMAND_LEN - 1, "rm -rf /sys/fs/bpf/gala-gopher"); f = popen(cmd, "r"); CU_ASSERT(f != NULL); + (void)pclose(f); ProbeDestroy(g_probe); system_proc_destroy(); @@ -388,6 +393,7 @@ void TestEventProbe(void) snprintf(cmd, COMMAND_LEN - 1, "echo \"%s\" >> /var/log/messages", EVENT_ERR_CODE); f = popen(cmd, "r"); CU_ASSERT(f != NULL); + pclose(f); g_probe = ProbeCreate(); CU_ASSERT(g_probe != NULL); -- 2.33.0