2004-03-04 03:58:38

by Chris Wright

[permalink] [raw]
Subject: [PATCH] class_simple clean up in lp

Error condition isn't caught on class_simple_create, and
parport_register_driver failure doesn't do proper cleanup.

===== drivers/char/lp.c 1.32 vs edited =====
--- 1.32/drivers/char/lp.c Wed Mar 3 04:45:18 2004
+++ edited/drivers/char/lp.c Wed Mar 3 19:32:56 2004
@@ -869,7 +869,7 @@

int __init lp_init (void)
{
- int i;
+ int i, err = 0;

if (parport_nr[0] == LP_PARPORT_OFF)
return 0;
@@ -900,10 +900,15 @@

devfs_mk_dir("printers");
lp_class = class_simple_create(THIS_MODULE, "printer");
+ if (IS_ERR(lp_class)) {
+ err = PTR_ERR(lp_class);
+ goto out_devfs;
+ }

if (parport_register_driver (&lp_driver)) {
printk (KERN_ERR "lp: unable to register with parport\n");
- return -EIO;
+ err = -EIO;
+ goto out_class;
}

if (!lp_count) {
@@ -915,6 +920,13 @@
}

return 0;
+
+out_class:
+ class_simple_destroy(lp_class);
+out_devfs:
+ devfs_remove("printers");
+ unregister_chrdev(LP_MAJOR, "lp");
+ return err;
}

static int __init lp_init_module (void)


2004-03-11 01:44:03

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH] class_simple clean up in lp

On Wed, Mar 03, 2004 at 07:58:32PM -0800, Chris Wright wrote:
> Error condition isn't caught on class_simple_create, and
> parport_register_driver failure doesn't do proper cleanup.

Applied, thanks.

greg k-h