Skip to content

Commit

Permalink
mbedtls_mpi_sub_abs: fix buffer overflow in error case
Browse files Browse the repository at this point in the history
Fix a buffer overflow in mbedtls_mpi_sub_abs() when calculating
|A| - |B| where |B| is larger than |A| and has more limbs (so the
function should return MBEDTLS_ERR_MPI_NEGATIVE_VALUE).

Fix Mbed-TLS#4042

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
  • Loading branch information
gilles-peskine-arm committed Feb 1, 2021
1 parent 9a3cf31 commit 6260b70
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
7 changes: 7 additions & 0 deletions ChangeLog.d/mpi_sub_abs.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Security
* Fix a buffer overflow in mbedtls_mpi_sub_abs() when calculating
|A| - |B| where |B| is larger than |A| and has more limbs (so the
function should return MBEDTLS_ERR_MPI_NEGATIVE_VALUE). Only
applications calling mbedtls_mpi_sub_abs() directly are affected:
all calls inside the library were safe since this function is
only called with |A| >= |B|. Reported by Guido Vranken in #4042.
6 changes: 6 additions & 0 deletions library/bignum.c
Original file line number Diff line number Diff line change
Expand Up @@ -1354,6 +1354,12 @@ int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
for( n = B->n; n > 0; n-- )
if( B->p[n - 1] != 0 )
break;
if( n > A->n )
{
/* B >= (2^ciL)^n > A */
ret = MBEDTLS_ERR_MPI_NEGATIVE_VALUE;
goto cleanup;
}

carry = mpi_sub_hlp( n, X->p, B->p );
if( carry != 0 )
Expand Down

0 comments on commit 6260b70

Please sign in to comment.