From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JrcMd-000160-5y for qemu-devel@nongnu.org; Thu, 01 May 2008 13:14:35 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JrcMZ-00014D-OO for qemu-devel@nongnu.org; Thu, 01 May 2008 13:14:34 -0400 Received: from [199.232.76.173] (port=36168 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JrcMZ-00014A-MJ for qemu-devel@nongnu.org; Thu, 01 May 2008 13:14:31 -0400 Received: from mx1.redhat.com ([66.187.233.31]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JrcMZ-00004u-D8 for qemu-devel@nongnu.org; Thu, 01 May 2008 13:14:31 -0400 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m41HEPrT000858 for ; Thu, 1 May 2008 13:14:25 -0400 Received: from file.fab.redhat.com (file.fab.redhat.com [10.33.63.6]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m41HEOoY031261 for ; Thu, 1 May 2008 13:14:24 -0400 Received: (from berrange@localhost) by file.fab.redhat.com (8.13.1/8.13.1/Submit) id m41HEONT008942 for qemu-devel@nongnu.org; Thu, 1 May 2008 18:14:24 +0100 Date: Thu, 1 May 2008 18:14:24 +0100 From: "Daniel P. Berrange" Subject: Re: [Qemu-devel] PATCH: Put Psuedo-TTY in rawmode for char devices Message-ID: <20080501171424.GF21335@redhat.com> References: <20080422005057.GD3649@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20080422005057.GD3649@redhat.com> Reply-To: "Daniel P. Berrange" , qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Re-posting patch for review/inclusion... On Tue, Apr 22, 2008 at 01:50:57AM +0100, Daniel P. Berrange wrote: > If running a QEMU instance with a serial/parallel device connected to a > Psuedo-TTY, eg '-serial pty', every \r\n sequence output by the guest > is getting translated into a \n\n sequence by the TTY layer. So clients > interacting with the serial port via a TTY done get the correct \r\n > sequence and text marches to the right and wraps. This is because the > TTY is not put into rawmode when QEMU sets it up. > > The following patch is a re-diff of a patch applied to Xen's QEMU code. > It uses cfmakeraw() to ensure the TTY is put into rawmode, thus avoiding > the incorrect \r\n translations. It also switches to tcsetattr() on the > slave_fd instead of master_fd - although this is effectively the same on > Linux, only slave_fd works on Solaris. Finally it stops using the 'name' > arg to openpty() which is a security risk because its buffer size is > undefined. Instead it makes use of the ptsname() function. Here is the patch re-diff to apply cleanly to latest SVN checkout of QEMU codebase. Signed-off-by: Daniel P. Berrange Regards, Daniel Index: vl.c =================================================================== --- vl.c (revision 4291) +++ vl.c (working copy) @@ -2273,24 +2273,20 @@ static CharDriverState *qemu_chr_open_pty(void) { struct termios tty; - char slave_name[1024]; int master_fd, slave_fd; #if defined(__linux__) /* Not satisfying */ - if (openpty(&master_fd, &slave_fd, slave_name, NULL, NULL) < 0) { + if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) < 0) { return NULL; } #endif - /* Disabling local echo and line-buffered output */ - tcgetattr (master_fd, &tty); - tty.c_lflag &= ~(ECHO|ICANON|ISIG); - tty.c_cc[VMIN] = 1; - tty.c_cc[VTIME] = 0; - tcsetattr (master_fd, TCSAFLUSH, &tty); + /* Set raw attributes on the pty. */ + cfmakeraw(&tty); + tcsetattr(slave_fd, TCSAFLUSH, &tty); - fprintf(stderr, "char device redirected to %s\n", slave_name); + fprintf(stderr, "char device redirected to %s\n", ptsname(master_fd)); return qemu_chr_open_fd(master_fd, master_fd); } -- |: Red Hat, Engineering, Boston -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|