mirror of
https://github.com/ARMmbed/mbedtls.git
synced 2025-05-10 00:49:04 +08:00
mbedtls_mpi_sub_abs: Skip memcpy when redundant (#6701).
In some contexts, the output pointer may equal the first input pointer, in which case copying is not only superfluous but results in "Source and destination overlap in memcpy" errors from Valgrind (as I observed in the context of ecp_double_jac) and a diagnostic message from TrustInSoft Analyzer (as Pascal Cuoq reported in the context of other ECP functions called by cert-app with a suitable certificate). Signed-off-by: Aaron M. Ucko <ucko@ncbi.nlm.nih.gov>
This commit is contained in:
parent
461b8254d0
commit
af67d2c1cf
@ -0,0 +1,5 @@
|
||||
Bugfix
|
||||
* Fix mbedtls_mpi_sub_abs() to account for the possibility that the output
|
||||
pointer could equal the first input pointer and if so to skip a memcpy()
|
||||
call that would be redundant. Reported by Pascal Cuoq using TrustInSoft
|
||||
Analyzer in #6701; observed independently by Aaron Ucko under Valgrind.
|
@ -1009,7 +1009,7 @@ int mbedtls_mpi_sub_abs(mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
|
||||
/* Set the high limbs of X to match A. Don't touch the lower limbs
|
||||
* because X might be aliased to B, and we must not overwrite the
|
||||
* significant digits of B. */
|
||||
if (A->n > n) {
|
||||
if (A->n > n && A != X) {
|
||||
memcpy(X->p + n, A->p + n, (A->n - n) * ciL);
|
||||
}
|
||||
if (X->n > A->n) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user