diff options
| author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-04-02 19:44:51 +0000 | 
|---|---|---|
| committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-04-02 19:44:51 +0000 | 
| commit | b3f6846b62b0700844870680b96a79f7f87083f2 (patch) | |
| tree | 04229f3a055e8141080a7e33cd5a054a48d4804b | |
| parent | ef4a1fa271558be940b207a4cec12a6f64df253f (diff) | |
hostapd: write a stampfile when the random pool has been initialized - fixes rejected assoc attempts after hostapd restart
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26415 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rw-r--r-- | package/hostapd/patches/700-random_pool_add_kernel.patch | 45 | 
1 files changed, 42 insertions, 3 deletions
| diff --git a/package/hostapd/patches/700-random_pool_add_kernel.patch b/package/hostapd/patches/700-random_pool_add_kernel.patch index 8475ac623..8ba40e5de 100644 --- a/package/hostapd/patches/700-random_pool_add_kernel.patch +++ b/package/hostapd/patches/700-random_pool_add_kernel.patch @@ -1,6 +1,15 @@  --- a/src/crypto/random.c  +++ b/src/crypto/random.c -@@ -48,6 +48,8 @@ +@@ -38,6 +38,8 @@ + #include "sha1.h" + #include "random.h" +  ++#define RANDOM_STAMPFILE "/var/run/.random_available" ++ + #define POOL_WORDS 32 + #define POOL_WORDS_MASK (POOL_WORDS - 1) + #define POOL_TAP1 26 +@@ -48,6 +50,8 @@   #define EXTRACT_LEN 16   #define MIN_READY_MARK 2 @@ -9,7 +18,7 @@   static u32 pool[POOL_WORDS];   static unsigned int input_rotate = 0;   static unsigned int pool_pos = 0; -@@ -122,7 +124,7 @@ static void random_extract(u8 *out) +@@ -122,7 +126,7 @@ static void random_extract(u8 *out)   } @@ -18,7 +27,37 @@   {   	struct os_time t;   	static unsigned int count = 0; -@@ -335,3 +337,22 @@ void random_deinit(void) +@@ -191,9 +195,13 @@ int random_get_bytes(void *buf, size_t l + int random_pool_ready(void) + { + #ifdef __linux__ ++	struct stat st; + 	int fd; + 	ssize_t res; +  ++	if (stat(RANDOM_STAMPFILE, &st) == 0) ++		return 1; ++ + 	/* + 	 * Make sure that there is reasonable entropy available before allowing + 	 * some key derivation operations to proceed. +@@ -258,9 +266,15 @@ int random_pool_ready(void) +  + void random_mark_pool_ready(void) + { ++	int fd; ++ + 	own_pool_ready++; + 	wpa_printf(MSG_DEBUG, "random: Mark internal entropy pool to be " + 		   "ready (count=%u/%u)", own_pool_ready, MIN_READY_MARK); ++ ++	fd = open(RANDOM_STAMPFILE, O_CREAT | O_WRONLY | O_EXCL | O_NOFOLLOW, 0600); ++	if (fd >= 0) ++		close(fd); + } +  +  +@@ -335,3 +349,22 @@ void random_deinit(void)   	random_close_fd();   #endif /* __linux__ */   } | 
