From b7a4b84f0afd147f5c1f69f86d28163bb75cb667 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 19 Aug 2015 15:52:36 +0200 Subject: [PATCH] cmdmon: fix handling of packets from unbound Unix sockets When a packet is received from an unbound Unix domain socket, recvfrom() may return with zero addrlen. --- cmdmon.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cmdmon.c b/cmdmon.c index 3af3d9c..2375ff3 100644 --- a/cmdmon.c +++ b/cmdmon.c @@ -1558,8 +1558,11 @@ read_from_cmd_socket(void *anything) return; } - if (from_length > sizeof (where_from)) - LOG_FATAL(LOGF_CmdMon, "Truncated source address"); + if (from_length > sizeof (where_from) || + from_length <= sizeof (where_from.sa.sa_family)) { + DEBUG_LOG(LOGF_CmdMon, "Read command packet without source address"); + return; + } read_length = status; @@ -1582,11 +1585,9 @@ read_from_cmd_socket(void *anything) break; #endif case IPADDR_UNSPEC: - /* Unix domain socket */ - if (where_from.sa.sa_family != AF_UNIX) { - DEBUG_LOG(LOGF_CmdMon, "Read command packet with no address"); + /* This should be the Unix domain socket */ + if (where_from.sa.sa_family != AF_UNIX) return; - } assert(sock_fd == sock_fdu); localhost = 1; break;