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

[PATCH v5 1/9] vpci: move BAR mapping permissions checks


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
  • Date: Wed, 8 Jul 2026 17:02:16 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VMH2OpeOLM8+juWpQGgzXCROZP9A2bpoLNjB3cnaChc=; b=Xei8wWjrcjqCuMM2RaR9bGum22z+MGnsrqWNx++heMakBTNyWxXBkOd649Sk8LAfqvO8CnB3gO0a/VVAjPx7l7Z/AyJ0TDLLXwxa4QzLX+Lh5OOKneOcA2WfUWa8/RlRlzc2varvSknriu0EAOj54sqinDWwjwAzgFdlvx8fEFiDA6IIahKv5wmTHNxi+9hY6JRsee8Ibd+bLY2WCPTfBfdrdKH1a9Hil+Hi6Tjv9qPw2F7FFiXvqmKtOMO1x4Yx8w4qrGaxNPhk71gv4QsdueEDiP7Tocv2gV8dKjL+xQzawC9ixfJDuBplPfrTy34ZSb4yvmQTSLBCAqHBw2WbmQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cBd69AFckwXcGfxN159ZrR3dqKHiqHQaMPcROPcKBoLbmMjKPOW+uYfiuKGqSOrRgzn62n86tHDjo+FUfCCM1+BZ5vd8r60Dm0bLMsReh+WpTo1M3c8jl+dqO6FpSI54Qa1BysBeZgO6P6IdaznKXmT3uUl1MX2NB8jNupIvJLTXz2USYQySSTyIHckfkgpzCjYODP43pC+uR3lNK8UhI4gBZR9vf3Ar66u+rHEKW88gjHczK3nz45tfTiSXTsMSxYE8mdll6ppnShb5betSl+1+fH2+9Z7aFZixQGxricrzLnWVjwOQudhx2V/o6Mhwx7ekse/b2QFg/CxGUzbiXQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Cc: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, "Daniel P. Smith" <dpsmith@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Wed, 08 Jul 2026 21:03:52 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

There's no need to defer the permissions checks. Perform them right away
in modify_bars().

As a result of the move, the permissions checks will now cover the whole
BAR before any holes are removed.

Carry over the domain_crash() in the error path for domUs.

Signed-off-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
---
v5: new patch
---
 xen/drivers/vpci/header.c | 40 +++++++++++++++++++++------------------
 1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/xen/drivers/vpci/header.c b/xen/drivers/vpci/header.c
index d1c92cf77f8a..5ac525036672 100644
--- a/xen/drivers/vpci/header.c
+++ b/xen/drivers/vpci/header.c
@@ -58,24 +58,6 @@ static int cf_check map_range(
          * offset of the current address from the BAR start.
          */
         unsigned long map_mfn = start_mfn + s - start_gfn;
-        unsigned long m_end = map_mfn + size - 1;
-
-        if ( !iomem_access_permitted(map->d, map_mfn, m_end) )
-        {
-            printk(XENLOG_G_WARNING
-                   "%pd denied access to MMIO range [%#lx, %#lx]\n",
-                   map->d, map_mfn, m_end);
-            return -EPERM;
-        }
-
-        rc = xsm_iomem_mapping_vpci(XSM_HOOK, map->d, map_mfn, m_end, 
map->map);
-        if ( rc )
-        {
-            printk(XENLOG_G_WARNING
-                   "%pd XSM denied access to MMIO range [%#lx, %#lx]: %d\n",
-                   map->d, map_mfn, m_end, rc);
-            return rc;
-        }
 
         /*
          * ARM TODOs:
@@ -369,6 +351,28 @@ static int modify_bars(const struct pci_dev *pdev, 
uint16_t cmd, bool rom_only)
             return -EINVAL;
         }
 
+        if ( !iomem_access_permitted(pdev->domain, start, end) )
+        {
+            printk(XENLOG_G_WARNING
+                   "%pd denied access to MMIO range [%#lx, %#lx]\n",
+                   pdev->domain, start, end);
+            if ( !is_hardware_domain(pdev->domain) )
+                domain_crash(pdev->domain);
+            return -EPERM;
+        }
+
+        rc = xsm_iomem_mapping_vpci(XSM_HOOK, pdev->domain, start, end,
+                                    !!(cmd & PCI_COMMAND_MEMORY));
+        if ( rc )
+        {
+            printk(XENLOG_G_WARNING
+                   "%pd XSM denied access to MMIO range [%#lx, %#lx]: %d\n",
+                   pdev->domain, start, end, rc);
+            if ( !is_hardware_domain(pdev->domain) )
+                domain_crash(pdev->domain);
+            return rc;
+        }
+
         rc = rangeset_add_range(bar->mem, start_guest, end_guest);
         if ( rc )
         {
-- 
2.54.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.