Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui()

During NVMeTCP Authentication a controller can trigger a kernel
oops by specifying the 8192 bit Diffie Hellman group and passing
a correctly sized, but zeroed Diffie Hellamn value.
mpi_cmp_ui() was detecting this if the second parameter was 0,
but 1 is passed from dh_is_pubkey_valid(). This causes the null
pointer u->d to be dereferenced towards the end of mpi_cmp_ui()

Signed-off-by: Mark O'Donovan <shiftee@posteo.net>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Mark O'Donovan and committed by
Herbert Xu
9e47a758 2a598d0b

+6 -2
+6 -2
lib/crypto/mpi/mpi-cmp.c
··· 25 25 mpi_limb_t limb = v; 26 26 27 27 mpi_normalize(u); 28 - if (!u->nlimbs && !limb) 29 - return 0; 28 + if (u->nlimbs == 0) { 29 + if (v == 0) 30 + return 0; 31 + else 32 + return -1; 33 + } 30 34 if (u->sign) 31 35 return -1; 32 36 if (u->nlimbs > 1)