]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
crypto: Clear temporary stack buffers after use
authorJouni Malinen <j@w1.fi>
Mon, 5 Jan 2015 16:05:58 +0000 (18:05 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 6 Jan 2015 00:49:13 +0000 (02:49 +0200)
This reduces possibility of exposure of private keys should something
get access to stack memory.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/crypto/md5.c
src/crypto/sha1-prf.c
src/crypto/sha1.c
src/crypto/sha256-prf.c

index db2b8cc316badcb94eff2a99b54f8d9054040b8e..f64dfd3d43cd8692c427adffe87239c9eeacaa10 100644 (file)
@@ -30,6 +30,7 @@ int hmac_md5_vector(const u8 *key, size_t key_len, size_t num_elem,
        u8 tk[16];
        const u8 *_addr[6];
        size_t i, _len[6];
+       int res;
 
        if (num_elem > 5) {
                /*
@@ -85,7 +86,10 @@ int hmac_md5_vector(const u8 *key, size_t key_len, size_t num_elem,
        _len[0] = 64;
        _addr[1] = mac;
        _len[1] = MD5_MAC_LEN;
-       return md5_vector(2, _addr, _len, mac);
+       res = md5_vector(2, _addr, _len, mac);
+       os_memset(k_pad, 0, sizeof(k_pad));
+       os_memset(tk, 0, sizeof(tk));
+       return res;
 }
 
 
index 90b9e74b745b180fc11cc09cb15ccab8d6c33a56..4b2d1373067f8be1c99d8d67bede45df98509690 100644 (file)
@@ -61,6 +61,7 @@ int sha1_prf(const u8 *key, size_t key_len, const char *label,
                }
                counter++;
        }
+       os_memset(hash, 0, sizeof(hash));
 
        return 0;
 }
index d48c77d75c5f003a782d590f6525d2444d90c154..8fce139408f191a77e2ac1fbc4b08a3a81709560 100644 (file)
@@ -30,6 +30,7 @@ int hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,
        unsigned char tk[20];
        const u8 *_addr[6];
        size_t _len[6], i;
+       int ret;
 
        if (num_elem > 5) {
                /*
@@ -84,7 +85,9 @@ int hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,
        _len[0] = 64;
        _addr[1] = mac;
        _len[1] = SHA1_MAC_LEN;
-       return sha1_vector(2, _addr, _len, mac);
+       ret = sha1_vector(2, _addr, _len, mac);
+       os_memset(k_pad, 0, sizeof(k_pad));
+       return ret;
 }
 
 
index 9a11208f5af3ffeafc074be193b4b2896d29ffd2..79791c06cf0bb1e63a06d9cdd6f2184adbdcabaf 100644 (file)
@@ -95,4 +95,6 @@ void sha256_prf_bits(const u8 *key, size_t key_len, const char *label,
                u8 mask = 0xff << (8 - buf_len_bits % 8);
                buf[pos - 1] &= mask;
        }
+
+       os_memset(hash, 0, sizeof(hash));
 }