diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-10-11 15:47:06 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-10-14 09:47:08 +0200 |
commit | d86aa4f8ca58898ec6a94c0635da20b948171ed7 (patch) | |
tree | 9f6ca03c0304f1b5fe9f2b1cb4e5cf1b1d9e0a53 | |
parent | wireless: radiotap: fix parsing buffer overrun (diff) | |
download | linux-d86aa4f8ca58898ec6a94c0635da20b948171ed7.tar.xz linux-d86aa4f8ca58898ec6a94c0635da20b948171ed7.zip |
mac80211: fix crash if bitrate calculation goes wrong
If a frame's timestamp is calculated, and the bitrate
calculation goes wrong and returns zero, the system
will attempt to divide by zero and crash. Catch this
case and print the rate information that the driver
reported when this happens.
Cc: stable@vger.kernel.org
Reported-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | net/mac80211/util.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 9c3200bcfc02..69e4ef5348a0 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -2238,6 +2238,10 @@ u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local, } rate = cfg80211_calculate_bitrate(&ri); + if (WARN_ONCE(!rate, + "Invalid bitrate: flags=0x%x, idx=%d, vht_nss=%d\n", + status->flag, status->rate_idx, status->vht_nss)) + return 0; /* rewind from end of MPDU */ if (status->flag & RX_FLAG_MACTIME_END) |