| From 519ee6918b91abdc4bc9720deae17599a109eb40 Mon Sep 17 00:00:00 2001 |
| From: "Janusz.Dziedzic@tieto.com" <Janusz.Dziedzic@tieto.com> |
| Date: Tue, 27 Oct 2015 08:35:11 +0100 |
| Subject: mac80211: fix divide by zero when NOA update |
| |
| From: "Janusz.Dziedzic@tieto.com" <Janusz.Dziedzic@tieto.com> |
| |
| commit 519ee6918b91abdc4bc9720deae17599a109eb40 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> |
| |
| --- |
| net/mac80211/util.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/net/mac80211/util.c |
| +++ b/net/mac80211/util.c |
| @@ -2984,6 +2984,13 @@ ieee80211_extend_noa_desc(struct ieee802 |
| if (end > 0) |
| return false; |
| |
| + /* One shot NOA */ |
| + if (data->count[i] == 1) |
| + return false; |
| + |
| + if (data->desc[i].interval == 0) |
| + return false; |
| + |
| /* End time is in the past, check for repetitions */ |
| skip = DIV_ROUND_UP(-end, data->desc[i].interval); |
| if (data->count[i] < 255) { |