hv: vtd: fix the pre-allocated context table number

In current code, there is an out of range access to the array buses defined in struct struct context_table.
This patch defines CONFIG_IOMMU_BUS_NUM to replace CONFIG_IOMMU_INIT_BUS_LIMIT, which is clearer.
CONFIG_IOMMU_BUS_NUM equals to (CONFIG_IOMMU_INIT_BUS_LIMIT + 1).

Tracked-On: #1807
Signed-off-by: Binbin Wu <binbin.wu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Binbin Wu 2018-11-13 10:20:51 +08:00 committed by lijinxia
parent 3731b4c0ac
commit 2c7c909e38
2 changed files with 6 additions and 6 deletions

View File

@ -304,12 +304,12 @@ config RELOC
wherever appropriate. Without relocation the bootloader must put the wherever appropriate. Without relocation the bootloader must put the
image to RAM_START, otherwise the hypervisor will not start up. image to RAM_START, otherwise the hypervisor will not start up.
config IOMMU_INIT_BUS_LIMIT config IOMMU_BUS_NUM
hex "Limit of PCI bus on IOMMU initialization" hex "Limit of PCI bus on IOMMU initialization"
default 0xf if PLATFORM_SBL default 0x10 if PLATFORM_SBL
default 0xff if PLATFORM_UEFI default 0x100 if PLATFORM_UEFI
help help
Any BDF with a bus ID smaller than or equal to this limit is mapped to Any BDF with a bus ID smaller than this number is mapped to
the IOMMU domain of the first VM. the IOMMU domain of the first VM.
config MAX_PCI_DEV_NUM config MAX_PCI_DEV_NUM

View File

@ -134,7 +134,7 @@ struct iommu_domain {
}; };
struct context_table { struct context_table {
struct page buses[CONFIG_IOMMU_INIT_BUS_LIMIT]; struct page buses[CONFIG_IOMMU_BUS_NUM];
}; };
static struct page root_tables[CONFIG_MAX_IOMMU_NUM] __aligned(CPU_PAGE_SIZE); static struct page root_tables[CONFIG_MAX_IOMMU_NUM] __aligned(CPU_PAGE_SIZE);
@ -1250,7 +1250,7 @@ void init_iommu_vm0_domain(struct acrn_vm *vm0)
vm0_domain = (struct iommu_domain *) vm0->iommu; vm0_domain = (struct iommu_domain *) vm0->iommu;
for (bus = 0U; bus <= CONFIG_IOMMU_INIT_BUS_LIMIT; bus++) { for (bus = 0U; bus < CONFIG_IOMMU_BUS_NUM; bus++) {
for (devfun = 0U; devfun <= 255U; devfun++) { for (devfun = 0U; devfun <= 255U; devfun++) {
add_iommu_device(vm0_domain, 0U, add_iommu_device(vm0_domain, 0U,
(uint8_t)bus, (uint8_t)devfun); (uint8_t)bus, (uint8_t)devfun);