Skip to content

Commit

Permalink
vt: fix locking around vt_bind/vt_unbind
Browse files Browse the repository at this point in the history
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: Imre Deak <imre.deak@intel.com>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Imre Deak authored and Greg Kroah-Hartman committed Jan 9, 2015
1 parent 2cf30f7 commit 4c215fe
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions drivers/tty/vt/vt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit 4c215fe

Please sign in to comment.