source: trunk/package/hostapd/patches/500-random_pool_add_kernel.patch @ 31080

Last change on this file since 31080 was 31080, checked in by nbd, 5 years ago

hostapd: update to 20120326

File size: 3.9 KB
  • src/crypto/random.c

    a b  
    3232#include "sha1.h" 
    3333#include "random.h" 
    3434 
     35#define RANDOM_STAMPFILE "/var/run/.random_available" 
     36 
    3537#define POOL_WORDS 32 
    3638#define POOL_WORDS_MASK (POOL_WORDS - 1) 
    3739#define POOL_TAP1 26 
     
    4244#define EXTRACT_LEN 16 
    4345#define MIN_READY_MARK 2 
    4446 
     47#ifndef CONFIG_NO_RANDOM_POOL 
     48 
    4549static u32 pool[POOL_WORDS]; 
    4650static unsigned int input_rotate = 0; 
    4751static unsigned int pool_pos = 0; 
    static void random_extract(u8 *out) 
    122126} 
    123127 
    124128 
    125 void random_add_randomness(const void *buf, size_t len) 
     129static void random_pool_add_randomness(const void *buf, size_t len) 
    126130{ 
    127131        struct os_time t; 
    128132        static unsigned int count = 0; 
    int random_get_bytes(void *buf, size_t l 
    191195int random_pool_ready(void) 
    192196{ 
    193197#ifdef __linux__ 
     198        struct stat st; 
    194199        int fd; 
    195200        ssize_t res; 
    196201 
     202        if (stat(RANDOM_STAMPFILE, &st) == 0) 
     203                return 1; 
     204 
    197205        /* 
    198206         * Make sure that there is reasonable entropy available before allowing 
    199207         * some key derivation operations to proceed. 
    200208         */ 
    201209 
    202         if (dummy_key_avail == sizeof(dummy_key)) 
     210        if (dummy_key_avail == sizeof(dummy_key)) { 
     211                random_mark_pool_ready(); 
    203212                return 1; /* Already initialized - good to continue */ 
     213        } 
    204214 
    205215        /* 
    206216         * Try to fetch some more data from the kernel high quality 
    int random_pool_ready(void) 
    235245        if (dummy_key_avail == sizeof(dummy_key)) { 
    236246                if (own_pool_ready < MIN_READY_MARK) 
    237247                        own_pool_ready = MIN_READY_MARK; 
     248                random_mark_pool_ready(); 
    238249                random_write_entropy(); 
    239250                return 1; 
    240251        } 
    int random_pool_ready(void) 
    247258            total_collected + 10 * own_pool_ready > MIN_COLLECT_ENTROPY) { 
    248259                wpa_printf(MSG_INFO, "random: Allow operation to proceed " 
    249260                           "based on internal entropy"); 
     261                random_mark_pool_ready(); 
    250262                return 1; 
    251263        } 
    252264 
    int random_pool_ready(void) 
    262274 
    263275void random_mark_pool_ready(void) 
    264276{ 
     277        int fd; 
     278 
    265279        own_pool_ready++; 
    266280        wpa_printf(MSG_DEBUG, "random: Mark internal entropy pool to be " 
    267281                   "ready (count=%u/%u)", own_pool_ready, MIN_READY_MARK); 
    268282        random_write_entropy(); 
     283 
     284        fd = open(RANDOM_STAMPFILE, O_CREAT | O_WRONLY | O_EXCL | O_NOFOLLOW, 0600); 
     285        if (fd >= 0) 
     286                close(fd); 
    269287} 
    270288 
    271289 
    void random_deinit(void) 
    422440        os_free(random_entropy_file); 
    423441        random_entropy_file = NULL; 
    424442} 
     443 
     444#endif /* CONFIG_NO_RANDOM_POOL */ 
     445 
     446 
     447void random_add_randomness(const void *buf, size_t len) 
     448{ 
     449#ifdef __linux__ 
     450        int fd; 
     451 
     452        fd = open("/dev/random", O_RDWR); 
     453        if (fd >= 0) { 
     454                write(fd, buf, len); 
     455                close(fd); 
     456        } 
     457#endif 
     458#ifndef CONFIG_NO_RANDOM_POOL 
     459        random_pool_add_randomness(buf, len); 
     460#endif 
     461} 
  • wpa_supplicant/Makefile

    a b endif 
    11611161 
    11621162ifdef CONFIG_NO_RANDOM_POOL 
    11631163CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    1164 else 
    1165 OBJS += ../src/crypto/random.o 
    11661164endif 
     1165OBJS += ../src/crypto/random.o 
    11671166 
    11681167ifdef CONFIG_CTRL_IFACE 
    11691168ifeq ($(CONFIG_CTRL_IFACE), y) 
  • wpa_supplicant/Android.mk

    a b endif 
    11391139 
    11401140ifdef CONFIG_NO_RANDOM_POOL 
    11411141L_CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    1142 else 
    1143 OBJS += src/crypto/random.c 
    11441142endif 
     1143OBJS += src/crypto/random.c 
    11451144 
    11461145ifdef CONFIG_CTRL_IFACE 
    11471146ifeq ($(CONFIG_CTRL_IFACE), y) 
  • hostapd/Android.mk

    a b endif 
    724724ifdef CONFIG_NO_RANDOM_POOL 
    725725L_CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    726726else 
    727 OBJS += src/crypto/random.c 
    728 HOBJS += src/crypto/random.c 
    729727HOBJS += $(SHA1OBJS) 
    730728HOBJS += src/crypto/md5.c 
    731729endif 
     730OBJS += src/crypto/random.c 
     731HOBJS += src/crypto/random.c 
    732732 
    733733ifdef CONFIG_RADIUS_SERVER 
    734734L_CFLAGS += -DRADIUS_SERVER 
  • hostapd/Makefile

    a b endif 
    719719ifdef CONFIG_NO_RANDOM_POOL 
    720720CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    721721else 
    722 OBJS += ../src/crypto/random.o 
    723 HOBJS += ../src/crypto/random.o 
    724722HOBJS += ../src/utils/eloop.o 
    725723HOBJS += $(SHA1OBJS) 
    726724HOBJS += ../src/crypto/md5.o 
    727725endif 
     726OBJS += ../src/crypto/random.o 
     727HOBJS += ../src/crypto/random.o 
    728728 
    729729ifdef CONFIG_RADIUS_SERVER 
    730730CFLAGS += -DRADIUS_SERVER 
Note: See TracBrowser for help on using the repository browser.