mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: Allow a privileged domain to map foreign page from DOMID_XEN
For auto-translated domain, the only way to map a page to itself is the using the foreign map API. The current code does not allow mapping page from special page (such as DOMID_XEN). As xentrace buffers are shared using DOMID_XEN, it is not possible to use tracing for Arm. This could be solved by using the helper get_pg_owner(). This helper will be able to get a reference on DOMID_XEN and therefore allow mapping for privileged domain. This patch replace the call to rcu_lock_domain_by_any_id() with get_pg_owner(). For consistency, all the call to rcu_unlock_domain are replaced by put_pg_owner(). Signed-off-by: Julien grall <julien.grall@arm.com> Reviewed-by: Andrii Anisov <andrii_anisov@epam.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
1 parent
0178f4416c
commit
615897bc6c
1 file changed
+6
-6
+6
-6
@@ -1233,20 +1233,20 @@ int xenmem_add_to_physmap_one(
|
||||
struct domain *od;
|
||||
p2m_type_t p2mt;
|
||||
|
||||
od = rcu_lock_domain_by_any_id(extra.foreign_domid);
|
||||
od = get_pg_owner(extra.foreign_domid);
|
||||
if ( od == NULL )
|
||||
return -ESRCH;
|
||||
|
||||
if ( od == d )
|
||||
{
|
||||
rcu_unlock_domain(od);
|
||||
put_pg_owner(od);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rc = xsm_map_gmfn_foreign(XSM_TARGET, d, od);
|
||||
if ( rc )
|
||||
{
|
||||
rcu_unlock_domain(od);
|
||||
put_pg_owner(od);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1255,7 +1255,7 @@ int xenmem_add_to_physmap_one(
|
||||
page = get_page_from_gfn(od, idx, &p2mt, P2M_ALLOC);
|
||||
if ( !page )
|
||||
{
|
||||
rcu_unlock_domain(od);
|
||||
put_pg_owner(od);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -1264,13 +1264,13 @@ int xenmem_add_to_physmap_one(
|
||||
else
|
||||
{
|
||||
put_page(page);
|
||||
rcu_unlock_domain(od);
|
||||
put_pg_owner(od);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mfn = page_to_mfn(page);
|
||||
|
||||
rcu_unlock_domain(od);
|
||||
put_pg_owner(od);
|
||||
break;
|
||||
}
|
||||
case XENMAPSPACE_dev_mmio:
|
||||
|
||||