if (is_guest_mode(vcpu))
                eb |= get_vmcs12(vcpu)->exception_bitmap;
         else {
-               /*
-                * If EPT is enabled, #PF is only trapped if MAXPHYADDR is mismatched
-                * between guest and host.  In that case we only care about present
-                * faults.  For vmcs02, however, PFEC_MASK and PFEC_MATCH are set in
-                * prepare_vmcs02_rare.
-                */
-               bool selective_pf_trap = enable_ept && (eb & (1u << PF_VECTOR));
-               int mask = selective_pf_trap ? PFERR_PRESENT_MASK : 0;
+               int mask = 0, match = 0;
+
+               if (enable_ept && (eb & (1u << PF_VECTOR))) {
+                       /*
+                        * If EPT is enabled, #PF is currently only intercepted
+                        * if MAXPHYADDR is smaller on the guest than on the
+                        * host.  In that case we only care about present,
+                        * non-reserved faults.  For vmcs02, however, PFEC_MASK
+                        * and PFEC_MATCH are set in prepare_vmcs02_rare.
+                        */
+                       mask = PFERR_PRESENT_MASK | PFERR_RSVD_MASK;
+                       match = PFERR_PRESENT_MASK;
+               }
                vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, mask);
-               vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, mask);
+               vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, match);
        }
 
        vmcs_write32(EXCEPTION_BITMAP, eb);