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

Commit 9bb8a3d4 authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman
Browse files

TTY: centralize fail paths in tty_register_driver



Currently, some failures are handled in if's false branches, some at
the end of tty_register_driver via goto-labels. Let us handle the
failures at the end of the functions to have the failure handling at
a single place. The only thing needed is to label the lines properly
and jump there.

Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent ca4ff100
Loading
Loading
Loading
Loading
+6 −12
Original line number Original line Diff line number Diff line
@@ -3144,10 +3144,8 @@ int tty_register_driver(struct tty_driver *driver)
		dev = MKDEV(driver->major, driver->minor_start);
		dev = MKDEV(driver->major, driver->minor_start);
		error = register_chrdev_region(dev, driver->num, driver->name);
		error = register_chrdev_region(dev, driver->num, driver->name);
	}
	}
	if (error < 0) {
	if (error < 0)
		kfree(p);
		goto err_free_p;
		return error;
	}


	if (p) {
	if (p) {
		driver->ttys = (struct tty_struct **)p;
		driver->ttys = (struct tty_struct **)p;
@@ -3160,13 +3158,8 @@ int tty_register_driver(struct tty_driver *driver)
	cdev_init(&driver->cdev, &tty_fops);
	cdev_init(&driver->cdev, &tty_fops);
	driver->cdev.owner = driver->owner;
	driver->cdev.owner = driver->owner;
	error = cdev_add(&driver->cdev, dev, driver->num);
	error = cdev_add(&driver->cdev, dev, driver->num);
	if (error) {
	if (error)
		unregister_chrdev_region(dev, driver->num);
		goto err_unreg_char;
		driver->ttys = NULL;
		driver->termios = NULL;
		kfree(p);
		return error;
	}


	mutex_lock(&tty_mutex);
	mutex_lock(&tty_mutex);
	list_add(&driver->tty_drivers, &tty_drivers);
	list_add(&driver->tty_drivers, &tty_drivers);
@@ -3193,13 +3186,14 @@ int tty_register_driver(struct tty_driver *driver)
	list_del(&driver->tty_drivers);
	list_del(&driver->tty_drivers);
	mutex_unlock(&tty_mutex);
	mutex_unlock(&tty_mutex);


err_unreg_char:
	unregister_chrdev_region(dev, driver->num);
	unregister_chrdev_region(dev, driver->num);
	driver->ttys = NULL;
	driver->ttys = NULL;
	driver->termios = NULL;
	driver->termios = NULL;
err_free_p:
	kfree(p);
	kfree(p);
	return error;
	return error;
}
}

EXPORT_SYMBOL(tty_register_driver);
EXPORT_SYMBOL(tty_register_driver);


/*
/*