OpenWrt – Rev 4

Subversion Repositories:
Rev:
From 30c1693f42326d4f927e76120492bc9593b8f739 Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Fri, 13 Apr 2018 00:42:10 +0200
Subject: [PATCH] mesh: properly handle sae_password

The recently introduced sae_password parameter is only handled properly
in wpa_supplicant/sme.c while wpa_supplicant/mesh.c assumed that
ssid->passphrase exclusively holds the secret.
Import the logic from sme.c to mesh.c to allow having only sae_password
set which otherwise throws this error:
AP-ENABLED
mesh: Passphrase for SAE not configured
Init RSN failed. Deinit mesh...
wlan1: interface state ENABLED->DISABLED
AP-DISABLED
Segmentation fault

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
 wpa_supplicant/mesh.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

--- a/wpa_supplicant/mesh.c
+++ b/wpa_supplicant/mesh.c
@@ -154,10 +154,14 @@ int wpas_mesh_init_rsn(struct wpa_suppli
        struct wpa_ssid *ssid = wpa_s->current_ssid;
        struct hostapd_data *bss = ifmsh->bss[0];
        static int default_groups[] = { 19, 20, 21, 25, 26, -1 };
+       const char *password;
        size_t len;
 
        if (mconf->security != MESH_CONF_SEC_NONE) {
-               if (ssid->passphrase == NULL) {
+               password = ssid->sae_password;
+               if (!password)
+                       password = ssid->passphrase;
+               if (!password) {
                        wpa_printf(MSG_ERROR,
                                   "mesh: Passphrase for SAE not configured");
                        return -1;
@@ -177,9 +181,9 @@ int wpas_mesh_init_rsn(struct wpa_suppli
                                return -1;
                }
 
-               len = os_strlen(ssid->passphrase);
+               len = os_strlen(password);
                bss->conf->ssid.wpa_passphrase =
-                       dup_binstr(ssid->passphrase, len);
+                       dup_binstr(password, len);
 
                wpa_s->mesh_rsn = mesh_rsn_auth_init(wpa_s, mconf);
                if (!wpa_s->mesh_rsn)