Loading drivers/net/wireless/airo.c +41 −41 Original line number Diff line number Diff line Loading @@ -1302,59 +1302,59 @@ static void emmh32_update(emmh32_context *context, u8 *pOctets, int len); static void emmh32_final(emmh32_context *context, u8 digest[4]); static int flashpchar(struct airo_info *ai,int byte,int dwelltime); /* micinit - Initialize mic seed */ static void micinit(struct airo_info *ai) static void age_mic_context(miccntx *cur, miccntx *old, u8 *key, int key_len, struct crypto_cipher *tfm) { MICRid mic_rid; clear_bit(JOB_MIC, &ai->jobs); PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid), 0); up(&ai->sem); ai->micstats.enabled = (mic_rid.state & 0x00FF) ? 1 : 0; /* If the current MIC context is valid and its key is the same as * the MIC register, there's nothing to do. */ if (cur->valid && (memcmp(cur->key, key, key_len) == 0)) return; if (ai->micstats.enabled) { /* Key must be valid and different */ if (mic_rid.multicastValid && (!ai->mod[0].mCtx.valid || (memcmp (ai->mod[0].mCtx.key, mic_rid.multicast, sizeof(ai->mod[0].mCtx.key)) != 0))) { /* Age current mic Context */ memcpy(&ai->mod[1].mCtx,&ai->mod[0].mCtx,sizeof(miccntx)); memcpy(old, cur, sizeof(*cur)); /* Initialize new context */ memcpy(&ai->mod[0].mCtx.key,mic_rid.multicast,sizeof(mic_rid.multicast)); ai->mod[0].mCtx.window = 33; //Window always points to the middle ai->mod[0].mCtx.rx = 0; //Rx Sequence numbers ai->mod[0].mCtx.tx = 0; //Tx sequence numbers ai->mod[0].mCtx.valid = 1; //Key is now valid memcpy(cur->key, key, key_len); cur->window = 33; /* Window always points to the middle */ cur->rx = 0; /* Rx Sequence numbers */ cur->tx = 0; /* Tx sequence numbers */ cur->valid = 1; /* Key is now valid */ /* Give key to mic seed */ emmh32_setseed(&ai->mod[0].mCtx.seed,mic_rid.multicast,sizeof(mic_rid.multicast), ai->tfm); emmh32_setseed(&cur->seed, key, key_len, tfm); } /* Key must be valid and different */ if (mic_rid.unicastValid && (!ai->mod[0].uCtx.valid || (memcmp(ai->mod[0].uCtx.key, mic_rid.unicast, sizeof(ai->mod[0].uCtx.key)) != 0))) { /* Age current mic Context */ memcpy(&ai->mod[1].uCtx,&ai->mod[0].uCtx,sizeof(miccntx)); /* Initialize new context */ memcpy(&ai->mod[0].uCtx.key,mic_rid.unicast,sizeof(mic_rid.unicast)); /* micinit - Initialize mic seed */ ai->mod[0].uCtx.window = 33; //Window always points to the middle ai->mod[0].uCtx.rx = 0; //Rx Sequence numbers ai->mod[0].uCtx.tx = 0; //Tx sequence numbers ai->mod[0].uCtx.valid = 1; //Key is now valid static void micinit(struct airo_info *ai) { MICRid mic_rid; //Give key to mic seed emmh32_setseed(&ai->mod[0].uCtx.seed, mic_rid.unicast, sizeof(mic_rid.unicast), ai->tfm); } } else { /* So next time we have a valid key and mic is enabled, we will update * the sequence number if the key is the same as before. clear_bit(JOB_MIC, &ai->jobs); PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid), 0); up(&ai->sem); ai->micstats.enabled = (le16_to_cpu(mic_rid.state) & 0x00FF) ? 1 : 0; if (!ai->micstats.enabled) { /* So next time we have a valid key and mic is enabled, we will * update the sequence number if the key is the same as before. */ ai->mod[0].uCtx.valid = 0; ai->mod[0].mCtx.valid = 0; return; } if (mic_rid.multicastValid) { age_mic_context(&ai->mod[0].mCtx, &ai->mod[1].mCtx, mic_rid.multicast, sizeof(mic_rid.multicast), ai->tfm); } if (mic_rid.unicastValid) { age_mic_context(&ai->mod[0].uCtx, &ai->mod[1].uCtx, mic_rid.unicast, sizeof(mic_rid.unicast), ai->tfm); } } Loading Loading
drivers/net/wireless/airo.c +41 −41 Original line number Diff line number Diff line Loading @@ -1302,59 +1302,59 @@ static void emmh32_update(emmh32_context *context, u8 *pOctets, int len); static void emmh32_final(emmh32_context *context, u8 digest[4]); static int flashpchar(struct airo_info *ai,int byte,int dwelltime); /* micinit - Initialize mic seed */ static void micinit(struct airo_info *ai) static void age_mic_context(miccntx *cur, miccntx *old, u8 *key, int key_len, struct crypto_cipher *tfm) { MICRid mic_rid; clear_bit(JOB_MIC, &ai->jobs); PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid), 0); up(&ai->sem); ai->micstats.enabled = (mic_rid.state & 0x00FF) ? 1 : 0; /* If the current MIC context is valid and its key is the same as * the MIC register, there's nothing to do. */ if (cur->valid && (memcmp(cur->key, key, key_len) == 0)) return; if (ai->micstats.enabled) { /* Key must be valid and different */ if (mic_rid.multicastValid && (!ai->mod[0].mCtx.valid || (memcmp (ai->mod[0].mCtx.key, mic_rid.multicast, sizeof(ai->mod[0].mCtx.key)) != 0))) { /* Age current mic Context */ memcpy(&ai->mod[1].mCtx,&ai->mod[0].mCtx,sizeof(miccntx)); memcpy(old, cur, sizeof(*cur)); /* Initialize new context */ memcpy(&ai->mod[0].mCtx.key,mic_rid.multicast,sizeof(mic_rid.multicast)); ai->mod[0].mCtx.window = 33; //Window always points to the middle ai->mod[0].mCtx.rx = 0; //Rx Sequence numbers ai->mod[0].mCtx.tx = 0; //Tx sequence numbers ai->mod[0].mCtx.valid = 1; //Key is now valid memcpy(cur->key, key, key_len); cur->window = 33; /* Window always points to the middle */ cur->rx = 0; /* Rx Sequence numbers */ cur->tx = 0; /* Tx sequence numbers */ cur->valid = 1; /* Key is now valid */ /* Give key to mic seed */ emmh32_setseed(&ai->mod[0].mCtx.seed,mic_rid.multicast,sizeof(mic_rid.multicast), ai->tfm); emmh32_setseed(&cur->seed, key, key_len, tfm); } /* Key must be valid and different */ if (mic_rid.unicastValid && (!ai->mod[0].uCtx.valid || (memcmp(ai->mod[0].uCtx.key, mic_rid.unicast, sizeof(ai->mod[0].uCtx.key)) != 0))) { /* Age current mic Context */ memcpy(&ai->mod[1].uCtx,&ai->mod[0].uCtx,sizeof(miccntx)); /* Initialize new context */ memcpy(&ai->mod[0].uCtx.key,mic_rid.unicast,sizeof(mic_rid.unicast)); /* micinit - Initialize mic seed */ ai->mod[0].uCtx.window = 33; //Window always points to the middle ai->mod[0].uCtx.rx = 0; //Rx Sequence numbers ai->mod[0].uCtx.tx = 0; //Tx sequence numbers ai->mod[0].uCtx.valid = 1; //Key is now valid static void micinit(struct airo_info *ai) { MICRid mic_rid; //Give key to mic seed emmh32_setseed(&ai->mod[0].uCtx.seed, mic_rid.unicast, sizeof(mic_rid.unicast), ai->tfm); } } else { /* So next time we have a valid key and mic is enabled, we will update * the sequence number if the key is the same as before. clear_bit(JOB_MIC, &ai->jobs); PC4500_readrid(ai, RID_MIC, &mic_rid, sizeof(mic_rid), 0); up(&ai->sem); ai->micstats.enabled = (le16_to_cpu(mic_rid.state) & 0x00FF) ? 1 : 0; if (!ai->micstats.enabled) { /* So next time we have a valid key and mic is enabled, we will * update the sequence number if the key is the same as before. */ ai->mod[0].uCtx.valid = 0; ai->mod[0].mCtx.valid = 0; return; } if (mic_rid.multicastValid) { age_mic_context(&ai->mod[0].mCtx, &ai->mod[1].mCtx, mic_rid.multicast, sizeof(mic_rid.multicast), ai->tfm); } if (mic_rid.unicastValid) { age_mic_context(&ai->mod[0].uCtx, &ai->mod[1].uCtx, mic_rid.unicast, sizeof(mic_rid.unicast), ai->tfm); } } Loading