In various cases, 256 was being used instead of NR_VECTORS or a derived ARRAY_SIZE() expression. In one case (guest_has_trap_callback()), a wrong (unrelated) constant was used instead of NR_VECTORS. Signed-off-by: Jan Beulich <jbeulich@suse.com> --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -368,8 +368,9 @@ int switch_compat(struct domain *d) static inline bool_t standalone_trap_ctxt(struct vcpu *v) { - BUILD_BUG_ON(256 * sizeof(*v->arch.pv_vcpu.trap_ctxt) > PAGE_SIZE); - return 256 * sizeof(*v->arch.pv_vcpu.trap_ctxt) + sizeof(*v) > PAGE_SIZE; + BUILD_BUG_ON(NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt) > PAGE_SIZE); + return NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt) + sizeof(*v) + > PAGE_SIZE; } int vcpu_initialise(struct vcpu *v) @@ -426,7 +427,7 @@ int vcpu_initialise(struct vcpu *v) } else v->arch.pv_vcpu.trap_ctxt = (void *)v + PAGE_SIZE - - 256 * sizeof(*v->arch.pv_vcpu.trap_ctxt); + NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt); /* PV guests by default have a 100Hz ticker. */ v->periodic_period = MILLISECS(10); @@ -701,7 +702,7 @@ int arch_set_info_guest( fixup_guest_stack_selector(d, c.nat->kernel_ss); fixup_guest_code_selector(d, c.nat->user_regs.cs); - for ( i = 0; i < 256; i++ ) + for ( i = 0; i < ARRAY_SIZE(c.nat->trap_ctxt); i++ ) { if ( !is_canonical_address(c.nat->trap_ctxt[i].address) ) return -EINVAL; @@ -724,7 +725,7 @@ int arch_set_info_guest( fixup_guest_code_selector(d, c.cmp->event_callback_cs); fixup_guest_code_selector(d, c.cmp->failsafe_callback_cs); - for ( i = 0; i < 256; i++ ) + for ( i = 0; i < ARRAY_SIZE(c.cmp->trap_ctxt); i++ ) fixup_guest_code_selector(d, c.cmp->trap_ctxt[i].cs); /* LDT safety checks. */ --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -3542,7 +3542,7 @@ int guest_has_trap_callback(struct domai BUG_ON(vcpuid >= d->max_vcpus); /* Sanity check - XXX should be more fine grained. */ - BUG_ON(trap_nr > TRAP_syscall); + BUG_ON(trap_nr >= NR_VECTORS); v = d->vcpu[vcpuid]; t = &v->arch.pv_vcpu.trap_ctxt[trap_nr]; @@ -3610,7 +3610,7 @@ long do_set_trap_table(XEN_GUEST_HANDLE( /* If no table is presented then clear the entire virtual IDT. */ if ( guest_handle_is_null(traps) ) { - memset(dst, 0, 256 * sizeof(*dst)); + memset(dst, 0, NR_VECTORS * sizeof(*dst)); init_int80_direct_trap(curr); return 0; } --- a/xen/arch/x86/x86_64/compat/traps.c +++ b/xen/arch/x86/x86_64/compat/traps.c @@ -317,7 +317,7 @@ int compat_set_trap_table(XEN_GUEST_HAND /* If no table is presented then clear the entire virtual IDT. */ if ( guest_handle_is_null(traps) ) { - memset(dst, 0, 256 * sizeof(*dst)); + memset(dst, 0, NR_VECTORS * sizeof(*dst)); return 0; } _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
In various cases, 256 was being used instead of NR_VECTORS or a derived ARRAY_SIZE() expression. In one case (guest_has_trap_callback()), a wrong (unrelated) constant was used instead of NR_VECTORS. Signed-off-by: Jan Beulich <jbeulich@suse.com> --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -374,8 +374,9 @@ int switch_compat(struct domain *d) static inline bool_t standalone_trap_ctxt(struct vcpu *v) { - BUILD_BUG_ON(256 * sizeof(*v->arch.pv_vcpu.trap_ctxt) > PAGE_SIZE); - return 256 * sizeof(*v->arch.pv_vcpu.trap_ctxt) + sizeof(*v) > PAGE_SIZE; + BUILD_BUG_ON(NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt) > PAGE_SIZE); + return NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt) + sizeof(*v) + > PAGE_SIZE; } int vcpu_initialise(struct vcpu *v) @@ -432,7 +433,7 @@ int vcpu_initialise(struct vcpu *v) } else v->arch.pv_vcpu.trap_ctxt = (void *)v + PAGE_SIZE - - 256 * sizeof(*v->arch.pv_vcpu.trap_ctxt); + NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt); /* PV guests by default have a 100Hz ticker. */ v->periodic_period = MILLISECS(10); @@ -702,7 +703,7 @@ int arch_set_info_guest( fixup_guest_stack_selector(d, c.nat->kernel_ss); fixup_guest_code_selector(d, c.nat->user_regs.cs); - for ( i = 0; i < 256; i++ ) + for ( i = 0; i < ARRAY_SIZE(c.nat->trap_ctxt); i++ ) { if ( !is_canonical_address(c.nat->trap_ctxt[i].address) ) return -EINVAL; @@ -725,7 +726,7 @@ int arch_set_info_guest( fixup_guest_code_selector(d, c.cmp->event_callback_cs); fixup_guest_code_selector(d, c.cmp->failsafe_callback_cs); - for ( i = 0; i < 256; i++ ) + for ( i = 0; i < ARRAY_SIZE(c.cmp->trap_ctxt); i++ ) fixup_guest_code_selector(d, c.cmp->trap_ctxt[i].cs); /* LDT safety checks. */ --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -3506,7 +3506,7 @@ int guest_has_trap_callback(struct domai BUG_ON(vcpuid >= d->max_vcpus); /* Sanity check - XXX should be more fine grained. */ - BUG_ON(trap_nr > TRAP_syscall); + BUG_ON(trap_nr >= NR_VECTORS); v = d->vcpu[vcpuid]; t = &v->arch.pv_vcpu.trap_ctxt[trap_nr]; @@ -3574,7 +3574,7 @@ long do_set_trap_table(XEN_GUEST_HANDLE( /* If no table is presented then clear the entire virtual IDT. */ if ( guest_handle_is_null(traps) ) { - memset(dst, 0, 256 * sizeof(*dst)); + memset(dst, 0, NR_VECTORS * sizeof(*dst)); init_int80_direct_trap(curr); return 0; } --- a/xen/arch/x86/x86_64/compat/traps.c +++ b/xen/arch/x86/x86_64/compat/traps.c @@ -317,7 +317,7 @@ int compat_set_trap_table(XEN_GUEST_HAND /* If no table is presented then clear the entire virtual IDT. */ if ( guest_handle_is_null(traps) ) { - memset(dst, 0, 256 * sizeof(*dst)); + memset(dst, 0, NR_VECTORS * sizeof(*dst)); return 0; } _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
On 28/09/2012 09:21, "Jan Beulich" <JBeulich@suse.com> wrote:> In various cases, 256 was being used instead of NR_VECTORS or a derived > ARRAY_SIZE() expression. In one case (guest_has_trap_callback()), a > wrong (unrelated) constant was used instead of NR_VECTORS. > > Signed-off-by: Jan Beulich <jbeulich@suse.com>Acked-by: Keir Fraser <keir@xen.org>> --- a/xen/arch/x86/domain.c > +++ b/xen/arch/x86/domain.c > @@ -374,8 +374,9 @@ int switch_compat(struct domain *d) > > static inline bool_t standalone_trap_ctxt(struct vcpu *v) > { > - BUILD_BUG_ON(256 * sizeof(*v->arch.pv_vcpu.trap_ctxt) > PAGE_SIZE); > - return 256 * sizeof(*v->arch.pv_vcpu.trap_ctxt) + sizeof(*v) > PAGE_SIZE; > + BUILD_BUG_ON(NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt) > > PAGE_SIZE); > + return NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt) + sizeof(*v) > + > PAGE_SIZE; > } > > int vcpu_initialise(struct vcpu *v) > @@ -432,7 +433,7 @@ int vcpu_initialise(struct vcpu *v) > } > else > v->arch.pv_vcpu.trap_ctxt = (void *)v + PAGE_SIZE - > - 256 * sizeof(*v->arch.pv_vcpu.trap_ctxt); > + NR_VECTORS * sizeof(*v->arch.pv_vcpu.trap_ctxt); > > /* PV guests by default have a 100Hz ticker. */ > v->periodic_period = MILLISECS(10); > @@ -702,7 +703,7 @@ int arch_set_info_guest( > fixup_guest_stack_selector(d, c.nat->kernel_ss); > fixup_guest_code_selector(d, c.nat->user_regs.cs); > > - for ( i = 0; i < 256; i++ ) > + for ( i = 0; i < ARRAY_SIZE(c.nat->trap_ctxt); i++ ) > { > if ( !is_canonical_address(c.nat->trap_ctxt[i].address) ) > return -EINVAL; > @@ -725,7 +726,7 @@ int arch_set_info_guest( > fixup_guest_code_selector(d, c.cmp->event_callback_cs); > fixup_guest_code_selector(d, c.cmp->failsafe_callback_cs); > > - for ( i = 0; i < 256; i++ ) > + for ( i = 0; i < ARRAY_SIZE(c.cmp->trap_ctxt); i++ ) > fixup_guest_code_selector(d, c.cmp->trap_ctxt[i].cs); > > /* LDT safety checks. */ > --- a/xen/arch/x86/traps.c > +++ b/xen/arch/x86/traps.c > @@ -3506,7 +3506,7 @@ int guest_has_trap_callback(struct domai > BUG_ON(vcpuid >= d->max_vcpus); > > /* Sanity check - XXX should be more fine grained. */ > - BUG_ON(trap_nr > TRAP_syscall); > + BUG_ON(trap_nr >= NR_VECTORS); > > v = d->vcpu[vcpuid]; > t = &v->arch.pv_vcpu.trap_ctxt[trap_nr]; > @@ -3574,7 +3574,7 @@ long do_set_trap_table(XEN_GUEST_HANDLE( > /* If no table is presented then clear the entire virtual IDT. */ > if ( guest_handle_is_null(traps) ) > { > - memset(dst, 0, 256 * sizeof(*dst)); > + memset(dst, 0, NR_VECTORS * sizeof(*dst)); > init_int80_direct_trap(curr); > return 0; > } > --- a/xen/arch/x86/x86_64/compat/traps.c > +++ b/xen/arch/x86/x86_64/compat/traps.c > @@ -317,7 +317,7 @@ int compat_set_trap_table(XEN_GUEST_HAND > /* If no table is presented then clear the entire virtual IDT. */ > if ( guest_handle_is_null(traps) ) > { > - memset(dst, 0, 256 * sizeof(*dst)); > + memset(dst, 0, NR_VECTORS * sizeof(*dst)); > return 0; > } > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel