Skip to content

Commit 35f7d52

Browse files
ebiggersherbertx
authored andcommitted
crypto: dh - fix calculating encoded key size
It was forgotten to increase DH_KPP_SECRET_MIN_SIZE to include 'q_size', causing an out-of-bounds write of 4 bytes in crypto_dh_encode_key(), and an out-of-bounds read of 4 bytes in crypto_dh_decode_key(). Fix it, and fix the lengths of the test vectors to match this. Reported-by: syzbot+6d38d558c25b53b8f4ed@syzkaller.appspotmail.com Fixes: e3fe0ae ("crypto: dh - add public key verification test") Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent afb31cd commit 35f7d52

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

crypto/dh_helper.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <crypto/dh.h>
1515
#include <crypto/kpp.h>
1616

17-
#define DH_KPP_SECRET_MIN_SIZE (sizeof(struct kpp_secret) + 3 * sizeof(int))
17+
#define DH_KPP_SECRET_MIN_SIZE (sizeof(struct kpp_secret) + 4 * sizeof(int))
1818

1919
static inline u8 *dh_pack_data(void *dst, const void *src, size_t size)
2020
{

crypto/testmgr.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -641,14 +641,14 @@ static const struct kpp_testvec dh_tv_template[] = {
641641
.secret =
642642
#ifdef __LITTLE_ENDIAN
643643
"\x01\x00" /* type */
644-
"\x11\x02" /* len */
644+
"\x15\x02" /* len */
645645
"\x00\x01\x00\x00" /* key_size */
646646
"\x00\x01\x00\x00" /* p_size */
647647
"\x00\x00\x00\x00" /* q_size */
648648
"\x01\x00\x00\x00" /* g_size */
649649
#else
650650
"\x00\x01" /* type */
651-
"\x02\x11" /* len */
651+
"\x02\x15" /* len */
652652
"\x00\x00\x01\x00" /* key_size */
653653
"\x00\x00\x01\x00" /* p_size */
654654
"\x00\x00\x00\x00" /* q_size */
@@ -741,7 +741,7 @@ static const struct kpp_testvec dh_tv_template[] = {
741741
"\xd3\x34\x49\xad\x64\xa6\xb1\xc0\x59\x28\x75\x60\xa7\x8a\xb0\x11"
742742
"\x56\x89\x42\x74\x11\xf5\xf6\x5e\x6f\x16\x54\x6a\xb1\x76\x4d\x50"
743743
"\x8a\x68\xc1\x5b\x82\xb9\x0d\x00\x32\x50\xed\x88\x87\x48\x92\x17",
744-
.secret_size = 529,
744+
.secret_size = 533,
745745
.b_public_size = 256,
746746
.expected_a_public_size = 256,
747747
.expected_ss_size = 256,
@@ -750,14 +750,14 @@ static const struct kpp_testvec dh_tv_template[] = {
750750
.secret =
751751
#ifdef __LITTLE_ENDIAN
752752
"\x01\x00" /* type */
753-
"\x11\x02" /* len */
753+
"\x15\x02" /* len */
754754
"\x00\x01\x00\x00" /* key_size */
755755
"\x00\x01\x00\x00" /* p_size */
756756
"\x00\x00\x00\x00" /* q_size */
757757
"\x01\x00\x00\x00" /* g_size */
758758
#else
759759
"\x00\x01" /* type */
760-
"\x02\x11" /* len */
760+
"\x02\x15" /* len */
761761
"\x00\x00\x01\x00" /* key_size */
762762
"\x00\x00\x01\x00" /* p_size */
763763
"\x00\x00\x00\x00" /* q_size */
@@ -850,7 +850,7 @@ static const struct kpp_testvec dh_tv_template[] = {
850850
"\x5e\x5a\x64\xbd\xf6\x85\x04\xe8\x28\x6a\xac\xef\xce\x19\x8e\x9a"
851851
"\xfe\x75\xc0\x27\x69\xe3\xb3\x7b\x21\xa7\xb1\x16\xa4\x85\x23\xee"
852852
"\xb0\x1b\x04\x6e\xbd\xab\x16\xde\xfd\x86\x6b\xa9\x95\xd7\x0b\xfd",
853-
.secret_size = 529,
853+
.secret_size = 533,
854854
.b_public_size = 256,
855855
.expected_a_public_size = 256,
856856
.expected_ss_size = 256,

0 commit comments

Comments
 (0)