crypto: caam - fix zero-length buffer DMA mapping
Recent changes - probably DMA API related (generic and/or arm64-specific) -
exposed a case where driver maps a zero-length buffer:
ahash_init()->ahash_update()->ahash_final() with a zero-length string to
hash
kernel BUG at kernel/dma/swiotlb.c:475!
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
Modules linked in:
CPU: 2 PID: 1823 Comm: cryptomgr_test Not tainted 4.20.0-rc1-00108-g00c9fe37a7f2 #1
Hardware name: LS1046A RDB Board (DT)
pstate:
80000005 (Nzcv daif -PAN -UAO)
pc : swiotlb_tbl_map_single+0x170/0x2b8
lr : swiotlb_map_page+0x134/0x1f8
sp :
ffff00000f79b8f0
x29:
ffff00000f79b8f0 x28:
0000000000000000
x27:
ffff0000093d0000 x26:
0000000000000000
x25:
00000000001f3ffe x24:
0000000000200000
x23:
0000000000000000 x22:
00000009f2c538c0
x21:
ffff800970aeb410 x20:
0000000000000001
x19:
ffff800970aeb410 x18:
0000000000000007
x17:
000000000000000e x16:
0000000000000001
x15:
0000000000000019 x14:
c32cb8218a167fe8
x13:
ffffffff00000000 x12:
ffff80097fdae348
x11:
0000800976bca000 x10:
0000000000000010
x9 :
0000000000000000 x8 :
ffff0000091fd6c8
x7 :
0000000000000000 x6 :
00000009f2c538bf
x5 :
0000000000000000 x4 :
0000000000000001
x3 :
0000000000000000 x2 :
00000009f2c538c0
x1 :
00000000f9fff000 x0 :
0000000000000000
Process cryptomgr_test (pid: 1823, stack limit = 0x(____ptrval____))
Call trace:
swiotlb_tbl_map_single+0x170/0x2b8
swiotlb_map_page+0x134/0x1f8
ahash_final_no_ctx+0xc4/0x6cc
ahash_final+0x10/0x18
crypto_ahash_op+0x30/0x84
crypto_ahash_final+0x14/0x1c
__test_hash+0x574/0xe0c
test_hash+0x28/0x80
__alg_test_hash+0x84/0xd0
alg_test_hash+0x78/0x144
alg_test.part.30+0x12c/0x2b4
alg_test+0x3c/0x68
cryptomgr_test+0x44/0x4c
kthread+0xfc/0x128
ret_from_fork+0x10/0x18
Code:
d34bfc18 2a1a03f7 1a9f8694 35fff89a (
d4210000)
Cc: <stable@vger.kernel.org>
Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>