netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string
@ 2012-03-26 11:23 Phil Sutter
  2012-03-26 11:23 ` [PATCH 2/2] wimax: i2400m-usb - use a private struct ethtool_ops Phil Sutter
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Phil Sutter @ 2012-03-26 11:23 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, inaky.perez-gonzalez

This happened on a machine with a custom hotplug script calling nameif,
probably due to slow firmware loading. At the time nameif uses ethtool
to gather interface information, i2400m->fw_name is zero and so a null
pointer dereference occurs from within i2400m_get_drvinfo().

Signed-off-by: Phil Sutter <phil.sutter@viprinet.com>
---
 drivers/net/wimax/i2400m/netdev.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wimax/i2400m/netdev.c b/drivers/net/wimax/i2400m/netdev.c
index 64a1106..020bd8d 100644
--- a/drivers/net/wimax/i2400m/netdev.c
+++ b/drivers/net/wimax/i2400m/netdev.c
@@ -607,7 +607,8 @@ static void i2400m_get_drvinfo(struct net_device *net_dev,
 	struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
 
 	strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver) - 1);
-	strncpy(info->fw_version, i2400m->fw_name, sizeof(info->fw_version) - 1);
+	strncpy(info->fw_version,
+	        i2400m->fw_name ? : "N/A", sizeof(info->fw_version) - 1);
 	if (net_dev->dev.parent)
 		strncpy(info->bus_info, dev_name(net_dev->dev.parent),
 			sizeof(info->bus_info) - 1);
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] wimax: i2400m-usb - use a private struct ethtool_ops
  2012-03-26 11:23 [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Phil Sutter
@ 2012-03-26 11:23 ` Phil Sutter
  2012-03-28  2:30   ` David Miller
  2012-03-26 14:57 ` [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Ben Hutchings
  2012-03-28  2:30 ` [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string David Miller
  2 siblings, 1 reply; 7+ messages in thread
From: Phil Sutter @ 2012-03-26 11:23 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, inaky.perez-gonzalez

This way the USB variant of the driver uses usb_make_path in order to
provide bus-info compatible to other USB drivers (like e.g. asix.c).

Signed-off-by: Phil Sutter <phil.sutter@viprinet.com>
---
 drivers/net/wimax/i2400m/usb.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wimax/i2400m/usb.c b/drivers/net/wimax/i2400m/usb.c
index 2c1b8b6..096a228 100644
--- a/drivers/net/wimax/i2400m/usb.c
+++ b/drivers/net/wimax/i2400m/usb.c
@@ -339,6 +339,23 @@ int i2400mu_bus_reset(struct i2400m *i2400m, enum i2400m_reset_type rt)
 	return result;
 }
 
+static void i2400mu_get_drvinfo(struct net_device *net_dev,
+                                struct ethtool_drvinfo *info)
+{
+	struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
+	struct i2400mu *i2400mu = container_of(i2400m, struct i2400mu, i2400m);
+	struct usb_device *udev = i2400mu->usb_dev;
+
+	strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver) - 1);
+	strncpy(info->fw_version,
+	        i2400m->fw_name ? : "N/A", sizeof(info->fw_version) - 1);
+	usb_make_path(udev, info->bus_info, sizeof(info->bus_info));
+}
+
+static const struct ethtool_ops i2400mu_ethtool_ops = {
+	.get_drvinfo = i2400mu_get_drvinfo,
+	.get_link = ethtool_op_get_link,
+};
 
 static
 void i2400mu_netdev_setup(struct net_device *net_dev)
@@ -347,6 +364,7 @@ void i2400mu_netdev_setup(struct net_device *net_dev)
 	struct i2400mu *i2400mu = container_of(i2400m, struct i2400mu, i2400m);
 	i2400mu_init(i2400mu);
 	i2400m_netdev_setup(net_dev);
+	net_dev->ethtool_ops = &i2400mu_ethtool_ops;
 }
 
 
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string
  2012-03-26 11:23 [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Phil Sutter
  2012-03-26 11:23 ` [PATCH 2/2] wimax: i2400m-usb - use a private struct ethtool_ops Phil Sutter
@ 2012-03-26 14:57 ` Ben Hutchings
  2012-03-26 19:01   ` [PATCHv2 " Phil Sutter
  2012-03-28  2:30 ` [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string David Miller
  2 siblings, 1 reply; 7+ messages in thread
From: Ben Hutchings @ 2012-03-26 14:57 UTC (permalink / raw)
  To: Phil Sutter; +Cc: David Miller, netdev, inaky.perez-gonzalez

On Mon, 2012-03-26 at 13:23 +0200, Phil Sutter wrote:
> This happened on a machine with a custom hotplug script calling nameif,
> probably due to slow firmware loading. At the time nameif uses ethtool
> to gather interface information, i2400m->fw_name is zero and so a null
> pointer dereference occurs from within i2400m_get_drvinfo().
> 
> Signed-off-by: Phil Sutter <phil.sutter@viprinet.com>
> ---
>  drivers/net/wimax/i2400m/netdev.c |    3 ++-
>  1 files changed, 2 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/wimax/i2400m/netdev.c b/drivers/net/wimax/i2400m/netdev.c
> index 64a1106..020bd8d 100644
> --- a/drivers/net/wimax/i2400m/netdev.c
> +++ b/drivers/net/wimax/i2400m/netdev.c
> @@ -607,7 +607,8 @@ static void i2400m_get_drvinfo(struct net_device *net_dev,
>  	struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
>  
>  	strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver) - 1);
> -	strncpy(info->fw_version, i2400m->fw_name, sizeof(info->fw_version) - 1);
> +	strncpy(info->fw_version,
> +	        i2400m->fw_name ? : "N/A", sizeof(info->fw_version) - 1);

Use an empty string, not "N/A".

Ben.

>  	if (net_dev->dev.parent)
>  		strncpy(info->bus_info, dev_name(net_dev->dev.parent),
>  			sizeof(info->bus_info) - 1);

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCHv2 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string
  2012-03-26 14:57 ` [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Ben Hutchings
@ 2012-03-26 19:01   ` Phil Sutter
  2012-03-26 19:01     ` [PATCHv2 2/2] wimax: i2400m-usb - use a private struct ethtool_ops Phil Sutter
  0 siblings, 1 reply; 7+ messages in thread
From: Phil Sutter @ 2012-03-26 19:01 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, inaky.perez-gonzalez, Ben Hutchings

This happened on a machine with a custom hotplug script calling nameif,
probably due to slow firmware loading. At the time nameif uses ethtool
to gather interface information, i2400m->fw_name is zero and so a null
pointer dereference occurs from within i2400m_get_drvinfo().

Signed-off-by: Phil Sutter <phil.sutter@viprinet.com>
---
 drivers/net/wimax/i2400m/netdev.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wimax/i2400m/netdev.c b/drivers/net/wimax/i2400m/netdev.c
index 63e4b70..1d76ae8 100644
--- a/drivers/net/wimax/i2400m/netdev.c
+++ b/drivers/net/wimax/i2400m/netdev.c
@@ -597,7 +597,8 @@ static void i2400m_get_drvinfo(struct net_device *net_dev,
 	struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
 
 	strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver) - 1);
-	strncpy(info->fw_version, i2400m->fw_name, sizeof(info->fw_version) - 1);
+	strncpy(info->fw_version,
+	        i2400m->fw_name ? : "", sizeof(info->fw_version) - 1);
 	if (net_dev->dev.parent)
 		strncpy(info->bus_info, dev_name(net_dev->dev.parent),
 			sizeof(info->bus_info) - 1);
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCHv2 2/2] wimax: i2400m-usb - use a private struct ethtool_ops
  2012-03-26 19:01   ` [PATCHv2 " Phil Sutter
@ 2012-03-26 19:01     ` Phil Sutter
  0 siblings, 0 replies; 7+ messages in thread
From: Phil Sutter @ 2012-03-26 19:01 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, inaky.perez-gonzalez, Ben Hutchings

This way the USB variant of the driver uses usb_make_path in order to
provide bus-info compatible to other USB drivers (like e.g. asix.c).

Signed-off-by: Phil Sutter <phil.sutter@viprinet.com>
---
 drivers/net/wimax/i2400m/usb.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wimax/i2400m/usb.c b/drivers/net/wimax/i2400m/usb.c
index 2c1b8b6..29b1e03 100644
--- a/drivers/net/wimax/i2400m/usb.c
+++ b/drivers/net/wimax/i2400m/usb.c
@@ -339,6 +339,23 @@ int i2400mu_bus_reset(struct i2400m *i2400m, enum i2400m_reset_type rt)
 	return result;
 }
 
+static void i2400mu_get_drvinfo(struct net_device *net_dev,
+                                struct ethtool_drvinfo *info)
+{
+	struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
+	struct i2400mu *i2400mu = container_of(i2400m, struct i2400mu, i2400m);
+	struct usb_device *udev = i2400mu->usb_dev;
+
+	strncpy(info->driver, KBUILD_MODNAME, sizeof(info->driver) - 1);
+	strncpy(info->fw_version,
+	        i2400m->fw_name ? : "", sizeof(info->fw_version) - 1);
+	usb_make_path(udev, info->bus_info, sizeof(info->bus_info));
+}
+
+static const struct ethtool_ops i2400mu_ethtool_ops = {
+	.get_drvinfo = i2400mu_get_drvinfo,
+	.get_link = ethtool_op_get_link,
+};
 
 static
 void i2400mu_netdev_setup(struct net_device *net_dev)
@@ -347,6 +364,7 @@ void i2400mu_netdev_setup(struct net_device *net_dev)
 	struct i2400mu *i2400mu = container_of(i2400m, struct i2400mu, i2400m);
 	i2400mu_init(i2400mu);
 	i2400m_netdev_setup(net_dev);
+	net_dev->ethtool_ops = &i2400mu_ethtool_ops;
 }
 
 
-- 
1.7.3.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string
  2012-03-26 11:23 [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Phil Sutter
  2012-03-26 11:23 ` [PATCH 2/2] wimax: i2400m-usb - use a private struct ethtool_ops Phil Sutter
  2012-03-26 14:57 ` [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Ben Hutchings
@ 2012-03-28  2:30 ` David Miller
  2 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2012-03-28  2:30 UTC (permalink / raw)
  To: phil.sutter; +Cc: netdev, inaky.perez-gonzalez

From: Phil Sutter <phil.sutter@viprinet.com>
Date: Mon, 26 Mar 2012 13:23:55 +0200

> This happened on a machine with a custom hotplug script calling nameif,
> probably due to slow firmware loading. At the time nameif uses ethtool
> to gather interface information, i2400m->fw_name is zero and so a null
> pointer dereference occurs from within i2400m_get_drvinfo().
> 
> Signed-off-by: Phil Sutter <phil.sutter@viprinet.com>

Applied.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] wimax: i2400m-usb - use a private struct ethtool_ops
  2012-03-26 11:23 ` [PATCH 2/2] wimax: i2400m-usb - use a private struct ethtool_ops Phil Sutter
@ 2012-03-28  2:30   ` David Miller
  0 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2012-03-28  2:30 UTC (permalink / raw)
  To: phil.sutter; +Cc: netdev, inaky.perez-gonzalez

From: Phil Sutter <phil.sutter@viprinet.com>
Date: Mon, 26 Mar 2012 13:23:56 +0200

> This way the USB variant of the driver uses usb_make_path in order to
> provide bus-info compatible to other USB drivers (like e.g. asix.c).
> 
> Signed-off-by: Phil Sutter <phil.sutter@viprinet.com>

Applied.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-03-28  2:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-26 11:23 [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Phil Sutter
2012-03-26 11:23 ` [PATCH 2/2] wimax: i2400m-usb - use a private struct ethtool_ops Phil Sutter
2012-03-28  2:30   ` David Miller
2012-03-26 14:57 ` [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string Ben Hutchings
2012-03-26 19:01   ` [PATCHv2 " Phil Sutter
2012-03-26 19:01     ` [PATCHv2 2/2] wimax: i2400m-usb - use a private struct ethtool_ops Phil Sutter
2012-03-28  2:30 ` [PATCH 1/2] wimax: i2400m - prevent a possible kernel bug due to missing fw_name string David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).