crypto: chelsio - Fix wrong error counter increments
Fix error counter increment in AEAD decrypt operation when validation of tag is done in Driver instead of H/W. Signed-off-by: Harsh Jain <harsh@chelsio.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Родитель
6501ab5ed4
Коммит
f31ba0f95f
|
@ -218,7 +218,7 @@ static inline void chcr_dec_wrcount(struct chcr_dev *dev)
|
|||
atomic_dec(&dev->inflight);
|
||||
}
|
||||
|
||||
static inline void chcr_handle_aead_resp(struct aead_request *req,
|
||||
static inline int chcr_handle_aead_resp(struct aead_request *req,
|
||||
unsigned char *input,
|
||||
int err)
|
||||
{
|
||||
|
@ -233,6 +233,8 @@ static inline void chcr_handle_aead_resp(struct aead_request *req,
|
|||
}
|
||||
chcr_dec_wrcount(dev);
|
||||
req->base.complete(&req->base, err);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void get_aes_decrypt_key(unsigned char *dec_key,
|
||||
|
@ -2072,14 +2074,13 @@ int chcr_handle_resp(struct crypto_async_request *req, unsigned char *input,
|
|||
|
||||
switch (tfm->__crt_alg->cra_flags & CRYPTO_ALG_TYPE_MASK) {
|
||||
case CRYPTO_ALG_TYPE_AEAD:
|
||||
chcr_handle_aead_resp(aead_request_cast(req), input, err);
|
||||
err = chcr_handle_aead_resp(aead_request_cast(req), input, err);
|
||||
break;
|
||||
|
||||
case CRYPTO_ALG_TYPE_ABLKCIPHER:
|
||||
err = chcr_handle_cipher_resp(ablkcipher_request_cast(req),
|
||||
chcr_handle_cipher_resp(ablkcipher_request_cast(req),
|
||||
input, err);
|
||||
break;
|
||||
|
||||
case CRYPTO_ALG_TYPE_AHASH:
|
||||
chcr_handle_ahash_resp(ahash_request_cast(req), input, err);
|
||||
}
|
||||
|
|
|
@ -169,12 +169,8 @@ static int cpl_fw6_pld_handler(struct chcr_dev *dev,
|
|||
|
||||
ack_err_status =
|
||||
ntohl(*(__be32 *)((unsigned char *)&fw6_pld->data[0] + 4));
|
||||
if (ack_err_status) {
|
||||
if (CHK_MAC_ERR_BIT(ack_err_status) ||
|
||||
CHK_PAD_ERR_BIT(ack_err_status))
|
||||
error_status = -EBADMSG;
|
||||
atomic_inc(&adap->chcr_stats.error);
|
||||
}
|
||||
if (CHK_MAC_ERR_BIT(ack_err_status) || CHK_PAD_ERR_BIT(ack_err_status))
|
||||
error_status = -EBADMSG;
|
||||
/* call completion callback with failure status */
|
||||
if (req) {
|
||||
error_status = chcr_handle_resp(req, input, error_status);
|
||||
|
@ -182,6 +178,9 @@ static int cpl_fw6_pld_handler(struct chcr_dev *dev,
|
|||
pr_err("Incorrect request address from the firmware\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
if (error_status)
|
||||
atomic_inc(&adap->chcr_stats.error);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче