[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 |