From 592e355519229762905bac128be31e7982e45875 Mon Sep 17 00:00:00 2001 From: Dan Kortschak <90160302+efd6@users.noreply.github.com> Date: Tue, 11 Jul 2023 06:32:16 +0930 Subject: [PATCH] filebeat/input/{tcp,udp}: use correct address list in udp (#35996) Also add a check in the common path to check that the addr slice is the same length as the undefined addr slice, returning an error on mismatch rather than allowing the panic. --- CHANGELOG.next.asciidoc | 1 + filebeat/input/tcp/input.go | 3 +++ filebeat/input/udp/input.go | 7 +++++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index e2cd47b2909c..04a63cc62a3b 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -145,6 +145,7 @@ https://github.com/elastic/beats/compare/v8.8.1\...main[Check the HEAD diff] - Fix metric collection in GCPPubSub input. {pull}35773[35773] - Fix end point deregistration in http_endpoint input. {issue}35899[35899] {pull}35903[35903] - Fix duplicate ID panic in filestream metrics. {issue}35964[35964] {pull}35972[35972] +- Improve error reporting and fix IPv6 handling of TCP and UDP metric collection. {pull}35996[35996] *Heartbeat* diff --git a/filebeat/input/tcp/input.go b/filebeat/input/tcp/input.go index bd15e1560c82..7911123a86ed 100644 --- a/filebeat/input/tcp/input.go +++ b/filebeat/input/tcp/input.go @@ -338,6 +338,9 @@ func procNetTCP(path string, addr []string, hasUnspecified bool, addrIsUnspecifi if len(addr) == 0 { return 0, nil } + if len(addr) != len(addrIsUnspecified) { + return 0, errors.New("mismatched address/unspecified lists: please report this") + } b, err := os.ReadFile(path) if err != nil { return 0, err diff --git a/filebeat/input/udp/input.go b/filebeat/input/udp/input.go index f6f2536614a0..c250089b8aa8 100644 --- a/filebeat/input/udp/input.go +++ b/filebeat/input/udp/input.go @@ -272,7 +272,7 @@ func (m *inputMetrics) poll(addr, addr6 []string, each time.Duration, log *logp. if err != nil { log.Warnf("failed to get initial udp stats from /proc: %v", err) } - rx6, drops6, err := procNetUDP("/proc/net/udp6", addr, hasUnspecified6, addrIsUnspecified6) + rx6, drops6, err := procNetUDP("/proc/net/udp6", addr6, hasUnspecified6, addrIsUnspecified6) if err != nil { log.Warnf("failed to get initial udp6 stats from /proc: %v", err) } @@ -288,7 +288,7 @@ func (m *inputMetrics) poll(addr, addr6 []string, each time.Duration, log *logp. log.Warnf("failed to get udp stats from /proc: %v", err) continue } - rx6, drops6, err := procNetUDP("/proc/net/udp6", addr, hasUnspecified6, addrIsUnspecified6) + rx6, drops6, err := procNetUDP("/proc/net/udp6", addr6, hasUnspecified6, addrIsUnspecified6) if err != nil { log.Warnf("failed to get udp6 stats from /proc: %v", err) continue @@ -333,6 +333,9 @@ func procNetUDP(path string, addr []string, hasUnspecified bool, addrIsUnspecifi if len(addr) == 0 { return 0, 0, nil } + if len(addr) != len(addrIsUnspecified) { + return 0, 0, errors.New("mismatched address/unspecified lists: please report this") + } b, err := os.ReadFile(path) if err != nil { return 0, 0, err