diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/nvm.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/nvm.c | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c index 6d18a1fd649b..fdf60afb0f3f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/nvm.c @@ -445,6 +445,11 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2,  		struct iwl_mcc_update_resp *mcc_resp = (void *)pkt->data;  		n_channels =  __le32_to_cpu(mcc_resp->n_channels); +		if (iwl_rx_packet_payload_len(pkt) != +		    struct_size(mcc_resp, channels, n_channels)) { +			resp_cp = ERR_PTR(-EINVAL); +			goto exit; +		}  		resp_len = sizeof(struct iwl_mcc_update_resp) +  			   n_channels * sizeof(__le32);  		resp_cp = kmemdup(mcc_resp, resp_len, GFP_KERNEL); @@ -456,6 +461,11 @@ iwl_mvm_update_mcc(struct iwl_mvm *mvm, const char *alpha2,  		struct iwl_mcc_update_resp_v3 *mcc_resp_v3 = (void *)pkt->data;  		n_channels =  __le32_to_cpu(mcc_resp_v3->n_channels); +		if (iwl_rx_packet_payload_len(pkt) != +		    struct_size(mcc_resp_v3, channels, n_channels)) { +			resp_cp = ERR_PTR(-EINVAL); +			goto exit; +		}  		resp_len = sizeof(struct iwl_mcc_update_resp) +  			   n_channels * sizeof(__le32);  		resp_cp = kzalloc(resp_len, GFP_KERNEL);  | 
