Skip to content

Commit ac61e4a

Browse files
committed
Sockaddr helpers rely on initialized ss_family
sockaddr_to_port() branches on addr->ss_family without verifying that the caller populated the sockaddr. If a caller passes an uninitialized sockaddr_storage, this becomes undefined behavior.
1 parent 757eda1 commit ac61e4a

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

src/auditd-listen.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ static char *sockaddr_to_string(const struct sockaddr_storage *addr)
9494
{
9595
static char buf[INET6_ADDRSTRLEN];
9696

97+
if (addr->ss_family != AF_INET && addr->ss_family != AF_INET6) {
98+
snprintf(buf, sizeof(buf), "unknown");
99+
return buf;
100+
}
101+
97102
inet_ntop(addr->ss_family, addr->ss_family == AF_INET ?
98103
(void *) &((struct sockaddr_in *)addr)->sin_addr :
99104
(void *) &((struct sockaddr_in6 *)addr)->sin6_addr,
@@ -111,7 +116,7 @@ static unsigned int sockaddr_to_port(const struct sockaddr_storage *addr)
111116
else if (addr->ss_family == AF_INET6)
112117
rc = ntohs(((struct sockaddr_in6 *)addr)->sin6_port);
113118
else
114-
rc = -1;
119+
rc = 0;
115120

116121
return rc;
117122
}

0 commit comments

Comments
 (0)