From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Romanick Subject: Re: [PATCH 12/13] drm/i2c/tda998x: Fix signed overflow issue Date: Mon, 07 Apr 2014 08:31:06 -0700 Message-ID: <5342C4BA.3020606@freedesktop.org> References: <1396691102-22904-1-git-send-email-daniel.vetter@ffwll.ch> <1396691102-22904-14-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from q7.q7.com (q7.q7.com [69.168.48.248]) by gabe.freedesktop.org (Postfix) with ESMTP id 75C726E6DF for ; Mon, 7 Apr 2014 08:33:22 -0700 (PDT) In-Reply-To: <1396691102-22904-14-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , DRI Development Cc: Dave Jones , Russell King List-Id: dri-devel@lists.freedesktop.org On 04/05/2014 02:45 AM, Daniel Vetter wrote: > This is C standard hair-splitting, but afaict > - sum will be promoted to signed int in computation since > uint8_t fits > - signed overflow is undefined. > > No we need to add up an awful lot of bytes to actually make it ^^ Now > overflow. But I guess the real risk is gcc spotting this and going > bananas. Fix this by simply using unsigned in to force all computations > to use the well-defined unsigned behaviour. Seems reasonable... it also seems impossible (ha!) to break anything. Reviewed-by: Ian Romanick > Spotted by coverity. > > Cc: Russell King > Cc: Rob Clark > Cc: Jean-Francois Moine > Signed-off-by: Daniel Vetter > --- > drivers/gpu/drm/i2c/tda998x_drv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c > index 48af5cac1902..ae2754760d77 100644 > --- a/drivers/gpu/drm/i2c/tda998x_drv.c > +++ b/drivers/gpu/drm/i2c/tda998x_drv.c > @@ -568,7 +568,7 @@ static irqreturn_t tda998x_irq_thread(int irq, void *data) > > static uint8_t tda998x_cksum(uint8_t *buf, size_t bytes) > { > - uint8_t sum = 0; > + unsigned sum = 0; > > while (bytes--) > sum += *buf++; >