Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Aug 2016 15:34:53 +0000 (UTC)
From:      Bruce Evans <bde@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r304164 - head/sys/dev/syscons
Message-ID:  <201608151534.u7FFYrwj011505@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bde
Date: Mon Aug 15 15:34:53 2016
New Revision: 304164
URL: https://svnweb.freebsd.org/changeset/base/304164

Log:
  Disable some more unsafe things in (low level) console mode:
  - never call up to the tty layer to restart output for keyboard input in
    console mode.  This was already disallowed in kdb mode.  Other cases
    are rarely reached.
  - disable the reboot, halt and powerdown keys in console mode.  The suspend,
    standby and panic keys are still allowed, and aren't even conditonal
    on excessive configuration options.  Some of these actions are still
    available in ddb mode as ddb commands which are equally unsafe.  Some
    are useful at input prompts and should be restored when the locking is
    fixed.
  - disallow bells in kdb mode (should be in console mode, but the flag for
    that is not available).  Visual bell gives very alarming behaviour by
    trying to use callouts which don't work in kdb mode.  Audio bell uses
    timeouts and hardware resources with mutexes that can deadlock in
    reasonable use of ddb.
  
  Screen switches in kdb mode are not very safe, but they are important
  functionality and there is a lot of code to make them sort of work.

Modified:
  head/sys/dev/syscons/syscons.c

Modified: head/sys/dev/syscons/syscons.c
==============================================================================
--- head/sys/dev/syscons/syscons.c	Mon Aug 15 15:23:45 2016	(r304163)
+++ head/sys/dev/syscons/syscons.c	Mon Aug 15 15:34:53 2016	(r304164)
@@ -3505,8 +3505,9 @@ next_code:
 			    scp->status |= CURSOR_ENABLED;
 			    sc_draw_cursor_image(scp);
 			}
+			/* Only safe in Giant-locked context. */
 			tp = SC_DEV(sc, scp->index);
-			if (!kdb_active && tty_opened_ns(tp))
+			if (!(flags & SCGETC_CN) && tty_opened_ns(tp))
 			    sctty_outwakeup(tp);
 #endif
 		    }
@@ -3557,21 +3558,21 @@ next_code:
 
 	    case RBT:
 #ifndef SC_DISABLE_REBOOT
-		if (enable_reboot)
+		if (enable_reboot && !(flags & SCGETC_CN))
 			shutdown_nice(0);
 #endif
 		break;
 
 	    case HALT:
 #ifndef SC_DISABLE_REBOOT
-		if (enable_reboot)
+		if (enable_reboot && !(flags & SCGETC_CN))
 			shutdown_nice(RB_HALT);
 #endif
 		break;
 
 	    case PDWN:
 #ifndef SC_DISABLE_REBOOT
-		if (enable_reboot)
+		if (enable_reboot && !(flags & SCGETC_CN))
 			shutdown_nice(RB_HALT|RB_POWEROFF);
 #endif
 		break;
@@ -3842,7 +3843,7 @@ sc_respond(scr_stat *scp, const u_char *
 void
 sc_bell(scr_stat *scp, int pitch, int duration)
 {
-    if (cold || shutdown_in_progress || !enable_bell)
+    if (cold || kdb_active || shutdown_in_progress || !enable_bell)
 	return;
 
     if (scp != scp->sc->cur_scp && (scp->sc->flags & SC_QUIET_BELL))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608151534.u7FFYrwj011505>