|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH] x86/hvm: Rationalise CS limit handling in arch_set_info_hvm_guest()
Ever since it's introduction in commit 192df6f9122d ("x86: allow HVM guests to
use hypercalls to bring up vCPUs"), %cs.g/limit has been handled differently
to all other segments.
The hypercall takes full 32bit, and hvm_set_segment_register() fixes up all
segments .g to match the limit being 2^20 or more. Therefore, treating %cs
only as having architectural (20-bit) limit field is weird and unexpected.
Remove the custom handling for %cs. This is a guest ABI change, but all
callers are expected to be setting up flat segmentation, at which point limit
will be ~0U and there will be no change in practice whether .g is set or not.
Reported-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Slightly RFC as this is an ABI change, but I don't anticipate any breakge from
this change.
---
xen/arch/x86/hvm/domain.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/xen/arch/x86/hvm/domain.c b/xen/arch/x86/hvm/domain.c
index 048f29ae4911..4e9aaca39fe6 100644
--- a/xen/arch/x86/hvm/domain.c
+++ b/xen/arch/x86/hvm/domain.c
@@ -120,7 +120,6 @@ int arch_set_info_hvm_guest(struct vcpu *v, const struct
vcpu_hvm_context *ctx)
case VCPU_HVM_MODE_32B:
{
const struct vcpu_hvm_x86_32 *regs = &ctx->cpu_regs.x86_32;
- uint32_t limit;
if ( ctx->cpu_regs.x86_32.pad1 != 0 ||
ctx->cpu_regs.x86_32.pad2[0] != 0 ||
@@ -147,13 +146,10 @@ int arch_set_info_hvm_guest(struct vcpu *v, const struct
vcpu_hvm_context *ctx)
return rc;
/* Basic sanity checks. */
- limit = cs.limit;
- if ( cs.g )
- limit = (limit << 12) | 0xfff;
- if ( regs->eip > limit )
+ if ( regs->eip > cs.limit )
{
gprintk(XENLOG_ERR, "EIP (%#08x) outside CS limit (%#08x)\n",
- regs->eip, limit);
+ regs->eip, cs.limit);
return -EINVAL;
}
base-commit: 3999ff0d307a9a901ad1b5ad56e0dde657fec558
--
2.39.5
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |