No functional change.

Drop ieee80211_add_ess's nwid parameter. Read nwid and length from the ic.
The intention is to make it more obvious what the current implementation
is doing. Our long-term goal should be to pass essid/essid-length/crypto
params in one pass but the current WPA ioctl interface won't allow for this.

nwids are binary data with an explicit length, so treat them as such
instead of treating them like strings.

Index: net80211/ieee80211_ioctl.c
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_ioctl.c,v
retrieving revision 1.61
diff -u -p -r1.61 ieee80211_ioctl.c
--- net80211/ieee80211_ioctl.c  11 Jul 2018 20:18:09 -0000      1.61
+++ net80211/ieee80211_ioctl.c  6 Aug 2018 09:23:36 -0000
@@ -466,7 +466,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
                ieee80211_disable_wep(ic);
                /* save nwid for auto-join */
                if (!(join.i_flags & IEEE80211_JOIN_DEL))
-                       ieee80211_add_ess(ic, ic->ic_des_essid, 0, 0);
+                       ieee80211_add_ess(ic, 0, 0);
                ieee80211_set_ess(ic, ic->ic_des_essid);
                error = ENETRESET;
                break;
@@ -493,7 +493,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
                        break;
                error = ieee80211_ioctl_setnwkeys(ic, (void *)data);
                if (error == ENETRESET)
-                       ieee80211_add_ess(ic, ic->ic_des_essid, 0, 1);
+                       ieee80211_add_ess(ic, 0, 1);
                break;
        case SIOCG80211NWKEY:
                error = ieee80211_ioctl_getnwkeys(ic, (void *)data);
@@ -503,7 +503,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
                        break;
                error = ieee80211_ioctl_setwpaparms(ic, (void *)data);
                if (error == ENETRESET)
-                       ieee80211_add_ess(ic, ic->ic_des_essid, 1, 0);
+                       ieee80211_add_ess(ic, 1, 0);
                break;
        case SIOCG80211WPAPARMS:
                error = ieee80211_ioctl_getwpaparms(ic, (void *)data);
@@ -521,7 +521,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
                        ic->ic_flags &= ~IEEE80211_F_PSK;
                        memset(ic->ic_psk, 0, sizeof(ic->ic_psk));
                }
-               ieee80211_add_ess(ic, ic->ic_des_essid, 1, 0);
+               ieee80211_add_ess(ic, 1, 0);
                error = ENETRESET;
                break;
        case SIOCG80211WPAPSK:
Index: net80211/ieee80211_node.c
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_node.c,v
retrieving revision 1.137
diff -u -p -r1.137 ieee80211_node.c
--- net80211/ieee80211_node.c   6 Aug 2018 09:34:17 -0000       1.137
+++ net80211/ieee80211_node.c   6 Aug 2018 09:49:29 -0000
@@ -196,7 +196,7 @@ ieee80211_del_ess(struct ieee80211com *i
 }
 
 int
-ieee80211_add_ess(struct ieee80211com *ic, char *nwid, int wpa, int wep)
+ieee80211_add_ess(struct ieee80211com *ic, int wpa, int wep)
 {
        struct ieee80211_ess *ess;
        int i = 0, new = 0, ness = 0;
@@ -206,11 +206,12 @@ ieee80211_add_ess(struct ieee80211com *i
                return (0);
 
        /* Don't save an empty nwid */
-       if (strnlen(nwid, IEEE80211_NWID_LEN) == 0)
+       if (ic->ic_des_esslen == 0)
                return (0);
 
        TAILQ_FOREACH(ess, &ic->ic_ess, ess_next) {
-               if (memcmp(ess->essid, nwid, IEEE80211_NWID_LEN) == 0)
+               if (ess->esslen == ic->ic_des_esslen &&
+                   memcmp(ess->essid, ic->ic_des_essid, ess->esslen) == 0)
                        break;
                ness++;
        }
@@ -229,7 +230,7 @@ ieee80211_add_ess(struct ieee80211com *i
                ess = malloc(sizeof(*ess), M_DEVBUF, M_NOWAIT|M_ZERO);
                if (ess == NULL)
                        return (ENOMEM);
-               memcpy(ess->essid, nwid, ic->ic_des_esslen);
+               memcpy(ess->essid, ic->ic_des_essid, ic->ic_des_esslen);
                ess->esslen = ic->ic_des_esslen;
        }
 
Index: net80211/ieee80211_var.h
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_var.h,v
retrieving revision 1.86
diff -u -p -r1.86 ieee80211_var.h
--- net80211/ieee80211_var.h    11 Jul 2018 20:18:09 -0000      1.86
+++ net80211/ieee80211_var.h    6 Aug 2018 09:34:57 -0000
@@ -451,7 +451,7 @@ enum ieee80211_phymode ieee80211_chan2mo
                const struct ieee80211_channel *);
 void   ieee80211_disable_wep(struct ieee80211com *); 
 void   ieee80211_disable_rsn(struct ieee80211com *); 
-int    ieee80211_add_ess(struct ieee80211com *, char *, int, int);
+int    ieee80211_add_ess(struct ieee80211com *, int, int);
 void   ieee80211_del_ess(struct ieee80211com *, char *, int);
 void   ieee80211_set_ess(struct ieee80211com *, char *);
 

Reply via email to