aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/compat
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2012-12-04 18:38:14 +0000
committerJan Beulich <jbeulich@suse.com>2012-12-04 18:38:14 +0000
commitd28573565f35c4b85ca25044e162745523176392 (patch)
tree636dc772955f4cb20dc972bc19d8419ed8bb0395 /xen/common/compat
parent24ff9723e0398e78355ea4b83df50eafb154d4dc (diff)
downloadxen-d28573565f35c4b85ca25044e162745523176392.tar.gz
xen-d28573565f35c4b85ca25044e162745523176392.tar.bz2
xen-d28573565f35c4b85ca25044e162745523176392.zip
xen: add missing guest address range checks to XENMEM_exchange handlers
Ever since its existence (3.0.3 iirc) the handler for this has been using non address range checking guest memory accessors (i.e. the ones prefixed with two underscores) without first range checking the accessed space (via guest_handle_okay()), allowing a guest to access and overwrite hypervisor memory. This is XSA-29 / CVE-2012-5513. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson.citrix.com>
Diffstat (limited to 'xen/common/compat')
-rw-r--r--xen/common/compat/memory.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/xen/common/compat/memory.c b/xen/common/compat/memory.c
index 996151caed..a49f51b7fb 100644
--- a/xen/common/compat/memory.c
+++ b/xen/common/compat/memory.c
@@ -115,6 +115,12 @@ int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) compat)
(cmp.xchg.out.nr_extents << cmp.xchg.out.extent_order)) )
return -EINVAL;
+ if ( !compat_handle_okay(cmp.xchg.in.extent_start,
+ cmp.xchg.in.nr_extents) ||
+ !compat_handle_okay(cmp.xchg.out.extent_start,
+ cmp.xchg.out.nr_extents) )
+ return -EFAULT;
+
start_extent = cmp.xchg.nr_exchanged;
end_extent = (COMPAT_ARG_XLAT_SIZE - sizeof(*nat.xchg)) /
(((1U << ABS(order_delta)) + 1) *