Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10f3f5b7 authored by Kulikov Vasiliy's avatar Kulikov Vasiliy Committed by Greg Kroah-Hartman
Browse files

staging: panel: fix error path



panel_attach() poorly handles errors. On error unregister everything we
have registered.

Signed-off-by: default avatarKulikov Vasiliy <segooon@gmail.com>
Acked-by: default avatarWilly Tarreau <w@1wt.eu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent d49d0e39
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -2124,12 +2124,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
@@ -2137,13 +2143,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)