Message ID | 6c710eec-a299-5239-dde1-097209e8868d@gmail.com |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | [v2,net] net: phy: phylink: fix uninitialized variable in phylink_get_mac_state | expand |
On Tue, Feb 26, 2019 at 08:25:41AM +0100, Heiner Kallweit wrote: > When debugging an issue I found implausible values in state->pause. > Reason in that state->pause isn't initialized and later only single > bits are changed. Also the struct itself isn't initialized in > phylink_resolve(). So better initialize state->pause. mac_link_state() is expected to always set this, but this is safer. Maybe also set state->speed to SPEED_UNKNOWN, state->duplex to DUPLEX_UNKNOWN and state->an_complete to zero? > > v2: > - use right function name in subject > > Fixes: 9525ae83959b ("phylink: add phylink infrastructure") > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> > --- > drivers/net/phy/phylink.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c > index 59d175a5b..a9954c205 100644 > --- a/drivers/net/phy/phylink.c > +++ b/drivers/net/phy/phylink.c > @@ -324,6 +324,7 @@ static int phylink_get_mac_state(struct phylink *pl, struct phylink_link_state * > linkmode_zero(state->lp_advertising); > state->interface = pl->link_config.interface; > state->an_enabled = pl->link_config.an_enabled; > + state->pause = MLO_PAUSE_NONE; > state->link = 1; > > return pl->ops->mac_link_state(ndev, state); > -- > 2.20.1 > >
On 26.02.2019 09:43, Russell King - ARM Linux admin wrote: > On Tue, Feb 26, 2019 at 08:25:41AM +0100, Heiner Kallweit wrote: >> When debugging an issue I found implausible values in state->pause. >> Reason in that state->pause isn't initialized and later only single >> bits are changed. Also the struct itself isn't initialized in >> phylink_resolve(). So better initialize state->pause. > > mac_link_state() is expected to always set this, but this is safer. > I've seen cases where mac_link_state() just initializes the relevant bits. Therefore there's no functional problem, but it's not nice (and disturbs in debug output) if all other bits have a random value. > Maybe also set state->speed to SPEED_UNKNOWN, state->duplex to > DUPLEX_UNKNOWN and state->an_complete to zero? > OK. Will include this in a v3. >> >> v2: >> - use right function name in subject >> >> Fixes: 9525ae83959b ("phylink: add phylink infrastructure") >> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> >> --- >> drivers/net/phy/phylink.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c >> index 59d175a5b..a9954c205 100644 >> --- a/drivers/net/phy/phylink.c >> +++ b/drivers/net/phy/phylink.c >> @@ -324,6 +324,7 @@ static int phylink_get_mac_state(struct phylink *pl, struct phylink_link_state * >> linkmode_zero(state->lp_advertising); >> state->interface = pl->link_config.interface; >> state->an_enabled = pl->link_config.an_enabled; >> + state->pause = MLO_PAUSE_NONE; >> state->link = 1; >> >> return pl->ops->mac_link_state(ndev, state); >> -- >> 2.20.1 >> >> >
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 59d175a5b..a9954c205 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -324,6 +324,7 @@ static int phylink_get_mac_state(struct phylink *pl, struct phylink_link_state * linkmode_zero(state->lp_advertising); state->interface = pl->link_config.interface; state->an_enabled = pl->link_config.an_enabled; + state->pause = MLO_PAUSE_NONE; state->link = 1; return pl->ops->mac_link_state(ndev, state);
When debugging an issue I found implausible values in state->pause. Reason in that state->pause isn't initialized and later only single bits are changed. Also the struct itself isn't initialized in phylink_resolve(). So better initialize state->pause. v2: - use right function name in subject Fixes: 9525ae83959b ("phylink: add phylink infrastructure") Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- drivers/net/phy/phylink.c | 1 + 1 file changed, 1 insertion(+)