diff options
author | 2014-12-16 00:16:00 +0200 | |
---|---|---|
committer | 2015-01-09 14:39:52 -0800 | |
commit | 4c215fe8e288c87b34c3d5bc910c77af586859d2 (patch) | |
tree | 795531c21214db75568939c769a33d4336efe81a /drivers/tty/vt | |
parent | vt: fix check for system/busy console drivers when unregistering them (diff) | |
download | linux-4c215fe8e288c87b34c3d5bc910c77af586859d2.tar.gz linux-4c215fe8e288c87b34c3d5bc910c77af586859d2.tar.bz2 linux-4c215fe8e288c87b34c3d5bc910c77af586859d2.zip |
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: 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>
Diffstat (limited to 'drivers/tty/vt')
-rw-r--r-- | drivers/tty/vt/vt.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index 9c046fbe851b..5d36c2358b47 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c @@ -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; } |