Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 May 2009 17:39:23 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r191893 - head/sys/kern
Message-ID:  <200905071739.n47HdNjl063137@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ed
Date: Thu May  7 17:39:23 2009
New Revision: 191893
URL: http://svn.freebsd.org/changeset/base/191893

Log:
  If we have a regular rint handler, never go into rint_bypass mode.
  
  It turns out if we called cfmakeraw() on a TTY with only a rint handler
  in place, it could inject data into the TTY, even though it should be
  redirected. Always take a look at the hooks before looking at the
  termios flags.

Modified:
  head/sys/kern/tty_ttydisc.c

Modified: head/sys/kern/tty_ttydisc.c
==============================================================================
--- head/sys/kern/tty_ttydisc.c	Thu May  7 17:05:03 2009	(r191892)
+++ head/sys/kern/tty_ttydisc.c	Thu May  7 17:39:23 2009	(r191893)
@@ -560,12 +560,15 @@ ttydisc_optimize(struct tty *tp)
 {
 	tty_lock_assert(tp, MA_OWNED);
 
-	if ((!CMP_FLAG(i, ICRNL|IGNCR|IMAXBEL|INLCR|ISTRIP|IXON) &&
+	if (ttyhook_hashook(tp, rint_bypass)) {
+		tp->t_flags |= TF_BYPASS;
+	} else if (ttyhook_hashook(tp, rint)) {
+		tp->t_flags &= ~TF_BYPASS;
+	} else if (!CMP_FLAG(i, ICRNL|IGNCR|IMAXBEL|INLCR|ISTRIP|IXON) &&
 	    (!CMP_FLAG(i, BRKINT) || CMP_FLAG(i, IGNBRK)) &&
 	    (!CMP_FLAG(i, PARMRK) ||
 	        CMP_FLAG(i, IGNPAR|IGNBRK) == (IGNPAR|IGNBRK)) &&
-	    !CMP_FLAG(l, ECHO|ICANON|IEXTEN|ISIG|PENDIN)) ||
-	    ttyhook_hashook(tp, rint_bypass)) {
+	    !CMP_FLAG(l, ECHO|ICANON|IEXTEN|ISIG|PENDIN)) {
 		tp->t_flags |= TF_BYPASS;
 	} else {
 		tp->t_flags &= ~TF_BYPASS;



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