x86: introduce x86_seg_sys

To represent the USER-MSR bitmap access, a new segment type needs
introducing, behaving like x86_seg_none in terms of address treatment,
but behaving like a system segment for page walk purposes (implicit
supervisor-mode access).

While there also add x86_seg_none handling to the test harness'es
read() hook, as will be needed for MSR-LIST support.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
Jan Beulich committed 2024-09-30 10:05:25 +02:00
1 parent 457052167b
commit 34d4227e6a
5 files changed
+7 -3

No files matched your search

@@ -593,6 +593,8 @@ static int read(
default:
if ( !is_x86_user_segment(seg) )
return X86EMUL_UNHANDLEABLE;
case x86_seg_sys:
case x86_seg_none:
bytes_read += bytes;
break;
}
+1 -1
View File
@@ -840,7 +840,7 @@ static int hvmemul_virtual_to_linear(
int okay;
unsigned long reps = 1;
if ( seg == x86_seg_none )
if ( seg == x86_seg_none || seg == x86_seg_sys )
{
*linear = offset;
return X86EMUL_OKAY;
+1 -1
View File
@@ -2599,7 +2599,7 @@ bool hvm_vcpu_virtual_to_linear(
* It is expected that the access rights of reg are suitable for seg (and
* that this is enforced at the point that seg is loaded).
*/
ASSERT(seg < x86_seg_none);
ASSERT(seg < x86_seg_sys);
/* However, check that insn fetches only ever specify CS. */
ASSERT(access_type != hvm_access_insn_fetch || seg == x86_seg_cs);
+1
View File
@@ -749,6 +749,7 @@ static void cf_check svm_set_segment_register(
vmcb->ldtr = *reg;
break;
case x86_seg_sys:
case x86_seg_none:
ASSERT_UNREACHABLE();
break;
+2 -1
View File
@@ -43,7 +43,8 @@ enum x86_segment {
x86_seg_ldtr,
x86_seg_gdtr,
x86_seg_idtr,
/* No Segment: For accesses which are already linear. */
/* No Segment: For (system/normal) accesses which are already linear. */
x86_seg_sys,
x86_seg_none
};
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.