Hello community, here is the log from the commit of package util-linux for openSUSE:Factory checked in at 2014-05-22 20:38:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/util-linux (Old) and /work/SRC/openSUSE:Factory/.util-linux.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "util-linux" Changes: -------- --- /work/SRC/openSUSE:Factory/util-linux/util-linux.changes 2014-05-03 16:51:34.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.util-linux.new/util-linux.changes 2014-05-22 20:39:02.000000000 +0200 @@ -1,0 +2,21 @@ +Fri May 16 15:10:53 UTC 2014 - [email protected] + +- Prevent excessive clock drift calculations (bnc#871698, + util-linux-prevent-excessive-clock-drift-calculations.patch), + committed by [email protected] + +------------------------------------------------------------------- +Thu May 8 08:15:04 UTC 2014 - [email protected] + +- Modify patch support-other-tty-lines-not-vconsole.patch to + make it work on virtual console +- Modify patch agetty-on-s390-on-dev-3270-tty1-line.patch + to add the missed 3270 support upstream + +------------------------------------------------------------------- +Wed May 7 14:12:32 UTC 2014 - [email protected] + +- Add patch support-other-tty-lines-not-vconsole.patch + to be able to support console lines like xvc and hvc + +------------------------------------------------------------------- New: ---- support-other-tty-lines-not-vconsole.patch util-linux-prevent-excessive-clock-drift-calculations.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ util-linux.spec ++++++ --- /var/tmp/diff_new_pack.Q2hCQU/_old 2014-05-22 20:39:06.000000000 +0200 +++ /var/tmp/diff_new_pack.Q2hCQU/_new 2014-05-22 20:39:06.000000000 +0200 @@ -104,6 +104,8 @@ Patch4: make-sure-sbin-resp-usr-sbin-are-in-PATH.diff # disable encryption Patch12: util-linux-2.23.1-noenc-suse.diff +# PATCH-FIX-SUSE Be aware that there are e.g. xvc/hvc +Patch14: support-other-tty-lines-not-vconsole.patch # PATCH-FIX-SUSE -- Let agetty not be fooled by locked termios srtucture Patch15: agetty-fooled-on-serial-line-due-plymouth.patch # PATCH-FIX-SUSE -- Let agetty detect /dev/3270/tty1 as device not as baud rate @@ -126,6 +128,8 @@ Patch31: blkid-convert-superblocks-to-new-calling-convention.patch # PATH-FIX-UPSTREAM util-linux-libblkid-ext-probe.patch bnc864703 [email protected] -- libblkid: Drop the broken ext2/ext3/ext4 discrimination logic. Patch32: util-linux-libblkid-ext-probe.patch +# PATCH-FIX-UPSTREAM bnc871698 [email protected] +Patch33: util-linux-prevent-excessive-clock-drift-calculations.patch ## ## klogconsole @@ -247,6 +251,7 @@ %patch2 -p1 %patch4 -p1 %patch12 -p1 +%patch14 -p0 %patch15 -p0 %patch16 -p0 %patch17 -p0 @@ -260,6 +265,7 @@ %patch30 -p1 %patch31 -p1 %patch32 -p1 +%patch33 -p1 # # setctsid cp -p %{S:22} %{S:23} . ++++++ agetty-on-s390-on-dev-3270-tty1-line.patch ++++++ --- /var/tmp/diff_new_pack.Q2hCQU/_old 2014-05-22 20:39:06.000000000 +0200 +++ /var/tmp/diff_new_pack.Q2hCQU/_new 2014-05-22 20:39:06.000000000 +0200 @@ -1,14 +1,21 @@ -Be aware that on s390 the 3270 terminal line is found at -/dev/3270/tty<X>. That is that the baud speed rate numbers -have to be identified in a unique way. - --- - agetty.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) + login-utils/sulogin.c | 8 +++++++- + term-utils/agetty.c | 15 ++++++++++----- + 2 files changed, 17 insertions(+), 6 deletions(-) --- term-utils/agetty.c -+++ term-utils/agetty.c 2014-02-04 09:33:13.162735763 +0000 -@@ -568,6 +568,8 @@ static void login_options_to_argv(char * ++++ term-utils/agetty.c 2014-05-08 08:08:26.384484940 +0000 +@@ -51,7 +51,8 @@ + # define DEFAULT_VCTERM "linux" + # endif + # if defined (__s390__) || defined (__s390x__) +-# define DEFAULT_TTYS0 "ibm327x" ++# define DEFAULT_TTYS0 "dumb" ++# define DEFAULT_TTY32 "ibm327x" + # define DEFAULT_TTYS1 "vt220" + # endif + # ifndef DEFAULT_STERM +@@ -571,6 +572,8 @@ static void login_options_to_argv(char * *argc = i; } @@ -17,7 +24,7 @@ /* Parse command-line arguments. */ static void parse_args(int argc, char **argv, struct options *op) { -@@ -746,7 +748,7 @@ static void parse_args(int argc, char ** +@@ -749,7 +752,7 @@ static void parse_args(int argc, char ** } /* Accept "tty", "baudrate tty", and "tty baudrate". */ @@ -26,7 +33,7 @@ /* Assume BSD style speed. */ parse_speeds(op, argv[optind++]); if (argc < optind + 1) { -@@ -758,7 +760,7 @@ static void parse_args(int argc, char ** +@@ -761,7 +764,7 @@ static void parse_args(int argc, char ** op->tty = argv[optind++]; if (argc > optind) { char *v = argv[optind++]; @@ -35,3 +42,37 @@ parse_speeds(op, v); else op->speeds[op->numspeed++] = bcode("9600"); +@@ -1071,9 +1074,11 @@ static void open_tty(char *tty, struct t + * higher. Whereas the second serial line on a S/390(x) is + * a real character terminal which is compatible with VT220. + */ +- if (strcmp(op->tty, "ttyS0") == 0) ++ if (strcmp(op->tty, "ttyS0") == 0) /* linux/drivers/s390/char/con3215.c */ + op->term = DEFAULT_TTYS0; +- else if (strcmp(op->tty, "ttyS1") == 0) ++ else if (strncmp(op->tty, "3270/tty", 8) == 0) /* linux/drivers/s390/char/con3270.c */ ++ op->term = DEFAULT_TTY32; ++ else if (strcmp(op->tty, "ttyS1") == 0) /* linux/drivers/s390/char/sclp_vt220.c */ + op->term = DEFAULT_TTYS1; + } + #endif +--- login-utils/sulogin.c ++++ login-utils/sulogin.c 2014-05-08 08:22:38.572781002 +0000 +@@ -189,10 +189,16 @@ static void tcfinal(struct console *con) + setenv("TERM", "linux", 1); + return; + } +- if (con->flags & CON_NOTTY) ++ if (con->flags & CON_NOTTY) { ++ setenv("TERM", "dumb", 1); + return; ++ } + ++#if defined (__s390__) || defined (__s390x__) ++ setenv("TERM", "dumb", 1); ++#else + setenv("TERM", "vt102", 1); ++#endif + tio = &con->tio; + fd = con->fd; + ++++++ support-other-tty-lines-not-vconsole.patch ++++++ --- login-utils/sulogin.c | 17 ++++++++++++----- term-utils/agetty.c | 23 +++++++++++------------ 2 files changed, 23 insertions(+), 17 deletions(-) --- login-utils/sulogin.c +++ login-utils/sulogin.c 2014-05-08 08:01:13.102622002 +0000 @@ -49,6 +49,11 @@ # include <selinux/get_context_list.h> #endif +#ifdef __linux__ +# include <sys/kd.h> +# include <sys/param.h> +#endif + #include "c.h" #include "closestream.h" #include "nls.h" @@ -142,10 +147,14 @@ static void tcinit(struct console *con) return; } - /* Handle serial lines here */ - if (ioctl(fd, TIOCMGET, (char *) &mode) == 0) { + /* Handle lines other than virtual consoles here */ +#if defined(KDGKBMODE) + if (ioctl(fd, KDGKBMODE, &mode) < 0) +#endif + { speed_t ispeed, ospeed; struct winsize ws; + errno = 0; /* this is a modem line */ con->flags |= CON_SERIAL; @@ -191,9 +200,7 @@ static void tcinit(struct console *con) goto setattr; } #if defined(IUTF8) && defined(KDGKBMODE) - /* Detect mode of current keyboard setup, e.g. for UTF-8 */ - if (ioctl(fd, KDGKBMODE, &mode) < 0) - mode = K_RAW; + /* Handle mode of current keyboard setup, e.g. for UTF-8 */ switch(mode) { case K_UNICODE: setlocale(LC_CTYPE, "C.UTF-8"); --- term-utils/agetty.c +++ term-utils/agetty.c 2014-05-08 08:02:16.786235584 +0000 @@ -139,6 +139,7 @@ struct options { int nice; /* Run login with this priority */ int numspeed; /* number of baud rates to try */ int clocal; /* CLOCAL_MODE_* */ + int kbmode; /* Keyboard mode if virtual console */ speed_t speeds[MAX_SPEED]; /* baud rates to be tried */ }; @@ -936,7 +937,7 @@ static void update_utmp(struct options * static void open_tty(char *tty, struct termios *tp, struct options *op) { const pid_t pid = getpid(); - int serial, closed = 0; + int closed = 0; /* Set up new standard input, unless we are given an already opened port. */ @@ -1080,15 +1081,18 @@ static void open_tty(char *tty, struct t #endif /* * Detect if this is a virtual console or serial/modem line. - * In case of a virtual console the ioctl TIOCMGET fails and - * the error number will be set to EINVAL. + * In case of a virtual console the ioctl KDGKBMODE succeeds + * whereas on other lines it will fails. */ - if (ioctl(STDIN_FILENO, TIOCMGET, &serial) < 0 && (errno == EINVAL)) { + if (ioctl(STDIN_FILENO, KDGKBMODE, &op->kbmode) == 0) { op->flags |= F_VCONSOLE; if (!op->term) op->term = DEFAULT_VCTERM; - } else if (!op->term) - op->term = DEFAULT_STERM; + } else { + op->kbmode = K_RAW; + if (!op->term) + op->term = DEFAULT_STERM; + } setenv("TERM", op->term, 1); } @@ -1122,12 +1126,7 @@ static void termio_init(struct options * if (op->flags & F_VCONSOLE) { #if defined(IUTF8) && defined(KDGKBMODE) - int mode; - - /* Detect mode of current keyboard setup, e.g. for UTF-8 */ - if (ioctl(STDIN_FILENO, KDGKBMODE, &mode) < 0) - mode = K_RAW; - switch(mode) { + switch(op->kbmode) { case K_UNICODE: setlocale(LC_CTYPE, "C.UTF-8"); op->flags |= F_UTF8; ++++++ util-linux-prevent-excessive-clock-drift-calculations.patch ++++++ >From 654e902731ea15a3494a3831b78d2b9f1cd1408d Mon Sep 17 00:00:00 2001 From: Ruediger Meier <[email protected]> Date: Fri, 16 May 2014 17:01:43 +0200 Subject: [PATCH] Prevent excessive clock drift calculations Squashed commit of the following: commit f55b4b45126b657fe02f5f0d3d7fde740e6a6247 Author: Karel Zak <[email protected]> Date: Tue May 6 12:51:42 2014 +0200 hwclock: fix typo Reported-by: Stanislav Brabec <[email protected]> Signed-off-by: Karel Zak <[email protected]> commit db8fc5f37728810bdd5b865ac420c31714e35def Author: Stanislav Brabec <[email protected]> Date: Mon May 5 20:49:49 2014 +0200 hwclock: Check drift value in /etc/adjtime Due to bug in older versions of hwclock, /etc/adjtime can contain excessive drift value (up to many years per day). Prevent it from applying. Signed-off-by: Stanislav Brabec <[email protected]> commit f196fd1a5f8fff63635fd88b5a0f0bbc96978df2 Author: Stanislav Brabec <[email protected]> Date: Mon May 5 20:49:29 2014 +0200 hwclock: Prevent excessive drift values Failure of CMOS battery can cause writing of excessive drift values (up to many years per day). This causes excessive hwclock adjustment next time, which may lead to overflow in calculate_adjustment() (and hang before 4a44a54b). Prevent this situation, check drift for limits and reset drift to zero instead. Steps to reproduce: mv /etc/adjtime /etc/adjtime.backup rm /etc/adjtime hwclock --set --date 2001-01-01\ 01:00:00 changing of /etc/adjtime. mv /etc/adjtime /etc/adjtime.saved hwclock --set --date 2001-01-02\ 01:00:01 mv /etc/adjtime.saved /etc/adjtime echo "======= The /etc/adjtime has a \"correct\" look:" cat /etc/adjtime hwclock --debug --systohc --utc echo "======= The /etc/adjtime now has deeply failed drift value:" cat /etc/adjtime mv /etc/adjtime /etc/adjtime.saved hwclock --set --date 2015-01-01\ 01:00:00 mv /etc/adjtime.saved /etc/adjtime hwclock --debug --adjust echo "======= And the last /etc/adjtime:" cat /etc/adjtime mv /etc/adjtime.backup /etc/adjtime hwclock --systohc --utc Signed-off-by: Stanislav Brabec <[email protected]> Signed-off-by: Ruediger Meier <[email protected]> --- sys-utils/hwclock.c | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/sys-utils/hwclock.c b/sys-utils/hwclock.c index 395b5c3..0abf01f 100644 --- a/sys-utils/hwclock.c +++ b/sys-utils/hwclock.c @@ -91,6 +91,11 @@ struct clock_ops *ur; #define FLOOR(arg) ((arg >= 0 ? (int) arg : ((int) arg) - 1)); +/* Maximal clock adjustment in seconds per day. + (adjtime() glibc call has 2145 seconds limit on i386, so it is good enough for us as well, + 43219 is a maximal safe value preventing exact_adjustment overflow.) */ +#define MAX_DRIFT 2145.0 + const char *adj_file_name = NULL; struct adjtime { @@ -1008,6 +1013,7 @@ adjust_drift_factor(struct adjtime *adjtime_p, double adj_days, cal_days; double exp_drift, unc_drift; double factor_adjust; + double drift_factor; /* Adjusted time units per hardware time unit */ atime_per_htime = 1.0 + adjtime_p->drift_factor / sec_per_day; @@ -1033,16 +1039,28 @@ adjust_drift_factor(struct adjtime *adjtime_p, /* Amount to add to previous drift factor */ factor_adjust = unc_drift / cal_days; - if (debug) - printf(_("Clock drifted %.1f seconds in the past " - "%d seconds in spite of a drift factor of " - "%f seconds/day.\n" - "Adjusting drift factor by %f seconds/day\n"), - unc_drift, - (int)(nowtime - adjtime_p->last_calib_time), - adjtime_p->drift_factor, factor_adjust); - - adjtime_p->drift_factor += factor_adjust; + /* New drift factor */ + drift_factor = adjtime_p->drift_factor + factor_adjust; + + if (abs(drift_factor) > MAX_DRIFT) { + if (debug) + printf(_("Clock drift factor was calculated as " + "%f seconds/day.\n" + "It is far too much. Resetting to zero.\n"), + drift_factor); + drift_factor = 0; + } else { + if (debug) + printf(_("Clock drifted %.1f seconds in the past " + "%d seconds in spite of a drift factor of " + "%f seconds/day.\n" + "Adjusting drift factor by %f seconds/day\n"), + unc_drift, + (int)(nowtime - adjtime_p->last_calib_time), + adjtime_p->drift_factor, factor_adjust); + } + + adjtime_p->drift_factor = drift_factor; } adjtime_p->last_calib_time = nowtime; @@ -1190,9 +1208,12 @@ do_adjustment(struct adjtime *adjtime_p, adjtime_p->dirty = TRUE; } else if (adjtime_p->last_adj_time == 0) { if (debug) - printf(_ - ("Not setting clock because last adjustment time is zero, " - "so history is bad.")); + printf(_("Not setting clock because last adjustment time is zero, " + "so history is bad.\n")); + } else if (abs(adjtime_p->drift_factor) > MAX_DRIFT) { + if (debug) + printf(_("Not setting clock because drift factor %f is far too high.\n"), + adjtime_p->drift_factor); } else { int adjustment; /* Number of seconds we must insert in the Hardware Clock */ -- 1.8.4.5 -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
