diff mbox series

[U-Boot,2/2] mtd: fix Coverity integer handling issue

Message ID 20181118201147.11257-2-miquel.raynal@bootlin.com
State Accepted
Commit 3f3aef4b9dc88278f31567fe6f26095fd9477b1a
Delegated to: Jagannadha Sutradharudu Teki
Headers show
Series [U-Boot,1/2] mtd: fix mtd_oobavail() incoherent returned value | expand

Commit Message

Miquel Raynal Nov. 18, 2018, 8:11 p.m. UTC
A Coverity robot reported an integer handling issue
(OVERFLOW_BEFORE_WIDEN) in the potentially overflowing expression:

    (mtd_div_by_ws(mtd->size, mtd) - mtd_div_by_ws(offs, mtd)) *
    mtd_oobavail(mtd, ops)

While such overflow will certainly never happen due to the numbers
handled, it is cleaner to fix this operation anyway.

The problem is that all the maths include 32-bit quantities, while the
result is stored in an explicit 64-bit value.

As maxooblen will just be compared with a size_t, let's change the
type of the variable to a size_t. This will not fix anything but will
clarify a bit the situation. Then, do an explicit cast to fix Coverity
warning.

Addresses-Coverity-ID: 184180 ("Integer handling issues")
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mtd/mtdcore.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Miquel Raynal Nov. 18, 2018, 8:13 p.m. UTC | #1
Hello,

Miquel Raynal <miquel.raynal@bootlin.com> wrote on Sun, 18 Nov 2018
21:11:47 +0100:

> A Coverity robot reported an integer handling issue
> (OVERFLOW_BEFORE_WIDEN) in the potentially overflowing expression:
> 
>     (mtd_div_by_ws(mtd->size, mtd) - mtd_div_by_ws(offs, mtd)) *
>     mtd_oobavail(mtd, ops)
> 
> While such overflow will certainly never happen due to the numbers
> handled, it is cleaner to fix this operation anyway.
> 
> The problem is that all the maths include 32-bit quantities, while the
> result is stored in an explicit 64-bit value.
> 
> As maxooblen will just be compared with a size_t, let's change the
> type of the variable to a size_t. This will not fix anything but will
> clarify a bit the situation. Then, do an explicit cast to fix Coverity
> warning.
> 
> Addresses-Coverity-ID: 184180 ("Integer handling issues")
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---

I forgot to add the link to the corresponding Travis-CI job:
https://travis-ci.org/miquelraynal/u-boot/builds/456679982

Thanks,
Miquèl
Miquel Raynal April 8, 2019, 9:43 a.m. UTC | #2
Hello,

Miquel Raynal <miquel.raynal@bootlin.com> wrote on Sun, 18 Nov 2018
21:13:47 +0100:

> Hello,
> 
> Miquel Raynal <miquel.raynal@bootlin.com> wrote on Sun, 18 Nov 2018
> 21:11:47 +0100:
> 
> > A Coverity robot reported an integer handling issue
> > (OVERFLOW_BEFORE_WIDEN) in the potentially overflowing expression:
> > 
> >     (mtd_div_by_ws(mtd->size, mtd) - mtd_div_by_ws(offs, mtd)) *
> >     mtd_oobavail(mtd, ops)
> > 
> > While such overflow will certainly never happen due to the numbers
> > handled, it is cleaner to fix this operation anyway.
> > 
> > The problem is that all the maths include 32-bit quantities, while the
> > result is stored in an explicit 64-bit value.
> > 
> > As maxooblen will just be compared with a size_t, let's change the
> > type of the variable to a size_t. This will not fix anything but will
> > clarify a bit the situation. Then, do an explicit cast to fix Coverity
> > warning.
> > 
> > Addresses-Coverity-ID: 184180 ("Integer handling issues")
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---  
> 
> I forgot to add the link to the corresponding Travis-CI job:
> https://travis-ci.org/miquelraynal/u-boot/builds/456679982

Gentle ping on this series (patch 1 & 2). They do apply cleanly on
current master.

Tom, shall I expect you to take it or is it Jagan's mission?


Thanks,
Miquèl
Tom Rini April 8, 2019, 11:52 a.m. UTC | #3
On Mon, Apr 08, 2019 at 11:43:59AM +0200, Miquel Raynal wrote:
> Hello,
> 
> Miquel Raynal <miquel.raynal@bootlin.com> wrote on Sun, 18 Nov 2018
> 21:13:47 +0100:
> 
> > Hello,
> > 
> > Miquel Raynal <miquel.raynal@bootlin.com> wrote on Sun, 18 Nov 2018
> > 21:11:47 +0100:
> > 
> > > A Coverity robot reported an integer handling issue
> > > (OVERFLOW_BEFORE_WIDEN) in the potentially overflowing expression:
> > > 
> > >     (mtd_div_by_ws(mtd->size, mtd) - mtd_div_by_ws(offs, mtd)) *
> > >     mtd_oobavail(mtd, ops)
> > > 
> > > While such overflow will certainly never happen due to the numbers
> > > handled, it is cleaner to fix this operation anyway.
> > > 
> > > The problem is that all the maths include 32-bit quantities, while the
> > > result is stored in an explicit 64-bit value.
> > > 
> > > As maxooblen will just be compared with a size_t, let's change the
> > > type of the variable to a size_t. This will not fix anything but will
> > > clarify a bit the situation. Then, do an explicit cast to fix Coverity
> > > warning.
> > > 
> > > Addresses-Coverity-ID: 184180 ("Integer handling issues")
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > ---  
> > 
> > I forgot to add the link to the corresponding Travis-CI job:
> > https://travis-ci.org/miquelraynal/u-boot/builds/456679982
> 
> Gentle ping on this series (patch 1 & 2). They do apply cleanly on
> current master.
> 
> Tom, shall I expect you to take it or is it Jagan's mission?

My current feeling is this goes via Jagan's tree and I wasn't expecting
them in for this release.  Thanks!
Miquel Raynal April 8, 2019, 1:42 p.m. UTC | #4
Hi Tom,

Tom Rini <trini@konsulko.com> wrote on Mon, 8 Apr 2019 07:52:16 -0400:

> On Mon, Apr 08, 2019 at 11:43:59AM +0200, Miquel Raynal wrote:
> > Hello,
> > 
> > Miquel Raynal <miquel.raynal@bootlin.com> wrote on Sun, 18 Nov 2018
> > 21:13:47 +0100:
> >   
> > > Hello,
> > > 
> > > Miquel Raynal <miquel.raynal@bootlin.com> wrote on Sun, 18 Nov 2018
> > > 21:11:47 +0100:
> > >   
> > > > A Coverity robot reported an integer handling issue
> > > > (OVERFLOW_BEFORE_WIDEN) in the potentially overflowing expression:
> > > > 
> > > >     (mtd_div_by_ws(mtd->size, mtd) - mtd_div_by_ws(offs, mtd)) *
> > > >     mtd_oobavail(mtd, ops)
> > > > 
> > > > While such overflow will certainly never happen due to the numbers
> > > > handled, it is cleaner to fix this operation anyway.
> > > > 
> > > > The problem is that all the maths include 32-bit quantities, while the
> > > > result is stored in an explicit 64-bit value.
> > > > 
> > > > As maxooblen will just be compared with a size_t, let's change the
> > > > type of the variable to a size_t. This will not fix anything but will
> > > > clarify a bit the situation. Then, do an explicit cast to fix Coverity
> > > > warning.
> > > > 
> > > > Addresses-Coverity-ID: 184180 ("Integer handling issues")
> > > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > > ---    
> > > 
> > > I forgot to add the link to the corresponding Travis-CI job:
> > > https://travis-ci.org/miquelraynal/u-boot/builds/456679982  
> > 
> > Gentle ping on this series (patch 1 & 2). They do apply cleanly on
> > current master.
> > 
> > Tom, shall I expect you to take it or is it Jagan's mission?  
> 
> My current feeling is this goes via Jagan's tree and I wasn't expecting
> them in for this release.  Thanks!
> 

No problem, I know we are late in the merge process, these are just
Coverity fixes, they are not urgent, I just am cleaning my branches and
I discover many patches which I thought were merged but actually only
exist in my local tree, which is sad :)


Thanks,
Miquèl
Jagan Teki April 12, 2019, 5:32 a.m. UTC | #5
On Mon, Nov 19, 2018 at 1:42 AM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
>
> A Coverity robot reported an integer handling issue
> (OVERFLOW_BEFORE_WIDEN) in the potentially overflowing expression:
>
>     (mtd_div_by_ws(mtd->size, mtd) - mtd_div_by_ws(offs, mtd)) *
>     mtd_oobavail(mtd, ops)
>
> While such overflow will certainly never happen due to the numbers
> handled, it is cleaner to fix this operation anyway.
>
> The problem is that all the maths include 32-bit quantities, while the
> result is stored in an explicit 64-bit value.
>
> As maxooblen will just be compared with a size_t, let's change the
> type of the variable to a size_t. This will not fix anything but will
> clarify a bit the situation. Then, do an explicit cast to fix Coverity
> warning.
>
> Addresses-Coverity-ID: 184180 ("Integer handling issues")
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---

Applied to u-boot-spi/master
diff mbox series

Patch

diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index fb6c779abb..df12535d32 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -1030,13 +1030,13 @@  static int mtd_check_oob_ops(struct mtd_info *mtd, loff_t offs,
 		return -EINVAL;
 
 	if (ops->ooblen) {
-		u64 maxooblen;
+		size_t maxooblen;
 
 		if (ops->ooboffs >= mtd_oobavail(mtd, ops))
 			return -EINVAL;
 
-		maxooblen = ((mtd_div_by_ws(mtd->size, mtd) -
-			      mtd_div_by_ws(offs, mtd)) *
+		maxooblen = ((size_t)(mtd_div_by_ws(mtd->size, mtd) -
+				      mtd_div_by_ws(offs, mtd)) *
 			     mtd_oobavail(mtd, ops)) - ops->ooboffs;
 		if (ops->ooblen > maxooblen)
 			return -EINVAL;