mac80211: Fix accounting of the tailroom-needed counter
When hw acceleration is enabled, the GENERATE_IV or PUT_IV_SPACE flags will only require headroom space. Consequently, the tailroom-needed counter can safely be decremented. Signed-off-by: Ido Yariv <idox.yariv@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
		
					parent
					
						
							
								170fd0b1f6
							
						
					
				
			
			
				commit
				
					
						ca34e3b5c8
					
				
			
		
					 2 changed files with 8 additions and 11 deletions
				
			
		|  | @ -1226,7 +1226,8 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev); | ||||||
|  * |  * | ||||||
|  * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the |  * @IEEE80211_KEY_FLAG_GENERATE_IV: This flag should be set by the | ||||||
|  *	driver to indicate that it requires IV generation for this |  *	driver to indicate that it requires IV generation for this | ||||||
|  *	particular key. |  *	particular key. Setting this flag does not necessarily mean that SKBs | ||||||
|  |  *	will have sufficient tailroom for ICV or MIC. | ||||||
|  * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by |  * @IEEE80211_KEY_FLAG_GENERATE_MMIC: This flag should be set by | ||||||
|  *	the driver for a TKIP key if it requires Michael MIC |  *	the driver for a TKIP key if it requires Michael MIC | ||||||
|  *	generation in software. |  *	generation in software. | ||||||
|  | @ -1238,7 +1239,9 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev); | ||||||
|  * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver |  * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver | ||||||
|  *	if space should be prepared for the IV, but the IV |  *	if space should be prepared for the IV, but the IV | ||||||
|  *	itself should not be generated. Do not set together with |  *	itself should not be generated. Do not set together with | ||||||
|  *	@IEEE80211_KEY_FLAG_GENERATE_IV on the same key. |  *	@IEEE80211_KEY_FLAG_GENERATE_IV on the same key. Setting this flag does | ||||||
|  |  *	not necessarily mean that SKBs will have sufficient tailroom for ICV or | ||||||
|  |  *	MIC. | ||||||
|  * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received |  * @IEEE80211_KEY_FLAG_RX_MGMT: This key will be used to decrypt received | ||||||
|  *	management frames. The flag can help drivers that have a hardware |  *	management frames. The flag can help drivers that have a hardware | ||||||
|  *	crypto implementation that doesn't deal with management frames |  *	crypto implementation that doesn't deal with management frames | ||||||
|  |  | ||||||
|  | @ -130,9 +130,7 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key) | ||||||
| 	if (!ret) { | 	if (!ret) { | ||||||
| 		key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE; | 		key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE; | ||||||
| 
 | 
 | ||||||
| 		if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || | 		if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC)) | ||||||
| 		      (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) || |  | ||||||
| 		      (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))) |  | ||||||
| 			sdata->crypto_tx_tailroom_needed_cnt--; | 			sdata->crypto_tx_tailroom_needed_cnt--; | ||||||
| 
 | 
 | ||||||
| 		WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) && | 		WARN_ON((key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) && | ||||||
|  | @ -180,9 +178,7 @@ static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key) | ||||||
| 	sta = key->sta; | 	sta = key->sta; | ||||||
| 	sdata = key->sdata; | 	sdata = key->sdata; | ||||||
| 
 | 
 | ||||||
| 	if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || | 	if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC)) | ||||||
| 	      (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) || |  | ||||||
| 	      (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))) |  | ||||||
| 		increment_tailroom_need_count(sdata); | 		increment_tailroom_need_count(sdata); | ||||||
| 
 | 
 | ||||||
| 	ret = drv_set_key(key->local, DISABLE_KEY, sdata, | 	ret = drv_set_key(key->local, DISABLE_KEY, sdata, | ||||||
|  | @ -878,9 +874,7 @@ void ieee80211_remove_key(struct ieee80211_key_conf *keyconf) | ||||||
| 	if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) { | 	if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) { | ||||||
| 		key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; | 		key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; | ||||||
| 
 | 
 | ||||||
| 		if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || | 		if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC)) | ||||||
| 		      (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) || |  | ||||||
| 		      (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))) |  | ||||||
| 			increment_tailroom_need_count(key->sdata); | 			increment_tailroom_need_count(key->sdata); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ido Yariv
				Ido Yariv