* [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_regs'
@ 2012-09-11 14:31 Fengguang Wu
2012-09-12 5:58 ` [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_r Amos Kong
0 siblings, 1 reply; 4+ messages in thread
From: Fengguang Wu @ 2012-09-11 14:31 UTC (permalink / raw)
To: Avi Kivity; +Cc: kernel-janitors, kvm
Hi Avi,
In the kvm/next branch, sparse warns about
arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_regs' 9 <= 15
This is because the array definition is ctxt._regs[NR_VCPU_REGS] where
NR_VCPU_REGS=9 for i386 and 17 for x86_64.
It could be fixed by changing the hard coded 16 to (NR_VCPU_REGS-1).
And I wonder whether you actually want NR_VCPU_REGS here?
Thanks,
Fengguang
---
--- linux-next.orig/arch/x86/kvm/emulate.c 2012-09-11 20:14:00.537475301 +0800
+++ linux-next/arch/x86/kvm/emulate.c 2012-09-11 22:21:57.569227558 +0800
@@ -228,7 +228,7 @@ static void writeback_registers(struct x
{
unsigned reg;
- for_each_set_bit(reg, (ulong *)&ctxt->regs_dirty, 16)
+ for_each_set_bit(reg, (ulong *)&ctxt->regs_dirty, NR_VCPU_REGS)
ctxt->ops->write_gpr(ctxt, reg, ctxt->_regs[reg]);
}
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_r 2012-09-11 14:31 [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_regs' Fengguang Wu @ 2012-09-12 5:58 ` Amos Kong 2012-09-12 6:07 ` Fengguang Wu 0 siblings, 1 reply; 4+ messages in thread From: Amos Kong @ 2012-09-12 5:58 UTC (permalink / raw) To: Fengguang Wu; +Cc: Avi Kivity, kernel-janitors, kvm On 11/09/12 22:31, Fengguang Wu wrote: > Hi Avi, > > In the kvm/next branch, sparse warns about > > arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_regs' 9 <= 15 > > This is because the array definition is ctxt._regs[NR_VCPU_REGS] where > NR_VCPU_REGS=9 for i386 and 17 for x86_64. > > It could be fixed by changing the hard coded 16 to (NR_VCPU_REGS-1). Hi Fengguang, You replaced 16 to NR_VCPU_REGS in your patch, not (NR_VCPU_REGS-1). I guess it's a mistake in your commitlog, right? > And I wonder whether you actually want NR_VCPU_REGS here? > > Thanks, > Fengguang > --- > --- linux-next.orig/arch/x86/kvm/emulate.c 2012-09-11 20:14:00.537475301 +0800 > +++ linux-next/arch/x86/kvm/emulate.c 2012-09-11 22:21:57.569227558 +0800 > @@ -228,7 +228,7 @@ static void writeback_registers(struct x > { > unsigned reg; > > - for_each_set_bit(reg, (ulong *)&ctxt->regs_dirty, 16) > + for_each_set_bit(reg, (ulong *)&ctxt->regs_dirty, NR_VCPU_REGS) > ctxt->ops->write_gpr(ctxt, reg, ctxt->_regs[reg]); > } > -- Amos. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_r 2012-09-12 5:58 ` [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_r Amos Kong @ 2012-09-12 6:07 ` Fengguang Wu 2012-09-12 7:37 ` Avi Kivity 0 siblings, 1 reply; 4+ messages in thread From: Fengguang Wu @ 2012-09-12 6:07 UTC (permalink / raw) To: Amos Kong; +Cc: Avi Kivity, kernel-janitors, kvm On Wed, Sep 12, 2012 at 01:58:22PM +0800, Amos Kong wrote: > On 11/09/12 22:31, Fengguang Wu wrote: > >Hi Avi, > > > >In the kvm/next branch, sparse warns about > > > >arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_regs' 9 <= 15 > > > >This is because the array definition is ctxt._regs[NR_VCPU_REGS] where > >NR_VCPU_REGS=9 for i386 and 17 for x86_64. > > > >It could be fixed by changing the hard coded 16 to (NR_VCPU_REGS-1). > > Hi Fengguang, > > You replaced 16 to NR_VCPU_REGS in your patch, not (NR_VCPU_REGS-1). > I guess it's a mistake in your commitlog, right? 16 = (NR_VCPU_REGS-1). So I mean, if replacing 16 with (NR_VCPU_REGS-1), there will be no behavior change for the x86_64 case. However I *suspect* the right value is (NR_VCPU_REGS), as I said in the below sentence. > >And I wonder whether you actually want NR_VCPU_REGS here? For your convenience, here is the relevant code for NR_VCPU_REGS: enum kvm_reg { VCPU_REGS_RAX = 0, VCPU_REGS_RCX = 1, VCPU_REGS_RDX = 2, VCPU_REGS_RBX = 3, VCPU_REGS_RSP = 4, VCPU_REGS_RBP = 5, VCPU_REGS_RSI = 6, VCPU_REGS_RDI = 7, #ifdef CONFIG_X86_64 VCPU_REGS_R8 = 8, VCPU_REGS_R9 = 9, VCPU_REGS_R10 = 10, VCPU_REGS_R11 = 11, VCPU_REGS_R12 = 12, VCPU_REGS_R13 = 13, VCPU_REGS_R14 = 14, VCPU_REGS_R15 = 15, #endif VCPU_REGS_RIP, => NR_VCPU_REGS }; Thanks, Fengguang > >--- linux-next.orig/arch/x86/kvm/emulate.c 2012-09-11 20:14:00.537475301 +0800 > >+++ linux-next/arch/x86/kvm/emulate.c 2012-09-11 22:21:57.569227558 +0800 > >@@ -228,7 +228,7 @@ static void writeback_registers(struct x > > { > > unsigned reg; > > > >- for_each_set_bit(reg, (ulong *)&ctxt->regs_dirty, 16) > >+ for_each_set_bit(reg, (ulong *)&ctxt->regs_dirty, NR_VCPU_REGS) > > > > ctxt->ops->write_gpr(ctxt, reg, ctxt->_regs[reg]); > > } > > > > > -- > Amos. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_r 2012-09-12 6:07 ` Fengguang Wu @ 2012-09-12 7:37 ` Avi Kivity 0 siblings, 0 replies; 4+ messages in thread From: Avi Kivity @ 2012-09-12 7:37 UTC (permalink / raw) To: Fengguang Wu; +Cc: Amos Kong, kernel-janitors, kvm On 09/12/2012 09:07 AM, Fengguang Wu wrote: > On Wed, Sep 12, 2012 at 01:58:22PM +0800, Amos Kong wrote: >> On 11/09/12 22:31, Fengguang Wu wrote: >> >Hi Avi, >> > >> >In the kvm/next branch, sparse warns about >> > >> >arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_regs' 9 <= 15 >> > >> >This is because the array definition is ctxt._regs[NR_VCPU_REGS] where >> >NR_VCPU_REGS=9 for i386 and 17 for x86_64. >> > >> >It could be fixed by changing the hard coded 16 to (NR_VCPU_REGS-1). >> >> Hi Fengguang, >> >> You replaced 16 to NR_VCPU_REGS in your patch, not (NR_VCPU_REGS-1). >> I guess it's a mistake in your commitlog, right? > > 16 = (NR_VCPU_REGS-1). So I mean, if replacing 16 with (NR_VCPU_REGS-1), > there will be no behavior change for the x86_64 case. However I > *suspect* the right value is (NR_VCPU_REGS), as I said in the below > sentence. > >> >And I wonder whether you actually want NR_VCPU_REGS here? > > For your convenience, here is the relevant code for NR_VCPU_REGS: > > enum kvm_reg { > VCPU_REGS_RAX = 0, > VCPU_REGS_RCX = 1, > VCPU_REGS_RDX = 2, > VCPU_REGS_RBX = 3, > VCPU_REGS_RSP = 4, > VCPU_REGS_RBP = 5, > VCPU_REGS_RSI = 6, > VCPU_REGS_RDI = 7, > #ifdef CONFIG_X86_64 > VCPU_REGS_R8 = 8, > VCPU_REGS_R9 = 9, > VCPU_REGS_R10 = 10, > VCPU_REGS_R11 = 11, > VCPU_REGS_R12 = 12, > VCPU_REGS_R13 = 13, > VCPU_REGS_R14 = 14, > VCPU_REGS_R15 = 15, > #endif > VCPU_REGS_RIP, > => NR_VCPU_REGS > }; The right value is NR-1, since the loop excludes RIP. Note the warning does not point to an actual error, since the high bits of regs_dirty will be clear on i386. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-09-12 7:37 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-09-11 14:31 [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_regs' Fengguang Wu 2012-09-12 5:58 ` [kvm:next 1/1] arch/x86/kvm/emulate.c:232 writeback_registers() error: buffer overflow 'ctxt->_r Amos Kong 2012-09-12 6:07 ` Fengguang Wu 2012-09-12 7:37 ` Avi Kivity
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox