aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/parport/parport_gsc.c4
-rw-r--r--drivers/parport/parport_sunbpp.c5
-rw-r--r--drivers/parport/procfs.c6
3 files changed, 6 insertions, 9 deletions
diff --git a/drivers/parport/parport_gsc.c b/drivers/parport/parport_gsc.c
index 050773c36823..a5251cb5fb0c 100644
--- a/drivers/parport/parport_gsc.c
+++ b/drivers/parport/parport_gsc.c
@@ -246,14 +246,14 @@ struct parport *parport_gsc_probe_port(unsigned long base,
246 printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base); 246 printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base);
247 return NULL; 247 return NULL;
248 } 248 }
249 ops = kmalloc (sizeof (struct parport_operations), GFP_KERNEL); 249 ops = kmemdup(&parport_gsc_ops, sizeof(struct parport_operations),
250 GFP_KERNEL);
250 if (!ops) { 251 if (!ops) {
251 printk (KERN_DEBUG "parport (0x%lx): no memory for ops!\n", 252 printk (KERN_DEBUG "parport (0x%lx): no memory for ops!\n",
252 base); 253 base);
253 kfree (priv); 254 kfree (priv);
254 return NULL; 255 return NULL;
255 } 256 }
256 memcpy (ops, &parport_gsc_ops, sizeof (struct parport_operations));
257 priv->ctr = 0xc; 257 priv->ctr = 0xc;
258 priv->ctr_writable = 0xff; 258 priv->ctr_writable = 0xff;
259 priv->dma_buf = 0; 259 priv->dma_buf = 0;
diff --git a/drivers/parport/parport_sunbpp.c b/drivers/parport/parport_sunbpp.c
index 5c4b6a1db6ca..dffd6d0bd15b 100644
--- a/drivers/parport/parport_sunbpp.c
+++ b/drivers/parport/parport_sunbpp.c
@@ -284,12 +284,11 @@ static int bpp_probe(struct platform_device *op)
284 size = resource_size(&op->resource[0]); 284 size = resource_size(&op->resource[0]);
285 dma = PARPORT_DMA_NONE; 285 dma = PARPORT_DMA_NONE;
286 286
287 ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL); 287 ops = kmemdup(&parport_sunbpp_ops, sizeof(struct parport_operations),
288 GFP_KERNEL);
288 if (!ops) 289 if (!ops)
289 goto out_unmap; 290 goto out_unmap;
290 291
291 memcpy (ops, &parport_sunbpp_ops, sizeof(struct parport_operations));
292
293 dprintk(("register_port\n")); 292 dprintk(("register_port\n"));
294 if (!(p = parport_register_port((unsigned long)base, irq, dma, ops))) 293 if (!(p = parport_register_port((unsigned long)base, irq, dma, ops)))
295 goto out_free_ops; 294 goto out_free_ops;
diff --git a/drivers/parport/procfs.c b/drivers/parport/procfs.c
index 3f56bc086cb5..92ed045a5f93 100644
--- a/drivers/parport/procfs.c
+++ b/drivers/parport/procfs.c
@@ -476,10 +476,9 @@ int parport_proc_register(struct parport *port)
476 struct parport_sysctl_table *t; 476 struct parport_sysctl_table *t;
477 int i; 477 int i;
478 478
479 t = kmalloc(sizeof(*t), GFP_KERNEL); 479 t = kmemdup(&parport_sysctl_template, sizeof(*t), GFP_KERNEL);
480 if (t == NULL) 480 if (t == NULL)
481 return -ENOMEM; 481 return -ENOMEM;
482 memcpy(t, &parport_sysctl_template, sizeof(*t));
483 482
484 t->device_dir[0].extra1 = port; 483 t->device_dir[0].extra1 = port;
485 484
@@ -523,10 +522,9 @@ int parport_device_proc_register(struct pardevice *device)
523 struct parport_device_sysctl_table *t; 522 struct parport_device_sysctl_table *t;
524 struct parport * port = device->port; 523 struct parport * port = device->port;
525 524
526 t = kmalloc(sizeof(*t), GFP_KERNEL); 525 t = kmemdup(&parport_device_sysctl_template, sizeof(*t), GFP_KERNEL);
527 if (t == NULL) 526 if (t == NULL)
528 return -ENOMEM; 527 return -ENOMEM;
529 memcpy(t, &parport_device_sysctl_template, sizeof(*t));
530 528
531 t->dev_dir[0].child = t->parport_dir; 529 t->dev_dir[0].child = t->parport_dir;
532 t->parport_dir[0].child = t->port_dir; 530 t->parport_dir[0].child = t->port_dir;