iface match: Unspecified matched interfaces should not log driver fails

If there is no matching interface given, but interface matching is
enabled, all interfaces on the system will try to be initialized. Non
wireless interfaces will fail and the loopback device will be one of
these, so just log a diagnostic rather than an error.

Signed-off-by: Roy Marples <roy@marples.name>
This commit is contained in:
Roy Marples 2020-07-21 14:25:26 +01:00 committed by Jouni Malinen
parent 83fa0a1004
commit e8b85c078e
3 changed files with 27 additions and 6 deletions

View file

@ -5472,8 +5472,6 @@ void wpa_supplicant_event_global(void *ctx, enum wpa_event_type event,
return; return;
wpa_s = wpa_supplicant_add_iface(ctx, wpa_i, NULL); wpa_s = wpa_supplicant_add_iface(ctx, wpa_i, NULL);
os_free(wpa_i); os_free(wpa_i);
if (wpa_s)
wpa_s->matched = 1;
} }
#endif /* CONFIG_MATCH_IFACE */ #endif /* CONFIG_MATCH_IFACE */

View file

@ -6154,6 +6154,8 @@ next_driver:
wpa_s->drv_priv = wpa_drv_init(wpa_s, wpa_s->ifname); wpa_s->drv_priv = wpa_drv_init(wpa_s, wpa_s->ifname);
if (wpa_s->drv_priv == NULL) { if (wpa_s->drv_priv == NULL) {
const char *pos; const char *pos;
int level = MSG_ERROR;
pos = driver ? os_strchr(driver, ',') : NULL; pos = driver ? os_strchr(driver, ',') : NULL;
if (pos) { if (pos) {
wpa_dbg(wpa_s, MSG_DEBUG, "Failed to initialize " wpa_dbg(wpa_s, MSG_DEBUG, "Failed to initialize "
@ -6161,8 +6163,12 @@ next_driver:
driver = pos + 1; driver = pos + 1;
goto next_driver; goto next_driver;
} }
wpa_msg(wpa_s, MSG_ERROR, "Failed to initialize driver "
"interface"); #ifdef CONFIG_MATCH_IFACE
if (wpa_s->matched == WPA_IFACE_MATCHED_NULL)
level = MSG_DEBUG;
#endif /* CONFIG_MATCH_IFACE */
wpa_msg(wpa_s, level, "Failed to initialize driver interface");
return -1; return -1;
} }
if (wpa_drv_set_param(wpa_s, wpa_s->conf->driver_param) < 0) { if (wpa_drv_set_param(wpa_s, wpa_s->conf->driver_param) < 0) {
@ -6307,6 +6313,9 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
return -1; return -1;
} }
os_strlcpy(wpa_s->ifname, iface->ifname, sizeof(wpa_s->ifname)); os_strlcpy(wpa_s->ifname, iface->ifname, sizeof(wpa_s->ifname));
#ifdef CONFIG_MATCH_IFACE
wpa_s->matched = iface->matched;
#endif /* CONFIG_MATCH_IFACE */
if (iface->bridge_ifname) { if (iface->bridge_ifname) {
if (os_strlen(iface->bridge_ifname) >= if (os_strlen(iface->bridge_ifname) >=
@ -6698,6 +6707,10 @@ struct wpa_interface * wpa_supplicant_match_iface(struct wpa_global *global,
if (!iface) if (!iface)
return NULL; return NULL;
*iface = *miface; *iface = *miface;
if (!miface->ifname)
iface->matched = WPA_IFACE_MATCHED_NULL;
else
iface->matched = WPA_IFACE_MATCHED;
iface->ifname = ifname; iface->ifname = ifname;
return iface; return iface;
} }
@ -6732,8 +6745,6 @@ static int wpa_supplicant_match_existing(struct wpa_global *global)
if (iface) { if (iface) {
wpa_s = wpa_supplicant_add_iface(global, iface, NULL); wpa_s = wpa_supplicant_add_iface(global, iface, NULL);
os_free(iface); os_free(iface);
if (wpa_s)
wpa_s->matched = 1;
} }
} }

View file

@ -121,6 +121,18 @@ struct wpa_interface {
* interface that is not a network interface. * interface that is not a network interface.
*/ */
int p2p_mgmt; int p2p_mgmt;
#ifdef CONFIG_MATCH_IFACE
/**
* matched - Interface was matched rather than specified
*
*/
enum {
WPA_IFACE_NOT_MATCHED,
WPA_IFACE_MATCHED_NULL,
WPA_IFACE_MATCHED
} matched;
#endif /* CONFIG_MATCH_IFACE */
}; };
/** /**