Moving NX-AES-CBC to be processed logic
Subsystems (3)
PATCH 1/9 Moving NX-AES-CBC to be processed logic
The previous limits were estimated locally in a single step basead on bound values, however it was not correct since when given certain scatterlist the function nx_build_sg_lists was consuming more sg entries than allocated causing a memory corruption and crashes.
This patch removes the old logic and replaces it into nx_sg_build_lists in order to build a correct nx_sg list using the correct sg_max limit and bounds.
Signed-off-by Leonidas S. Barbosa <[email protected]>
--- drivers/crypto/nx/nx-aes-cbc.c | 12 ++---------- 1 files changed, 2 insertions(+), 10 deletions(-)
drivers/crypto/nx/nx-aes-cbc.c +2 -10
@@ -72,27 +72,19 @@ static int cbc_aes_nx_crypt(struct blkcipher_desc *desc,struct nx_csbcpb *csbcpb = nx_ctx->csbcpb;unsigned long irq_flags;unsigned int processed =0 , to_process; -u32 max_sg_len;int rc;spin_lock_irqsave (&nx_ctx->lock, irq_flags); - max_sg_len =min_t (u32, nx_driver.of.max_sg_len/sizeof (struct nx_sg ), - nx_ctx->ap->sglen); -if (enc)NX_CPB_FDM (csbcpb) |=NX_FDM_ENDE_ENCRYPT ;else NX_CPB_FDM (csbcpb) &= ~NX_FDM_ENDE_ENCRYPT ; do { - to_process = min_t(u64, nbytes - processed, - nx_ctx->ap->databytelen); - to_process = min_t(u64, to_process, - NX_PAGE_SIZE * (max_sg_len - 1)); - to_process = to_process & ~(AES_BLOCK_SIZE - 1); + to_process = nbytes - processed; - rc = nx_build_sg_lists(nx_ctx, desc, dst, src, to_process, + rc = nx_build_sg_lists(nx_ctx, desc, dst, src, &to_process, processed, csbcpb->cpb.aes_cbc.iv); if (rc) goto out;
Signature · 1 line
1.7.1