Commit c7b675de390005be5dde57d341347c52684d2f69
Committed by
Herbert Xu
1 parent
01a5aa08ef
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
crypto: nx - Moving NX-AES-ECB 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 <leosilva@linux.vnet.ibm.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Showing 1 changed file with 2 additions and 10 deletions Side-by-side Diff
drivers/crypto/nx/nx-aes-ecb.c
... | ... | @@ -72,27 +72,19 @@ |
72 | 72 | struct nx_csbcpb *csbcpb = nx_ctx->csbcpb; |
73 | 73 | unsigned long irq_flags; |
74 | 74 | unsigned int processed = 0, to_process; |
75 | - u32 max_sg_len; | |
76 | 75 | int rc; |
77 | 76 | |
78 | 77 | spin_lock_irqsave(&nx_ctx->lock, irq_flags); |
79 | 78 | |
80 | - max_sg_len = min_t(u32, nx_driver.of.max_sg_len/sizeof(struct nx_sg), | |
81 | - nx_ctx->ap->sglen); | |
82 | - | |
83 | 79 | if (enc) |
84 | 80 | NX_CPB_FDM(csbcpb) |= NX_FDM_ENDE_ENCRYPT; |
85 | 81 | else |
86 | 82 | NX_CPB_FDM(csbcpb) &= ~NX_FDM_ENDE_ENCRYPT; |
87 | 83 | |
88 | 84 | do { |
89 | - to_process = min_t(u64, nbytes - processed, | |
90 | - nx_ctx->ap->databytelen); | |
91 | - to_process = min_t(u64, to_process, | |
92 | - NX_PAGE_SIZE * (max_sg_len - 1)); | |
93 | - to_process = to_process & ~(AES_BLOCK_SIZE - 1); | |
85 | + to_process = nbytes - processed; | |
94 | 86 | |
95 | - rc = nx_build_sg_lists(nx_ctx, desc, dst, src, to_process, | |
87 | + rc = nx_build_sg_lists(nx_ctx, desc, dst, src, &to_process, | |
96 | 88 | processed, NULL); |
97 | 89 | if (rc) |
98 | 90 | goto out; |