Skip to contentSkip to conversation

nl80211: Fix possible Spectre-v1 for CQM RSSI thresholds

bug report Dan Carpenter 2 participants 2 messages Sep 7, 2019 – Sep 8, 2019

lore
Share & tools
lore
#0 lore raw

Hello Masashi Honma,

The patch 1222a1601488: "nl80211: Fix possible Spectre-v1 for CQM RSSI thresholds" from Sep 25, 2018, leads to the following static checker warning:

	net/wireless/nl80211.c:10820 cfg80211_cqm_rssi_update()
	warn: disabling speculation after use: 'i'

net/wireless/nl80211.c

 10804          last = wdev->cqm_config->last_rssi_event_value;
 10805          hyst = wdev->cqm_config->rssi_hyst;
 10806          n = wdev->cqm_config->n_rssi_thresholds;
 10807  
 10808          for (i = 0; i < n; i++)
 10809                  if (last < wdev->cqm_config->rssi_thresholds[i])
                                                     ^^^^^^^^^^^^^^^^^^

We've already used "i" as an index.

10810 break;
10811
10812 low_index = i - 1;
10813 if (low_index >= 0) {

 10814                  low_index = array_index_nospec(low_index, n);
                                    ^^^^^^^^^^^^^^^^^^

10815 low = wdev->cqm_config->rssi_thresholds[low_index] - hyst;
10816 } else {
10817 low = S32_MIN;
10818 }
10819 if (i < n) {

 10820                  i = array_index_nospec(i, n);
                            ^^^^^^^^^^^^^^^^^^

So this seems like closing the barn door after the horses have left.

10821 high = wdev->cqm_config->rssi_thresholds[i] + hyst - 1;
10822 } else {
10823 high = S32_MAX;
10824 }

regards,
dan carpenter

#1 lore raw
Quoted 6 lines · Dan Carpenter

The patch 1222a1601488: "nl80211: Fix possible Spectre-v1 for CQM RSSI thresholds" from Sep 25, 2018, leads to the following static checker warning:

	net/wireless/nl80211.c:10820 cfg80211_cqm_rssi_update()
	warn: disabling speculation after use: 'i'

Thanks.

I will send a patch to prevent accessing to rssi_thresholds[n].

Regards,
Masashi Honma.