Message ID | alpine.LRH.2.00.1107201834220.19334@sbhatewara-dev1.eng.vmware.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
> Parent device for netdev should be set before netdev_info() can be called > otherwise there is a NULL pointer dereference and probe() fails. > Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com> Signed-off-by: Scott J. Goldman <scottjg@vmware.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
On Wed, 2011-07-20 at 20:06 -0700, Scott Goldman wrote: > > Parent device for netdev should be set before netdev_info() can be called > > otherwise there is a NULL pointer dereference and probe() fails. I believe this is not true. I don't see any NULL pointer dereference here. functions and macros reordered top to bottom. define_netdev_printk_level(netdev_info, KERN_INFO); #define define_netdev_printk_level(func, level) \ int func(const struct net_device *dev, const char *fmt, ...) \ { \ int r; \ struct va_format vaf; \ va_list args; \ \ va_start(args, fmt); \ \ vaf.fmt = fmt; \ vaf.va = &args; \ \ r = __netdev_printk(level, dev, &vaf); \ va_end(args); \ \ return r; \ } \ EXPORT_SYMBOL(func); static int __netdev_printk(const char *level, const struct net_device *dev, struct va_format *vaf) { int r; if (dev && dev->dev.parent) r = dev_printk(level, dev->dev.parent, "%s: %pV", netdev_name(dev), vaf); else if (dev) r = printk("%s%s: %pV", level, netdev_name(dev), vaf); else r = printk("%s(NULL net_device): %pV", level, vaf); return r; } static inline const char *netdev_name(const struct net_device *dev) { if (dev->reg_state != NETREG_REGISTERED) return "(unregistered net_device)"; return dev->name; } -- 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
> -----Original Message----- > From: Joe Perches [mailto:joe@perches.com] > Sent: Wednesday, July 20, 2011 8:49 PM > To: Scott Goldman > Cc: Shreyas Bhatewara; netdev@vger.kernel.org; pv-drivers@vmware.com > Subject: RE: [Pv-drivers] [PATCH net-next] vmxnet3: set netdev parant > device before calling netdev_info > > On Wed, 2011-07-20 at 20:06 -0700, Scott Goldman wrote: > > > Parent device for netdev should be set before netdev_info() can be > called > > > otherwise there is a NULL pointer dereference and probe() fails. > > I believe this is not true. > I don't see any NULL pointer dereference here. > functions and macros reordered top to bottom. > Thanks for looking Joe. This happened in 2.6.36. I saw the panic in 2.6.34 and assumed that it would be same in the latest kernel. It would not panic in 3.0 but it is good to have the parent device set early.
From: Shreyas Bhatewara <sbhatewara@vmware.com> Date: Wed, 20 Jul 2011 19:01:11 -0700 (PDT) > > Parent device for netdev should be set before netdev_info() can be called > otherwise there is a NULL pointer dereference and probe() fails. > > Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.com> Applied. -- 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/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 009277e..1a8cc5b 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c @@ -2993,6 +2993,7 @@ vmxnet3_probe_device(struct pci_dev *pdev, goto err_ver; } + SET_NETDEV_DEV(netdev, &pdev->dev); vmxnet3_declare_features(adapter, dma64); adapter->dev_number = atomic_read(&devices_found); @@ -3038,7 +3039,6 @@ vmxnet3_probe_device(struct pci_dev *pdev, netif_set_real_num_tx_queues(adapter->netdev, adapter->num_tx_queues); netif_set_real_num_rx_queues(adapter->netdev, adapter->num_rx_queues); - SET_NETDEV_DEV(netdev, &pdev->dev); err = register_netdev(netdev); if (err) {
Parent device for netdev should be set before netdev_info() can be called otherwise there is a NULL pointer dereference and probe() fails. Signed-off-by: Shreyas N Bhatewara <sbhatewara@vmware.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