|
Torsten Duwe |
97c84e |
From: Eric Biggers <ebiggers@google.com>
|
|
Torsten Duwe |
97c84e |
Subject: crypto: dh - fix calculating encoded key size
|
|
Torsten Duwe |
97c84e |
Git-commit: 35f7d5225ffcbf1b759f641aec1735e3a89b1914
|
|
Torsten Duwe |
97c84e |
Patch-mainline: v4.19-rc1
|
|
Torsten Duwe |
97c84e |
References: bsc#1155331
|
|
Torsten Duwe |
97c84e |
|
|
Torsten Duwe |
97c84e |
crypto: dh - fix calculating encoded key size
|
|
Torsten Duwe |
97c84e |
|
|
Torsten Duwe |
97c84e |
It was forgotten to increase DH_KPP_SECRET_MIN_SIZE to include 'q_size',
|
|
Torsten Duwe |
97c84e |
causing an out-of-bounds write of 4 bytes in crypto_dh_encode_key(), and
|
|
Torsten Duwe |
97c84e |
an out-of-bounds read of 4 bytes in crypto_dh_decode_key(). Fix it, and
|
|
Torsten Duwe |
97c84e |
fix the lengths of the test vectors to match this.
|
|
Torsten Duwe |
97c84e |
|
|
Torsten Duwe |
97c84e |
Reported-by: syzbot+6d38d558c25b53b8f4ed@syzkaller.appspotmail.com
|
|
Torsten Duwe |
97c84e |
Fixes: e3fe0ae12962 ("crypto: dh - add public key verification test")
|
|
Torsten Duwe |
97c84e |
Signed-off-by: Eric Biggers <ebiggers@google.com>
|
|
Torsten Duwe |
97c84e |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
97c84e |
Acked-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
97c84e |
|
|
Torsten Duwe |
97c84e |
--- a/crypto/dh_helper.c
|
|
Torsten Duwe |
97c84e |
+++ b/crypto/dh_helper.c
|
|
Torsten Duwe |
97c84e |
@@ -14,7 +14,7 @@
|
|
Torsten Duwe |
97c84e |
#include <crypto/dh.h>
|
|
Torsten Duwe |
97c84e |
#include <crypto/kpp.h>
|
|
Torsten Duwe |
97c84e |
|
|
Torsten Duwe |
97c84e |
-#define DH_KPP_SECRET_MIN_SIZE (sizeof(struct kpp_secret) + 3 * sizeof(int))
|
|
Torsten Duwe |
97c84e |
+#define DH_KPP_SECRET_MIN_SIZE (sizeof(struct kpp_secret) + 4 * sizeof(int))
|
|
Torsten Duwe |
97c84e |
|
|
Torsten Duwe |
97c84e |
static inline u8 *dh_pack_data(void *dst, const void *src, size_t size)
|
|
Torsten Duwe |
97c84e |
{
|
|
Torsten Duwe |
97c84e |
--- a/crypto/testmgr.h
|
|
Torsten Duwe |
97c84e |
+++ b/crypto/testmgr.h
|
|
Torsten Duwe |
97c84e |
@@ -543,14 +543,14 @@ static const struct kpp_testvec dh_tv_te
|
|
Torsten Duwe |
97c84e |
.secret =
|
|
Torsten Duwe |
97c84e |
#ifdef __LITTLE_ENDIAN
|
|
Torsten Duwe |
97c84e |
"\x01\x00" /* type */
|
|
Torsten Duwe |
97c84e |
- "\x11\x02" /* len */
|
|
Torsten Duwe |
97c84e |
+ "\x15\x02" /* len */
|
|
Torsten Duwe |
97c84e |
"\x00\x01\x00\x00" /* key_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x01\x00\x00" /* p_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x00\x00" /* q_size */
|
|
Torsten Duwe |
97c84e |
"\x01\x00\x00\x00" /* g_size */
|
|
Torsten Duwe |
97c84e |
#else
|
|
Torsten Duwe |
97c84e |
"\x00\x01" /* type */
|
|
Torsten Duwe |
97c84e |
- "\x02\x11" /* len */
|
|
Torsten Duwe |
97c84e |
+ "\x02\x15" /* len */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x01\x00" /* key_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x01\x00" /* p_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x00\x00" /* q_size */
|
|
Torsten Duwe |
97c84e |
@@ -643,7 +643,7 @@ static const struct kpp_testvec dh_tv_te
|
|
Torsten Duwe |
97c84e |
"\xd3\x34\x49\xad\x64\xa6\xb1\xc0\x59\x28\x75\x60\xa7\x8a\xb0\x11"
|
|
Torsten Duwe |
97c84e |
"\x56\x89\x42\x74\x11\xf5\xf6\x5e\x6f\x16\x54\x6a\xb1\x76\x4d\x50"
|
|
Torsten Duwe |
97c84e |
"\x8a\x68\xc1\x5b\x82\xb9\x0d\x00\x32\x50\xed\x88\x87\x48\x92\x17",
|
|
Torsten Duwe |
97c84e |
- .secret_size = 529,
|
|
Torsten Duwe |
97c84e |
+ .secret_size = 533,
|
|
Torsten Duwe |
97c84e |
.b_public_size = 256,
|
|
Torsten Duwe |
97c84e |
.expected_a_public_size = 256,
|
|
Torsten Duwe |
97c84e |
.expected_ss_size = 256,
|
|
Torsten Duwe |
97c84e |
@@ -652,14 +652,14 @@ static const struct kpp_testvec dh_tv_te
|
|
Torsten Duwe |
97c84e |
.secret =
|
|
Torsten Duwe |
97c84e |
#ifdef __LITTLE_ENDIAN
|
|
Torsten Duwe |
97c84e |
"\x01\x00" /* type */
|
|
Torsten Duwe |
97c84e |
- "\x11\x02" /* len */
|
|
Torsten Duwe |
97c84e |
+ "\x15\x02" /* len */
|
|
Torsten Duwe |
97c84e |
"\x00\x01\x00\x00" /* key_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x01\x00\x00" /* p_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x00\x00" /* q_size */
|
|
Torsten Duwe |
97c84e |
"\x01\x00\x00\x00" /* g_size */
|
|
Torsten Duwe |
97c84e |
#else
|
|
Torsten Duwe |
97c84e |
"\x00\x01" /* type */
|
|
Torsten Duwe |
97c84e |
- "\x02\x11" /* len */
|
|
Torsten Duwe |
97c84e |
+ "\x02\x15" /* len */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x01\x00" /* key_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x01\x00" /* p_size */
|
|
Torsten Duwe |
97c84e |
"\x00\x00\x00\x00" /* q_size */
|
|
Torsten Duwe |
97c84e |
@@ -752,7 +752,7 @@ static const struct kpp_testvec dh_tv_te
|
|
Torsten Duwe |
97c84e |
"\x5e\x5a\x64\xbd\xf6\x85\x04\xe8\x28\x6a\xac\xef\xce\x19\x8e\x9a"
|
|
Torsten Duwe |
97c84e |
"\xfe\x75\xc0\x27\x69\xe3\xb3\x7b\x21\xa7\xb1\x16\xa4\x85\x23\xee"
|
|
Torsten Duwe |
97c84e |
"\xb0\x1b\x04\x6e\xbd\xab\x16\xde\xfd\x86\x6b\xa9\x95\xd7\x0b\xfd",
|
|
Torsten Duwe |
97c84e |
- .secret_size = 529,
|
|
Torsten Duwe |
97c84e |
+ .secret_size = 533,
|
|
Torsten Duwe |
97c84e |
.b_public_size = 256,
|
|
Torsten Duwe |
97c84e |
.expected_a_public_size = 256,
|
|
Torsten Duwe |
97c84e |
.expected_ss_size = 256,
|