linux/drivers/tty/vt
Rabin Vincent a7b12929be vt: fix race in vt_waitactive()
pm_restore_console() is called from the suspend/resume path, and this
calls vt_move_to_console(), which calls vt_waitactive().

There's a race in this path which causes the process which requests the
suspend to sleep indefinitely waiting for an event which already
happened:

P1                                      P2
 vt_move_to_console()
  set_console()
    schedule_console_callback()
  vt_waitactive()
    check n == fg_console +1
                                       console_callback()
                                         switch_screen()
                                         vt_event_post() // no waiters

    vt_event_wait() // forever

Fix the race by ensuring we're registered for the event before we check
if it's already completed.

Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-07-26 13:37:02 -07:00
..
.gitignore TTY: move .gitignore from drivers/char/ to drivers/tty/vt/ 2010-11-05 22:18:23 -07:00
consolemap.c vt: push the tty_lock down into the map handling 2012-04-24 16:14:14 -07:00
cp437.uni
defkeymap.c_shipped
defkeymap.map
keyboard.c Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 11:16:40 -07:00
Makefile
selection.c vt: tackle the main part of the selection logic 2012-03-08 11:11:39 -08:00
vc_screen.c vt: push down the tty lock so we can see what is left to tackle 2012-03-08 11:10:27 -08:00
vt_ioctl.c vt: fix race in vt_waitactive() 2012-07-26 13:37:02 -07:00
vt.c Merge 3.4-rc3 into tty-next 2012-04-18 15:57:31 -07:00