qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] apb: Fix out-of-bounds array write access


From: Stefan Weil
Subject: Re: [Qemu-devel] [PATCH] apb: Fix out-of-bounds array write access
Date: Mon, 09 Jun 2014 16:39:43 +0200
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.5.0

Am 09.06.2014 16:19, schrieb Stefan Weil:
> The array regs is declared with IOMMU_NREGS (3) elements and accessed
> using IOMMU_CTRL (0) and IOMMU_BASE (8). In most cases, those values
> are right shifted before being used as an index which results in indices
> 0 and 1. In one case, this right shift was missing for IOMMU_BASE which
> results in an out-of-bounds write access with index 8.
> 
> The patch adds the missing shift operation also for IOMMU_CTRL where
> it is needed only for cosmetic reasons.
> 
> Signed-off-by: Stefan Weil <address@hidden>
> ---
> 
> Any reason why the array is declared with 3 elements when only the first 2
> are used?
> 
> Regards,
> Stefan
> 
>  hw/pci-host/apb.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c
> index 1497008..887338e 100644
> --- a/hw/pci-host/apb.c
> +++ b/hw/pci-host/apb.c
Snip here ---->
> @@ -1,4 +1,4 @@
> -/*
> +re/*

Please remove this part before applying the patch. It was added
accidentally when I added a comment to the patch file


>   * QEMU Ultrasparc APB PCI host
>   *
>   * Copyright (c) 2006 Fabrice Bellard
<---- until here.
> @@ -333,7 +333,7 @@ static void iommu_config_write(void *opaque, hwaddr addr,
>              is->regs[IOMMU_CTRL >> 3] &= 0xffffffffULL;
>              is->regs[IOMMU_CTRL >> 3] |= val << 32;
>          } else {
> -            is->regs[IOMMU_CTRL] = val;
> +            is->regs[IOMMU_CTRL >> 3] = val;
>          }
>          break;
>      case IOMMU_CTRL + 0x4:
> @@ -345,7 +345,7 @@ static void iommu_config_write(void *opaque, hwaddr addr,
>              is->regs[IOMMU_BASE >> 3] &= 0xffffffffULL;
>              is->regs[IOMMU_BASE >> 3] |= val << 32;
>          } else {
> -            is->regs[IOMMU_BASE] = val;
> +            is->regs[IOMMU_BASE >> 3] = val;
>          }
>          break;
>      case IOMMU_BASE + 0x4:
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]