Commit 1c8ea5ae authored by Andrew Morton's avatar Andrew Morton Committed by David S. Miller

[IRDA] irda_device_dongle_init: fix kzalloc(GFP_KERNEL) in spinlock

Fix http://bugzilla.kernel.org/show_bug.cgi?id=8343Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarSamuel Ortiz <samuel@sortiz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 14690fc6
...@@ -375,7 +375,7 @@ EXPORT_SYMBOL(alloc_irdadev); ...@@ -375,7 +375,7 @@ EXPORT_SYMBOL(alloc_irdadev);
dongle_t *irda_device_dongle_init(struct net_device *dev, int type) dongle_t *irda_device_dongle_init(struct net_device *dev, int type)
{ {
struct dongle_reg *reg; struct dongle_reg *reg;
dongle_t *dongle = NULL; dongle_t *dongle = kzalloc(sizeof(dongle_t), GFP_KERNEL);
might_sleep(); might_sleep();
...@@ -397,19 +397,14 @@ dongle_t *irda_device_dongle_init(struct net_device *dev, int type) ...@@ -397,19 +397,14 @@ dongle_t *irda_device_dongle_init(struct net_device *dev, int type)
if (!reg || !try_module_get(reg->owner) ) { if (!reg || !try_module_get(reg->owner) ) {
IRDA_ERROR("IrDA: Unable to find requested dongle type %x\n", IRDA_ERROR("IrDA: Unable to find requested dongle type %x\n",
type); type);
goto out; kfree(dongle);
dongle = NULL;
} }
if (dongle) {
/* Allocate dongle info for this instance */
dongle = kzalloc(sizeof(dongle_t), GFP_KERNEL);
if (!dongle)
goto out;
/* Bind the registration info to this particular instance */ /* Bind the registration info to this particular instance */
dongle->issue = reg; dongle->issue = reg;
dongle->dev = dev; dongle->dev = dev;
}
out:
spin_unlock(&dongles->hb_spinlock); spin_unlock(&dongles->hb_spinlock);
return dongle; return dongle;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment