Skip to content

Commit 162b1d8

Browse files
dziedjanroot
authored and
root
committed
mac80211: fix divide by zero when NOA update
commit 519ee69 upstream. In case of one shot NOA the interval can be 0, catch that instead of potentially (depending on the driver) crashing like this: divide error: 0000 [#1] SMP [...] Call Trace: <IRQ> [<ffffffffc08e891c>] ieee80211_extend_absent_time+0x6c/0xb0 [mac80211] [<ffffffffc08e8a17>] ieee80211_update_p2p_noa+0xb7/0xe0 [mac80211] [<ffffffffc069cc30>] ath9k_p2p_ps_timer+0x170/0x190 [ath9k] [<ffffffffc070adf8>] ath_gen_timer_isr+0xc8/0xf0 [ath9k_hw] [<ffffffffc0691156>] ath9k_tasklet+0x296/0x2f0 [ath9k] [<ffffffff8107ad65>] tasklet_action+0xe5/0xf0 [...] Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 5df4eac commit 162b1d8

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

net/mac80211/util.c

+7
Original file line numberDiff line numberDiff line change
@@ -2984,6 +2984,13 @@ ieee80211_extend_noa_desc(struct ieee80211_noa_data *data, u32 tsf, int i)
29842984
if (end > 0)
29852985
return false;
29862986

2987+
/* One shot NOA */
2988+
if (data->count[i] == 1)
2989+
return false;
2990+
2991+
if (data->desc[i].interval == 0)
2992+
return false;
2993+
29872994
/* End time is in the past, check for repetitions */
29882995
skip = DIV_ROUND_UP(-end, data->desc[i].interval);
29892996
if (data->count[i] < 255) {

0 commit comments

Comments
 (0)