lkml.org 
[lkml]   [2009]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRE: [PATCH] gpio: Fix test on unsigned in lnw_irq_type()


    >-----Original Message-----
    >From: Roel Kluin [mailto:roel.kluin@gmail.com]
    >Sent: Thursday, October 15, 2009 1:17 AM
    >To: Du, Alek; Andrew Morton; LKML
    >Subject: Re: [PATCH] gpio: Fix test on unsigned in lnw_irq_type()
    >
    >The wrong test was used, gpio is unsigned. Also lnw->chip.ngpio is
    >set to 64, so if gpio equals that, then reg (= gpio / 32) becomes 2,
    >an index out of bounds for GRER and GFER that have 2 elements.
    >
    >Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
    >---
    >>>>> From: Andrew Morton [mailto:akpm@linux-foundation.org]
    >>>>>> - if (gpio < 0 || gpio > lnw->chip.ngpio)
    >>>>>> + if (gpio > lnw->chip.ngpio)
    >>>>>> return -EINVAL;
    >>>>>
    >>>>> Should that be >= ?
    >
    >> Oh, my bad. Andrew is right, should be >=...
    >
    >Ok, how about this then?
    >
    >diff --git a/drivers/gpio/langwell_gpio.c b/drivers/gpio/langwell_gpio.c
    >index 5711ce5..72af3fc 100644
    >--- a/drivers/gpio/langwell_gpio.c
    >+++ b/drivers/gpio/langwell_gpio.c
    >@@ -123,7 +123,7 @@ static int lnw_irq_type(unsigned irq, unsigned type)
    > void __iomem *grer = (void __iomem *)(&lnw->reg_base->GRER[reg]);
    > void __iomem *gfer = (void __iomem *)(&lnw->reg_base->GFER[reg]);
    >
    >- if (gpio < 0 || gpio > lnw->chip.ngpio)
    >+ if (gpio >= lnw->chip.ngpio)
    > return -EINVAL;
    > spin_lock_irqsave(&lnw->lock, flags);
    > if (type & IRQ_TYPE_EDGE_RISING)

    Acked-by: Alek Du <alek.du@intel.com>





    \
     
     \ /
      Last update: 2009-10-15 03:09    [W:0.038 / U:60.516 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site