net: dsa: bcm_sf2: Do not assume DSA master supports WoL
We assume in the bcm_sf2 driver that the DSA master network device
supports ethtool_ops::{get,set}_wol operations, which is not a given.
Avoid de-referencing potentially non-existent function pointers and
check them as we should.
Fixes: 96e65d7f3f
("net: dsa: bcm_sf2: add support for Wake-on-LAN")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a40061ea2e
commit
c3152ec4c0
|
@ -726,10 +726,11 @@ static void bcm_sf2_sw_get_wol(struct dsa_switch *ds, int port,
|
|||
{
|
||||
struct net_device *p = ds->ports[port].cpu_dp->master;
|
||||
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
|
||||
struct ethtool_wolinfo pwol;
|
||||
struct ethtool_wolinfo pwol = { };
|
||||
|
||||
/* Get the parent device WoL settings */
|
||||
p->ethtool_ops->get_wol(p, &pwol);
|
||||
if (p->ethtool_ops->get_wol)
|
||||
p->ethtool_ops->get_wol(p, &pwol);
|
||||
|
||||
/* Advertise the parent device supported settings */
|
||||
wol->supported = pwol.supported;
|
||||
|
@ -750,9 +751,10 @@ static int bcm_sf2_sw_set_wol(struct dsa_switch *ds, int port,
|
|||
struct net_device *p = ds->ports[port].cpu_dp->master;
|
||||
struct bcm_sf2_priv *priv = bcm_sf2_to_priv(ds);
|
||||
s8 cpu_port = ds->ports[port].cpu_dp->index;
|
||||
struct ethtool_wolinfo pwol;
|
||||
struct ethtool_wolinfo pwol = { };
|
||||
|
||||
p->ethtool_ops->get_wol(p, &pwol);
|
||||
if (p->ethtool_ops->get_wol)
|
||||
p->ethtool_ops->get_wol(p, &pwol);
|
||||
if (wol->wolopts & ~pwol.supported)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
Loading…
Reference in a new issue