Re: [ath9k-devel] [PATCH] ath9k: Prevent divide by zero kernel crash.

2014-04-22 Thread Ben Greear
On 04/22/2014 10:53 AM, John W. Linville wrote:
 Please consider Felix's comments while refactoring this for the
 current code structure...

I'm low on time, but will resend a patch when I get a chance.

If someone else wants to send in the updated patch that is fine by me.

Thanks,
Ben

 
 John
 
 On Thu, Apr 17, 2014 at 09:47:26AM +0200, Felix Fietkau wrote:
 On 2014-04-17 02:40, gree...@candelatech.com wrote:
 From: Ben Greear gree...@candelatech.com

 Make sure we cannot ever assign beacon interval to zero.

 Signed-off-by: Ben Greear gree...@candelatech.com
 ---
  drivers/net/wireless/ath/ath9k/beacon.c | 4 
  drivers/net/wireless/ath/ath9k/recv.c   | 3 ++-
  2 files changed, 6 insertions(+), 1 deletion(-)

 diff --git a/drivers/net/wireless/ath/ath9k/beacon.c 
 b/drivers/net/wireless/ath/ath9k/beacon.c
 index 2e8bba0..5391f01 100644
 --- a/drivers/net/wireless/ath/ath9k/beacon.c
 +++ b/drivers/net/wireless/ath/ath9k/beacon.c
 @@ -443,6 +443,8 @@ static u32 ath9k_mod_tsf64_tu(u64 tsf, u32 div_tu)
  {
 u32 tsf_mod, tsf_hi, tsf_lo, mod_hi, mod_lo;
  
 +   if (WARN_ON_ONCE(div_tu == 0))
 +   div_tu = 100;
 tsf_mod = tsf  (BIT(10) - 1);
 tsf_hi = tsf  32;
 tsf_lo = ((u32) tsf)  10;
 Why add this warning here if you already have the additions below? We
 don't need multiple layers of defensive checks for the same thing.

 @@ -667,6 +669,8 @@ static void ath9k_cache_beacon_config(struct ath_softc 
 *sc,
 Caching beacon data for BSS: %pM\n, bss_conf-bssid);
  
 cur_conf-beacon_interval = bss_conf-beacon_int;
 +   if (WARN_ON_ONCE(cur_conf-beacon_interval == 0))
 +   cur_conf-beacon_interval = 100;
 cur_conf-dtim_period = bss_conf-dtim_period;
 cur_conf-listen_interval = 1;
 cur_conf-dtim_count = 1;
 diff --git a/drivers/net/wireless/ath/ath9k/recv.c 
 b/drivers/net/wireless/ath/ath9k/recv.c
 index b97217d..79c20c7 100644
 --- a/drivers/net/wireless/ath/ath9k/recv.c
 +++ b/drivers/net/wireless/ath/ath9k/recv.c
 @@ -538,7 +538,8 @@ static void ath_rx_ps_beacon(struct ath_softc *sc, 
 struct sk_buff *skb)
 sc-ps_flags = ~PS_BEACON_SYNC;
 ath_dbg(common, PS,
 Reconfigure beacon timers based on synchronized 
 timestamp\n);
 -   ath9k_set_beacon(sc);
 +   if (!(WARN_ON_ONCE(sc-cur_beacon_conf.beacon_interval == 0)))
 +   ath9k_set_beacon(sc);
 }
  
 if (ath_beacon_dtim_pending_cab(skb)) {


 --
 To unsubscribe from this list: send the line unsubscribe linux-wireless in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

 


-- 
Ben Greear gree...@candelatech.com
Candela Technologies Inc  http://www.candelatech.com

___
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel


Re: [ath9k-devel] [PATCH] ath9k: Prevent divide by zero kernel crash.

2014-04-22 Thread John W. Linville
Please consider Felix's comments while refactoring this for the
current code structure...

John

On Thu, Apr 17, 2014 at 09:47:26AM +0200, Felix Fietkau wrote:
 On 2014-04-17 02:40, gree...@candelatech.com wrote:
  From: Ben Greear gree...@candelatech.com
  
  Make sure we cannot ever assign beacon interval to zero.
  
  Signed-off-by: Ben Greear gree...@candelatech.com
  ---
   drivers/net/wireless/ath/ath9k/beacon.c | 4 
   drivers/net/wireless/ath/ath9k/recv.c   | 3 ++-
   2 files changed, 6 insertions(+), 1 deletion(-)
  
  diff --git a/drivers/net/wireless/ath/ath9k/beacon.c 
  b/drivers/net/wireless/ath/ath9k/beacon.c
  index 2e8bba0..5391f01 100644
  --- a/drivers/net/wireless/ath/ath9k/beacon.c
  +++ b/drivers/net/wireless/ath/ath9k/beacon.c
  @@ -443,6 +443,8 @@ static u32 ath9k_mod_tsf64_tu(u64 tsf, u32 div_tu)
   {
  u32 tsf_mod, tsf_hi, tsf_lo, mod_hi, mod_lo;
   
  +   if (WARN_ON_ONCE(div_tu == 0))
  +   div_tu = 100;
  tsf_mod = tsf  (BIT(10) - 1);
  tsf_hi = tsf  32;
  tsf_lo = ((u32) tsf)  10;
 Why add this warning here if you already have the additions below? We
 don't need multiple layers of defensive checks for the same thing.
 
  @@ -667,6 +669,8 @@ static void ath9k_cache_beacon_config(struct ath_softc 
  *sc,
  Caching beacon data for BSS: %pM\n, bss_conf-bssid);
   
  cur_conf-beacon_interval = bss_conf-beacon_int;
  +   if (WARN_ON_ONCE(cur_conf-beacon_interval == 0))
  +   cur_conf-beacon_interval = 100;
  cur_conf-dtim_period = bss_conf-dtim_period;
  cur_conf-listen_interval = 1;
  cur_conf-dtim_count = 1;
  diff --git a/drivers/net/wireless/ath/ath9k/recv.c 
  b/drivers/net/wireless/ath/ath9k/recv.c
  index b97217d..79c20c7 100644
  --- a/drivers/net/wireless/ath/ath9k/recv.c
  +++ b/drivers/net/wireless/ath/ath9k/recv.c
  @@ -538,7 +538,8 @@ static void ath_rx_ps_beacon(struct ath_softc *sc, 
  struct sk_buff *skb)
  sc-ps_flags = ~PS_BEACON_SYNC;
  ath_dbg(common, PS,
  Reconfigure beacon timers based on synchronized 
  timestamp\n);
  -   ath9k_set_beacon(sc);
  +   if (!(WARN_ON_ONCE(sc-cur_beacon_conf.beacon_interval == 0)))
  +   ath9k_set_beacon(sc);
  }
   
  if (ath_beacon_dtim_pending_cab(skb)) {
  
 
 --
 To unsubscribe from this list: send the line unsubscribe linux-wireless in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 

-- 
John W. LinvilleSomeday the world will need a hero, and you
linvi...@tuxdriver.com  might be all we have.  Be ready.
___
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel


Re: [ath9k-devel] [PATCH] ath9k: Prevent divide by zero kernel crash.

2014-04-17 Thread Felix Fietkau
On 2014-04-17 02:40, gree...@candelatech.com wrote:
 From: Ben Greear gree...@candelatech.com
 
 Make sure we cannot ever assign beacon interval to zero.
 
 Signed-off-by: Ben Greear gree...@candelatech.com
 ---
  drivers/net/wireless/ath/ath9k/beacon.c | 4 
  drivers/net/wireless/ath/ath9k/recv.c   | 3 ++-
  2 files changed, 6 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/wireless/ath/ath9k/beacon.c 
 b/drivers/net/wireless/ath/ath9k/beacon.c
 index 2e8bba0..5391f01 100644
 --- a/drivers/net/wireless/ath/ath9k/beacon.c
 +++ b/drivers/net/wireless/ath/ath9k/beacon.c
 @@ -443,6 +443,8 @@ static u32 ath9k_mod_tsf64_tu(u64 tsf, u32 div_tu)
  {
   u32 tsf_mod, tsf_hi, tsf_lo, mod_hi, mod_lo;
  
 + if (WARN_ON_ONCE(div_tu == 0))
 + div_tu = 100;
   tsf_mod = tsf  (BIT(10) - 1);
   tsf_hi = tsf  32;
   tsf_lo = ((u32) tsf)  10;
Why add this warning here if you already have the additions below? We
don't need multiple layers of defensive checks for the same thing.

 @@ -667,6 +669,8 @@ static void ath9k_cache_beacon_config(struct ath_softc 
 *sc,
   Caching beacon data for BSS: %pM\n, bss_conf-bssid);
  
   cur_conf-beacon_interval = bss_conf-beacon_int;
 + if (WARN_ON_ONCE(cur_conf-beacon_interval == 0))
 + cur_conf-beacon_interval = 100;
   cur_conf-dtim_period = bss_conf-dtim_period;
   cur_conf-listen_interval = 1;
   cur_conf-dtim_count = 1;
 diff --git a/drivers/net/wireless/ath/ath9k/recv.c 
 b/drivers/net/wireless/ath/ath9k/recv.c
 index b97217d..79c20c7 100644
 --- a/drivers/net/wireless/ath/ath9k/recv.c
 +++ b/drivers/net/wireless/ath/ath9k/recv.c
 @@ -538,7 +538,8 @@ static void ath_rx_ps_beacon(struct ath_softc *sc, struct 
 sk_buff *skb)
   sc-ps_flags = ~PS_BEACON_SYNC;
   ath_dbg(common, PS,
   Reconfigure beacon timers based on synchronized 
 timestamp\n);
 - ath9k_set_beacon(sc);
 + if (!(WARN_ON_ONCE(sc-cur_beacon_conf.beacon_interval == 0)))
 + ath9k_set_beacon(sc);
   }
  
   if (ath_beacon_dtim_pending_cab(skb)) {
 

___
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel


[ath9k-devel] [PATCH] ath9k: Prevent divide by zero kernel crash.

2014-04-16 Thread greearb
From: Ben Greear gree...@candelatech.com

Make sure we cannot ever assign beacon interval to zero.

Signed-off-by: Ben Greear gree...@candelatech.com
---
 drivers/net/wireless/ath/ath9k/beacon.c | 4 
 drivers/net/wireless/ath/ath9k/recv.c   | 3 ++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath9k/beacon.c 
b/drivers/net/wireless/ath/ath9k/beacon.c
index 2e8bba0..5391f01 100644
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -443,6 +443,8 @@ static u32 ath9k_mod_tsf64_tu(u64 tsf, u32 div_tu)
 {
u32 tsf_mod, tsf_hi, tsf_lo, mod_hi, mod_lo;
 
+   if (WARN_ON_ONCE(div_tu == 0))
+   div_tu = 100;
tsf_mod = tsf  (BIT(10) - 1);
tsf_hi = tsf  32;
tsf_lo = ((u32) tsf)  10;
@@ -667,6 +669,8 @@ static void ath9k_cache_beacon_config(struct ath_softc *sc,
Caching beacon data for BSS: %pM\n, bss_conf-bssid);
 
cur_conf-beacon_interval = bss_conf-beacon_int;
+   if (WARN_ON_ONCE(cur_conf-beacon_interval == 0))
+   cur_conf-beacon_interval = 100;
cur_conf-dtim_period = bss_conf-dtim_period;
cur_conf-listen_interval = 1;
cur_conf-dtim_count = 1;
diff --git a/drivers/net/wireless/ath/ath9k/recv.c 
b/drivers/net/wireless/ath/ath9k/recv.c
index b97217d..79c20c7 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -538,7 +538,8 @@ static void ath_rx_ps_beacon(struct ath_softc *sc, struct 
sk_buff *skb)
sc-ps_flags = ~PS_BEACON_SYNC;
ath_dbg(common, PS,
Reconfigure beacon timers based on synchronized 
timestamp\n);
-   ath9k_set_beacon(sc);
+   if (!(WARN_ON_ONCE(sc-cur_beacon_conf.beacon_interval == 0)))
+   ath9k_set_beacon(sc);
}
 
if (ath_beacon_dtim_pending_cab(skb)) {
-- 
1.7.11.7

___
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel