diff -r c69ef56d8afc xen/arch/x86/mm/p2m-pt.c --- a/xen/arch/x86/mm/p2m-pt.c Tue Jul 03 11:44:28 2012 +0200 +++ b/xen/arch/x86/mm/p2m-pt.c Fri Jul 13 15:33:58 2012 +0200 @@ -79,8 +79,8 @@ static unsigned long p2m_type_to_flags(p BUG_ON(t > p2m_populate_on_demand); #endif - switch(t) - { + /* Apply type permissions */ + switch (t) { case p2m_invalid: case p2m_mmio_dm: case p2m_populate_on_demand: @@ -89,14 +89,16 @@ static unsigned long p2m_type_to_flags(p case p2m_ram_paging_in: default: return flags; + case p2m_grant_map_ro: + return flags | P2M_BASE_FLAGS | _PAGE_NX_BIT; case p2m_ram_ro: - case p2m_grant_map_ro: case p2m_ram_logdirty: case p2m_ram_shared: return flags | P2M_BASE_FLAGS; case p2m_ram_rw: + return flags | P2M_BASE_FLAGS | _PAGE_RW; case p2m_grant_map_rw: - return flags | P2M_BASE_FLAGS | _PAGE_RW; + return flags | P2M_BASE_FLAGS | _PAGE_RW | _PAGE_NX_BIT; case p2m_mmio_direct: if ( !rangeset_contains_singleton(mmio_ro_ranges, mfn_x(mfn)) ) flags |= _PAGE_RW;