Fix CONFIG_CTRL_IFACE=udp6/udp6-remote builds

wpa_supplicant_global_ctrl_iface_receive() did not handle the from
address properly for the IPv6 case. This was broken by commit
d60886cdaf ('wpa_supplicant: Add monitor
support for global UDP ctrl_iface').

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2016-03-28 00:14:46 +03:00
parent 4f6985de09
commit a6fbff2049

View file

@ -1,6 +1,6 @@
/* /*
* WPA Supplicant / UDP socket -based control interface * WPA Supplicant / UDP socket -based control interface
* Copyright (c) 2004-2005, Jouni Malinen <j@w1.fi> * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi>
* *
* This software may be distributed under the terms of the BSD license. * This software may be distributed under the terms of the BSD license.
* See README for more details. * See README for more details.
@ -602,7 +602,11 @@ static void wpa_supplicant_global_ctrl_iface_receive(int sock, void *eloop_ctx,
struct ctrl_iface_global_priv *priv = sock_ctx; struct ctrl_iface_global_priv *priv = sock_ctx;
char buf[256], *pos; char buf[256], *pos;
int res; int res;
#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
struct sockaddr_in6 from;
#else /* CONFIG_CTRL_IFACE_UDP_IPV6 */
struct sockaddr_in from; struct sockaddr_in from;
#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
socklen_t fromlen = sizeof(from); socklen_t fromlen = sizeof(from);
char *reply = NULL; char *reply = NULL;
size_t reply_len; size_t reply_len;
@ -617,6 +621,7 @@ static void wpa_supplicant_global_ctrl_iface_receive(int sock, void *eloop_ctx,
} }
#ifndef CONFIG_CTRL_IFACE_UDP_REMOTE #ifndef CONFIG_CTRL_IFACE_UDP_REMOTE
#ifndef CONFIG_CTRL_IFACE_UDP_IPV6
if (from.sin_addr.s_addr != htonl((127 << 24) | 1)) { if (from.sin_addr.s_addr != htonl((127 << 24) | 1)) {
/* /*
* The OS networking stack is expected to drop this kind of * The OS networking stack is expected to drop this kind of
@ -628,6 +633,7 @@ static void wpa_supplicant_global_ctrl_iface_receive(int sock, void *eloop_ctx,
"source %s", inet_ntoa(from.sin_addr)); "source %s", inet_ntoa(from.sin_addr));
return; return;
} }
#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
#endif /* CONFIG_CTRL_IFACE_UDP_REMOTE */ #endif /* CONFIG_CTRL_IFACE_UDP_REMOTE */
buf[res] = '\0'; buf[res] = '\0';