tmem: don't access guest memory without using the accessors intended for this
authorJan Beulich <jbeulich@suse.com>
Tue, 11 Sep 2012 12:17:49 +0000 (14:17 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 11 Sep 2012 12:17:49 +0000 (14:17 +0200)
commit09d39e0108811d6bfe1ab7f819b951ea0b1611d7
tree7f49ed16cb84729ab6a78a5491315dcfef0cc59a
parent3fed6db242883d824ab41c00920e0c96c058f3aa
tmem: don't access guest memory without using the accessors intended for this

This is not permitted, not even for buffers coming from Dom0 (and it
would also break the moment Dom0 runs in HVM mode). An implication from
the changes here is that tmh_copy_page() can't be used anymore for
control operations calling tmh_copy_{from,to}_client() (as those pass
the buffer by virtual address rather than MFN).

Note that tmemc_save_get_next_page() previously didn't set the returned
handle's pool_id field, while the new code does. It need to be
confirmed that this is not a problem (otherwise the copy-out operation
will require further tmh_...() abstractions to be added).

Further note that the patch removes (rather than adjusts) an invalid
call to unmap_domain_page() (no matching map_domain_page()) from
tmh_compress_from_client() and adds a missing one to an error return
path in tmh_copy_from_client().

Finally note that the patch adds a previously missing return statement
to cli_get_page() (without which that function could de-reference a
NULL pointer, triggerable from guest mode).

This is part of XSA-15 / CVE-2012-3497.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Dan Magenheimer <dan.magenheimer@oracle.com>
xen/common/tmem.c
xen/common/tmem_xen.c
xen/include/xen/tmem_xen.h