The GNTTABOP_transfer operation allows one guest to transfer a page to
another guest. The internal processing of this, however, does not
include zapping the previous type of the page being transferred. This
makes it possible for a PV guest to transfer a page previously used as
part of a segment descriptor table to another guest while retaining the
"contains segment descriptors" property.
If the destination guest is a PV one of different bitness, it may gain
access to segment descriptors it is not normally allowed to have, like
64-bit code segments in a 32-bit PV guest.
If the destination guest is a HVM one, that guest may freely alter the
page contents and then hand the page back to the same or another PV
In either case, if the destination PV guest then inserts that page into
one of its own descriptor tables, the page still having the designated
type results in validation of its contents being skipped.
A malicious pair of guests may be able to access all of system memory,
allowing for all of privilege escalation, host crashes, and information
All Xen versions are vulnerable.
Only x86 systems are affected. ARM systems are not vulnerable.
Running only one out of the three relevant classes of guest (namely:
32-bit PV; 64-bit PV; HVM) on any given host will avoid the
vulnerability. (Note that this must also include any nonprivileged
service domains such as stub device model domains.)
The vulnerability can also be avoided if all guest kernels are
controlled by the host rather than guest administrator, provided that
further steps are taken to prevent the guest administrator from loading
code into the kernel (e.g. by disabling loadable modules etc) or from
using other mechanisms which allow them to run code at kernel privilege.
Name: the Xen project
Upstream: Jann Horn (Google)
Created xen tracking bugs for this issue:
Affects: fedora-all [bug 1447345]