ath9k: Mix the received FFT bins to the random pool
authorNick Kossifidis <mickflemm@gmail.com>
Wed, 29 Apr 2015 23:51:21 +0000 (23:51 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Sat, 9 May 2015 13:46:18 +0000 (16:46 +0300)
E/M noise is a pretty good source of entropy so we mix the FFT
measurements of the E/M spectrum to /dev/random pool. Note that
this doesn't increase the pool's entropy count but it still helps
on improving the output of /dev/(u)random.

Signed-off-by: Nick Kossifidis <mickflemm@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath9k/common-spectral.c

index 5840b3731d5ba030b46815c0087be9d41a11d069..a8762711ad74b40ab7a0afa5b0f64820188f3011 100644 (file)
@@ -15,6 +15,7 @@
  */
 
 #include <linux/relay.h>
+#include <linux/random.h>
 #include "ath9k.h"
 
 static s8 fix_rssi_inv_only(u8 rssi_val)
@@ -647,13 +648,24 @@ int ath_cmn_process_fft(struct ath_spec_scan_priv *spec_priv, struct ieee80211_h
                                            tsf, freq, chan_type);
 
                                memset(sample_buf, 0, SPECTRAL_SAMPLE_MAX_LEN);
+
+                               /* Mix the received bins to the /dev/random
+                                * pool
+                                */
+                               add_device_randomness(sample_buf, num_bins);
                        }
 
                        /* Process a normal frame */
-                       if (sample_bytes == sample_len)
+                       if (sample_bytes == sample_len) {
                                ret = fft_handler(rs, spec_priv, sample_start,
                                                  tsf, freq, chan_type);
 
+                               /* Mix the received bins to the /dev/random
+                                * pool
+                                */
+                               add_device_randomness(sample_start, num_bins);
+                       }
+
                        /* Short report processed, break out of the
                         * loop.
                         */