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

Commit 597d473f authored by Samuel Iglesias Gonsalvez's avatar Samuel Iglesias Gonsalvez Committed by Greg Kroah-Hartman
Browse files

Staging: ipack/devices/ipoctal: avoid kernel oops when uninstalling



When uninstalling a device, there is a loop of calls that produces, at the end,
two calls to __ipoctal_remove() function with the same ipack_device argument.

The first time works fine, but the second will fail in tty_unregister_driver()

To avoid this situation, the call to __ipoctal_remove() it is done only from the
ipack bus driver and not from the ipack device driver.

Signed-off-by: default avatarSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b2bc13c5
Loading
Loading
Loading
Loading
+1 −6
Original line number Original line Diff line number Diff line
@@ -853,11 +853,6 @@ static void __ipoctal_remove(struct ipoctal *ipoctal)


	tty_unregister_driver(ipoctal->tty_drv);
	tty_unregister_driver(ipoctal->tty_drv);
	put_tty_driver(ipoctal->tty_drv);
	put_tty_driver(ipoctal->tty_drv);

	/* Tell the carrier board to free all the resources for this device */
	if (ipoctal->dev->bus->ops->remove_device != NULL)
		ipoctal->dev->bus->ops->remove_device(ipoctal->dev);

	list_del(&ipoctal->list);
	list_del(&ipoctal->list);
	kfree(ipoctal);
	kfree(ipoctal);
}
}
@@ -889,7 +884,7 @@ static void __exit ipoctal_exit(void)
	struct ipoctal *p, *next;
	struct ipoctal *p, *next;


	list_for_each_entry_safe(p, next, &ipoctal_list, list)
	list_for_each_entry_safe(p, next, &ipoctal_list, list)
		__ipoctal_remove(p);
		p->dev->bus->ops->remove_device(p->dev);


	ipack_driver_unregister(&driver);
	ipack_driver_unregister(&driver);
}
}