lkml.org 
[lkml]   [2017]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 34/94] staging: iio: ade7759: fix signed extension bug on shift of a u8
    3.2.97-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Colin Ian King <colin.king@canonical.com>

    commit 13ffe9a26df4e156363579b25c904dd0b1e31bfb upstream.

    The current shift of st->rx[2] left shifts a u8 24 bits left,
    promotes the integer to a an int and then to a unsigned u64. If
    the top bit of st->rx[2] is set then we end up with all the upper
    bits being set to 1. Fix this by casting st->rx[2] to a u64 before
    the 24 bit left shift.

    Detected by CoverityScan CID#144940 ("Unintended sign extension")

    Fixes: 2919fa54ef64 ("staging: iio: meter: new driver for ADE7759 devices")
    Signed-off-by: Colin Ian King <colin.king@canonical.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/staging/iio/meter/ade7759.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/staging/iio/meter/ade7759.c
    +++ b/drivers/staging/iio/meter/ade7759.c
    @@ -128,7 +128,7 @@ static int ade7759_spi_read_reg_40(struc
    reg_address);
    goto error_ret;
    }
    - *val = ((u64)st->rx[1] << 32) | (st->rx[2] << 24) |
    + *val = ((u64)st->rx[1] << 32) | ((u64)st->rx[2] << 24) |
    (st->rx[3] << 16) | (st->rx[4] << 8) | st->rx[5];

    error_ret:
    \
     
     \ /
      Last update: 2017-12-28 19:15    [W:4.047 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site