staging: panel: fix error path
Subsystems (2)
PATCH 4/9 staging: panel: fix error path
panel_attach() poorly handles errors. On error unregister everything we have registered.
Signed-off-by Kulikov Vasiliy <[email protected]>
--- drivers/staging/panel/panel.c | 22 +++++++++++++++++++--- 1 files changed, 19 insertions(+), 3 deletions(-)
drivers/staging/panel/panel.c +19 -3
@@ -2127,12 +2127,18 @@ static void panel_attach(struct parport *port)NULL ,/*PARPORT_DEV_EXCL */ 0, (void *)&pprt); +if (pprt =NULL ) { +pr_err ("panel_attach(): port->number=%d parport=%d, " +"parport_register_device() failed\n" , + port->number, parport); +return ; + }if (parport_claim (pprt)) {printk (KERN_ERR "Panel: could not claim access to parport%d. " "Aborting.\n" , parport); -return ; + goto err_unreg_device; }/* must init LCD first, just in case an IRQ from the keypad is
@@ -2140,13 +2146,23 @@ static void panel_attach(struct parport *port)*/ if (lcd_enabled) {lcd_init (); -misc_register (&lcd_dev); +if (misc_register (&lcd_dev)) + goto err_unreg_device; }if (keypad_enabled) {keypad_init (); -misc_register (&keypad_dev); +if (misc_register (&keypad_dev)) + goto err_lcd_unreg; } +return ; + +err_lcd_unreg: +if (lcd_enabled) +misc_deregister (&lcd_dev); +err_unreg_device: +parport_unregister_device (pprt); + pprt =NULL ; }static void panel_detach (struct parport *port)
Signature · 1 line
1.7.0.4
Looks fine,
Acked-by Willy Tarreau <[email protected]>
Quoted 60 lines · Kulikov Vasiliy
panel_attach()poorly handles errors. On error unregister everything we have registered.Signed-off-by Kulikov Vasiliy <[email protected]>--- drivers/staging/panel/panel.c | 22 +++++++++++++++++++--- 1 files changed, 19 insertions(+), 3 deletions(-)drivers/staging/panel/panel.c +19
-3@@ -2127,12 +2127,18 @@ static void panel_attach(struct parport *port)NULL ,/*PARPORT_DEV_EXCL */ 0, (void *)&pprt); +if (pprt =NULL ) { +pr_err ("panel_attach(): port->number=%d parport=%d, " +"parport_register_device() failed\n" , + port->number, parport); +return ; + }if (parport_claim (pprt)) {printk (KERN_ERR "Panel: could not claim access to parport%d. " "Aborting.\n" , parport); -return ; + goto err_unreg_device; }/* must init LCD first, just in case an IRQ from the keypad is @@ -2140,13 +2146,23 @@ static void panel_attach(struct parport *port)*/ if (lcd_enabled) {lcd_init (); -misc_register (&lcd_dev); +if (misc_register (&lcd_dev)) + goto err_unreg_device; }if (keypad_enabled) {keypad_init (); -misc_register (&keypad_dev); +if (misc_register (&keypad_dev)) + goto err_lcd_unreg; } +return ; + +err_lcd_unreg: +if (lcd_enabled) +misc_deregister (&lcd_dev); +err_unreg_device: +parport_unregister_device (pprt); + pprt =NULL ; }static void panel_detach (struct parport *port)Signature · 1 line
1.7.0.4