diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2006-04-14 16:46:28 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-04-27 13:28:58 -0400 |
commit | 9fb81ce63671f9743517f628dac935269f2581a9 (patch) | |
tree | faa959f86a921202d71d6f8564677a6c6e81a1a5 | |
parent | 658ad5e001a17be5fadaa8d57d1aa7f7c62628c1 (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>
-rw-r--r-- | drivers/usb/gadget/net2280.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c index b2d507f16b85..0b9293493957 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); |