Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

staging: vt6656: rxtx.c s_vFillTxKey fill structure vnt_mic_hdr

Replace the pointer offsets with structure of mic_hdr with
endian conversion where needed.

Replace vFillTxKey argument u8 *pMICHDR with struct vnt_mic_hdr *mic_hdr
and fix type of calling functions.

An extra check that mic_hdr is not NULL

Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Malcolm Priestley and committed by
Greg Kroah-Hartman
ec37d8b6 5a5d6a80

+30 -37
+30 -37
drivers/staging/vt6656/rxtx.c
··· 113 113 114 114 static void s_vFillTxKey(struct vnt_private *pDevice, u8 *pbyBuf, 115 115 u8 *pbyIVHead, PSKeyItem pTransmitKey, u8 *pbyHdrBuf, u16 wPayloadLen, 116 - u8 *pMICHDR); 116 + struct vnt_mic_hdr *mic_hdr); 117 117 118 118 static void s_vSWencryption(struct vnt_private *pDevice, 119 119 PSKeyItem pTransmitKey, u8 *pbyPayloadHead, u16 wPayloadSize); ··· 183 183 184 184 static void s_vFillTxKey(struct vnt_private *pDevice, u8 *pbyBuf, 185 185 u8 *pbyIVHead, PSKeyItem pTransmitKey, u8 *pbyHdrBuf, 186 - u16 wPayloadLen, u8 *pMICHDR) 186 + u16 wPayloadLen, struct vnt_mic_hdr *mic_hdr) 187 187 { 188 188 u32 *pdwIV = (u32 *)pbyIVHead; 189 189 u32 *pdwExtIV = (u32 *)((u8 *)pbyIVHead + 4); 190 - u16 wValue; 191 190 struct ieee80211_hdr *pMACHeader = (struct ieee80211_hdr *)pbyHdrBuf; 192 191 u32 dwRevIVCounter; 193 192 ··· 250 251 //Append IV&ExtIV after Mac Header 251 252 *pdwExtIV = cpu_to_le32(pTransmitKey->dwTSC47_16); 252 253 253 - //Fill MICHDR0 254 - *pMICHDR = 0x59; 255 - *((u8 *)(pMICHDR+1)) = 0; // TxPriority 256 - memcpy(pMICHDR+2, &(pMACHeader->addr2[0]), 6); 257 - *((u8 *)(pMICHDR+8)) = HIBYTE(HIWORD(pTransmitKey->dwTSC47_16)); 258 - *((u8 *)(pMICHDR+9)) = LOBYTE(HIWORD(pTransmitKey->dwTSC47_16)); 259 - *((u8 *)(pMICHDR+10)) = HIBYTE(LOWORD(pTransmitKey->dwTSC47_16)); 260 - *((u8 *)(pMICHDR+11)) = LOBYTE(LOWORD(pTransmitKey->dwTSC47_16)); 261 - *((u8 *)(pMICHDR+12)) = HIBYTE(pTransmitKey->wTSC15_0); 262 - *((u8 *)(pMICHDR+13)) = LOBYTE(pTransmitKey->wTSC15_0); 263 - *((u8 *)(pMICHDR+14)) = HIBYTE(wPayloadLen); 264 - *((u8 *)(pMICHDR+15)) = LOBYTE(wPayloadLen); 254 + if (!mic_hdr) 255 + return; 265 256 266 - //Fill MICHDR1 267 - *((u8 *)(pMICHDR+16)) = 0; // HLEN[15:8] 268 - if (pDevice->bLongHeader) { 269 - *((u8 *)(pMICHDR+17)) = 28; // HLEN[7:0] 270 - } else { 271 - *((u8 *)(pMICHDR+17)) = 22; // HLEN[7:0] 272 - } 273 - wValue = cpu_to_le16(pMACHeader->frame_control & 0xC78F); 274 - memcpy(pMICHDR+18, (u8 *)&wValue, 2); // MSKFRACTL 275 - memcpy(pMICHDR+20, &(pMACHeader->addr1[0]), 6); 276 - memcpy(pMICHDR+26, &(pMACHeader->addr2[0]), 6); 257 + /* MICHDR0 */ 258 + mic_hdr->id = 0x59; 259 + mic_hdr->payload_len = cpu_to_be16(wPayloadLen); 260 + memcpy(mic_hdr->mic_addr2, pMACHeader->addr2, ETH_ALEN); 277 261 278 - //Fill MICHDR2 279 - memcpy(pMICHDR+32, &(pMACHeader->addr3[0]), 6); 280 - wValue = pMACHeader->seq_ctrl; 281 - wValue &= 0x000F; 282 - wValue = cpu_to_le16(wValue); 283 - memcpy(pMICHDR+38, (u8 *)&wValue, 2); // MSKSEQCTL 284 - if (pDevice->bLongHeader) { 285 - memcpy(pMICHDR+40, &(pMACHeader->addr4[0]), 6); 286 - } 262 + mic_hdr->tsc_47_16 = cpu_to_be32(pTransmitKey->dwTSC47_16); 263 + mic_hdr->tsc_15_0 = cpu_to_be16(pTransmitKey->wTSC15_0); 264 + 265 + /* MICHDR1 */ 266 + if (pDevice->bLongHeader) 267 + mic_hdr->hlen = cpu_to_be16(28); 268 + else 269 + mic_hdr->hlen = cpu_to_be16(22); 270 + 271 + memcpy(mic_hdr->addr1, pMACHeader->addr1, ETH_ALEN); 272 + memcpy(mic_hdr->addr2, pMACHeader->addr2, ETH_ALEN); 273 + 274 + /* MICHDR2 */ 275 + memcpy(mic_hdr->addr3, pMACHeader->addr3, ETH_ALEN); 276 + mic_hdr->frame_control = cpu_to_le16(pMACHeader->frame_control 277 + & 0xc78f); 278 + mic_hdr->seq_ctrl = cpu_to_le16(pMACHeader->seq_ctrl & 0xf); 279 + 280 + if (pDevice->bLongHeader) 281 + memcpy(mic_hdr->addr4, pMACHeader->addr4, ETH_ALEN); 287 282 } 288 283 } 289 284 ··· 1287 1294 if (bNeedEncryption == true) { 1288 1295 //Fill TXKEY 1289 1296 s_vFillTxKey(pDevice, (u8 *)(pTxBufHead->adwTxKey), pbyIVHead, pTransmitKey, 1290 - pbyMacHdr, (u16)cbFrameBodySize, (u8 *)pMICHDR); 1297 + pbyMacHdr, (u16)cbFrameBodySize, pMICHDR); 1291 1298 1292 1299 if (pDevice->bEnableHostWEP) { 1293 1300 pMgmt->sNodeDBTable[uNodeIndex].dwTSC47_16 = pTransmitKey->dwTSC47_16; ··· 2196 2203 } 2197 2204 2198 2205 s_vFillTxKey(pDevice, (u8 *)(pTxBufHead->adwTxKey), pbyIVHead, pTransmitKey, 2199 - pbyMacHdr, (u16)cbFrameBodySize, (u8 *)pMICHDR); 2206 + pbyMacHdr, (u16)cbFrameBodySize, pMICHDR); 2200 2207 2201 2208 if (pDevice->bEnableHostWEP) { 2202 2209 pMgmt->sNodeDBTable[uNodeIndex].dwTSC47_16 = pTransmitKey->dwTSC47_16;