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:
parent
d3dccb0a48
commit
9e9311e04e
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user