struct vcpu *pt_vcpu, struct domain *pg_dom)
{
bool preserve_ad = (cmd == MMU_PT_UPDATE_PRESERVE_AD);
- l1_pgentry_t ol1e;
+ l1_pgentry_t ol1e = l1e_read_atomic(pl1e);
struct domain *pt_dom = pt_vcpu->domain;
int rc = 0;
- if ( unlikely(__copy_from_user(&ol1e, pl1e, sizeof(ol1e)) != 0) )
- return -EFAULT;
-
ASSERT(!paging_mode_refcounts(pt_dom));
if ( l1e_get_flags(nl1e) & _PAGE_PRESENT )
return -EPERM;
}
- if ( unlikely(__copy_from_user(&ol2e, pl2e, sizeof(ol2e)) != 0) )
- return -EFAULT;
+ ol2e = l2e_read_atomic(pl2e);
if ( l2e_get_flags(nl2e) & _PAGE_PRESENT )
{
if ( is_pv_32bit_domain(d) && (pgentry_ptr_to_slot(pl3e) >= 3) )
return -EINVAL;
- if ( unlikely(__copy_from_user(&ol3e, pl3e, sizeof(ol3e)) != 0) )
- return -EFAULT;
+ ol3e = l3e_read_atomic(pl3e);
if ( l3e_get_flags(nl3e) & _PAGE_PRESENT )
{
return -EINVAL;
}
- if ( unlikely(__copy_from_user(&ol4e, pl4e, sizeof(ol4e)) != 0) )
- return -EFAULT;
+ ol4e = l4e_read_atomic(pl4e);
if ( l4e_get_flags(nl4e) & _PAGE_PRESENT )
{