diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-01-08 14:33:51 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-01-08 14:33:51 -0500 |
commit | 716c13a817a6660137cab8e12ed3c056d74c9d8b (patch) | |
tree | 1ab2151f11afa6f7861cd3e9be739be2b5d2629c | |
parent | bdec41963890f8ed9ad89f8b418959ab3cdc2aa3 (diff) | |
parent | 0b8c960cf6defc56b3aa1a71b5af95872b6dff2b (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu:
"This fixes a build problem with sha-mb with old toolchains and an
implementation bug in the ctr(aes)/by8 branch of aesni-intel that's
enabled when AVX is available"
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
crypto: sha-mb - Add avx2_supported check.
crypto: aesni - fix "by8" variant for 128 bit keys
-rw-r--r-- | arch/x86/crypto/Makefile | 2 | ||||
-rw-r--r-- | arch/x86/crypto/aes_ctrby8_avx-x86_64.S | 46 |
2 files changed, 36 insertions, 12 deletions
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile index fd0f848938cc..5a4a089e8b1f 100644 --- a/arch/x86/crypto/Makefile +++ b/arch/x86/crypto/Makefile | |||
@@ -26,7 +26,6 @@ obj-$(CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL) += ghash-clmulni-intel.o | |||
26 | 26 | ||
27 | obj-$(CONFIG_CRYPTO_CRC32C_INTEL) += crc32c-intel.o | 27 | obj-$(CONFIG_CRYPTO_CRC32C_INTEL) += crc32c-intel.o |
28 | obj-$(CONFIG_CRYPTO_SHA1_SSSE3) += sha1-ssse3.o | 28 | obj-$(CONFIG_CRYPTO_SHA1_SSSE3) += sha1-ssse3.o |
29 | obj-$(CONFIG_CRYPTO_SHA1_MB) += sha-mb/ | ||
30 | obj-$(CONFIG_CRYPTO_CRC32_PCLMUL) += crc32-pclmul.o | 29 | obj-$(CONFIG_CRYPTO_CRC32_PCLMUL) += crc32-pclmul.o |
31 | obj-$(CONFIG_CRYPTO_SHA256_SSSE3) += sha256-ssse3.o | 30 | obj-$(CONFIG_CRYPTO_SHA256_SSSE3) += sha256-ssse3.o |
32 | obj-$(CONFIG_CRYPTO_SHA512_SSSE3) += sha512-ssse3.o | 31 | obj-$(CONFIG_CRYPTO_SHA512_SSSE3) += sha512-ssse3.o |
@@ -46,6 +45,7 @@ endif | |||
46 | ifeq ($(avx2_supported),yes) | 45 | ifeq ($(avx2_supported),yes) |
47 | obj-$(CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64) += camellia-aesni-avx2.o | 46 | obj-$(CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64) += camellia-aesni-avx2.o |
48 | obj-$(CONFIG_CRYPTO_SERPENT_AVX2_X86_64) += serpent-avx2.o | 47 | obj-$(CONFIG_CRYPTO_SERPENT_AVX2_X86_64) += serpent-avx2.o |
48 | obj-$(CONFIG_CRYPTO_SHA1_MB) += sha-mb/ | ||
49 | endif | 49 | endif |
50 | 50 | ||
51 | aes-i586-y := aes-i586-asm_32.o aes_glue.o | 51 | aes-i586-y := aes-i586-asm_32.o aes_glue.o |
diff --git a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S index 2df2a0298f5a..a916c4a61165 100644 --- a/arch/x86/crypto/aes_ctrby8_avx-x86_64.S +++ b/arch/x86/crypto/aes_ctrby8_avx-x86_64.S | |||
@@ -208,7 +208,7 @@ ddq_add_8: | |||
208 | 208 | ||
209 | .if (klen == KEY_128) | 209 | .if (klen == KEY_128) |
210 | .if (load_keys) | 210 | .if (load_keys) |
211 | vmovdqa 3*16(p_keys), xkeyA | 211 | vmovdqa 3*16(p_keys), xkey4 |
212 | .endif | 212 | .endif |
213 | .else | 213 | .else |
214 | vmovdqa 3*16(p_keys), xkeyA | 214 | vmovdqa 3*16(p_keys), xkeyA |
@@ -224,7 +224,7 @@ ddq_add_8: | |||
224 | add $(16*by), p_in | 224 | add $(16*by), p_in |
225 | 225 | ||
226 | .if (klen == KEY_128) | 226 | .if (klen == KEY_128) |
227 | vmovdqa 4*16(p_keys), xkey4 | 227 | vmovdqa 4*16(p_keys), xkeyB |
228 | .else | 228 | .else |
229 | .if (load_keys) | 229 | .if (load_keys) |
230 | vmovdqa 4*16(p_keys), xkey4 | 230 | vmovdqa 4*16(p_keys), xkey4 |
@@ -234,7 +234,12 @@ ddq_add_8: | |||
234 | .set i, 0 | 234 | .set i, 0 |
235 | .rept by | 235 | .rept by |
236 | club XDATA, i | 236 | club XDATA, i |
237 | vaesenc xkeyA, var_xdata, var_xdata /* key 3 */ | 237 | /* key 3 */ |
238 | .if (klen == KEY_128) | ||
239 | vaesenc xkey4, var_xdata, var_xdata | ||
240 | .else | ||
241 | vaesenc xkeyA, var_xdata, var_xdata | ||
242 | .endif | ||
238 | .set i, (i +1) | 243 | .set i, (i +1) |
239 | .endr | 244 | .endr |
240 | 245 | ||
@@ -243,13 +248,18 @@ ddq_add_8: | |||
243 | .set i, 0 | 248 | .set i, 0 |
244 | .rept by | 249 | .rept by |
245 | club XDATA, i | 250 | club XDATA, i |
246 | vaesenc xkey4, var_xdata, var_xdata /* key 4 */ | 251 | /* key 4 */ |
252 | .if (klen == KEY_128) | ||
253 | vaesenc xkeyB, var_xdata, var_xdata | ||
254 | .else | ||
255 | vaesenc xkey4, var_xdata, var_xdata | ||
256 | .endif | ||
247 | .set i, (i +1) | 257 | .set i, (i +1) |
248 | .endr | 258 | .endr |
249 | 259 | ||
250 | .if (klen == KEY_128) | 260 | .if (klen == KEY_128) |
251 | .if (load_keys) | 261 | .if (load_keys) |
252 | vmovdqa 6*16(p_keys), xkeyB | 262 | vmovdqa 6*16(p_keys), xkey8 |
253 | .endif | 263 | .endif |
254 | .else | 264 | .else |
255 | vmovdqa 6*16(p_keys), xkeyB | 265 | vmovdqa 6*16(p_keys), xkeyB |
@@ -267,12 +277,17 @@ ddq_add_8: | |||
267 | .set i, 0 | 277 | .set i, 0 |
268 | .rept by | 278 | .rept by |
269 | club XDATA, i | 279 | club XDATA, i |
270 | vaesenc xkeyB, var_xdata, var_xdata /* key 6 */ | 280 | /* key 6 */ |
281 | .if (klen == KEY_128) | ||
282 | vaesenc xkey8, var_xdata, var_xdata | ||
283 | .else | ||
284 | vaesenc xkeyB, var_xdata, var_xdata | ||
285 | .endif | ||
271 | .set i, (i +1) | 286 | .set i, (i +1) |
272 | .endr | 287 | .endr |
273 | 288 | ||
274 | .if (klen == KEY_128) | 289 | .if (klen == KEY_128) |
275 | vmovdqa 8*16(p_keys), xkey8 | 290 | vmovdqa 8*16(p_keys), xkeyB |
276 | .else | 291 | .else |
277 | .if (load_keys) | 292 | .if (load_keys) |
278 | vmovdqa 8*16(p_keys), xkey8 | 293 | vmovdqa 8*16(p_keys), xkey8 |
@@ -288,7 +303,7 @@ ddq_add_8: | |||
288 | 303 | ||
289 | .if (klen == KEY_128) | 304 | .if (klen == KEY_128) |
290 | .if (load_keys) | 305 | .if (load_keys) |
291 | vmovdqa 9*16(p_keys), xkeyA | 306 | vmovdqa 9*16(p_keys), xkey12 |
292 | .endif | 307 | .endif |
293 | .else | 308 | .else |
294 | vmovdqa 9*16(p_keys), xkeyA | 309 | vmovdqa 9*16(p_keys), xkeyA |
@@ -297,7 +312,12 @@ ddq_add_8: | |||
297 | .set i, 0 | 312 | .set i, 0 |
298 | .rept by | 313 | .rept by |
299 | club XDATA, i | 314 | club XDATA, i |
300 | vaesenc xkey8, var_xdata, var_xdata /* key 8 */ | 315 | /* key 8 */ |
316 | .if (klen == KEY_128) | ||
317 | vaesenc xkeyB, var_xdata, var_xdata | ||
318 | .else | ||
319 | vaesenc xkey8, var_xdata, var_xdata | ||
320 | .endif | ||
301 | .set i, (i +1) | 321 | .set i, (i +1) |
302 | .endr | 322 | .endr |
303 | 323 | ||
@@ -306,7 +326,12 @@ ddq_add_8: | |||
306 | .set i, 0 | 326 | .set i, 0 |
307 | .rept by | 327 | .rept by |
308 | club XDATA, i | 328 | club XDATA, i |
309 | vaesenc xkeyA, var_xdata, var_xdata /* key 9 */ | 329 | /* key 9 */ |
330 | .if (klen == KEY_128) | ||
331 | vaesenc xkey12, var_xdata, var_xdata | ||
332 | .else | ||
333 | vaesenc xkeyA, var_xdata, var_xdata | ||
334 | .endif | ||
310 | .set i, (i +1) | 335 | .set i, (i +1) |
311 | .endr | 336 | .endr |
312 | 337 | ||
@@ -412,7 +437,6 @@ ddq_add_8: | |||
412 | /* main body of aes ctr load */ | 437 | /* main body of aes ctr load */ |
413 | 438 | ||
414 | .macro do_aes_ctrmain key_len | 439 | .macro do_aes_ctrmain key_len |
415 | |||
416 | cmp $16, num_bytes | 440 | cmp $16, num_bytes |
417 | jb .Ldo_return2\key_len | 441 | jb .Ldo_return2\key_len |
418 | 442 | ||