Message ID | 20240802000510.7088-1-Tristram.Ha@microchip.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: dsa: microchip: Fix Wake-on-LAN check to not return an error | expand |
On Thu, Aug 01, 2024 at 05:05:10PM -0700, Tristram.Ha@microchip.com wrote: > From: Tristram Ha <tristram.ha@microchip.com> > > The wol variable in ksz_port_set_mac_address() is declared with random > data, but the code in ksz_get_wol call may not be executed so the > WAKE_MAGIC check may be invalid resulting in an error message when > setting a MAC address after starting the DSA driver. > > Fixes: 3b454b6390c3 ("net: dsa: microchip: ksz9477: Add Wake on Magic Packet support") > Signed-off-by: Tristram Ha <tristram.ha@microchip.com> > --- > drivers/net/dsa/microchip/ksz_common.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c > index b074b4bb0629..2725c5bc311c 100644 > --- a/drivers/net/dsa/microchip/ksz_common.c > +++ b/drivers/net/dsa/microchip/ksz_common.c > @@ -3764,6 +3764,12 @@ static int ksz_port_set_mac_address(struct dsa_switch *ds, int port, > return -EBUSY; > } > > + /* Need to initialize variable as the code to fill in settings may > + * not be executed. > + */ > + wol.supported = 0; > + wol.wolopts = 0; > + > ksz_get_wol(ds, dp->index, &wol); > if (wol.wolopts & WAKE_MAGIC) { > dev_err(ds->dev, Only wol.wolopts need to be cleared. wol.supported can be dropped. With this change: Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de> Regards, Oleksij
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index b074b4bb0629..2725c5bc311c 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3764,6 +3764,12 @@ static int ksz_port_set_mac_address(struct dsa_switch *ds, int port, return -EBUSY; } + /* Need to initialize variable as the code to fill in settings may + * not be executed. + */ + wol.supported = 0; + wol.wolopts = 0; + ksz_get_wol(ds, dp->index, &wol); if (wol.wolopts & WAKE_MAGIC) { dev_err(ds->dev,