diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/fw/pnvm.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/pnvm.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c b/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c index dde22bdc8703..7d4aa398729a 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c @@ -162,7 +162,7 @@ done:  		goto out;  	} -	IWL_INFO(trans, "loaded PNVM version 0x%0x\n", sha1); +	IWL_INFO(trans, "loaded PNVM version %08x\n", sha1);  	ret = iwl_trans_set_pnvm(trans, pnvm_data, size);  out: @@ -284,16 +284,19 @@ int iwl_pnvm_load(struct iwl_trans *trans,  	/* First attempt to get the PNVM from BIOS */  	package = iwl_uefi_get_pnvm(trans, &len);  	if (!IS_ERR_OR_NULL(package)) { -		data = kmemdup(package->data, len, GFP_KERNEL); +		if (len >= sizeof(*package)) { +			/* we need only the data */ +			len -= sizeof(*package); +			data = kmemdup(package->data, len, GFP_KERNEL); +		} else { +			data = NULL; +		}  		/* free package regardless of whether kmemdup succeeded */  		kfree(package); -		if (data) { -			/* we need only the data size */ -			len -= sizeof(*package); +		if (data)  			goto parse; -		}  	}  	/* If it's not available, try from the filesystem */  |