[bug report] wifi: ath12k: add basic WoW functionalities
Dan Carpenter
dan.carpenter at linaro.org
Fri Jul 19 17:57:49 PDT 2024
Hello Baochen Qiang,
Commit 4a3c212eee0e ("wifi: ath12k: add basic WoW functionalities")
from Jun 19, 2024 (linux-next), leads to the following Smatch static
checker warning:
drivers/net/wireless/ath/ath12k/wow.c:434 ath12k_wow_vif_set_wakeups()
warn: reusing outside iterator: 'i'
drivers/net/wireless/ath/ath12k/wow.c
411 default:
412 break;
413 }
414
415 for (i = 0; i < wowlan->n_patterns; i++) {
^^^^^^^^^^^^^^^^^^^^^^
Here we loop until ->n_patterns
416 const struct cfg80211_pkt_pattern *eth_pattern = &patterns[i];
417 struct ath12k_pkt_pattern new_pattern = {};
418
419 if (WARN_ON(eth_pattern->pattern_len > WOW_MAX_PATTERN_SIZE))
420 return -EINVAL;
421
422 if (ar->ab->wow.wmi_conf_rx_decap_mode ==
423 ATH12K_HW_TXRX_NATIVE_WIFI) {
424 ath12k_wow_convert_8023_to_80211(ar, eth_pattern,
425 &new_pattern);
426
427 if (WARN_ON(new_pattern.pattern_len > WOW_MAX_PATTERN_SIZE))
428 return -EINVAL;
429 } else {
430 memcpy(new_pattern.pattern, eth_pattern->pattern,
431 eth_pattern->pattern_len);
432
433 /* convert bitmask to bytemask */
--> 434 for (i = 0; i < eth_pattern->pattern_len; i++)
435 if (eth_pattern->mask[i / 8] & BIT(i % 8))
436 new_pattern.bytemask[i] = 0xff;
This loop re-uses i and the loop ends with i == eth_pattern->pattern_len.
This looks like a bug.
437
438 new_pattern.pattern_len = eth_pattern->pattern_len;
439 new_pattern.pkt_offset = eth_pattern->pkt_offset;
440 }
441
442 ret = ath12k_wmi_wow_add_pattern(ar, arvif->vdev_id,
443 pattern_id,
444 new_pattern.pattern,
445 new_pattern.bytemask,
446 new_pattern.pattern_len,
447 new_pattern.pkt_offset);
448 if (ret) {
449 ath12k_warn(ar->ab, "failed to add pattern %i to vdev %i: %d\n",
450 pattern_id,
451 arvif->vdev_id, ret);
452 return ret;
453 }
454
455 pattern_id++;
456 __set_bit(WOW_PATTERN_MATCH_EVENT, &wow_mask);
457 }
458
459 for (i = 0; i < WOW_EVENT_MAX; i++) {
regards,
dan carpenter
More information about the ath12k
mailing list