aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmdresp.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/net/wireless/mwifiex/sta_cmdresp.c b/drivers/net/wireless/mwifiex/sta_cmdresp.c
index bdf50fd5ef6b..5edea4dd05a8 100644
--- a/drivers/net/wireless/mwifiex/sta_cmdresp.c
+++ b/drivers/net/wireless/mwifiex/sta_cmdresp.c
@@ -341,12 +341,16 @@ static int mwifiex_get_power_level(struct mwifiex_private *priv, void *data_buf)
341 pg = (struct mwifiex_power_group *) 341 pg = (struct mwifiex_power_group *)
342 ((u8 *) pg_tlv_hdr + sizeof(struct mwifiex_types_power_group)); 342 ((u8 *) pg_tlv_hdr + sizeof(struct mwifiex_types_power_group));
343 length = le16_to_cpu(pg_tlv_hdr->length); 343 length = le16_to_cpu(pg_tlv_hdr->length);
344 if (length > 0) { 344
345 max_power = pg->power_max; 345 /* At least one structure required to update power */
346 min_power = pg->power_min; 346 if (length < sizeof(struct mwifiex_power_group))
347 length -= sizeof(struct mwifiex_power_group); 347 return 0;
348 } 348
349 while (length) { 349 max_power = pg->power_max;
350 min_power = pg->power_min;
351 length -= sizeof(struct mwifiex_power_group);
352
353 while (length >= sizeof(struct mwifiex_power_group)) {
350 pg++; 354 pg++;
351 if (max_power < pg->power_max) 355 if (max_power < pg->power_max)
352 max_power = pg->power_max; 356 max_power = pg->power_max;
@@ -356,10 +360,8 @@ static int mwifiex_get_power_level(struct mwifiex_private *priv, void *data_buf)
356 360
357 length -= sizeof(struct mwifiex_power_group); 361 length -= sizeof(struct mwifiex_power_group);
358 } 362 }
359 if (le16_to_cpu(pg_tlv_hdr->length) > 0) { 363 priv->min_tx_power_level = (u8) min_power;
360 priv->min_tx_power_level = (u8) min_power; 364 priv->max_tx_power_level = (u8) max_power;
361 priv->max_tx_power_level = (u8) max_power;
362 }
363 365
364 return 0; 366 return 0;
365} 367}