restore p2m_access_t enum order to allow bitmask semantics

Nested hap code assumed implict bitmask semantics of the p2m_access_t
enum prior to C/S 4c63692d7c

The change to the enum ordering broke this assumption and caused functional
problems for the nested hap code. As it may be error prone to audit and find
all other p2m_access users assuming bitmask semantics, instead restore the
previous enum order and make it explict that bitmask semantics are to be
preserved for the read, write and execute access types.

Signed-off-by: Malcolm Crossley <malcolm.crossley@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
Malcolm Crossley authored and Jan Beulich committed 2016-03-15 12:17:52 +01:00
1 parent c2b9b97775
commit 61a5cfe15d
2 files changed
+10 -9

No files matched your search

+1 -1
View File
@@ -263,7 +263,7 @@ nestedhvm_hap_nested_page_fault(struct vcpu *v, paddr_t *L2_gpa,
switch ( p2ma_10 )
{
case p2m_access_rwx ... p2m_access_n:
case p2m_access_n ... p2m_access_rwx:
break;
case p2m_access_rx2rw:
p2ma_10 = p2m_access_rx;
+9 -8
View File
@@ -15,14 +15,15 @@
* default.
*/
typedef enum {
p2m_access_rwx = 0, /* The default access type when not used. */
p2m_access_wx = 1,
p2m_access_rx = 2,
p2m_access_x = 3,
p2m_access_rw = 4,
p2m_access_w = 5,
p2m_access_r = 6,
p2m_access_n = 7, /* No access allowed. */
/* Code uses bottom three bits with bitmask semantics */
p2m_access_n = 0, /* No access allowed. */
p2m_access_r = 1 << 0,
p2m_access_w = 1 << 1,
p2m_access_x = 1 << 2,
p2m_access_rw = p2m_access_r | p2m_access_w,
p2m_access_rx = p2m_access_r | p2m_access_x,
p2m_access_wx = p2m_access_w | p2m_access_x,
p2m_access_rwx = p2m_access_r | p2m_access_w | p2m_access_x,
p2m_access_rx2rw = 8, /* Special: page goes from RX to RW on write */
p2m_access_n2rwx = 9, /* Special: page goes from N to RWX on access, *
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.