mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
crypto: hisilicon/hpre - fix ECDH destination DMA mapping
hpre_ecdh_dst_data_init() rejects valid requests whose output length
does not equal ctx->key_sz << 1, and maps the user buffer using the
user-provided len instead of the hardware transfer size. Drop the
redundant length check and use ctx->key_sz << 1 for dma_map_single()
so the whole hardware output is mapped.
Fixes: 05e7b906aa ("crypto: hisilicon/hpre - add 'ECDH' algorithm")
Cc: stable@vger.kernel.org
Signed-off-by: Weili Qian <qianweili@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
232804a5ed
commit
12d8edda8c
|
|
@ -1510,13 +1510,13 @@ static int hpre_ecdh_dst_data_init(struct hpre_asym_request *hpre_req,
|
|||
struct device *dev = ctx->dev;
|
||||
dma_addr_t dma;
|
||||
|
||||
if (unlikely(!data || !sg_is_last(data) || len != ctx->key_sz << 1)) {
|
||||
dev_err(dev, "data or data length is illegal!\n");
|
||||
if (unlikely(!data || !sg_is_last(data))) {
|
||||
dev_err(dev, "data is illegal!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
hpre_req->dst = NULL;
|
||||
dma = dma_map_single(dev, sg_virt(data), len, DMA_FROM_DEVICE);
|
||||
dma = dma_map_single(dev, sg_virt(data), ctx->key_sz << 1, DMA_FROM_DEVICE);
|
||||
if (unlikely(dma_mapping_error(dev, dma))) {
|
||||
dev_err(dev, "dma map data err!\n");
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user