diff options
| author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2026-01-16 02:42:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-16 02:42:01 +0100 |
| commit | b58e244cc76afc0c02a201fbbdd079db02ed841d (patch) | |
| tree | 976a07d5849c0bd2fe6b3a4bb47b27de446a7a73 | |
| parent | 67160010028681c7fe2461459a9fecc33a7e4dbf (diff) | |
| download | monitoring-plugins-b58e244cc76afc0c02a201fbbdd079db02ed841d.tar.gz | |
* 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 <lorenz.kaestle@netways.de>
| -rw-r--r-- | plugins-root/check_icmp.c | 7 |
1 files changed, 5 insertions, 2 deletions
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 | |||
| 1470 | }; | 1470 | }; |
| 1471 | 1471 | ||
| 1472 | ssize_t ret; | 1472 | ssize_t ret; |
| 1473 | if (FD_ISSET(sockset.socket4, &read_fds)) { | 1473 | |
| 1474 | // Test explicitly whether sockets are in use | ||
| 1475 | // this is necessary at least on OpenBSD where FD_ISSET will segfault otherwise | ||
| 1476 | if ((sockset.socket4 != -1) && FD_ISSET(sockset.socket4, &read_fds)) { | ||
| 1474 | ret = recvmsg(sockset.socket4, &hdr, 0); | 1477 | ret = recvmsg(sockset.socket4, &hdr, 0); |
| 1475 | result.recv_proto = AF_INET; | 1478 | result.recv_proto = AF_INET; |
| 1476 | } else if (FD_ISSET(sockset.socket6, &read_fds)) { | 1479 | } else if ((sockset.socket6 != -1) && FD_ISSET(sockset.socket6, &read_fds)) { |
| 1477 | ret = recvmsg(sockset.socket6, &hdr, 0); | 1480 | ret = recvmsg(sockset.socket6, &hdr, 0); |
| 1478 | result.recv_proto = AF_INET6; | 1481 | result.recv_proto = AF_INET6; |
| 1479 | } else { | 1482 | } else { |
