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

Commit 4c215fe8 authored by Imre Deak's avatar Imre Deak Committed by Greg Kroah-Hartman
Browse files

vt: fix locking around vt_bind/vt_unbind



Currently vt_bind and vt_unbind access at least the con_driver object
and registered_con_driver array without holding the console lock. Fix
this by locking around the whole function in each case.

Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2cf30f75
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -3318,11 +3318,8 @@ static int vt_bind(struct con_driver *con)
		if (first == 0 && last == MAX_NR_CONSOLES -1)
			deflt = 1;

		if (first != -1) {
			console_lock();
		if (first != -1)
			do_bind_con_driver(csw, first, last, deflt);
			console_unlock();
		}

		first = -1;
		last = -1;
@@ -3362,9 +3359,7 @@ static int vt_unbind(struct con_driver *con)
			deflt = 1;

		if (first != -1) {
			console_lock();
			ret = do_unbind_con_driver(csw, first, last, deflt);
			console_unlock();
			if (ret != 0)
				return ret;
		}
@@ -3394,11 +3389,15 @@ static ssize_t store_bind(struct device *dev, struct device_attribute *attr,
	struct con_driver *con = dev_get_drvdata(dev);
	int bind = simple_strtoul(buf, NULL, 0);

	console_lock();

	if (bind)
		vt_bind(con);
	else
		vt_unbind(con);

	console_unlock();

	return count;
}