summaryrefslogtreecommitdiff
path: root/cipher/rijndael.c
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>2012-11-23 19:22:09 +0200
committerWerner Koch <wk@gnupg.org>2012-11-26 09:14:31 +0100
commit5acd0e5ae2a58dda51c2b56c879b80a1a6d2c42f (patch)
tree487a8b51351809b0b9290e1eaf06cee97d69ba2a /cipher/rijndael.c
parentbe3768994ad362dfc849a8cd0146b4c9bb287d20 (diff)
downloadlibgcrypt-5acd0e5ae2a58dda51c2b56c879b80a1a6d2c42f.tar.gz
Clear xmm5 after use in AES-NI CTR mode
* cipher/rijndael.c [USE_AESNI]: Rename aesni_cleanup_2_4 to aesni_cleanup_2_5. [USE_AESNI] (aesni_cleanup_2_5): Clear xmm5 register. (_gcry_aes_ctr_enc, _gcry_aes_cbc_dec) [USE_AESNI]: Use aesni_cleanup_2_5 instead of aesni_cleanup_2_4. -- xmm5 register is used by parallelized AES-NI CTR mode, so it should be cleaned up after use too. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Diffstat (limited to 'cipher/rijndael.c')
-rw-r--r--cipher/rijndael.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/cipher/rijndael.c b/cipher/rijndael.c
index 982c54e6..69e1df13 100644
--- a/cipher/rijndael.c
+++ b/cipher/rijndael.c
@@ -144,10 +144,11 @@ typedef struct
do { asm volatile ("pxor %%xmm0, %%xmm0\n\t" \
"pxor %%xmm1, %%xmm1\n" :: ); \
} while (0)
-# define aesni_cleanup_2_4() \
+# define aesni_cleanup_2_5() \
do { asm volatile ("pxor %%xmm2, %%xmm2\n\t" \
"pxor %%xmm3, %%xmm3\n" \
- "pxor %%xmm4, %%xmm4\n":: ); \
+ "pxor %%xmm4, %%xmm4\n" \
+ "pxor %%xmm5, %%xmm5\n":: ); \
} while (0)
#else
# define aesni_prepare() do { } while (0)
@@ -1338,7 +1339,7 @@ _gcry_aes_ctr_enc (void *context, unsigned char *ctr,
inbuf += BLOCKSIZE;
}
aesni_cleanup ();
- aesni_cleanup_2_4 ();
+ aesni_cleanup_2_5 ();
}
#endif /*USE_AESNI*/
else
@@ -1664,7 +1665,7 @@ _gcry_aes_cbc_dec (void *context, unsigned char *iv,
: "memory");
aesni_cleanup ();
- aesni_cleanup_2_4 ();
+ aesni_cleanup_2_5 ();
}
#endif /*USE_AESNI*/
else