From: Prasad J Pandit <p...@fedoraproject.org> While doing multi block SDMA transfer in routine 'sdhci_sdma_transfer_multi_blocks', the 's->fifo_buffer' starting index 'begin' and data length 's->data_count' could end up to be same. This could lead to an OOB access issue. Correct transfer data length to avoid it.
Cc: qemu-sta...@nongnu.org Reported-by: Jiang Xin <jiangx...@huawei.com> Signed-off-by: Prasad J Pandit <p...@fedoraproject.org> Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> Message-id: 20170130064736.9236-1-ppan...@redhat.com Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> --- hw/sd/sdhci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 01fbf22..5bd5ab6 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -536,7 +536,7 @@ static void sdhci_sdma_transfer_multi_blocks(SDHCIState *s) boundary_count -= block_size - begin; } dma_memory_read(&address_space_memory, s->sdmasysad, - &s->fifo_buffer[begin], s->data_count); + &s->fifo_buffer[begin], s->data_count - begin); s->sdmasysad += s->data_count - begin; if (s->data_count == block_size) { for (n = 0; n < block_size; n++) { -- 2.7.4