From ba33485e12136e2ef494231f719abe4537713fc3 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Sat, 11 Feb 2006 17:56:05 -0800 Subject: [PATCH] --- yaml --- r: 20221 b: refs/heads/master c: 1d30883942cfe8a1e3f88f8b7f4c292aeba3db5a h: refs/heads/master i: 20219: 7acb72c7c51f9d30d0f6a941779a2fc4ccac6358 v: v3 --- [refs] | 2 +- trunk/drivers/char/tipar.c | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 3ac965f4dc8e..b3426a52c476 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ef1bea9e2a5a72d2c3362522e0a09099406732ff +refs/heads/master: 1d30883942cfe8a1e3f88f8b7f4c292aeba3db5a diff --git a/trunk/drivers/char/tipar.c b/trunk/drivers/char/tipar.c index 41a94bc79f67..eb2eb3e12d6a 100644 --- a/trunk/drivers/char/tipar.c +++ b/trunk/drivers/char/tipar.c @@ -250,12 +250,17 @@ tipar_open(struct inode *inode, struct file *file) { unsigned int minor = iminor(inode) - TIPAR_MINOR; - if (minor > tp_count - 1) + if (tp_count == 0 || minor > tp_count - 1) return -ENXIO; if (test_and_set_bit(minor, &opened)) return -EBUSY; + if (!table[minor].dev) { + printk(KERN_ERR "%s: NULL device for minor %u\n", + __FUNCTION__, minor); + return -ENXIO; + } parport_claim_or_block(table[minor].dev); init_ti_parallel(minor); parport_release(table[minor].dev); @@ -510,16 +515,20 @@ tipar_init_module(void) err = PTR_ERR(tipar_class); goto out_chrdev; } - if (parport_register_driver(&tipar_driver)) { + if (parport_register_driver(&tipar_driver) || tp_count == 0) { printk(KERN_ERR "tipar: unable to register with parport\n"); err = -EIO; - goto out; + goto out_class; } err = 0; goto out; +out_class: + class_destroy(tipar_class); + out_chrdev: + devfs_remove("ticables/par"); unregister_chrdev(TIPAR_MAJOR, "tipar"); out: return err;