mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:18:58 +00:00
crypto: rsa - Check MPI allocation errors
Fixes:6637e11e4a
("crypto: rsa - allow only odd e and restrict value in FIPS mode") Fixes:f145d411a6
("crypto: rsa - implement Chinese Remainder Theorem for faster private key operation") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
560efa7fca
commit
5a72a244ba
19
crypto/rsa.c
19
crypto/rsa.c
@ -98,14 +98,13 @@ static int _rsa_dec_crt(const struct rsa_mpi_key *key, MPI m_or_m1_or_h, MPI c)
|
|||||||
goto err_free_mpi;
|
goto err_free_mpi;
|
||||||
|
|
||||||
/* (2iii) h = (m_1 - m_2) * qInv mod p */
|
/* (2iii) h = (m_1 - m_2) * qInv mod p */
|
||||||
mpi_sub(m12_or_qh, m_or_m1_or_h, m2);
|
ret = mpi_sub(m12_or_qh, m_or_m1_or_h, m2) ?:
|
||||||
mpi_mulm(m_or_m1_or_h, m12_or_qh, key->qinv, key->p);
|
mpi_mulm(m_or_m1_or_h, m12_or_qh, key->qinv, key->p);
|
||||||
|
|
||||||
/* (2iv) m = m_2 + q * h */
|
/* (2iv) m = m_2 + q * h */
|
||||||
mpi_mul(m12_or_qh, key->q, m_or_m1_or_h);
|
ret = ret ?:
|
||||||
mpi_addm(m_or_m1_or_h, m2, m12_or_qh, key->n);
|
mpi_mul(m12_or_qh, key->q, m_or_m1_or_h) ?:
|
||||||
|
mpi_addm(m_or_m1_or_h, m2, m12_or_qh, key->n);
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
err_free_mpi:
|
err_free_mpi:
|
||||||
mpi_free(m12_or_qh);
|
mpi_free(m12_or_qh);
|
||||||
@ -236,6 +235,7 @@ static int rsa_check_key_length(unsigned int len)
|
|||||||
static int rsa_check_exponent_fips(MPI e)
|
static int rsa_check_exponent_fips(MPI e)
|
||||||
{
|
{
|
||||||
MPI e_max = NULL;
|
MPI e_max = NULL;
|
||||||
|
int err;
|
||||||
|
|
||||||
/* check if odd */
|
/* check if odd */
|
||||||
if (!mpi_test_bit(e, 0)) {
|
if (!mpi_test_bit(e, 0)) {
|
||||||
@ -250,7 +250,12 @@ static int rsa_check_exponent_fips(MPI e)
|
|||||||
e_max = mpi_alloc(0);
|
e_max = mpi_alloc(0);
|
||||||
if (!e_max)
|
if (!e_max)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
mpi_set_bit(e_max, 256);
|
|
||||||
|
err = mpi_set_bit(e_max, 256);
|
||||||
|
if (err) {
|
||||||
|
mpi_free(e_max);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
if (mpi_cmp(e, e_max) >= 0) {
|
if (mpi_cmp(e, e_max) >= 0) {
|
||||||
mpi_free(e_max);
|
mpi_free(e_max);
|
||||||
|
Loading…
Reference in New Issue
Block a user