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:
Daniel De Graaf authored and Jan Beulich committed 2013-04-18 17:01:45 +02:00
1 parent d8b5421f45
commit 764012376a
2 files changed
+3 -6

No files matched your search

+2 -4
View File
@@ -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
View File
@@ -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 )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.