crypto: adiantum - flush destination page before unmapping
PATCH 1/1 crypto: adiantum - flush destination page before unmapping
From: Eric Biggers <[email protected]>
Upon additional review, the new fast path in adiantum_finish() is missing the call to flush_dcache_page() that scatterwalk_map_and_copy() was doing. It's apparently debatable whether flush_dcache_page() is actually needed, as per the discussion at
https://lore.kernel.org/lkml/[email protected]/T/#u.
However, it appears that currently all the helper functions that write to a page, such as scatterwalk_map_and_copy(), memcpy_to_page(), and memzero_page(), do the dcache flush. So do it to be consistent.
Fixes dadf5e56c967 ("crypto: adiantum - add fast path for single-page messages")
Signed-off-by Eric Biggers <[email protected]>
--- crypto/adiantum.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
crypto/adiantum.c +3 -1
@@ -293,30 +293,32 @@ static int adiantum_finish(struct skcipher_request *req)/* * Second hash step * enc: C_R = C_M - H_{K_H}(T, C_L) * dec: P_R = P_M - H_{K_H}(T, P_L) */ rctx->u.hash_desc.tfm = tctx->hash;le128_sub (&rctx->rbuf.bignum, &rctx->rbuf.bignum, &rctx->header_hash);if (dst_nents ==1 && dst->offset + req->cryptlen <=PAGE_SIZE ) {/* Fast path for single-page destination */ -void *virt =kmap_local_page (sg_page (dst)) + dst->offset; +struct page *page =sg_page (dst); +void *virt =kmap_local_page (page) + dst->offset; err =crypto_shash_digest (&rctx->u.hash_desc, virt, bulk_len, (u8 *)&digest);if (err) {kunmap_local (virt);return err; }le128_sub (&rctx->rbuf.bignum, &rctx->rbuf.bignum, &digest);memcpy (virt + bulk_len, &rctx->rbuf.bignum,sizeof (le128)); +flush_dcache_page (page);kunmap_local (virt); }else {/* Slow path that works for any destination scatterlist */ err =adiantum_hash_message (req, dst, dst_nents, &digest);if (err)return err;le128_sub (&rctx->rbuf.bignum, &rctx->rbuf.bignum, &digest);scatterwalk_map_and_copy (&rctx->rbuf.bignum, dst, bulk_len,sizeof (le128),1 ); }
base-commit: f2b88bab69c86d4dab2bfd25a0e741d7df411f7a
Signature · 1 line
2.42.0