[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/traps: fix an off-by-one error
On Tue, 2020-05-05 at 15:38 +0200, Jan Beulich wrote: > On 05.05.2020 13:06, Hongyan Xia wrote: > > --- a/xen/arch/x86/traps.c > > +++ b/xen/arch/x86/traps.c > > @@ -300,6 +300,7 @@ static void show_guest_stack(struct vcpu *v, > > const struct cpu_user_regs *regs) > > int i; > > unsigned long *stack, addr; > > unsigned long mask = STACK_SIZE; > > + void *stack_page = NULL; > > > > /* Avoid HVM as we don't know what the stack looks like. */ > > if ( is_hvm_vcpu(v) ) > > @@ -328,7 +329,7 @@ static void show_guest_stack(struct vcpu *v, > > const struct cpu_user_regs *regs) > > vcpu = maddr_get_owner(read_cr3()) == v->domain ? v : > > NULL; > > if ( !vcpu ) > > { > > - stack = do_page_walk(v, (unsigned long)stack); > > + stack_page = stack = do_page_walk(v, (unsigned > > long)stack); > > if ( (unsigned long)stack < PAGE_SIZE ) > > { > > printk("Inaccessible guest memory.\n"); > > @@ -358,7 +359,7 @@ static void show_guest_stack(struct vcpu *v, > > const struct cpu_user_regs *regs) > > if ( mask == PAGE_SIZE ) > > { > > BUILD_BUG_ON(PAGE_SIZE == STACK_SIZE); > > - unmap_domain_page(stack); > > + unmap_domain_page(stack_page); > > } > > With this I think you want to change the whole construct here to > > if ( stack_page ) > unmap_domain_page(stack_page); > > i.e. with the then no longer relevant BUILD_BUG_ON() also dropped. I wonder if such a construct is better with UNMAP_DOMAIN_PAGE(), since it deals with NULL and will nullify it to prevent misuse. > What's more important though - please also fix the same issue in > compat_show_guest_stack(). Unless I'm mistaken of course, in which > case it would be nice if the description could mention why the > other similar function isn't affected. Compat suffers from the same problem. Thanks for pointing that out. Hongyan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |