RADIUS client: Check getsockname() return value

In theory, this function could fail, so check the return value before
printing out the RADIUS local address debug message (CID 72700).

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2014-09-07 18:35:46 +03:00
parent 9c196f7703
commit 3a413e0ed8

View file

@ -1080,19 +1080,23 @@ radius_change_server(struct radius_client_data *radius,
switch (nserv->addr.af) { switch (nserv->addr.af) {
case AF_INET: case AF_INET:
claddrlen = sizeof(claddr); claddrlen = sizeof(claddr);
getsockname(sel_sock, (struct sockaddr *) &claddr, &claddrlen); if (getsockname(sel_sock, (struct sockaddr *) &claddr,
wpa_printf(MSG_DEBUG, "RADIUS local address: %s:%u", &claddrlen) == 0) {
inet_ntoa(claddr.sin_addr), ntohs(claddr.sin_port)); wpa_printf(MSG_DEBUG, "RADIUS local address: %s:%u",
inet_ntoa(claddr.sin_addr),
ntohs(claddr.sin_port));
}
break; break;
#ifdef CONFIG_IPV6 #ifdef CONFIG_IPV6
case AF_INET6: { case AF_INET6: {
claddrlen = sizeof(claddr6); claddrlen = sizeof(claddr6);
getsockname(sel_sock, (struct sockaddr *) &claddr6, if (getsockname(sel_sock, (struct sockaddr *) &claddr6,
&claddrlen); &claddrlen) == 0) {
wpa_printf(MSG_DEBUG, "RADIUS local address: %s:%u", wpa_printf(MSG_DEBUG, "RADIUS local address: %s:%u",
inet_ntop(AF_INET6, &claddr6.sin6_addr, inet_ntop(AF_INET6, &claddr6.sin6_addr,
abuf, sizeof(abuf)), abuf, sizeof(abuf)),
ntohs(claddr6.sin6_port)); ntohs(claddr6.sin6_port));
}
break; break;
} }
#endif /* CONFIG_IPV6 */ #endif /* CONFIG_IPV6 */