From a34a0f89fc0b6f06e5958d3b3a2a0f09ced81a81 Mon Sep 17 00:00:00 2001 From: Gene Cumm Date: Sun, 15 Feb 2009 17:24:49 -0500 Subject: [PATCH] COM32 libutil: Fix error in flags in console_ansi_std(void) ICANON and ECHO were applied to the control flags not local flags. If ICANON or ECHO were applied to a serial port on Linux on the x86 architecture, this would change the serial ports baud rate. From my /usr/include/bits/termios.h (select in-order lines): /* c_cflag bit meaning */ #define B150 0000005 #define B300 0000007 #define B9600 0000015 #define B38400 0000017 /* c_lflag bits */ #define ICANON 0000002 #define ECHO 0000010 The different baud rates are defined here. If someone set the baud rate to 9600 and set ICANON on c_cflag, it should change the baud rate to 38400, dropping communication. Another example is if someone set the baud rate to 150 the set ICANON and ECHO on c_cflag, it should change the baud to 38400. If I am interpreting the rest of the file correctly, a bitmask covering all of the bits used in c_cflag for the baud rate is 0010017. Signed-off-by: Gene Cumm Signed-off-by: H. Peter Anvin --- com32/libutil/ansiline.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com32/libutil/ansiline.c b/com32/libutil/ansiline.c index 6ec1e18..4cdac02 100644 --- a/com32/libutil/ansiline.c +++ b/com32/libutil/ansiline.c @@ -82,7 +82,7 @@ void console_ansi_std(void) tcgetattr(0, &tio); tio.c_iflag &= ~ICRNL; tio.c_iflag |= IGNCR; - tio.c_cflag |= ICANON|ECHO; + tio.c_lflag |= ICANON|ECHO; tcsetattr(0, TCSANOW, &tio); fputs("\033[0m\033[20h", stdout); } -- 2.7.4