36 lines
1.6 KiB
Diff
36 lines
1.6 KiB
Diff
From 8bb544fbd2d6986a9b73d3fab49235a4baa96c23 Mon Sep 17 00:00:00 2001
|
|
From: Bart Van Assche <bvanassche@acm.org>
|
|
Date: Sat, 31 Jul 2021 16:21:16 -0700
|
|
Subject: [PATCH] Linux: IF-MIB: Fix a memory leak
|
|
|
|
The Linux kernel regenerates proc files in their entirety every time a 4 KiB
|
|
boundary is crossed. This can result in reading the same network interface
|
|
twice if network information changes while it is being read. Fix a memory
|
|
leak that can be triggered if /proc/net/dev changes while being read.
|
|
---
|
|
agent/mibgroup/if-mib/data_access/interface_linux.c | 10 +++++++++-
|
|
1 file changed, 9 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/agent/mibgroup/if-mib/data_access/interface_linux.c b/agent/mibgroup/if-mib/data_access/interface_linux.c
|
|
index e99360a216..215b30e806 100644
|
|
--- a/agent/mibgroup/if-mib/data_access/interface_linux.c
|
|
+++ b/agent/mibgroup/if-mib/data_access/interface_linux.c
|
|
@@ -921,7 +921,15 @@ netsnmp_arch_interface_container_load(netsnmp_container* container,
|
|
/*
|
|
* add to container
|
|
*/
|
|
- CONTAINER_INSERT(container, entry);
|
|
+ if (CONTAINER_INSERT(container, entry) != 0) {
|
|
+ netsnmp_interface_entry *existing =
|
|
+ CONTAINER_FIND(container, entry);
|
|
+ NETSNMP_LOGONCE((LOG_WARNING,
|
|
+ "Encountered interface with index %" NETSNMP_PRIz "u twice: %s <> %s",
|
|
+ entry->index, existing ? existing->name : "(?)",
|
|
+ entry->name));
|
|
+ netsnmp_access_interface_entry_free(entry);
|
|
+ }
|
|
}
|
|
#ifdef NETSNMP_ENABLE_IPV6
|
|
netsnmp_access_ipaddress_container_free(addr_container, 0);
|
|
|