lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20190528134458.GE18059@lunn.ch> Date: Tue, 28 May 2019 15:44:58 +0200 From: Andrew Lunn <andrew@...n.ch> To: Rasmus Villemoes <rasmus.villemoes@...vas.dk> Cc: Vivien Didelot <vivien.didelot@...il.com>, Florian Fainelli <f.fainelli@...il.com>, "David S. Miller" <davem@...emloft.net>, Rasmus Villemoes <Rasmus.Villemoes@...vas.se>, "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org> Subject: Re: [PATCH] net: dsa: mv88e6xxx: fix handling of upper half of STATS_TYPE_PORT On Tue, May 28, 2019 at 01:17:10PM +0000, Rasmus Villemoes wrote: > Currently, the upper half of a 4-byte STATS_TYPE_PORT statistic ends > up in bits 47:32 of the return value, instead of bits 31:16 as they > should. > > Signed-off-by: Rasmus Villemoes <rasmus.villemoes@...vas.dk> Hi Rasmus Please include a Fixes tag, to indicate where the problem was introduced. In this case, i think it was: Fixes: 6e46e2d821bb ("net: dsa: mv88e6xxx: Fix u64 statistics") And set the Subject to [PATCH net] to indicate this should be applied to the net tree. > --- > I also noticed that it's a bit inconsistent that we return U64_MAX if > there's a read error in STATS_TYPE_PORT, while > mv88e6xxx_g1_stats_read() returns 0 in case of a read error. In > practice, register reads probably never fail so it doesn't matter. > > drivers/net/dsa/mv88e6xxx/chip.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c > index 370434bdbdab..317553d2cb21 100644 > --- a/drivers/net/dsa/mv88e6xxx/chip.c > +++ b/drivers/net/dsa/mv88e6xxx/chip.c > @@ -785,7 +785,7 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip, > err = mv88e6xxx_port_read(chip, port, s->reg + 1, ®); > if (err) > return U64_MAX; > - high = reg; > + low |= ((u32)reg) << 16; > } > break; > case STATS_TYPE_BANK1: What i don't like about this is how the function finishes: } value = (((u64)high) << 32) | low; return value; } A better fix might be - break + value = (((u64)high) << 16 | low; + return value; Andrew
Powered by blists - more mailing lists