diff options
Diffstat (limited to 'drivers/net/wireless/intel/ipw2x00')
| -rw-r--r-- | drivers/net/wireless/intel/ipw2x00/libipw_rx.c | 56 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/ipw2x00/libipw_tx.c | 4 | 
2 files changed, 19 insertions, 41 deletions
| diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_rx.c b/drivers/net/wireless/intel/ipw2x00/libipw_rx.c index 5a2a723e480b..7a684b76f39b 100644 --- a/drivers/net/wireless/intel/ipw2x00/libipw_rx.c +++ b/drivers/net/wireless/intel/ipw2x00/libipw_rx.c @@ -927,7 +927,8 @@ static u8 qos_oui[QOS_OUI_LEN] = { 0x00, 0x50, 0xF2 };  static int libipw_verify_qos_info(struct libipw_qos_information_element  				     *info_element, int sub_type)  { - +	if (info_element->elementID != QOS_ELEMENT_ID) +		return -1;  	if (info_element->qui_subtype != sub_type)  		return -1;  	if (memcmp(info_element->qui, qos_oui, QOS_OUI_LEN)) @@ -943,57 +944,34 @@ static int libipw_verify_qos_info(struct libipw_qos_information_element  /*   * Parse a QoS parameter element   */ -static int libipw_read_qos_param_element(struct libipw_qos_parameter_info -					    *element_param, struct libipw_info_element -					    *info_element) +static int libipw_read_qos_param_element( +			struct libipw_qos_parameter_info *element_param, +			struct libipw_info_element *info_element)  { -	int ret = 0; -	u16 size = sizeof(struct libipw_qos_parameter_info) - 2; +	size_t size = sizeof(*element_param); -	if ((info_element == NULL) || (element_param == NULL)) +	if (!element_param || !info_element || info_element->len != size - 2)  		return -1; -	if (info_element->id == QOS_ELEMENT_ID && info_element->len == size) { -		memcpy(element_param->info_element.qui, info_element->data, -		       info_element->len); -		element_param->info_element.elementID = info_element->id; -		element_param->info_element.length = info_element->len; -	} else -		ret = -1; -	if (ret == 0) -		ret = libipw_verify_qos_info(&element_param->info_element, -						QOS_OUI_PARAM_SUB_TYPE); -	return ret; +	memcpy(element_param, info_element, size); +	return libipw_verify_qos_info(&element_param->info_element, +				      QOS_OUI_PARAM_SUB_TYPE);  }  /*   * Parse a QoS information element   */ -static int libipw_read_qos_info_element(struct -					   libipw_qos_information_element -					   *element_info, struct libipw_info_element -					   *info_element) +static int libipw_read_qos_info_element( +			struct libipw_qos_information_element *element_info, +			struct libipw_info_element *info_element)  { -	int ret = 0; -	u16 size = sizeof(struct libipw_qos_information_element) - 2; +	size_t size = sizeof(struct libipw_qos_information_element) - 2; -	if (element_info == NULL) +	if (!element_info || !info_element || info_element->len != size - 2)  		return -1; -	if (info_element == NULL) -		return -1; - -	if ((info_element->id == QOS_ELEMENT_ID) && (info_element->len == size)) { -		memcpy(element_info->qui, info_element->data, -		       info_element->len); -		element_info->elementID = info_element->id; -		element_info->length = info_element->len; -	} else -		ret = -1; -	if (ret == 0) -		ret = libipw_verify_qos_info(element_info, -						QOS_OUI_INFO_SUB_TYPE); -	return ret; +	memcpy(element_info, info_element, size); +	return libipw_verify_qos_info(element_info, QOS_OUI_INFO_SUB_TYPE);  }  /* diff --git a/drivers/net/wireless/intel/ipw2x00/libipw_tx.c b/drivers/net/wireless/intel/ipw2x00/libipw_tx.c index d9baa2fa603b..36d1e6b2568d 100644 --- a/drivers/net/wireless/intel/ipw2x00/libipw_tx.c +++ b/drivers/net/wireless/intel/ipw2x00/libipw_tx.c @@ -179,8 +179,8 @@ static struct libipw_txb *libipw_alloc_txb(int nr_frags, int txb_size,  {  	struct libipw_txb *txb;  	int i; -	txb = kmalloc(sizeof(struct libipw_txb) + (sizeof(u8 *) * nr_frags), -		      gfp_mask); + +	txb = kmalloc(struct_size(txb, fragments, nr_frags), gfp_mask);  	if (!txb)  		return NULL; |