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

[PATCH v10 17/17] arm/vpci: honor access size when returning an error


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Date: Thu, 12 Oct 2023 22:09:19 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=6fCPCQQkuoUbzHvgCuLMRvBKFHMr2721/yam2GyvN+o=; b=fbSqGUHZD3PeiYHjYDp4zyYD8kiGNSpR0iUdjs0wppF+JfcaCYCDXaVINKViqsnTU3W37qzXc1MBIipW7CeUEBiq/koorWp8Pc1zWN+dcYdIWCkoG4v/R1vq0uH1XuOddn75sJAFMMk1jdest1su+KAU+cKoOIC2RqJuc1g49CxV65T2gGqnrSwq+/swLfug+IHjBrEAF4bf447zV7kdyx7NKdHMMa6JgS16NIIy4UNIqbAeiUvxPn0a2258OMhBH2Ib8prcktU+3wZMwdb9PbuWVcpr8Kw5WLICgHbB51yHb1Vx8DA5rUfk5BH7/tdmqMvi4pdWOwBU5XVMb/UiAA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AgnX5BmG6ny5bXSPcSa+e79ivWFctQhzJWGHb9pU0sDniaWje5fMJ6HbzyDiYngv0IZrBn46Cai1q+dWf57D1TgeXwBPBFkIdlYiY/dNkrFzsdK+BneTgTpT7ldG+s319XZjL0huhiXaXmK9tOdLozFpyBVUhHlcTjX801oqN5VHVjXtwz0PGMbEHbSaGH0mvc/zVGObRdvtfMXlQg9TDwry4Tj1aPZQYKRBx+8kpAmas3kO+8VYvRnSWem0nNnOnQcjiAQ6Nz1sYeKHl8Ilv0XTTj6g9TNHup9Q6M6A7hKNJZBz84cIFoFLRWwPk4+R0kKBNDMS8qFdIlxjrhWxdg==
  • Cc: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Thu, 12 Oct 2023 22:21:23 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHZ/Vi/FcbNdUf5hUOov/su5MD7Xg==
  • Thread-topic: [PATCH v10 17/17] arm/vpci: honor access size when returning an error

Guest can try to read config space using different access sizes: 8,
16, 32, 64 bits. We need to take this into account when we are
returning an error back to MMIO handler, otherwise it is possible to
provide more data than requested: i.e. guest issues LDRB instruction
to read one byte, but we are writing 0xFFFFFFFFFFFFFFFF in the target
register.

Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>
---
 xen/arch/arm/vpci.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/xen/arch/arm/vpci.c b/xen/arch/arm/vpci.c
index 3521d5bc2f..f1e434a5db 100644
--- a/xen/arch/arm/vpci.c
+++ b/xen/arch/arm/vpci.c
@@ -46,6 +46,8 @@ static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info,
 {
     struct pci_host_bridge *bridge = p;
     pci_sbdf_t sbdf;
+    const uint8_t access_size = (1 << info->dabt.size) * 8;
+    const uint64_t access_mask = GENMASK_ULL(access_size - 1, 0);
     /* data is needed to prevent a pointer cast on 32bit */
     unsigned long data;
 
@@ -53,7 +55,7 @@ static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info,
 
     if ( !vpci_sbdf_from_gpa(v->domain, bridge, info->gpa, &sbdf) )
     {
-        *r = ~0ul;
+        *r = access_mask;
         return 1;
     }
 
@@ -64,7 +66,7 @@ static int vpci_mmio_read(struct vcpu *v, mmio_info_t *info,
         return 1;
     }
 
-    *r = ~0ul;
+    *r = access_mask;
 
     return 0;
 }
-- 
2.42.0



 


Rackspace

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