Message ID | 1381690794.2848.11.camel@alpha.Speedport_W723_V_Typ_A_1_00_098 |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
On Sun, Oct 13, 2013 at 08:59:54PM +0200, Sebastian Pöhn wrote: > A zero pointer deref on priv->phydev->link was causing oops on our systems. > Might be related to improper configuration but we should fail gracefully here ;-) > > Signed-off-by: Sebastian Poehn <sebastian.poehn@googlemail.com> > > --- > > diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c > index 83b1030..bc8c503 100644 > --- a/drivers/staging/octeon/ethernet-mdio.c > +++ b/drivers/staging/octeon/ethernet-mdio.c > @@ -121,6 +121,9 @@ static void cvm_oct_adjust_link(struct net_device *dev) > struct octeon_ethernet *priv = netdev_priv(dev); > cvmx_helper_link_info_t link_info; > > + if(!priv->phydev) > + return ; Please always run your patches through the scripts/checkpatch.pl tool so that maintainers don't have to point out the obvious coding syle errors by hand each time :) Care to try again? Also, how was phydev NULL? What was causing that? thanks, greg k-h -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Oct 13, 2013 at 02:28:10PM -0700, Greg KH wrote: > On Sun, Oct 13, 2013 at 08:59:54PM +0200, Sebastian Pöhn wrote: > > A zero pointer deref on priv->phydev->link was causing oops on our systems. > > Might be related to improper configuration but we should fail gracefully here ;-) > > > > Signed-off-by: Sebastian Poehn <sebastian.poehn@googlemail.com> > > > > --- > > > > diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c > > index 83b1030..bc8c503 100644 > > --- a/drivers/staging/octeon/ethernet-mdio.c > > +++ b/drivers/staging/octeon/ethernet-mdio.c > > @@ -121,6 +121,9 @@ static void cvm_oct_adjust_link(struct net_device *dev) > > struct octeon_ethernet *priv = netdev_priv(dev); > > cvmx_helper_link_info_t link_info; > > > > + if(!priv->phydev) > > + return ; > > Please always run your patches through the scripts/checkpatch.pl tool so > that maintainers don't have to point out the obvious coding syle errors > by hand each time :) Also it's whitespace damaged and doesn't apply. > > Care to try again? > > Also, how was phydev NULL? What was causing that? To me it looks like phydev is always NULL. regards, dan carpenter -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Mon, Oct 14, 2013 at 01:10:51PM +0300, Dan Carpenter wrote: > On Sun, Oct 13, 2013 at 02:28:10PM -0700, Greg KH wrote: > > On Sun, Oct 13, 2013 at 08:59:54PM +0200, Sebastian Pöhn wrote: > > > A zero pointer deref on priv->phydev->link was causing oops on our systems. > > > Might be related to improper configuration but we should fail gracefully here ;-) > > > > > > Signed-off-by: Sebastian Poehn <sebastian.poehn@googlemail.com> > > > > > > --- > > > > > > diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c > > > index 83b1030..bc8c503 100644 > > > --- a/drivers/staging/octeon/ethernet-mdio.c > > > +++ b/drivers/staging/octeon/ethernet-mdio.c > > > @@ -121,6 +121,9 @@ static void cvm_oct_adjust_link(struct net_device *dev) > > > struct octeon_ethernet *priv = netdev_priv(dev); > > > cvmx_helper_link_info_t link_info; > > > > > > + if(!priv->phydev) > > > + return ; > > > > Please always run your patches through the scripts/checkpatch.pl tool so > > that maintainers don't have to point out the obvious coding syle errors > > by hand each time :) > > Also it's whitespace damaged and doesn't apply. > > > > > Care to try again? > > > > Also, how was phydev NULL? What was causing that? > > To me it looks like phydev is always NULL. It's initialized in cvm_oct_phy_setup_device(): priv->phydev = of_phy_connect(dev, phy_node, cvm_oct_adjust_link, 0, PHY_INTERFACE_MODE_GMII); So maybe there is a chance that cvm_oct_adjust_link() callback gets called already before the function returns? Getting a copy of the original OOPS report/crash dump could help to confirm this. A. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Oct 14, 2013 at 09:39:06PM +0300, Aaro Koskinen wrote: > Hi, > > On Mon, Oct 14, 2013 at 01:10:51PM +0300, Dan Carpenter wrote: > > On Sun, Oct 13, 2013 at 02:28:10PM -0700, Greg KH wrote: > > > On Sun, Oct 13, 2013 at 08:59:54PM +0200, Sebastian Pöhn wrote: > > > > A zero pointer deref on priv->phydev->link was causing oops on our systems. > > > > Might be related to improper configuration but we should fail gracefully here ;-) > > > > > > > > Signed-off-by: Sebastian Poehn <sebastian.poehn@googlemail.com> > > > > > > > > --- > > > > > > > > diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c > > > > index 83b1030..bc8c503 100644 > > > > --- a/drivers/staging/octeon/ethernet-mdio.c > > > > +++ b/drivers/staging/octeon/ethernet-mdio.c > > > > @@ -121,6 +121,9 @@ static void cvm_oct_adjust_link(struct net_device *dev) > > > > struct octeon_ethernet *priv = netdev_priv(dev); > > > > cvmx_helper_link_info_t link_info; > > > > > > > > + if(!priv->phydev) > > > > + return ; > > > > > > Please always run your patches through the scripts/checkpatch.pl tool so > > > that maintainers don't have to point out the obvious coding syle errors > > > by hand each time :) > > > > Also it's whitespace damaged and doesn't apply. > > > > > > > > Care to try again? > > > > > > Also, how was phydev NULL? What was causing that? > > > > To me it looks like phydev is always NULL. > > It's initialized in cvm_oct_phy_setup_device(): > > priv->phydev = of_phy_connect(dev, phy_node, cvm_oct_adjust_link, 0, ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ Sorry I should have explained better. We use cvm_oct_adjust_link() to initialize priv->phydev but cvm_oct_adjust_link() depends on priv->phydev. It seems like we would hit the NULL dereference every time. Weird huh? regards, dan carpenter -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Oct 14, 2013 at 10:16:49PM +0300, Dan Carpenter wrote: > On Mon, Oct 14, 2013 at 09:39:06PM +0300, Aaro Koskinen wrote: > > It's initialized in cvm_oct_phy_setup_device(): > > > > priv->phydev = of_phy_connect(dev, phy_node, cvm_oct_adjust_link, 0, > ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ > > Sorry I should have explained better. > > We use cvm_oct_adjust_link() to initialize priv->phydev but > cvm_oct_adjust_link() depends on priv->phydev. It seems like we would > hit the NULL dereference every time. Weird huh? It doesn't happen on my system (EdgeRouter Lite). I think you need to explain even more better. :-) What you mean by "We use cvm_oct_adjust_link() to initialize priv->phydev..."? Sorry, maybe I'm just missing something really obvious... A. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Oct 14, 2013 at 10:49:37PM +0300, Aaro Koskinen wrote: > On Mon, Oct 14, 2013 at 10:16:49PM +0300, Dan Carpenter wrote: > > On Mon, Oct 14, 2013 at 09:39:06PM +0300, Aaro Koskinen wrote: > > > It's initialized in cvm_oct_phy_setup_device(): > > > > > > priv->phydev = of_phy_connect(dev, phy_node, cvm_oct_adjust_link, 0, > > ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ > > > > Sorry I should have explained better. > > > > We use cvm_oct_adjust_link() to initialize priv->phydev but > > cvm_oct_adjust_link() depends on priv->phydev. It seems like we would > > hit the NULL dereference every time. Weird huh? > > It doesn't happen on my system (EdgeRouter Lite). I think you need to > explain even more better. :-) > > What you mean by "We use cvm_oct_adjust_link() to initialize > priv->phydev..."? Sorry, maybe I'm just missing something really > obvious... Hm... I didn't followed the state machine all the way through so I'm not actually sure how this is called. But it's weird that priv->phydev is initialized on the left side of the assignment but dereferenced in the function mentioned on the right side if the assignment. Also this patch should not be marked as "trivial" in the subject. "trivial" is only for spelling mistakes in comments etc. regards, dan carpenter -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/staging/octeon/ethernet-mdio.c b/drivers/staging/octeon/ethernet-mdio.c index 83b1030..bc8c503 100644 --- a/drivers/staging/octeon/ethernet-mdio.c +++ b/drivers/staging/octeon/ethernet-mdio.c @@ -121,6 +121,9 @@ static void cvm_oct_adjust_link(struct net_device *dev) struct octeon_ethernet *priv = netdev_priv(dev); cvmx_helper_link_info_t link_info; + if(!priv->phydev) + return ; + if (priv->last_link != priv->phydev->link) { priv->last_link = priv->phydev->link; link_info.u64 = 0;
A zero pointer deref on priv->phydev->link was causing oops on our systems. Might be related to improper configuration but we should fail gracefully here ;-) Signed-off-by: Sebastian Poehn <sebastian.poehn@googlemail.com> --- -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html