Skip to content

Commit 551f1df

Browse files
Youssef Samirgregkh
authored andcommitted
accel/qaic: Treat remaining == 0 as error in find_and_map_user_pages()
[ Upstream commit 11f08c3 ] Currently, if find_and_map_user_pages() takes a DMA xfer request from the user with a length field set to 0, or in a rare case, the host receives QAIC_TRANS_DMA_XFER_CONT from the device where resources->xferred_dma_size is equal to the requested transaction size, the function will return 0 before allocating an sgt or setting the fields of the dma_xfer struct. In that case, encode_addr_size_pairs() will try to access the sgt which will lead to a general protection fault. Return an EINVAL in case the user provides a zero-sized ALP, or the device requests continuation after all of the bytes have been transferred. Fixes: 96d3c1c ("accel/qaic: Clean up integer overflow checking in map_user_pages()") Signed-off-by: Youssef Samir <[email protected]> Signed-off-by: Youssef Samir <[email protected]> Reviewed-by: Jeff Hugo <[email protected]> Reviewed-by: Carl Vanderlip <[email protected]> Signed-off-by: Jeff Hugo <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Sasha Levin <[email protected]>
1 parent 646868e commit 551f1df

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/accel/qaic/qaic_control.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ static int find_and_map_user_pages(struct qaic_device *qdev,
407407
return -EINVAL;
408408
remaining = in_trans->size - resources->xferred_dma_size;
409409
if (remaining == 0)
410-
return 0;
410+
return -EINVAL;
411411

412412
if (check_add_overflow(xfer_start_addr, remaining, &end))
413413
return -EINVAL;

0 commit comments

Comments
 (0)