These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / rtl8712 / rtl871x_security.c
index bcd1a51..0924242 100644 (file)
@@ -124,28 +124,25 @@ static u8 crc32_reverseBit(u8 data)
 
 static void crc32_init(void)
 {
+       sint i, j;
+       u32 c;
+       u8 *p = (u8 *)&c, *p1;
+       u8 k;
+
        if (bcrc32initialized == 1)
                return;
-       else {
-               sint i, j;
-               u32 c;
-               u8 *p = (u8 *)&c, *p1;
-               u8 k;
-
-               c = 0x12340000;
-               for (i = 0; i < 256; ++i) {
-                       k = crc32_reverseBit((u8)i);
-                       for (c = ((u32)k) << 24, j = 8; j > 0; --j)
-                               c = c & 0x80000000 ? (c << 1) ^ CRC32_POLY :
-                                   (c << 1);
-                       p1 = (u8 *)&crc32_table[i];
-                       p1[0] = crc32_reverseBit(p[3]);
-                       p1[1] = crc32_reverseBit(p[2]);
-                       p1[2] = crc32_reverseBit(p[1]);
-                       p1[3] = crc32_reverseBit(p[0]);
-               }
-               bcrc32initialized = 1;
+
+       for (i = 0; i < 256; ++i) {
+               k = crc32_reverseBit((u8)i);
+               for (c = ((u32)k) << 24, j = 8; j > 0; --j)
+                       c = c & 0x80000000 ? (c << 1) ^ CRC32_POLY : (c << 1);
+               p1 = (u8 *)&crc32_table[i];
+               p1[0] = crc32_reverseBit(p[3]);
+               p1[1] = crc32_reverseBit(p[2]);
+               p1[2] = crc32_reverseBit(p[1]);
+               p1[3] = crc32_reverseBit(p[0]);
        }
+       bcrc32initialized = 1;
 }
 
 static u32 getcrc32(u8 *buf, u32 len)
@@ -178,22 +175,22 @@ void r8712_wep_encrypt(struct _adapter *padapter, u8 *pxmitframe)
 
        if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
                return;
-       pframe = ((struct xmit_frame *)pxmitframe)->buf_addr+TXDESC_OFFSET;
+       pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + TXDESC_OFFSET;
        /*start to encrypt each fragment*/
        if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
                keylength = psecuritypriv->DefKeylen[psecuritypriv->
                            PrivacyKeyIndex];
                for (curfragnum = 0; curfragnum < pattrib->nr_frags;
                     curfragnum++) {
-                       iv = pframe+pattrib->hdrlen;
+                       iv = pframe + pattrib->hdrlen;
                        memcpy(&wepkey[0], iv, 3);
                        memcpy(&wepkey[3], &psecuritypriv->DefKey[
                                psecuritypriv->PrivacyKeyIndex].skey[0],
                                keylength);
-                       payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+                       payload = pframe + pattrib->iv_len + pattrib->hdrlen;
                        if ((curfragnum + 1) == pattrib->nr_frags) {
-                               length = pattrib->last_txcmdsz-pattrib->
-                                        hdrlen-pattrib->iv_len -
+                               length = pattrib->last_txcmdsz - pattrib->
+                                        hdrlen - pattrib->iv_len -
                                         pattrib->icv_len;
                                *((u32 *)crc) = cpu_to_le32(getcrc32(
                                                payload, length));
@@ -203,14 +200,15 @@ void r8712_wep_encrypt(struct _adapter *padapter, u8 *pxmitframe)
                                arcfour_encrypt(&mycontext, payload + length,
                                                crc, 4);
                        } else {
-                               length = pxmitpriv->frag_len-pattrib->hdrlen -
-                                        pattrib->iv_len-pattrib->icv_len;
+                               length = pxmitpriv->frag_len -
+                                        pattrib->hdrlen - pattrib->iv_len -
+                                        pattrib->icv_len;
                                *((u32 *)crc) = cpu_to_le32(getcrc32(
                                                payload, length));
                                arcfour_init(&mycontext, wepkey, 3 + keylength);
                                arcfour_encrypt(&mycontext, payload, payload,
                                                length);
-                               arcfour_encrypt(&mycontext, payload+length,
+                               arcfour_encrypt(&mycontext, payload + length,
                                                crc, 4);
                                pframe += pxmitpriv->frag_len;
                                pframe = (u8 *)RND4((addr_t)(pframe));
@@ -244,8 +242,8 @@ void r8712_wep_decrypt(struct _adapter  *padapter, u8 *precvframe)
                        psecuritypriv->PrivacyKeyIndex].skey[0],
                        keylength);
                length = ((union recv_frame *)precvframe)->
-                          u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
-               payload = pframe+prxattrib->iv_len+prxattrib->hdrlen;
+                          u.hdr.len - prxattrib->hdrlen - prxattrib->iv_len;
+               payload = pframe + prxattrib->iv_len + prxattrib->hdrlen;
                /* decrypt payload include icv */
                arcfour_init(&mycontext, wepkey, 3 + keylength);
                arcfour_encrypt(&mycontext, payload, payload,  length);
@@ -498,11 +496,11 @@ static void phase1(u16 *p1k, const u8 *tk, const u8 *ta, u32 iv32)
        /* Now compute an unbalanced Feistel cipher with 80-bit block */
        /* size on the 80-bit block P1K[], using the 128-bit key TK[] */
        for (i = 0; i < PHASE1_LOOP_CNT; i++) {  /* Each add is mod 2**16 */
-               p1k[0] += _S_(p1k[4] ^ TK16((i&1) + 0));
-               p1k[1] += _S_(p1k[0] ^ TK16((i&1) + 2));
-               p1k[2] += _S_(p1k[1] ^ TK16((i&1) + 4));
-               p1k[3] += _S_(p1k[2] ^ TK16((i&1) + 6));
-               p1k[4] += _S_(p1k[3] ^ TK16((i&1) + 0));
+               p1k[0] += _S_(p1k[4] ^ TK16((i & 1) + 0));
+               p1k[1] += _S_(p1k[0] ^ TK16((i & 1) + 2));
+               p1k[2] += _S_(p1k[1] ^ TK16((i & 1) + 4));
+               p1k[3] += _S_(p1k[2] ^ TK16((i & 1) + 6));
+               p1k[4] += _S_(p1k[3] ^ TK16((i & 1) + 0));
                p1k[4] +=  (unsigned short)i;   /* avoid "slide attacks" */
        }
 }
@@ -590,7 +588,7 @@ u32 r8712_tkip_encrypt(struct _adapter *padapter, u8 *pxmitframe)
        if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
                return _FAIL;
 
-       pframe = ((struct xmit_frame *)pxmitframe)->buf_addr+TXDESC_OFFSET;
+       pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + TXDESC_OFFSET;
        /* 4 start to encrypt each fragment */
        if (pattrib->encrypt == _TKIP_) {
                if (pattrib->psta)
@@ -603,7 +601,7 @@ u32 r8712_tkip_encrypt(struct _adapter *padapter, u8 *pxmitframe)
                        for (curfragnum = 0; curfragnum < pattrib->nr_frags;
                             curfragnum++) {
                                iv = pframe + pattrib->hdrlen;
-                               payload = pframe+pattrib->iv_len +
+                               payload = pframe + pattrib->iv_len +
                                          pattrib->hdrlen;
                                GET_TKIP_PN(iv, txpn);
                                pnl = (u16)(txpn.val);
@@ -615,7 +613,8 @@ u32 r8712_tkip_encrypt(struct _adapter *padapter, u8 *pxmitframe)
                                if ((curfragnum + 1) == pattrib->nr_frags) {
                                        /* 4 the last fragment */
                                        length = pattrib->last_txcmdsz -
-                                            pattrib->hdrlen-pattrib->iv_len -
+                                            pattrib->hdrlen -
+                                            pattrib->iv_len -
                                             pattrib->icv_len;
                                        *((u32 *)crc) = cpu_to_le32(
                                                getcrc32(payload, length));
@@ -625,22 +624,25 @@ u32 r8712_tkip_encrypt(struct _adapter *padapter, u8 *pxmitframe)
                                        arcfour_encrypt(&mycontext, payload +
                                                        length, crc, 4);
                                } else {
-                                       length = pxmitpriv->frag_len-pattrib->
-                                                hdrlen-pattrib->
-                                                iv_len-pattrib->icv_len;
+                                       length = pxmitpriv->frag_len -
+                                                pattrib->hdrlen -
+                                                pattrib->iv_len -
+                                                pattrib->icv_len;
                                        *((u32 *)crc) = cpu_to_le32(getcrc32(
                                                        payload, length));
                                        arcfour_init(&mycontext, rc4key, 16);
                                        arcfour_encrypt(&mycontext, payload,
                                                         payload, length);
                                        arcfour_encrypt(&mycontext,
-                                                       payload+length, crc, 4);
+                                                       payload + length, crc,
+                                                       4);
                                        pframe += pxmitpriv->frag_len;
                                        pframe = (u8 *)RND4((addr_t)(pframe));
                                }
                        }
-               } else
+               } else {
                        res = _FAIL;
+               }
        }
        return res;
 }
@@ -669,8 +671,9 @@ u32 r8712_tkip_decrypt(struct _adapter *padapter, u8 *precvframe)
                stainfo = r8712_get_stainfo(&padapter->stapriv,
                                            &prxattrib->ta[0]);
                if (stainfo != NULL) {
-                       iv = pframe+prxattrib->hdrlen;
-                       payload = pframe+prxattrib->iv_len + prxattrib->hdrlen;
+                       iv = pframe + prxattrib->hdrlen;
+                       payload = pframe + prxattrib->iv_len +
+                                 prxattrib->hdrlen;
                        length = ((union recv_frame *)precvframe)->
                                 u.hdr.len - prxattrib->hdrlen -
                                 prxattrib->iv_len;
@@ -678,10 +681,11 @@ u32 r8712_tkip_decrypt(struct _adapter *padapter, u8 *precvframe)
                                idx = iv[3];
                                prwskey = &psecuritypriv->XGrpKey[
                                         ((idx >> 6) & 0x3) - 1].skey[0];
-                               if (psecuritypriv->binstallGrpkey == false)
+                               if (!psecuritypriv->binstallGrpkey)
                                        return _FAIL;
-                       } else
+                       } else {
                                prwskey = &stainfo->x_UncstKey.skey[0];
+                       }
                        GET_TKIP_PN(iv, txpn);
                        pnl = (u16)(txpn.val);
                        pnh = (u32)(txpn.val >> 16);
@@ -699,8 +703,9 @@ u32 r8712_tkip_decrypt(struct _adapter *padapter, u8 *precvframe)
                            crc[1] != payload[length - 3] ||
                            crc[0] != payload[length - 4])
                                return _FAIL;
-               } else
+               } else {
                        return _FAIL;
+               }
        }
        return _SUCCESS;
 }
@@ -854,7 +859,7 @@ static void mix_column(u8 *in, u8 *out)
        andf7[3] = in[3] & 0x7f;
        for (i = 3; i > 0; i--) {   /* logical shift left 1 bit */
                andf7[i] = andf7[i] << 1;
-               if ((andf7[i-1] & 0x80) == 0x80)
+               if ((andf7[i - 1] & 0x80) == 0x80)
                        andf7[i] = (andf7[i] | 0x01);
        }
        andf7[0] = andf7[0] << 1;
@@ -1072,14 +1077,15 @@ static sint aes_cipher(u8 *key, uint    hdrlen,
                        if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
                                hdrlen += 2;
                        qc_exists = 1;
-       } else
+       } else {
                qc_exists = 0;
+       }
        pn_vector[0] = pframe[hdrlen];
-       pn_vector[1] = pframe[hdrlen+1];
-       pn_vector[2] = pframe[hdrlen+4];
-       pn_vector[3] = pframe[hdrlen+5];
-       pn_vector[4] = pframe[hdrlen+6];
-       pn_vector[5] = pframe[hdrlen+7];
+       pn_vector[1] = pframe[hdrlen + 1];
+       pn_vector[2] = pframe[hdrlen + 4];
+       pn_vector[3] = pframe[hdrlen + 5];
+       pn_vector[4] = pframe[hdrlen + 6];
+       pn_vector[5] = pframe[hdrlen + 7];
        construct_mic_iv(mic_iv, qc_exists, a4_exists, pframe, plen, pn_vector);
        construct_mic_header1(mic_header1, hdrlen, pframe);
        construct_mic_header2(mic_header2, pframe, a4_exists, qc_exists);
@@ -1111,7 +1117,7 @@ static sint aes_cipher(u8 *key, uint      hdrlen,
                mic[j] = aes_out[j];
        /* Insert MIC into payload */
        for (j = 0; j < 8; j++)
-               pframe[payload_index+j] = mic[j];
+               pframe[payload_index + j] = mic[j];
        payload_index = hdrlen + 8;
        for (i = 0; i < num_blocks; i++) {
                construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
@@ -1124,11 +1130,11 @@ static sint aes_cipher(u8 *key, uint    hdrlen,
        if (payload_remainder > 0) {  /* If short final block, then pad it,*/
                                      /* encrypt and copy unpadded part back */
                construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
-                                     pframe, pn_vector, num_blocks+1);
+                                     pframe, pn_vector, num_blocks + 1);
                for (j = 0; j < 16; j++)
                        padded_buffer[j] = 0x00;
                for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = pframe[payload_index+j];
+                       padded_buffer[j] = pframe[payload_index + j];
                aes128k128d(key, ctr_preload, aes_out);
                bitwise_xor(aes_out, padded_buffer, chain_buffer);
                for (j = 0; j < payload_remainder; j++)
@@ -1140,7 +1146,7 @@ static sint aes_cipher(u8 *key, uint      hdrlen,
        for (j = 0; j < 16; j++)
                padded_buffer[j] = 0x00;
        for (j = 0; j < 8; j++)
-               padded_buffer[j] = pframe[j+hdrlen+8+plen];
+               padded_buffer[j] = pframe[j + hdrlen + 8 + plen];
        aes128k128d(key, ctr_preload, aes_out);
        bitwise_xor(aes_out, padded_buffer, chain_buffer);
        for (j = 0; j < 8; j++)
@@ -1191,8 +1197,9 @@ u32 r8712_aes_encrypt(struct _adapter *padapter, u8 *pxmitframe)
                                        pframe = (u8 *)RND4((addr_t)(pframe));
                                }
                        }
-               } else
+               } else {
                        res = _FAIL;
+               }
        }
        return res;
 }
@@ -1227,13 +1234,13 @@ static sint aes_decipher(u8 *key, uint  hdrlen,
        /* start to decrypt the payload */
        /*(plen including llc, payload and mic) */
        num_blocks = (plen - 8) / 16;
-       payload_remainder = (plen-8) % 16;
+       payload_remainder = (plen - 8) % 16;
        pn_vector[0] = pframe[hdrlen];
-       pn_vector[1] = pframe[hdrlen+1];
-       pn_vector[2] = pframe[hdrlen+4];
-       pn_vector[3] = pframe[hdrlen+5];
-       pn_vector[4] = pframe[hdrlen+6];
-       pn_vector[5] = pframe[hdrlen+7];
+       pn_vector[1] = pframe[hdrlen + 1];
+       pn_vector[2] = pframe[hdrlen + 4];
+       pn_vector[3] = pframe[hdrlen + 5];
+       pn_vector[4] = pframe[hdrlen + 6];
+       pn_vector[5] = pframe[hdrlen + 7];
        if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen ==  WLAN_HDR_A3_QOS_LEN))
                a4_exists = 0;
        else
@@ -1267,7 +1274,7 @@ static sint aes_decipher(u8 *key, uint    hdrlen,
        if (payload_remainder > 0) {  /* If short final block, pad it,*/
                /* encrypt it and copy the unpadded part back   */
                construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
-                                     pframe, pn_vector, num_blocks+1);
+                                     pframe, pn_vector, num_blocks + 1);
                for (j = 0; j < 16; j++)
                        padded_buffer[j] = 0x00;
                for (j = 0; j < payload_remainder; j++)
@@ -1280,12 +1287,12 @@ static sint aes_decipher(u8 *key, uint  hdrlen,
        /* start to calculate the mic */
        memcpy((void *)message, pframe, (hdrlen + plen + 8));
        pn_vector[0] = pframe[hdrlen];
-       pn_vector[1] = pframe[hdrlen+1];
-       pn_vector[2] = pframe[hdrlen+4];
-       pn_vector[3] = pframe[hdrlen+5];
-       pn_vector[4] = pframe[hdrlen+6];
-       pn_vector[5] = pframe[hdrlen+7];
-       construct_mic_iv(mic_iv, qc_exists, a4_exists, message, plen-8,
+       pn_vector[1] = pframe[hdrlen + 1];
+       pn_vector[2] = pframe[hdrlen + 4];
+       pn_vector[3] = pframe[hdrlen + 5];
+       pn_vector[4] = pframe[hdrlen + 6];
+       pn_vector[5] = pframe[hdrlen + 7];
+       construct_mic_iv(mic_iv, qc_exists, a4_exists, message, plen - 8,
                         pn_vector);
        construct_mic_header1(mic_header1, hdrlen, message);
        construct_mic_header2(mic_header2, message, a4_exists, qc_exists);
@@ -1317,7 +1324,7 @@ static sint aes_decipher(u8 *key, uint    hdrlen,
                mic[j] = aes_out[j];
        /* Insert MIC into payload */
        for (j = 0; j < 8; j++)
-               message[payload_index+j] = mic[j];
+               message[payload_index + j] = mic[j];
        payload_index = hdrlen + 8;
        for (i = 0; i < num_blocks; i++) {
                construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
@@ -1330,7 +1337,7 @@ static sint aes_decipher(u8 *key, uint    hdrlen,
        if (payload_remainder > 0) { /* If short final block, pad it,*/
                                     /* encrypt and copy unpadded part back */
                construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
-                                     message, pn_vector, num_blocks+1);
+                                     message, pn_vector, num_blocks + 1);
                for (j = 0; j < 16; j++)
                        padded_buffer[j] = 0x00;
                for (j = 0; j < payload_remainder; j++)
@@ -1373,21 +1380,24 @@ u32 r8712_aes_decrypt(struct _adapter *padapter, u8 *precvframe)
                                            &prxattrib->ta[0]);
                if (stainfo != NULL) {
                        if (IS_MCAST(prxattrib->ra)) {
-                               iv = pframe+prxattrib->hdrlen;
+                               iv = pframe + prxattrib->hdrlen;
                                idx = iv[3];
                                prwskey = &psecuritypriv->XGrpKey[
                                          ((idx >> 6) & 0x3) - 1].skey[0];
-                               if (psecuritypriv->binstallGrpkey == false)
+                               if (!psecuritypriv->binstallGrpkey)
                                        return _FAIL;
 
-                       } else
+                       } else {
                                prwskey = &stainfo->x_UncstKey.skey[0];
+                       }
                        length = ((union recv_frame *)precvframe)->
-                                u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
+                                u.hdr.len - prxattrib->hdrlen -
+                                prxattrib->iv_len;
                        aes_decipher(prwskey, prxattrib->hdrlen, pframe,
                                     length);
-               } else
+               } else {
                        return _FAIL;
+               }
        }
        return _SUCCESS;
 }