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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to