[PATCH net-next v6 1/3] net: dsa: yt921x: Fix MIB overflow wraparound routine

David Yang posted 3 patches 3 weeks ago
There is a newer version of this series
[PATCH net-next v6 1/3] net: dsa: yt921x: Fix MIB overflow wraparound routine
Posted by David Yang 3 weeks ago
Reported by the following Smatch static checker warning:

  drivers/net/dsa/yt921x.c:702 yt921x_read_mib()
  warn: was expecting a 64 bit value instead of '(~0)'

Fixes: 186623f4aa72 ("net: dsa: yt921x: Add support for Motorcomm YT921x")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/netdev/aPsjYKQMzpY0nSXm@stanley.mountain/
Suggested-by: David Laight <david.laight.linux@gmail.com>
Signed-off-by: David Yang <mmyangfl@gmail.com>
---
 drivers/net/dsa/yt921x.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c
index 0b3df732c0d1..5e4e8093ba16 100644
--- a/drivers/net/dsa/yt921x.c
+++ b/drivers/net/dsa/yt921x.c
@@ -682,21 +682,22 @@ static int yt921x_read_mib(struct yt921x_priv *priv, int port)
 		const struct yt921x_mib_desc *desc = &yt921x_mib_descs[i];
 		u32 reg = YT921X_MIBn_DATA0(port) + desc->offset;
 		u64 *valp = &((u64 *)mib)[i];
-		u64 val = *valp;
 		u32 val0;
-		u32 val1;
+		u64 val;
 
 		res = yt921x_reg_read(priv, reg, &val0);
 		if (res)
 			break;
 
 		if (desc->size <= 1) {
-			if (val < (u32)val)
-				/* overflow */
-				val += (u64)U32_MAX + 1;
-			val &= ~U32_MAX;
-			val |= val0;
+			u64 old_val = *valp;
+
+			val = (old_val & ~(u64)U32_MAX) | val0;
+			if (val < old_val)
+				val += 1ull << 32;
 		} else {
+			u32 val1;
+
 			res = yt921x_reg_read(priv, reg + 4, &val1);
 			if (res)
 				break;
-- 
2.51.0
Re: [PATCH net-next v6 1/3] net: dsa: yt921x: Fix MIB overflow wraparound routine
Posted by Paolo Abeni 2 weeks, 3 days ago
On 1/18/26 2:30 AM, David Yang wrote:
> Reported by the following Smatch static checker warning:
> 
>   drivers/net/dsa/yt921x.c:702 yt921x_read_mib()
>   warn: was expecting a 64 bit value instead of '(~0)'
> 
> Fixes: 186623f4aa72 ("net: dsa: yt921x: Add support for Motorcomm YT921x")
> Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
> Closes: https://lore.kernel.org/netdev/aPsjYKQMzpY0nSXm@stanley.mountain/
> Suggested-by: David Laight <david.laight.linux@gmail.com>
> Signed-off-by: David Yang <mmyangfl@gmail.com>
> ---
>  drivers/net/dsa/yt921x.c | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c
> index 0b3df732c0d1..5e4e8093ba16 100644
> --- a/drivers/net/dsa/yt921x.c
> +++ b/drivers/net/dsa/yt921x.c
> @@ -682,21 +682,22 @@ static int yt921x_read_mib(struct yt921x_priv *priv, int port)
>  		const struct yt921x_mib_desc *desc = &yt921x_mib_descs[i];
>  		u32 reg = YT921X_MIBn_DATA0(port) + desc->offset;
>  		u64 *valp = &((u64 *)mib)[i];
> -		u64 val = *valp;
>  		u32 val0;
> -		u32 val1;
> +		u64 val;
>  
>  		res = yt921x_reg_read(priv, reg, &val0);
>  		if (res)
>  			break;
>  
>  		if (desc->size <= 1) {
> -			if (val < (u32)val)
> -				/* overflow */
> -				val += (u64)U32_MAX + 1;
> -			val &= ~U32_MAX;
> -			val |= val0;
> +			u64 old_val = *valp;

Why targeting net-next here? the blamed commit is already in Linus'tree
and it looks like the above could causes functional issues, ad the wrong
value is written into the mib.

I think this should go via net.

/P
Re: [PATCH net-next v6 1/3] net: dsa: yt921x: Fix MIB overflow wraparound routine
Posted by Yangfl 2 weeks, 3 days ago
On Thu, Jan 22, 2026 at 5:41 PM Paolo Abeni <pabeni@redhat.com> wrote:
>
> On 1/18/26 2:30 AM, David Yang wrote:
> > Reported by the following Smatch static checker warning:
> >
> >   drivers/net/dsa/yt921x.c:702 yt921x_read_mib()
> >   warn: was expecting a 64 bit value instead of '(~0)'
> >
> > Fixes: 186623f4aa72 ("net: dsa: yt921x: Add support for Motorcomm YT921x")
> > Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
> > Closes: https://lore.kernel.org/netdev/aPsjYKQMzpY0nSXm@stanley.mountain/
> > Suggested-by: David Laight <david.laight.linux@gmail.com>
> > Signed-off-by: David Yang <mmyangfl@gmail.com>
> > ---
> >  drivers/net/dsa/yt921x.c | 15 ++++++++-------
> >  1 file changed, 8 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/net/dsa/yt921x.c b/drivers/net/dsa/yt921x.c
> > index 0b3df732c0d1..5e4e8093ba16 100644
> > --- a/drivers/net/dsa/yt921x.c
> > +++ b/drivers/net/dsa/yt921x.c
> > @@ -682,21 +682,22 @@ static int yt921x_read_mib(struct yt921x_priv *priv, int port)
> >               const struct yt921x_mib_desc *desc = &yt921x_mib_descs[i];
> >               u32 reg = YT921X_MIBn_DATA0(port) + desc->offset;
> >               u64 *valp = &((u64 *)mib)[i];
> > -             u64 val = *valp;
> >               u32 val0;
> > -             u32 val1;
> > +             u64 val;
> >
> >               res = yt921x_reg_read(priv, reg, &val0);
> >               if (res)
> >                       break;
> >
> >               if (desc->size <= 1) {
> > -                     if (val < (u32)val)
> > -                             /* overflow */
> > -                             val += (u64)U32_MAX + 1;
> > -                     val &= ~U32_MAX;
> > -                     val |= val0;
> > +                     u64 old_val = *valp;
>
> Why targeting net-next here? the blamed commit is already in Linus'tree
> and it looks like the above could causes functional issues, ad the wrong
> value is written into the mib.
>
> I think this should go via net.
>
> /P
>

There are following patches which are not fully suitable for net tree,
and the issue does not block the main functionality, only gives wrong
statistics.

Should the whole series be sent to net, or split into two parts?
Re: [PATCH net-next v6 1/3] net: dsa: yt921x: Fix MIB overflow wraparound routine
Posted by Jakub Kicinski 2 weeks, 3 days ago
On Thu, 22 Jan 2026 21:19:29 +0800 Yangfl wrote:
> > Why targeting net-next here? the blamed commit is already in Linus'tree
> > and it looks like the above could causes functional issues, ad the wrong
> > value is written into the mib.
> >
> > I think this should go via net.
>
> There are following patches which are not fully suitable for net tree,
> and the issue does not block the main functionality, only gives wrong
> statistics.
> 
> Should the whole series be sent to net, or split into two parts?

Split into two parts please (and the second one posted after net is
merged back into net-next).