Skip to contentSkip to conversation

vt: fix a potential race in the VT_WAITACTIVE handler

PATCH New Antonino A. Daplas 1 participant 1 message Apr 1, 2007

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 vt: fix a potential race in the VT_WAITACTIVE handler

From: Michal Januszewski <[email protected]>

On a multiprocessor machine the VT_WAITACTIVE ioctl call may return 0 if fg_console has already been updated in redraw_screen(), but the console switch itself hasn't been completed. Fix this by checking fg_console in vt_waitactive() with the console sem held.

---

 drivers/char/vt_ioctl.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)
drivers/char/vt_ioctl.c +5 -1
index 1fa2da8..6db3088 100644
@@ -1041,8 +1041,12 @@ int vt_waitactive(int vt)
 	for (;;) {
 		set_current_state(TASK_INTERRUPTIBLE);
 		retval = 0;
-		if (vt == fg_console)
+		acquire_console_sem();
+		if (vt == fg_console) {
+			release_console_sem();
 			break;
+		}
+		release_console_sem();
 		retval = -EINTR;
 		if (signal_pending(current))
 			break;

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV