From: Alan Jenkins Date: Wed, 18 Nov 2009 08:40:48 +0000 (-0800) Subject: Input: keyboard - fix theoretical race on vt switch X-Git-Tag: v2.6.33-rc1~337^2~31 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=0c09b2ac35ff7c5f280e5cf8142ad0822f1c93b3;p=karo-tx-linux.git Input: keyboard - fix theoretical race on vt switch 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 Signed-off-by: Dmitry Torokhov --- diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c index 737be953cc58..747683f055ed 100644 --- a/drivers/char/keyboard.c +++ b/drivers/char/keyboard.c @@ -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;