From b58e244cc76afc0c02a201fbbdd079db02ed841d Mon Sep 17 00:00:00 2001 From: Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> Date: Fri, 16 Jan 2026 02:42:01 +0100 Subject: check_icmp: prevent segfault on OpenBSD (#2224) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * check_icmp: prevent segfault on OpenBSD This commit adds a sanity check for sockets in check_icmp. Previously FD_ISSET segfaulted when a socket value was -1 (on OpenBSD). The changes here add an explicit check whether the socket is -1 (and therefore not set). --------- Co-authored-by: Lorenz Kästle --- plugins-root/check_icmp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'plugins-root/check_icmp.c') diff --git a/plugins-root/check_icmp.c b/plugins-root/check_icmp.c index 58d8a545..5bfb5cb5 100644 --- a/plugins-root/check_icmp.c +++ b/plugins-root/check_icmp.c @@ -1470,10 +1470,13 @@ static recvfrom_wto_wrapper recvfrom_wto(const check_icmp_socket_set sockset, vo }; ssize_t ret; - if (FD_ISSET(sockset.socket4, &read_fds)) { + + // Test explicitly whether sockets are in use + // this is necessary at least on OpenBSD where FD_ISSET will segfault otherwise + if ((sockset.socket4 != -1) && FD_ISSET(sockset.socket4, &read_fds)) { ret = recvmsg(sockset.socket4, &hdr, 0); result.recv_proto = AF_INET; - } else if (FD_ISSET(sockset.socket6, &read_fds)) { + } else if ((sockset.socket6 != -1) && FD_ISSET(sockset.socket6, &read_fds)) { ret = recvmsg(sockset.socket6, &hdr, 0); result.recv_proto = AF_INET6; } else { -- cgit v1.2.3-74-g34f1