Hello community,

here is the log from the commit of package glibc for openSUSE:Factory checked 
in at 2019-12-14 12:01:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/glibc (Old)
 and      /work/SRC/openSUSE:Factory/.glibc.new.4691 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "glibc"

Sat Dec 14 12:01:51 2019 rev:233 rq:755339 version:2.30

Changes:
--------
--- /work/SRC/openSUSE:Factory/glibc/glibc.changes      2019-09-27 
14:43:10.241588196 +0200
+++ /work/SRC/openSUSE:Factory/.glibc.new.4691/glibc.changes    2019-12-14 
12:02:03.759415431 +0100
@@ -1,0 +2,25 @@
+Mon Dec  9 13:21:34 UTC 2019 - Andreas Schwab <sch...@suse.de>
+
+- prefer-map-32bit-exec.patch: rtld: Check __libc_enable_secure before
+  honoring LD_PREFER_MAP_32BIT_EXEC (CVE-2019-19126, bsc#1157292, BZ
+  #25204)
+
+-------------------------------------------------------------------
+Tue Nov 26 11:34:45 CET 2019 - ku...@suse.de
+
+- nsswitch.conf: add usrfiles for services, protocols, rpc, ethers
+  and aliases for /usr/etc move
+
+-------------------------------------------------------------------
+Mon Oct 14 13:36:30 UTC 2019 - Andreas Schwab <sch...@suse.de>
+
+- euc-kr-overrun.patch: Fix buffer overrun in EUC-KR conversion module
+  (BZ #24973)
+
+-------------------------------------------------------------------
+Thu Oct 10 14:39:24 UTC 2019 - Andreas Schwab <sch...@suse.de>
+
+- ldconfig-dynstr.patch: ldconfig: handle .dynstr located in separate
+  segment (bsc#1153149, BZ #25087)
+
+-------------------------------------------------------------------

New:
----
  euc-kr-overrun.patch
  ldconfig-dynstr.patch
  prefer-map-32bit-exec.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ glibc.spec ++++++
--- /var/tmp/diff_new_pack.Nl9uJN/_old  2019-12-14 12:02:16.663413505 +0100
+++ /var/tmp/diff_new_pack.Nl9uJN/_new  2019-12-14 12:02:16.687413501 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package glibc
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -157,7 +157,7 @@
 %define git_id %(echo %version | sed 's/.*\.g//')
 %define libversion %(echo %version | sed 's/\.[^.]*\.g.*//')
 %endif
-Url:            http://www.gnu.org/software/libc/libc.html
+URL:            http://www.gnu.org/software/libc/libc.html
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %if !%{build_snapshot}
 Source:         http://ftp.gnu.org/pub/gnu/glibc/glibc-%{version}.tar.xz
@@ -248,8 +248,6 @@
 # PATCH-FIX-OPENSUSE -- Disable gettext for C.UTF-8 locale
 Patch105:       glibc-disable-gettext-for-c-utf8.patch
 
-### Broken patches in glibc that we revert for now:
-
 ### Network related patches
 # PATCH-FIX-OPENSUSE Warn about usage of mdns in resolv.conv
 Patch304:       glibc-resolv-mdnshint.diff
@@ -263,6 +261,8 @@
 Patch1000:      malloc-info-whitespace.patch
 # PATCH-FIX-UPSTREAM Fix RISC-V vfork build with Linux 5.3 kernel headers
 Patch1001:      riscv-vfork.patch
+# PATCH-FIX-UPSTREAM rtld: Check __libc_enable_secure before honoring 
LD_PREFER_MAP_32BIT_EXEC (CVE-2019-19126, BZ #25204)
+Patch1002:      prefer-map-32bit-exec.patch
 
 ### 
 # Patches awaiting upstream approval
@@ -271,6 +271,10 @@
 Patch2000:      fix-locking-in-_IO_cleanup.patch
 # PATCH-FIX-UPSTREAM Avoid concurrency problem in ldconfig (BZ #23973)
 Patch2001:      ldconfig-concurrency.patch
+# PATCH-FIX-UPSTREAM ldconfig: handle .dynstr located in separate segment (BZ 
#25087)
+Patch2002:      ldconfig-dynstr.patch
+# PATCH-FIX-UPSTREAM Fix buffer overrun in EUC-KR conversion module (BZ #24973)
+Patch2003:      euc-kr-overrun.patch
 
 # Non-glibc patches
 # PATCH-FIX-OPENSUSE Remove debianisms from manpages
@@ -470,9 +474,12 @@
 
 %patch1000 -p1
 %patch1001 -p1
+%patch1002 -p1
 
 %patch2000 -p1
 %patch2001 -p1
+%patch2002 -p1
+%patch2003 -p1
 
 %patch3000
 

++++++ euc-kr-overrun.patch ++++++
Fix buffer overrun in EUC-KR conversion module (bug 24973)

The byte 0xfe as input to the EUC-KR conversion denotes a user-defined
area and is not allowed.  The from_euc_kr function used to skip two bytes
when told to skip over the unknown designation, potentially running over
the buffer end.

        [BZ #24973]
        * iconvdata/ksc5601.h (ksc5601_to_ucs4): Check for available bytes
        first.
        * iconvdata/euc-kr.c (BODY for FROM_LOOP): Don't check for unknown
        two-byte codes here.
        * iconvdata/Makefile (tests): Add bug-iconv13.
        * iconvdata/bug-iconv13.c: New file.
---
 iconvdata/Makefile      |  2 +-
 iconvdata/bug-iconv13.c | 53 +++++++++++++++++++++++++++++++++++++++++
 iconvdata/euc-kr.c      |  6 +----
 iconvdata/ksc5601.h     |  6 ++---
 4 files changed, 58 insertions(+), 9 deletions(-)
 create mode 100644 iconvdata/bug-iconv13.c

Index: glibc-2.30/iconvdata/Makefile
===================================================================
--- glibc-2.30.orig/iconvdata/Makefile
+++ glibc-2.30/iconvdata/Makefile
@@ -73,7 +73,7 @@ modules.so := $(addsuffix .so, $(modules
 ifeq (yes,$(build-shared))
 tests = bug-iconv1 bug-iconv2 tst-loading tst-e2big tst-iconv4 bug-iconv4 \
        tst-iconv6 bug-iconv5 bug-iconv6 tst-iconv7 bug-iconv8 bug-iconv9 \
-       bug-iconv10 bug-iconv11 bug-iconv12
+       bug-iconv10 bug-iconv11 bug-iconv12 bug-iconv13
 ifeq ($(have-thread-library),yes)
 tests += bug-iconv3
 endif
Index: glibc-2.30/iconvdata/bug-iconv13.c
===================================================================
--- /dev/null
+++ glibc-2.30/iconvdata/bug-iconv13.c
@@ -0,0 +1,53 @@
+/* bug 24973: Test EUC-KR module
+   Copyright (C) 2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <iconv.h>
+#include <stdio.h>
+#include <support/check.h>
+
+static int
+do_test (void)
+{
+  iconv_t cd = iconv_open ("UTF-8//IGNORE", "EUC-KR");
+  TEST_VERIFY_EXIT (cd != (iconv_t) -1);
+
+  /* 0xfe (->0x7e : row 94) and 0xc9 (->0x49 : row 41) are user-defined
+     areas, which are not allowed and should be skipped over due to
+     //IGNORE.  The trailing 0xfe also is an incomplete sequence, which
+     should be checked first.  */
+  char input[4] = { '\xc9', '\xa1', '\0', '\xfe' };
+  char *inptr = input;
+  size_t insize = sizeof (input);
+  char output[4];
+  char *outptr = output;
+  size_t outsize = sizeof (output);
+
+  /* This used to crash due to buffer overrun.  */
+  TEST_VERIFY (iconv (cd, &inptr, &insize, &outptr, &outsize) == (size_t) -1);
+  TEST_VERIFY (errno == EINVAL);
+  /* The conversion should produce one character, the converted null
+     character.  */
+  TEST_VERIFY (sizeof (output) - outsize == 1);
+
+  TEST_VERIFY_EXIT (iconv_close (cd) != -1);
+
+  return 0;
+}
+
+#include <support/test-driver.c>
Index: glibc-2.30/iconvdata/euc-kr.c
===================================================================
--- glibc-2.30.orig/iconvdata/euc-kr.c
+++ glibc-2.30/iconvdata/euc-kr.c
@@ -80,11 +80,7 @@ euckr_from_ucs4 (uint32_t ch, unsigned c
                                                                              \
     if (ch <= 0x9f)                                                          \
       ++inptr;                                                               \
-    /* 0xfe(->0x7e : row 94) and 0xc9(->0x59 : row 41) are                   \
-       user-defined areas.  */                                               \
-    else if (__builtin_expect (ch == 0xa0, 0)                                \
-            || __builtin_expect (ch > 0xfe, 0)                               \
-            || __builtin_expect (ch == 0xc9, 0))                             \
+    else if (__glibc_unlikely (ch == 0xa0))                                  \
       {                                                                        
      \
        /* This is illegal.  */                                               \
        STANDARD_FROM_LOOP_ERR_HANDLER (1);                                   \
Index: glibc-2.30/iconvdata/ksc5601.h
===================================================================
--- glibc-2.30.orig/iconvdata/ksc5601.h
+++ glibc-2.30/iconvdata/ksc5601.h
@@ -50,15 +50,15 @@ ksc5601_to_ucs4 (const unsigned char **s
   unsigned char ch2;
   int idx;
 
+  if (avail < 2)
+    return 0;
+
   /* row 94(0x7e) and row 41(0x49) are user-defined area in KS C 5601 */
 
   if (ch < offset || (ch - offset) <= 0x20 || (ch - offset) >= 0x7e
       || (ch - offset) == 0x49)
     return __UNKNOWN_10646_CHAR;
 
-  if (avail < 2)
-    return 0;
-
   ch2 = (*s)[1];
   if (ch2 < offset || (ch2 - offset) <= 0x20 || (ch2 - offset) >= 0x7f)
     return __UNKNOWN_10646_CHAR;

++++++ ldconfig-dynstr.patch ++++++
ldconfig: handle .dynstr located in separate segment (bug 25087)

To determine the load offset of the DT_STRTAB section search for the
segment containing it, instead of using the load offset of the first
segment.

        [BZ #25087]
        * elf/readelflib.c (process_elf_file): Use containing segment for
        DT_STRTAB load offset.
---
 elf/readelflib.c | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

Index: glibc-2.30/elf/readelflib.c
===================================================================
--- glibc-2.30.orig/elf/readelflib.c
+++ glibc-2.30/elf/readelflib.c
@@ -45,7 +45,6 @@ process_elf_file (const char *file_name,
 {
   int i;
   unsigned int j;
-  ElfW(Addr) loadaddr;
   unsigned int dynamic_addr;
   size_t dynamic_size;
   char *program_interpreter;
@@ -87,7 +86,6 @@ process_elf_file (const char *file_name,
      libc5/libc6.  */
   *flag = FLAG_ELF;
 
-  loadaddr = -1;
   dynamic_addr = 0;
   dynamic_size = 0;
   program_interpreter = NULL;
@@ -98,11 +96,6 @@ process_elf_file (const char *file_name,
 
       switch (segment->p_type)
        {
-       case PT_LOAD:
-         if (loadaddr == (ElfW(Addr)) -1)
-           loadaddr = segment->p_vaddr - segment->p_offset;
-         break;
-
        case PT_DYNAMIC:
          if (dynamic_addr)
            error (0, 0, _("more than one dynamic segment\n"));
@@ -176,11 +169,6 @@ process_elf_file (const char *file_name,
        }
 
     }
-  if (loadaddr == (ElfW(Addr)) -1)
-    {
-      /* Very strange. */
-      loadaddr = 0;
-    }
 
   /* Now we can read the dynamic sections.  */
   if (dynamic_size == 0)
@@ -197,7 +185,27 @@ process_elf_file (const char *file_name,
       check_ptr (dyn_entry);
       if (dyn_entry->d_tag == DT_STRTAB)
        {
-         dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - 
loadaddr);
+         /* Find the file offset of the segment containing the dynamic
+            string table.  */
+         ElfW(Off) loadoff = -1;
+         for (i = 0, segment = elf_pheader;
+              i < elf_header->e_phnum; i++, segment++)
+           {
+             if (segment->p_type == PT_LOAD
+                 && dyn_entry->d_un.d_val >= segment->p_vaddr
+                 && dyn_entry->d_un.d_val < segment->p_vaddr + 
segment->p_filesz)
+               {
+                 loadoff = segment->p_vaddr - segment->p_offset;
+                 break;
+               }
+           }
+         if (loadoff == (ElfW(Off)) -1)
+           {
+             /* Very strange. */
+             loadoff = 0;
+           }
+
+         dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - 
loadoff);
          check_ptr (dynamic_strings);
          break;
        }
++++++ nsswitch.conf ++++++
--- /var/tmp/diff_new_pack.Nl9uJN/_old  2019-12-14 12:02:17.059413445 +0100
+++ /var/tmp/diff_new_pack.Nl9uJN/_new  2019-12-14 12:02:17.063413444 +0100
@@ -29,14 +29,14 @@
 hosts:         files dns
 networks:      files dns
 
-services:      files
-protocols:     files
-rpc:           files
-ethers:                files
+services:      files usrfiles
+protocols:     files usrfiles
+rpc:           files usrfiles
+ethers:                files usrfiles
 netmasks:      files
 netgroup:      files nis
 publickey:     files
 
 bootparams:    files
 automount:     files nis
-aliases:       files
+aliases:       files usrfiles

++++++ prefer-map-32bit-exec.patch ++++++
>From d5dfad4326fc683c813df1e37bbf5cf920591c8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marcin=20Ko=C5=9Bcielnicki?= <m...@0x04.net>
Date: Thu, 21 Nov 2019 00:20:15 +0100
Subject: [PATCH] rtld: Check __libc_enable_secure before honoring
 LD_PREFER_MAP_32BIT_EXEC (CVE-2019-19126) [BZ #25204]

The problem was introduced in glibc 2.23, in commit
b9eb92ab05204df772eb4929eccd018637c9f3e9
("Add Prefer_MAP_32BIT_EXEC to map executable pages with MAP_32BIT").
---
 NEWS                                            | 6 +++++-
 sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h | 3 ++-
 2 files changed, 7 insertions(+), 2 deletions(-)

Index: glibc-2.30/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
===================================================================
--- glibc-2.30.orig/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
+++ glibc-2.30/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
@@ -31,7 +31,8 @@
    environment variable, LD_PREFER_MAP_32BIT_EXEC.  */
 #define EXTRA_LD_ENVVARS \
   case 21:                                                               \
-    if (memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0)              \
+    if (!__libc_enable_secure                                            \
+       && memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0)            \
       GLRO(dl_x86_cpu_features).feature[index_arch_Prefer_MAP_32BIT_EXEC] \
        |= bit_arch_Prefer_MAP_32BIT_EXEC;                                \
     break;

Reply via email to