lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 048/132] Input: ads7846 - fix integer overflow on Rt calculation
    Date
    From: Oleksij Rempel <o.rempel@pengutronix.de>

    [ Upstream commit 820830ec918f6c3dcd77a54a1c6198ab57407916 ]

    In some rare cases the 32 bit Rt value will overflow if z2 and x is max,
    z1 is minimal value and x_plate_ohms is relatively high (for example 800
    ohm). This would happen on some screen age with low pressure.

    There are two possible fixes:
    - make Rt 64bit
    - reorder calculation to avoid overflow

    The second variant seems to be preferable, since 64 bit calculation on
    32 bit system is a bit more expensive.

    Fixes: ffa458c1bd9b6f653008d450f337602f3d52a646 ("spi: ads7846 driver")
    Co-developed-by: David Jander <david@protonic.nl>
    Signed-off-by: David Jander <david@protonic.nl>
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://lore.kernel.org/r/20201113112240.1360-1-o.rempel@pengutronix.de
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/input/touchscreen/ads7846.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
    index a61b2153ab8c2..b4ded36cc4162 100644
    --- a/drivers/input/touchscreen/ads7846.c
    +++ b/drivers/input/touchscreen/ads7846.c
    @@ -785,10 +785,11 @@ static void ads7846_report_state(struct ads7846 *ts)
    /* compute touch pressure resistance using equation #2 */
    Rt = z2;
    Rt -= z1;
    - Rt *= x;
    Rt *= ts->x_plate_ohms;
    + Rt = DIV_ROUND_CLOSEST(Rt, 16);
    + Rt *= x;
    Rt /= z1;
    - Rt = (Rt + 2047) >> 12;
    + Rt = DIV_ROUND_CLOSEST(Rt, 256);
    } else {
    Rt = 0;
    }
    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 14:10    [W:4.091 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site