source: branches/backfire/package/hostapd/patches/700-random_pool_add_kernel.patch @ 29298

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

hostapd: update to latest version from trunk (fixes #10455)

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

    a b  
    3838#include "sha1.h" 
    3939#include "random.h" 
    4040 
     41#define RANDOM_STAMPFILE "/var/run/.random_available" 
     42 
    4143#define POOL_WORDS 32 
    4244#define POOL_WORDS_MASK (POOL_WORDS - 1) 
    4345#define POOL_TAP1 26 
     
    4850#define EXTRACT_LEN 16 
    4951#define MIN_READY_MARK 2 
    5052 
     53#ifndef CONFIG_NO_RANDOM_POOL 
     54 
    5155static u32 pool[POOL_WORDS]; 
    5256static unsigned int input_rotate = 0; 
    5357static unsigned int pool_pos = 0; 
    static void random_extract(u8 *out) 
    128132} 
    129133 
    130134 
    131 void random_add_randomness(const void *buf, size_t len) 
     135static void random_pool_add_randomness(const void *buf, size_t len) 
    132136{ 
    133137        struct os_time t; 
    134138        static unsigned int count = 0; 
    int random_get_bytes(void *buf, size_t l 
    197201int random_pool_ready(void) 
    198202{ 
    199203#ifdef __linux__ 
     204        struct stat st; 
    200205        int fd; 
    201206        ssize_t res; 
    202207 
     208        if (stat(RANDOM_STAMPFILE, &st) == 0) 
     209                return 1; 
     210 
    203211        /* 
    204212         * Make sure that there is reasonable entropy available before allowing 
    205213         * some key derivation operations to proceed. 
    206214         */ 
    207215 
    208         if (dummy_key_avail == sizeof(dummy_key)) 
     216        if (dummy_key_avail == sizeof(dummy_key)) { 
     217                random_mark_pool_ready(); 
    209218                return 1; /* Already initialized - good to continue */ 
     219        } 
    210220 
    211221        /* 
    212222         * Try to fetch some more data from the kernel high quality 
    int random_pool_ready(void) 
    241251        if (dummy_key_avail == sizeof(dummy_key)) { 
    242252                if (own_pool_ready < MIN_READY_MARK) 
    243253                        own_pool_ready = MIN_READY_MARK; 
     254                random_mark_pool_ready(); 
    244255                random_write_entropy(); 
    245256                return 1; 
    246257        } 
    int random_pool_ready(void) 
    253264            total_collected + 10 * own_pool_ready > MIN_COLLECT_ENTROPY) { 
    254265                wpa_printf(MSG_INFO, "random: Allow operation to proceed " 
    255266                           "based on internal entropy"); 
     267                random_mark_pool_ready(); 
    256268                return 1; 
    257269        } 
    258270 
    int random_pool_ready(void) 
    268280 
    269281void random_mark_pool_ready(void) 
    270282{ 
     283        int fd; 
     284 
    271285        own_pool_ready++; 
    272286        wpa_printf(MSG_DEBUG, "random: Mark internal entropy pool to be " 
    273287                   "ready (count=%u/%u)", own_pool_ready, MIN_READY_MARK); 
    274288        random_write_entropy(); 
     289 
     290        fd = open(RANDOM_STAMPFILE, O_CREAT | O_WRONLY | O_EXCL | O_NOFOLLOW, 0600); 
     291        if (fd >= 0) 
     292                close(fd); 
    275293} 
    276294 
    277295 
    void random_deinit(void) 
    428446        os_free(random_entropy_file); 
    429447        random_entropy_file = NULL; 
    430448} 
     449 
     450#endif /* CONFIG_NO_RANDOM_POOL */ 
     451 
     452 
     453void random_add_randomness(const void *buf, size_t len) 
     454{ 
     455#ifdef __linux__ 
     456        int fd; 
     457 
     458        fd = open("/dev/random", O_RDWR); 
     459        if (fd >= 0) { 
     460                write(fd, buf, len); 
     461                close(fd); 
     462        } 
     463#endif 
     464#ifndef CONFIG_NO_RANDOM_POOL 
     465        random_pool_add_randomness(buf, len); 
     466#endif 
     467} 
  • wpa_supplicant/Makefile

    a b endif 
    11371137 
    11381138ifdef CONFIG_NO_RANDOM_POOL 
    11391139CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    1140 else 
    1141 OBJS += ../src/crypto/random.o 
    11421140endif 
     1141OBJS += ../src/crypto/random.o 
    11431142 
    11441143ifdef CONFIG_CTRL_IFACE 
    11451144ifeq ($(CONFIG_CTRL_IFACE), y) 
  • wpa_supplicant/Android.mk

    a b endif 
    11321132 
    11331133ifdef CONFIG_NO_RANDOM_POOL 
    11341134L_CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    1135 else 
    1136 OBJS += src/crypto/random.c 
    11371135endif 
     1136OBJS += src/crypto/random.c 
    11381137 
    11391138ifdef CONFIG_CTRL_IFACE 
    11401139ifeq ($(CONFIG_CTRL_IFACE), y) 
  • hostapd/Android.mk

    a b endif 
    720720ifdef CONFIG_NO_RANDOM_POOL 
    721721L_CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    722722else 
    723 OBJS += src/crypto/random.c 
    724 HOBJS += src/crypto/random.c 
    725723HOBJS += $(SHA1OBJS) 
    726724HOBJS += src/crypto/md5.c 
    727725endif 
     726OBJS += src/crypto/random.c 
     727HOBJS += src/crypto/random.c 
    728728 
    729729ifdef CONFIG_RADIUS_SERVER 
    730730L_CFLAGS += -DRADIUS_SERVER 
  • hostapd/Makefile

    a b endif 
    707707ifdef CONFIG_NO_RANDOM_POOL 
    708708CFLAGS += -DCONFIG_NO_RANDOM_POOL 
    709709else 
    710 OBJS += ../src/crypto/random.o 
    711 HOBJS += ../src/crypto/random.o 
    712710HOBJS += ../src/utils/eloop.o 
    713711HOBJS += $(SHA1OBJS) 
    714712HOBJS += ../src/crypto/md5.o 
    715713endif 
     714OBJS += ../src/crypto/random.o 
     715HOBJS += ../src/crypto/random.o 
    716716 
    717717ifdef CONFIG_RADIUS_SERVER 
    718718CFLAGS += -DRADIUS_SERVER 
Note: See TracBrowser for help on using the repository browser.