staging: rtl8723au: Fix case where ethtype was never obtained and always be checked...
authorJes Sorensen <Jes.Sorensen@redhat.com>
Wed, 9 Apr 2014 21:21:21 +0000 (23:21 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Apr 2014 15:29:23 +0000 (08:29 -0700)
Zero-initializing ether_type masked that the ether type would never be
obtained for 8021x packets and the comparition against eapol_type
would always fail.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8723au/core/rtw_recv.c

index 8ae191654a42a957f6d5c8143c9f4987296ae02d..e448511d2f4596c9fe39c0f1301aa87e75853c58 100644 (file)
@@ -575,7 +575,7 @@ static struct recv_frame *portctrl(struct rtw_adapter *adapter,
        struct sta_info *psta;
        struct sta_priv *pstapriv ;
        struct recv_frame *prtnframe;
-       u16 ether_type = 0;
+       u16 ether_type;
        u16 eapol_type = ETH_P_PAE;/* for Funia BD's WPA issue */
        struct rx_pkt_attrib *pattrib;
 
@@ -593,7 +593,12 @@ static struct recv_frame *portctrl(struct rtw_adapter *adapter,
                 ("########portctrl:adapter->securitypriv.dot11AuthAlgrthm ="
                  "%d\n", adapter->securitypriv.dot11AuthAlgrthm));
 
-       if (auth_alg == 2) {
+       if (auth_alg == dot11AuthAlgrthm_8021X) {
+               /* get ether_type */
+               ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE;
+               memcpy(&ether_type, ptr, 2);
+               ether_type = ntohs((unsigned short)ether_type);
+
                if ((psta != NULL) && (psta->ieee8021x_blocked)) {
                        /* blocked */
                        /* only accept EAPOL frame */
@@ -601,13 +606,6 @@ static struct recv_frame *portctrl(struct rtw_adapter *adapter,
                                 ("########portctrl:psta->ieee8021x_blocked =="
                                  "1\n"));
 
-                       prtnframe = precv_frame;
-
-                       /* get ether_type */
-                       ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE;
-                       memcpy(&ether_type, ptr, 2);
-                       ether_type = ntohs((unsigned short)ether_type);
-
                        if (ether_type == eapol_type) {
                                prtnframe = precv_frame;
                        } else {
@@ -651,9 +649,7 @@ static struct recv_frame *portctrl(struct rtw_adapter *adapter,
                prtnframe = precv_frame;
        }
 
-
-
-               return prtnframe;
+       return prtnframe;
 }
 
 int recv_decache(struct recv_frame *precv_frame, u8 bretry,