Commit 650c8612 authored by Xiongfeng Wang's avatar Xiongfeng Wang Committed by Zheng Zengkai
Browse files

PCI: Fail MSI-X mapping if MSI-X Table offset is out of range of BAR space

euler inclusion
category: bugfix
bugzilla: 4390,https://gitee.com/openeuler/kernel/issues/I4OG3O?from=project-issue


CVE: NA

----------------------------------------

This patch add check for the offset of MSI-X Table. If it is out of range
of the BAR space BIR selects, we just fail this MSI-X mapping.

Signed-off-by: default avatarXiongfeng Wang <xiongfeng.wang@linaro.org>
Reviewed-by: default avatarHanjun Guo <guohanjun@huawei.com>
Signed-off-by: default avatarMao Wenan <maowenan@huawei.com>
Signed-off-by: default avatarHui Wang <john.wanghui@huawei.com>

Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Reviewed-by: default avatarXiongfeng Wang <wangxiongfeng2@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
Reviewed-by: default avatarXiongfeng Wang <wangxiongfeng2@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 3415adad
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -711,6 +711,12 @@ static void __iomem *msix_map_region(struct pci_dev *dev, unsigned nr_entries)
		return NULL;

	table_offset &= PCI_MSIX_TABLE_OFFSET;
	if (table_offset >= pci_resource_len(dev, bir)) {
		dev_err(&dev->dev,
			"MSI-X Table offset is out of range of BAR:%d!\n",
			bir);
		return NULL;
	}
	phys_addr = pci_resource_start(dev, bir) + table_offset;

	return ioremap(phys_addr, nr_entries * PCI_MSIX_ENTRY_SIZE);