aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Durrant <paul.durrant@citrix.com>2011-12-18 14:51:04 +0000
committerPaul Durrant <paul.durrant@citrix.com>2011-12-18 14:51:04 +0000
commitc76a11f540161c49347c381bb28f1d28a2062d97 (patch)
tree373edc53f7f097fded2b6a503d6407a5549d6db0
parent66674eaaf1ef0c6ad273b11638c101829c31dd4d (diff)
downloadxen-c76a11f540161c49347c381bb28f1d28a2062d97.tar.gz
xen-c76a11f540161c49347c381bb28f1d28a2062d97.tar.bz2
xen-c76a11f540161c49347c381bb28f1d28a2062d97.zip
Allow VMs to query their own grant table version.
Signed-off-by: Paul Durrant <paul.durrant@citrix.com> Committed-by: Keir Fraser <keir@xen.org> xen-unstable changeset: 24427:931bf1105730 xen-unstable date: Sun Dec 18 14:38:32 2011 +0000
-rw-r--r--xen/arch/x86/hvm/hvm.c1
-rw-r--r--xen/common/grant_table.c14
2 files changed, 7 insertions, 8 deletions
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index e089365964..640969b7d1 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -2181,6 +2181,7 @@ static int grant_table_op_is_allowed(unsigned int cmd)
case GNTTABOP_query_size:
case GNTTABOP_setup_table:
case GNTTABOP_set_version:
+ case GNTTABOP_get_version:
case GNTTABOP_copy:
case GNTTABOP_map_grant_ref:
case GNTTABOP_unmap_grant_ref:
diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c
index 8de1af9085..87aff17ac7 100644
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -2199,17 +2199,15 @@ gnttab_get_version(XEN_GUEST_HANDLE(gnttab_get_version_t uop))
{
gnttab_get_version_t op;
struct domain *d;
+ int rc;
if ( copy_from_guest(&op, uop, 1) )
return -EFAULT;
- d = rcu_lock_domain_by_id(op.dom);
- if ( d == NULL )
- return -ESRCH;
- if ( !IS_PRIV_FOR(current->domain, d) )
- {
- rcu_unlock_domain(d);
- return -EPERM;
- }
+
+ rc = rcu_lock_target_domain_by_id(op.dom, &d);
+ if ( rc < 0 )
+ return rc;
+
spin_lock(&d->grant_table->lock);
op.version = d->grant_table->gt_version;
spin_unlock(&d->grant_table->lock);