KEYS: asymmetric: Fix error codes

These error paths should return the appropriate error codes instead of
returning success.

Fixes: 63ba4d6759 ("KEYS: asymmetric: Use new crypto interface without scatterlists")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Dan Carpenter 2023-07-03 17:18:08 +03:00 committed by Herbert Xu
parent d3dccb0a48
commit 9e9311e04e

View File

@ -185,8 +185,10 @@ static int software_key_query(const struct kernel_pkey_params *params,
if (issig) { if (issig) {
sig = crypto_alloc_sig(alg_name, 0, 0); sig = crypto_alloc_sig(alg_name, 0, 0);
if (IS_ERR(sig)) if (IS_ERR(sig)) {
ret = PTR_ERR(sig);
goto error_free_key; goto error_free_key;
}
if (pkey->key_is_private) if (pkey->key_is_private)
ret = crypto_sig_set_privkey(sig, key, pkey->keylen); ret = crypto_sig_set_privkey(sig, key, pkey->keylen);
@ -208,8 +210,10 @@ static int software_key_query(const struct kernel_pkey_params *params,
} }
} else { } else {
tfm = crypto_alloc_akcipher(alg_name, 0, 0); tfm = crypto_alloc_akcipher(alg_name, 0, 0);
if (IS_ERR(tfm)) if (IS_ERR(tfm)) {
ret = PTR_ERR(tfm);
goto error_free_key; goto error_free_key;
}
if (pkey->key_is_private) if (pkey->key_is_private)
ret = crypto_akcipher_set_priv_key(tfm, key, pkey->keylen); ret = crypto_akcipher_set_priv_key(tfm, key, pkey->keylen);
@ -300,8 +304,10 @@ static int software_key_eds_op(struct kernel_pkey_params *params,
if (issig) { if (issig) {
sig = crypto_alloc_sig(alg_name, 0, 0); sig = crypto_alloc_sig(alg_name, 0, 0);
if (IS_ERR(sig)) if (IS_ERR(sig)) {
ret = PTR_ERR(sig);
goto error_free_key; goto error_free_key;
}
if (pkey->key_is_private) if (pkey->key_is_private)
ret = crypto_sig_set_privkey(sig, key, pkey->keylen); ret = crypto_sig_set_privkey(sig, key, pkey->keylen);
@ -313,8 +319,10 @@ static int software_key_eds_op(struct kernel_pkey_params *params,
ksz = crypto_sig_maxsize(sig); ksz = crypto_sig_maxsize(sig);
} else { } else {
tfm = crypto_alloc_akcipher(alg_name, 0, 0); tfm = crypto_alloc_akcipher(alg_name, 0, 0);
if (IS_ERR(tfm)) if (IS_ERR(tfm)) {
ret = PTR_ERR(tfm);
goto error_free_key; goto error_free_key;
}
if (pkey->key_is_private) if (pkey->key_is_private)
ret = crypto_akcipher_set_priv_key(tfm, key, pkey->keylen); ret = crypto_akcipher_set_priv_key(tfm, key, pkey->keylen);
@ -411,8 +419,10 @@ int public_key_verify_signature(const struct public_key *pkey,
key = kmalloc(pkey->keylen + sizeof(u32) * 2 + pkey->paramlen, key = kmalloc(pkey->keylen + sizeof(u32) * 2 + pkey->paramlen,
GFP_KERNEL); GFP_KERNEL);
if (!key) if (!key) {
ret = -ENOMEM;
goto error_free_tfm; goto error_free_tfm;
}
memcpy(key, pkey->key, pkey->keylen); memcpy(key, pkey->key, pkey->keylen);
ptr = key + pkey->keylen; ptr = key + pkey->keylen;