aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/net2280.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2006-04-14 16:46:28 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-04-27 13:28:58 -0400
commit9fb81ce63671f9743517f628dac935269f2581a9 (patch)
treefaa959f86a921202d71d6f8564677a6c6e81a1a5 /drivers/usb/gadget/net2280.c
parent658ad5e001a17be5fadaa8d57d1aa7f7c62628c1 (diff)
[PATCH] USB: net2280: set driver data before it is used
This patch (as671) fixes a bug in the error pathway for the net2280 probe routine. A failure during probe will cause the driver to call pci_get_drvdata before the corresponding pci_set_drvdata has been set. The patch also does a kzalloc conversion. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/gadget/net2280.c')
-rw-r--r--drivers/usb/gadget/net2280.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c
index b2d507f16b8..0b929349395 100644
--- a/drivers/usb/gadget/net2280.c
+++ b/drivers/usb/gadget/net2280.c
@@ -2833,13 +2833,13 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
2833 } 2833 }
2834 2834
2835 /* alloc, and start init */ 2835 /* alloc, and start init */
2836 dev = kmalloc (sizeof *dev, SLAB_KERNEL); 2836 dev = kzalloc (sizeof *dev, SLAB_KERNEL);
2837 if (dev == NULL){ 2837 if (dev == NULL){
2838 retval = -ENOMEM; 2838 retval = -ENOMEM;
2839 goto done; 2839 goto done;
2840 } 2840 }
2841 2841
2842 memset (dev, 0, sizeof *dev); 2842 pci_set_drvdata (pdev, dev);
2843 spin_lock_init (&dev->lock); 2843 spin_lock_init (&dev->lock);
2844 dev->pdev = pdev; 2844 dev->pdev = pdev;
2845 dev->gadget.ops = &net2280_ops; 2845 dev->gadget.ops = &net2280_ops;
@@ -2952,7 +2952,6 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
2952 dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff; 2952 dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff;
2953 2953
2954 /* done */ 2954 /* done */
2955 pci_set_drvdata (pdev, dev);
2956 INFO (dev, "%s\n", driver_desc); 2955 INFO (dev, "%s\n", driver_desc);
2957 INFO (dev, "irq %s, pci mem %p, chip rev %04x\n", 2956 INFO (dev, "irq %s, pci mem %p, chip rev %04x\n",
2958 bufp, base, dev->chiprev); 2957 bufp, base, dev->chiprev);