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]

Reply via email to