mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86: remove IS_PRIV access check bypasses
Several domctl functions dealing with rangesets contain a short-circuit bypass if the domain is privileged. Since the construction of domain 0 permits access to all I/O ranges, the call to irq_access_permitted will normally return true even without the IS_PRIV check, and the presence of the IS_PRIV check prevents the creation of a privileged domain without access to specific devices or IO memory ranges. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
This commit is contained in:
1 parent
d8b5421f45
commit
764012376a
2 files changed
+3
-6
No files matched your search
@@ -645,8 +645,7 @@ long arch_do_domctl(
|
||||
break;
|
||||
|
||||
ret = -EPERM;
|
||||
if ( !IS_PRIV(current->domain) &&
|
||||
!iomem_access_permitted(current->domain, mfn, mfn + nr_mfns - 1) )
|
||||
if ( !iomem_access_permitted(current->domain, mfn, mfn + nr_mfns - 1) )
|
||||
break;
|
||||
|
||||
ret = xsm_iomem_mapping(XSM_HOOK, d, mfn, mfn + nr_mfns - 1, add);
|
||||
@@ -723,8 +722,7 @@ long arch_do_domctl(
|
||||
}
|
||||
|
||||
ret = -EPERM;
|
||||
if ( !IS_PRIV(current->domain) &&
|
||||
!ioports_access_permitted(current->domain, fmp, fmp + np - 1) )
|
||||
if ( !ioports_access_permitted(current->domain, fmp, fmp + np - 1) )
|
||||
break;
|
||||
|
||||
ret = xsm_ioport_mapping(XSM_HOOK, d, fmp, fmp + np - 1, add);
|
||||
|
||||
+1
-2
@@ -1891,8 +1891,7 @@ int map_domain_pirq(
|
||||
|
||||
ASSERT(spin_is_locked(&d->event_lock));
|
||||
|
||||
if ( !IS_PRIV(current->domain) &&
|
||||
!irq_access_permitted(current->domain, irq))
|
||||
if ( !irq_access_permitted(current->domain, irq))
|
||||
return -EPERM;
|
||||
|
||||
if ( pirq < 0 || pirq >= d->nr_pirqs || irq < 0 || irq >= nr_irqs )
|
||||
|
||||