aboutsummaryrefslogtreecommitdiffstats
path: root/main/xen/xsa327.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/xen/xsa327.patch')
-rw-r--r--main/xen/xsa327.patch63
1 files changed, 0 insertions, 63 deletions
diff --git a/main/xen/xsa327.patch b/main/xen/xsa327.patch
deleted file mode 100644
index 0541cfa0df8..00000000000
--- a/main/xen/xsa327.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 030300ebbb86c40c12db038714479d746167c767 Mon Sep 17 00:00:00 2001
-From: Julien Grall <jgrall@amazon.com>
-Date: Tue, 26 May 2020 18:31:33 +0100
-Subject: [PATCH] xen: Check the alignment of the offset pased via
- VCPUOP_register_vcpu_info
-
-Currently a guest is able to register any guest physical address to use
-for the vcpu_info structure as long as the structure can fits in the
-rest of the frame.
-
-This means a guest can provide an address that is not aligned to the
-natural alignment of the structure.
-
-On Arm 32-bit, unaligned access are completely forbidden by the
-hypervisor. This will result to a data abort which is fatal.
-
-On Arm 64-bit, unaligned access are only forbidden when used for atomic
-access. As the structure contains fields (such as evtchn_pending_self)
-that are updated using atomic operations, any unaligned access will be
-fatal as well.
-
-While the misalignment is only fatal on Arm, a generic check is added
-as an x86 guest shouldn't sensibly pass an unaligned address (this
-would result to a split lock).
-
-This is XSA-327.
-
-Reported-by: Julien Grall <jgrall@amazon.com>
-Signed-off-by: Julien Grall <jgrall@amazon.com>
-Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
-Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
----
- xen/common/domain.c | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/xen/common/domain.c b/xen/common/domain.c
-index 7cc9526139a6..e9be05f1d05f 100644
---- a/xen/common/domain.c
-+++ b/xen/common/domain.c
-@@ -1227,10 +1227,20 @@ int map_vcpu_info(struct vcpu *v, unsigned long gfn, unsigned offset)
- void *mapping;
- vcpu_info_t *new_info;
- struct page_info *page;
-+ unsigned int align;
-
- if ( offset > (PAGE_SIZE - sizeof(vcpu_info_t)) )
- return -EINVAL;
-
-+#ifdef CONFIG_COMPAT
-+ if ( has_32bit_shinfo(d) )
-+ align = alignof(new_info->compat);
-+ else
-+#endif
-+ align = alignof(*new_info);
-+ if ( offset & (align - 1) )
-+ return -EINVAL;
-+
- if ( !mfn_eq(v->vcpu_info_mfn, INVALID_MFN) )
- return -EINVAL;
-
---
-2.17.1
-