Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: starfive - Use fallback for unaligned dma access

Dma address mapping fails on unaligned scatterlist offset. Use sw
fallback for these cases.

Signed-off-by: Jia Jie Ho <jiajie.ho@starfivetech.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Jia Jie Ho and committed by
Herbert Xu
f8c423ba d7f01649

+7 -5
+7 -5
drivers/crypto/starfive/jh7110-aes.c
··· 314 314 cryp->total_in, cryp->authsize, 1); 315 315 } else { 316 316 if (crypto_memneq(cryp->tag_in, cryp->tag_out, cryp->authsize)) 317 - return dev_err_probe(cryp->dev, -EBADMSG, "Failed tag verification\n"); 317 + return -EBADMSG; 318 318 } 319 319 320 320 return 0; ··· 753 753 int i; 754 754 755 755 for_each_sg(src, tsg, sg_nents(src), i) 756 - if (!IS_ALIGNED(tsg->length, AES_BLOCK_SIZE) && 757 - !sg_is_last(tsg)) 756 + if (!IS_ALIGNED(tsg->offset, sizeof(u32)) || 757 + (!IS_ALIGNED(tsg->length, AES_BLOCK_SIZE) && 758 + !sg_is_last(tsg))) 758 759 return true; 759 760 760 761 if (src != dst) 761 762 for_each_sg(dst, tsg, sg_nents(dst), i) 762 - if (!IS_ALIGNED(tsg->length, AES_BLOCK_SIZE) && 763 - !sg_is_last(tsg)) 763 + if (!IS_ALIGNED(tsg->offset, sizeof(u32)) || 764 + (!IS_ALIGNED(tsg->length, AES_BLOCK_SIZE) && 765 + !sg_is_last(tsg))) 764 766 return true; 765 767 766 768 return false;