|  |  | 
  
    |  |  | 
 
  |   |  | 
  
    |  |  | 
  
    |  |  | 
  
    |   xen-devel
[Xen-devel] [patch] xen: off by one errors in multicalls.c 
| To: | Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx> |  
| Subject: | [Xen-devel] [patch] xen: off by one errors in multicalls.c |  
| From: | Dan Carpenter <error27@xxxxxxxxx> |  
| Date: | Fri, 3 Jun 2011 07:45:28 +0300 |  
| Cc: | "open list:XEN HYPERVISOR IN..." <xen-devel@xxxxxxxxxxxxxxxxxxx>,	Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>,	"maintainer:X86 ARCHITECTURE..." <x86@xxxxxxxxxx>,	kernel-janitors@xxxxxxxxxxxxxxx, "open list:XEN HYPERVISOR IN..."	<virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx>,	Ingo Molnar <mingo@xxxxxxxxxx>, "H. Peter Anvin" <hpa@xxxxxxxxx>,	Thomas Gleixner <tglx@xxxxxxxxxxxxx> |  
| Delivery-date: | Thu, 02 Jun 2011 21:46:41 -0700 |  
| Dkim-signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;	h=domainkey-signature:date:from:to:cc:subject:message-id:mime-version	:content-type:content-disposition:user-agent;	bh=9JMh+tSEw02Yvlvf0t/2fzUMHLQorBBBk8tqtCnVcwA=;	b=Uopc6U4/3VtLGi1UmH1shwgkK+seDku1pztv64k/fYBANdx+k5Zf3Byt3zfke5RKd3	HRavwScOasV4EXBmJ2ZncCXqUAOmvCj0mIAug/naPLQKPXiAOln6fJhxLUaAcjOJO4ey	/fD8KGwlWPbIPkmTyFhtzyA68sE/fgm/DmsCg= |  
| Domainkey-signature: | a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;	h=date:from:to:cc:subject:message-id:mime-version:content-type	:content-disposition:user-agent;	b=ehPEiPzh6BwpjmMbigKEmpSh0lS6kjsYlE+FXtxkN098g1Dp/mMUI6BiQMh6Do+eaw	O2y5eGod0D11RIVEMkV8l5RVRy105G5byDRlSZuXOhzpjfz71P0UEJ74fxljjy+UJU52	PGBjSS89IsNcnKpdvR0aRQO5MTbi2e/U4fFpU= |  
| Envelope-to: | www-data@xxxxxxxxxxxxxxxxxxx |  
| List-help: | <mailto:xen-devel-request@lists.xensource.com?subject=help> |  
| List-id: | Xen developer discussion <xen-devel.lists.xensource.com> |  
| List-post: | <mailto:xen-devel@lists.xensource.com> |  
| List-subscribe: | <http://lists.xensource.com/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=subscribe> |  
| List-unsubscribe: | <http://lists.xensource.com/mailman/listinfo/xen-devel>,	<mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe> |  
| Sender: | xen-devel-bounces@xxxxxxxxxxxxxxxxxxx |  
| User-agent: | Mutt/1.5.21 (2010-09-15) |  
| b->args[] has MC_ARGS elements, so the comparison here should be
">=" instead of ">".  Otherwise we read past the end of the array
one space.
Signed-off-by: Dan Carpenter <error27@xxxxxxxxx>
---
This is a static checker patch and I haven't tested it.  Please
review carefully.
diff --git a/arch/x86/xen/multicalls.c b/arch/x86/xen/multicalls.c
index 8bff7e7..1b2b73f 100644
--- a/arch/x86/xen/multicalls.c
+++ b/arch/x86/xen/multicalls.c
@@ -189,10 +189,10 @@ struct multicall_space __xen_mc_entry(size_t args)
        unsigned argidx = roundup(b->argidx, sizeof(u64));
 
        BUG_ON(preemptible());
-       BUG_ON(b->argidx > MC_ARGS);
+       BUG_ON(b->argidx >= MC_ARGS);
 
        if (b->mcidx == MC_BATCH ||
-           (argidx + args) > MC_ARGS) {
+           (argidx + args) >= MC_ARGS) {
                mc_stats_flush(b->mcidx == MC_BATCH ? FL_SLOTS : FL_ARGS);
                xen_mc_flush();
                argidx = roundup(b->argidx, sizeof(u64));
@@ -206,7 +206,7 @@ struct multicall_space __xen_mc_entry(size_t args)
        ret.args = &b->args[argidx];
        b->argidx = argidx + args;
 
-       BUG_ON(b->argidx > MC_ARGS);
+       BUG_ON(b->argidx >= MC_ARGS);
        return ret;
 }
 
@@ -216,7 +216,7 @@ struct multicall_space xen_mc_extend_args(unsigned long op, 
size_t size)
        struct multicall_space ret = { NULL, NULL };
 
        BUG_ON(preemptible());
-       BUG_ON(b->argidx > MC_ARGS);
+       BUG_ON(b->argidx >= MC_ARGS);
 
        if (b->mcidx == 0)
                return ret;
@@ -224,14 +224,14 @@ struct multicall_space xen_mc_extend_args(unsigned long 
op, size_t size)
        if (b->entries[b->mcidx - 1].op != op)
                return ret;
 
-       if ((b->argidx + size) > MC_ARGS)
+       if ((b->argidx + size) >= MC_ARGS)
                return ret;
 
        ret.mc = &b->entries[b->mcidx - 1];
        ret.args = &b->args[b->argidx];
        b->argidx += size;
 
-       BUG_ON(b->argidx > MC_ARGS);
+       BUG_ON(b->argidx >= MC_ARGS);
        return ret;
 }
 
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 | 
 
| <Prev in Thread] | Current Thread | [Next in Thread> |  | 
[Xen-devel] [patch] xen: off by one errors in multicalls.c,
Dan Carpenter <=
 |  |  | 
  
    |  |  |