From 18266d8ec7bb6f944fc0068dfc6e7e2a206b33883c0fa959f3227f6812d2eef5 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Fri, 10 Jan 2014 13:13:23 +0000 Subject: [PATCH] . OBS-URL: https://build.opensuse.org/package/show/Base:System/util-linux?expand=0&rev=199 --- ...ty-fooled-on-serial-line-due-plymout.patch | 101 ++++++++++++++++++ util-linux.changes | 9 ++ util-linux.spec | 5 +- 3 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 agetty-fooled-on-serial-line-due-plymout.patch diff --git a/agetty-fooled-on-serial-line-due-plymout.patch b/agetty-fooled-on-serial-line-due-plymout.patch new file mode 100644 index 0000000..dae4c0f --- /dev/null +++ b/agetty-fooled-on-serial-line-due-plymout.patch @@ -0,0 +1,101 @@ +Even with TTYReset=no it seems with systemd or plymouth the termios +flags become changed from under the first agetty on a serial system +console as the flags are locked. + +--- + agetty.c | 39 ++++++++++++++++++++++++++++++++------- + 1 file changed, 32 insertions(+), 7 deletions(-) + +--- term-utils/agetty.c ++++ term-utils/agetty.c 2014-01-10 13:05:50.411075349 +0000 +@@ -281,8 +281,9 @@ + static char *fakehost; + + #ifdef DEBUGGING ++# include "closestream.h" + # ifndef DEBUG_OUTPUT +-# define DEBUG_OUTPUT "/dev/ttyp0" ++# define DEBUG_OUTPUT "/dev/tty10" + # endif + # define debug(s) do { fprintf(dbf,s); fflush(dbf); } while (0) + FILE *dbf; +@@ -320,8 +321,12 @@ + + #ifdef DEBUGGING + dbf = fopen(DEBUG_OUTPUT, "w"); +- for (int i = 1; i < argc; i++) ++ for (int i = 1; i < argc; i++) { ++ if (i > 1) ++ debug(" "); + debug(argv[i]); ++ } ++ debug("\n"); + #endif /* DEBUGGING */ + + /* Parse command-line arguments. */ +@@ -473,7 +478,6 @@ + if (options.osrelease) + free(options.osrelease); + #ifdef DEBUGGING +- fprintf(dbf, "read %c\n", ch); + if (close_stream(dbf) != 0) + log_err("write failed: %s", DEBUG_OUTPUT); + #endif +@@ -1090,6 +1094,23 @@ + { + speed_t ispeed, ospeed; + struct winsize ws; ++ int i; ++ ++ for (i = 0; i < 10; i++) { ++ /* ++ * Even with TTYReset=no it seems with systemd or plymouth ++ * the termios flags become changed from under the first ++ * agetty on a serial system console as the flags are locked. ++ */ ++ struct termios lock; ++ memset(&lock, 0, sizeof(struct termios)); ++ if (ioctl(STDIN_FILENO, TIOCGLCKTRMIOS, &lock) < 0) ++ break; ++ if (!lock.c_iflag && !lock.c_oflag && !lock.c_cflag && !lock.c_lflag) ++ break; ++ debug("termios locked\n"); ++ tcsendbreak(STDIN_FILENO, 0); /* 0.25 upto 0.5 seconds */ ++ } + + if (op->flags & F_VCONSOLE) { + #if defined(IUTF8) && defined(KDGKBMODE) +@@ -1154,9 +1175,6 @@ + * later on. + */ + +- /* Flush input and output queues, important for modems! */ +- tcflush(STDIN_FILENO, TCIOFLUSH); +- + #ifdef IUTF8 + tp->c_iflag = tp->c_iflag & IUTF8; + if (tp->c_iflag & IUTF8) +@@ -1216,8 +1234,11 @@ + if (op->flags & F_RTSCTS) + tp->c_cflag |= CRTSCTS; + #endif ++ /* Flush input and output queues, important for modems! */ ++ tcflush(STDIN_FILENO, TCIOFLUSH); + +- tcsetattr(STDIN_FILENO, TCSANOW, tp); ++ if (tcsetattr(STDIN_FILENO, TCSANOW, tp)) ++ log_warn(_("setting terminal attributes failed: %m")); + + /* Go to blocking input even in local mode. */ + fcntl(STDIN_FILENO, F_SETFL, +@@ -1238,6 +1259,10 @@ + + if (tcsetattr(STDIN_FILENO, TCSADRAIN, tp)) + log_warn(_("setting terminal attributes failed: %m")); ++ ++ /* Go to blocking input even in local mode. */ ++ fcntl(STDIN_FILENO, F_SETFL, ++ fcntl(STDIN_FILENO, F_GETFL, 0) & ~O_NONBLOCK); + } + + /* Extract baud rate from modem status message. */ diff --git a/util-linux.changes b/util-linux.changes index baf13a7..ef9c134 100644 --- a/util-linux.changes +++ b/util-linux.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Fri Jan 10 13:08:45 UTC 2014 - werner@suse.de + +- Add patch + agetty-fooled-on-serial-line-due-plymout.patch + even with TTYReset=no it seems with systemd or plymouth the termios + flags become changed from under the first agetty on a serial system + console as the flags are locked (bnc#774126). + ------------------------------------------------------------------- Tue Dec 10 16:10:27 UTC 2013 - sweet_f_a@gmx.de diff --git a/util-linux.spec b/util-linux.spec index ead67ef..4ca12ea 100644 --- a/util-linux.spec +++ b/util-linux.spec @@ -1,7 +1,7 @@ # # spec file for package util-linux # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -108,6 +108,8 @@ Patch12: util-linux-2.23.1-noenc-suse.diff Patch13: blkdiscard-BLKSSZGET-fills-in-an-int.patch # PATCH-FIX-SUSE -- better support of S390 in agetty Patch14: tty3270-on-serial-line-of-s390.patch +# PATCH-FIX-SUSE -- Let agetty not be fooled by locked termios srtucture +Patch15: agetty-fooled-on-serial-line-due-plymout.patch # hack for boot.localfs Patch20: util-linux-HACK-boot.localfs.diff @@ -226,6 +228,7 @@ xzcat %{S:0} | %gpg_verify %{S:12} - %patch12 -p1 %patch13 -p1 %patch14 -p0 +%patch15 -p0 # %patch20 -p1 #