]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
Input: keyboard - fix theoretical race on vt switch
authorAlan Jenkins <alan-jenkins@tuffmail.co.uk>
Wed, 18 Nov 2009 08:40:48 +0000 (00:40 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 20 Nov 2009 08:52:14 +0000 (00:52 -0800)
A VT switch can theoretically change fg_console between

        vc = vc_cons[fg_console].d
and
        kbd = kbd_table + fg_console

Fix it by replacing the second fg_console with vc->vc_num.

Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/char/keyboard.c

index 737be953cc589c5a75750ad47cb89726598ef3a9..747683f055edbcb539bb31588c997ca41081bef9 100644 (file)
@@ -1136,7 +1136,7 @@ static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char u
 static void kbd_rawcode(unsigned char data)
 {
        struct vc_data *vc = vc_cons[fg_console].d;
-       kbd = kbd_table + fg_console;
+       kbd = kbd_table + vc->vc_num;
        if (kbd->kbdmode == VC_RAW)
                put_queue(vc, data);
 }
@@ -1157,7 +1157,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
                tty->driver_data = vc;
        }
 
-       kbd = kbd_table + fg_console;
+       kbd = kbd_table + vc->vc_num;
 
        if (keycode == KEY_LEFTALT || keycode == KEY_RIGHTALT)
                sysrq_alt = down ? keycode : 0;