diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-05-21 05:34:35 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-05-21 05:34:35 -0400 |
commit | 1f5518b4e7febc2a1026fba2ff311ba54be1abc4 (patch) | |
tree | b637d1d99b876ae6ef721bcfe164a1338b958332 | |
parent | a7aa96a92eff3c4b2c7df8c8535691a5a487207d (diff) | |
parent | 3901c1124ec5099254a9396085f7798153a7293f (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu:
"This fixes a NULL pointer dereference on allocation failure in caam,
as well as a regression in the ctr mode on s390 that was added with
the recent concurrency fixes"
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
crypto: s390 - fix aes,des ctr mode concurrency finding.
crypto: caam - add allocation failure handling in SPRINTFCAT macro
-rw-r--r-- | arch/s390/crypto/aes_s390.c | 3 | ||||
-rw-r--r-- | arch/s390/crypto/des_s390.c | 3 | ||||
-rw-r--r-- | drivers/crypto/caam/error.c | 10 |
3 files changed, 13 insertions, 3 deletions
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c index cf3c0089bef2..23223cd63e54 100644 --- a/arch/s390/crypto/aes_s390.c +++ b/arch/s390/crypto/aes_s390.c | |||
@@ -820,6 +820,9 @@ static int ctr_aes_crypt(struct blkcipher_desc *desc, long func, | |||
820 | else | 820 | else |
821 | memcpy(walk->iv, ctrptr, AES_BLOCK_SIZE); | 821 | memcpy(walk->iv, ctrptr, AES_BLOCK_SIZE); |
822 | spin_unlock(&ctrblk_lock); | 822 | spin_unlock(&ctrblk_lock); |
823 | } else { | ||
824 | if (!nbytes) | ||
825 | memcpy(walk->iv, ctrptr, AES_BLOCK_SIZE); | ||
823 | } | 826 | } |
824 | /* | 827 | /* |
825 | * final block may be < AES_BLOCK_SIZE, copy only nbytes | 828 | * final block may be < AES_BLOCK_SIZE, copy only nbytes |
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c index 0a5aac8a9412..7acb77f7ef1a 100644 --- a/arch/s390/crypto/des_s390.c +++ b/arch/s390/crypto/des_s390.c | |||
@@ -429,6 +429,9 @@ static int ctr_desall_crypt(struct blkcipher_desc *desc, long func, | |||
429 | else | 429 | else |
430 | memcpy(walk->iv, ctrptr, DES_BLOCK_SIZE); | 430 | memcpy(walk->iv, ctrptr, DES_BLOCK_SIZE); |
431 | spin_unlock(&ctrblk_lock); | 431 | spin_unlock(&ctrblk_lock); |
432 | } else { | ||
433 | if (!nbytes) | ||
434 | memcpy(walk->iv, ctrptr, DES_BLOCK_SIZE); | ||
432 | } | 435 | } |
433 | /* final block may be < DES_BLOCK_SIZE, copy only nbytes */ | 436 | /* final block may be < DES_BLOCK_SIZE, copy only nbytes */ |
434 | if (nbytes) { | 437 | if (nbytes) { |
diff --git a/drivers/crypto/caam/error.c b/drivers/crypto/caam/error.c index 9f25f5296029..0eabd81e1a90 100644 --- a/drivers/crypto/caam/error.c +++ b/drivers/crypto/caam/error.c | |||
@@ -16,9 +16,13 @@ | |||
16 | char *tmp; \ | 16 | char *tmp; \ |
17 | \ | 17 | \ |
18 | tmp = kmalloc(sizeof(format) + max_alloc, GFP_ATOMIC); \ | 18 | tmp = kmalloc(sizeof(format) + max_alloc, GFP_ATOMIC); \ |
19 | sprintf(tmp, format, param); \ | 19 | if (likely(tmp)) { \ |
20 | strcat(str, tmp); \ | 20 | sprintf(tmp, format, param); \ |
21 | kfree(tmp); \ | 21 | strcat(str, tmp); \ |
22 | kfree(tmp); \ | ||
23 | } else { \ | ||
24 | strcat(str, "kmalloc failure in SPRINTFCAT"); \ | ||
25 | } \ | ||
22 | } | 26 | } |
23 | 27 | ||
24 | static void report_jump_idx(u32 status, char *outstr) | 28 | static void report_jump_idx(u32 status, char *outstr) |