From owner-freebsd-bugs@FreeBSD.ORG Mon Jan 3 18:50:20 2005 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 89F0216A4CE for ; Mon, 3 Jan 2005 18:50:20 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5C11443D2D for ; Mon, 3 Jan 2005 18:50:20 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.1/8.13.1) with ESMTP id j03IoKEi063231 for ; Mon, 3 Jan 2005 18:50:20 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.1/8.13.1/Submit) id j03IoKwQ063230; Mon, 3 Jan 2005 18:50:20 GMT (envelope-from gnats) Resent-Date: Mon, 3 Jan 2005 18:50:20 GMT Resent-Message-Id: <200501031850.j03IoKwQ063230@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Slawa Olhovchenkov Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0E70816A4CE for ; Mon, 3 Jan 2005 18:47:16 +0000 (GMT) Received: from mail.acropolis.ru (mail.acropolis.ru [81.211.90.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id E24A043D48 for ; Mon, 3 Jan 2005 18:47:14 +0000 (GMT) (envelope-from slw@zxy.spb.ru) Received: from slw.office.acropolis.ru (slw.office.acropolis.ru [10.200.0.19]) by mail.acropolis.ru (8.13.1/8.13.1) with ESMTP id j03IlD29090883 for ; Mon, 3 Jan 2005 21:47:14 +0300 (MSK) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (localhost [127.0.0.1])j03IkWPh040400 for ; Mon, 3 Jan 2005 21:46:32 +0300 (MSK) (envelope-from slw@zxy.spb.ru) Received: (from slw@localhost) by zxy.spb.ru (8.13.1/8.13.1/Submit) id j03IkWde040399; Mon, 3 Jan 2005 21:46:32 +0300 (MSK) (envelope-from slw) Message-Id: <200501031846.j03IkWde040399@zxy.spb.ru> Date: Mon, 3 Jan 2005 21:46:32 +0300 (MSK) From: Slawa Olhovchenkov To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: kern/75758: Hard system hangs on tty code X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Slawa Olhovchenkov List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Jan 2005 18:50:20 -0000 >Number: 75758 >Category: kern >Synopsis: Hard system hangs on tty code >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Jan 03 18:50:20 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Slawa Olhovchenkov >Release: FreeBSD 6.0-CURRENT i386 >Organization: no >Environment: System: FreeBSD notebook.acropolis.ru 6.0-CURRENT FreeBSD 6.0-CURRENT #5: Mon Jan 3 13:33:38 MSK 2005 root@notebook.acropolis.ru:/usr/obj/usr/src/sys/BOOK i386 i386, FreeBSD 6.0-CURRENT i386 >Description: 6-current totally hangs by this program, from user, not root. No responds on keys pressed, Control-Alt-ESC, switching console and etc. System run in infinite loop in sys/kern/tty.c:ttread() === read: splx(s); /* * Input present, check for input mapping and processing. */ first = 1; if (ISSET(lflag, ICANON | ISIG)) goto slowcase; for (;;) { char ibuf[IBUFSIZ]; int icc; icc = imin(uio->uio_resid, IBUFSIZ); /* XXX uio_resid==0 => icc=0 */ icc = q_to_b(qp, ibuf, icc); /* icc == 0 */ if (icc <= 0) { if (first) goto loop; === >How-To-Repeat: Run this test program and type any. System immediately hangs. #include #include #include #include #include #include #include #include #include #define cfmakeraw(ptr) (ptr)->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR\ |IGNCR|ICRNL|IXON);\ (ptr)->c_oflag &= ~OPOST;\ (ptr)->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);\ (ptr)->c_cflag &= ~(CSIZE|PARENB);\ (ptr)->c_cflag |= CS8 int main(int argc, char *argv[]) { int fd, i; char *buf[1024]; struct termios tcn; if ((fd = open("/dev/tty", O_RDWR | O_NONBLOCK)) == -1) { return -1; /* errno already set */ } /* Set the tty to raw and to the correct speed */ tcgetattr(fd, &tcn); tcn.c_oflag = 0; tcn.c_iflag = IGNBRK | IGNPAR; tcn.c_cflag = CREAD | CLOCAL | CS8; tcn.c_lflag = NOFLSH; cfmakeraw(&tcn); for (i = 0; i < 16; i++) tcn.c_cc[i] = 0; tcn.c_cc[VMIN] = 1; tcn.c_cc[VTIME] = 0; tcsetattr(fd, TCSANOW, &tcn); if ((i = fcntl(fd, F_GETFL, 0)) != -1) { i &= ~O_NONBLOCK; fcntl(fd, F_SETFL, i); } read(fd, buf, 0); } >Fix: >Release-Note: >Audit-Trail: >Unformatted: