mirror of
https://abf.rosa.ru/djam/glibc40.git
synced 2025-02-23 07:42:54 +00:00
New version 2.24
Re-diff some patches Drop no longer needed patches
This commit is contained in:
parent
491d5748bd
commit
c532d8d676
38 changed files with 202 additions and 46863 deletions
8
.abf.yml
8
.abf.yml
|
@ -1,6 +1,6 @@
|
|||
sources:
|
||||
crypt_blowfish-1.2.tar.gz: 306ff83af206fac786900ce5e4800516cae909d9
|
||||
crypt_blowfish-1.2.tar.gz.sign: 982d2d5585d60fc01d18005c2b5e57a1a44b45d7
|
||||
glibc-2.19.tar.xz: b29e1f94b8a32e283e1cb66c9a913950c496fb51
|
||||
glibc-2.19.tar.xz.sig: 68baae89199300ce9b0f51f959a6c4df5bc18685
|
||||
crypt_blowfish-1.3.tar.gz: 461ba876ebacd5f7dc95f1eb3c5286d6e0983ae0
|
||||
crypt_blowfish-1.3.tar.gz.sign: 96336a263160d3efdd56d983cd9d5e18145271bf
|
||||
glibc-2.24.tar.xz: e5d9725d94d59475d9a6869a4447a70c1bf3ef78
|
||||
glibc-2.24.tar.xz.sig: 9903f9767edcd089731299a6f4774a2dafd0846b
|
||||
glibc-manpages.tar.bz2: ca54bfb832b703c8e35170fcc1c1f5470b45ff0f
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1.4.10 (GNU/Linux)
|
||||
Comment: http://www.openwall.com/signatures/
|
||||
|
||||
iQCVAwUATiLawHK5fbEpUCnxAQIT4wP9GTUroM4r21oggeW0k3j5vICwSVHV5BbJ
|
||||
MBOfliwa1tW9JNh/dEA9GHiPeVWXr/KNWm9/3bSYGDqfsYMlQ7x8w/CCUrS/gvpv
|
||||
XtvwxUE5juAH5wy4+6oV1gBWiISWGOUcCqkgxPVZKOjlSV4c7kvr10JwqYdnqjK9
|
||||
RT/A2FgAxM4=
|
||||
=K4Xs
|
||||
-----END PGP SIGNATURE-----
|
|
@ -16,10 +16,10 @@ Index: glibc-2.14.1/crypt/x86.S
|
|||
-.section .note.GNU-stack,"",@progbits
|
||||
+.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
||||
Index: glibc-2.14.1/crypt_blowfish-1.2/x86.S
|
||||
Index: glibc-2.14.1/crypt_blowfish-1.3/x86.S
|
||||
===================================================================
|
||||
--- glibc-2.14.1.orig/crypt_blowfish-1.2/x86.S
|
||||
+++ glibc-2.14.1/crypt_blowfish-1.2/x86.S
|
||||
--- glibc-2.14.1.orig/crypt_blowfish-1.3/x86.S
|
||||
+++ glibc-2.14.1/crypt_blowfish-1.3/x86.S
|
||||
@@ -199,5 +199,5 @@ BF_die:
|
||||
#endif
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Owl: Owl/packages/glibc/crypt_freesec.c,v 1.6 2010/02/20 14:45:06 solar Exp $
|
||||
* $Owl: Owl/packages/glibc/crypt_freesec.c,v 1.8 2014/07/07 15:44:50 solar Exp $
|
||||
* $Id: crypt.c,v 1.15 1994/09/13 04:58:49 davidb Exp $
|
||||
*
|
||||
* This is an original implementation of the DES and the crypt(3) interfaces
|
||||
|
@ -219,7 +219,6 @@ _crypt_extended_init(void)
|
|||
u_int32_t *p, *il, *ir, *fl, *fr;
|
||||
u_int32_t *bits28, *bits24;
|
||||
u_char inv_key_perm[64];
|
||||
u_char u_key_perm[56];
|
||||
u_char inv_comp_perm[56];
|
||||
u_char init_perm[64], final_perm[64];
|
||||
u_char u_sbox[8][64];
|
||||
|
@ -261,7 +260,6 @@ _crypt_extended_init(void)
|
|||
* compression permutation.
|
||||
*/
|
||||
for (i = 0; i < 56; i++) {
|
||||
u_key_perm[i] = key_perm[i] - 1;
|
||||
inv_key_perm[key_perm[i] - 1] = i;
|
||||
inv_comp_perm[i] = 255;
|
||||
}
|
||||
|
@ -630,7 +628,8 @@ _crypt_extended_r(const char *key, const char *setting,
|
|||
*/
|
||||
q = (u_char *) keybuf;
|
||||
while (q - (u_char *) keybuf < sizeof(keybuf)) {
|
||||
if ((*q++ = *key << 1))
|
||||
*q++ = *key << 1;
|
||||
if (*key)
|
||||
key++;
|
||||
}
|
||||
if (des_setkey((u_char *) keybuf, data))
|
||||
|
@ -760,6 +759,8 @@ static struct {
|
|||
{"_J9..SDizxmRI1GjnQuE", "zxyDPWgydbQjgq"},
|
||||
{"_K9..SaltNrQgIYUAeoY", "726 even"},
|
||||
{"_J9..SDSD5YGyRCr4W4c", ""},
|
||||
{"_01234567IBjxKliXXRQ", "\xc3\x80" "1234abcd"},
|
||||
{"_012345678OSGpGQRVHA", "\xc3\x80" "9234abcd"},
|
||||
/* "old"-style, valid salts */
|
||||
{"CCNf8Sbh3HDfQ", "U*U*U*U*"},
|
||||
{"CCX.K.MFy4Ois", "U*U***U"},
|
||||
|
@ -771,6 +772,8 @@ static struct {
|
|||
{"A9RXdR23Y.cY6", "password"},
|
||||
{"ZziFATVXHo2.6", "password"},
|
||||
{"zZDDIZ0NOlPzw", "password"},
|
||||
{"99PxawtsTfX56", "\xc3\x80" "1234abcd"},
|
||||
{"99jcVcGxUZOWk", "\xc3\x80" "9234abcd"},
|
||||
/* "old"-style, "reasonable" invalid salts, UFC-crypt behavior expected */
|
||||
{"\001\002wyd0KZo65Jo", "password"},
|
||||
{"a_C10Dk/ExaG.", "password"},
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
--- libc/localedata/locales/bo_CN.bero 2012-12-27 21:59:42.264405770 +0100
|
||||
+++ libc/localedata/locales/bo_CN 2012-12-27 21:59:49.516318268 +0100
|
||||
@@ -144,8 +144,7 @@ END LC_MEASUREMENT
|
||||
|
||||
LC_NAME
|
||||
% FIXME
|
||||
-
|
||||
-name_fmt ""
|
||||
+name_fmt "FIXME"
|
||||
% name_gen "FIXME"
|
||||
% name_miss "FIXME"
|
||||
% name_mr "FIXME"
|
||||
--- libc/localedata/locales/bo_IN.bero 2012-12-27 21:59:52.912277247 +0100
|
||||
+++ libc/localedata/locales/bo_IN 2012-12-27 22:00:49.732591846 +0100
|
||||
@@ -70,7 +70,7 @@ END LC_MEASUREMENT
|
||||
|
||||
LC_NAME
|
||||
% FIXME
|
||||
-name_fmt ""
|
||||
+name_fmt "FIXME"
|
||||
% name_gen "FIXME"
|
||||
% name_miss "FIXME"
|
||||
% name_mr "FIXME"
|
|
@ -1,57 +0,0 @@
|
|||
diff -Nrup a/localedata/locales/cy_GB b/localedata/locales/cy_GB
|
||||
--- a/localedata/locales/cy_GB 2012-06-05 07:42:49.000000000 -0600
|
||||
+++ b/localedata/locales/cy_GB 2012-06-07 12:15:21.805318719 -0600
|
||||
@@ -248,9 +248,9 @@ mon "<U0049><U006F><U006E><U0061
|
||||
d_t_fmt "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U006d><U0069><U0073><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
|
||||
d_fmt "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0079>"
|
||||
t_fmt "<U0025><U0054>"
|
||||
-am_pm "<U0061><U006D>";"<U0070><U006D>"
|
||||
+am_pm "<U0041><U004D>";"<U0050><U004D>"
|
||||
t_fmt_ampm "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
|
||||
-date_fmt "<U0025><U0061><U0020><U0025><U0065><U0020><U0025><U0062>/
|
||||
+date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
|
||||
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
|
||||
<U0025><U005A><U0020><U0025><U0059>"
|
||||
first_workday 2
|
||||
diff -Nrup a/localedata/locales/en_GB b/localedata/locales/en_GB
|
||||
--- a/localedata/locales/en_GB 2012-06-05 07:42:49.000000000 -0600
|
||||
+++ b/localedata/locales/en_GB 2012-06-07 12:15:21.806318715 -0600
|
||||
@@ -116,7 +116,7 @@ mon "<U004A><U0061><U006E><U0075
|
||||
d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
|
||||
d_fmt "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
|
||||
t_fmt "<U0025><U0054>"
|
||||
-am_pm "<U0061><U006D>";"<U0070><U006D>"
|
||||
+am_pm "<U0041><U004D>";"<U0050><U004D>"
|
||||
t_fmt_ampm "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
|
||||
date_fmt "<U0025><U0061><U0020><U0025><U0065><U0020><U0025><U0062>/
|
||||
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
|
||||
diff -Nrup a/localedata/locales/zh_TW b/localedata/locales/zh_TW
|
||||
--- a/localedata/locales/zh_TW 2012-06-05 07:42:49.000000000 -0600
|
||||
+++ b/localedata/locales/zh_TW 2012-06-07 12:15:21.807318711 -0600
|
||||
@@ -1,7 +1,7 @@
|
||||
comment_char %
|
||||
escape_char /
|
||||
%
|
||||
-% Chinese language locale for Taiwan R.O.C.
|
||||
+% Chinese language locale for Taiwan
|
||||
% charmap: BIG5-CP950
|
||||
%
|
||||
% Original Author:
|
||||
@@ -17,7 +17,7 @@ escape_char /
|
||||
% Reference: http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf
|
||||
|
||||
LC_IDENTIFICATION
|
||||
-title "Chinese locale for Taiwan R.O.C."
|
||||
+title "Chinese locale for Taiwan"
|
||||
source ""
|
||||
address ""
|
||||
contact ""
|
||||
@@ -25,7 +25,7 @@ email "bug-glibc-locales@gnu.org"
|
||||
tel ""
|
||||
fax ""
|
||||
language "Chinese"
|
||||
-territory "Taiwan R.O.C."
|
||||
+territory "Taiwan"
|
||||
revision "0.2"
|
||||
date "2000-08-02"
|
||||
%
|
|
@ -1,57 +0,0 @@
|
|||
From ee3d4021aaaeacff7cf2addcdaa48859fffba2aa Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Schwab <schwab@redhat.com>
|
||||
Date: Thu, 3 Feb 2011 15:45:02 +0100
|
||||
Subject: [PATCH] Replace setuid by file capabilities
|
||||
|
||||
* login/programs/pt_chown.c (main): Check for valid file
|
||||
descriptor instead of privileges. Be careful to drop all
|
||||
capabilities when not needed.
|
||||
|
||||
---
|
||||
ChangeLog | 6 ++++++
|
||||
login/programs/pt_chown.c | 14 +++++++++-----
|
||||
3 files changed, 16 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/login/programs/pt_chown.c
|
||||
+++ b/login/programs/pt_chown.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
+#include <fcntl.h>
|
||||
#ifdef HAVE_LIBCAP
|
||||
# include <sys/capability.h>
|
||||
# include <sys/prctl.h>
|
||||
@@ -142,7 +143,7 @@ main (int argc, char *argv[])
|
||||
uid_t uid = getuid ();
|
||||
int remaining;
|
||||
|
||||
- if (argc == 1 && euid == 0)
|
||||
+ if (argc == 1 && fcntl (PTY_FILENO, F_GETFD) == 0)
|
||||
{
|
||||
#ifdef HAVE_LIBCAP
|
||||
/* Drop privileges. */
|
||||
@@ -175,6 +176,13 @@ main (int argc, char *argv[])
|
||||
|
||||
/* We aren't going to be using privileges, so drop them right now. */
|
||||
setuid (uid);
|
||||
+#ifdef HAVE_LIBCAP
|
||||
+ cap_t caps = cap_init ();
|
||||
+ if (caps == NULL)
|
||||
+ error (1, errno, "cap_init");
|
||||
+ cap_set_proc (caps);
|
||||
+ cap_free (caps);
|
||||
+#endif
|
||||
|
||||
/* Set locale via LC_ALL. */
|
||||
setlocale (LC_ALL, "");
|
||||
@@ -194,9 +202,5 @@ main (int argc, char *argv[])
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
- /* Check if we are properly installed. */
|
||||
- if (euid != 0)
|
||||
- error (FAIL_EXEC, 0, gettext ("needs to be installed setuid `root'"));
|
||||
-
|
||||
return EXIT_SUCCESS;
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
--- libc/elf/Makefile.aliasing~ 2012-12-02 22:11:45.000000000 +0100
|
||||
+++ libc/elf/Makefile 2012-12-27 19:46:13.396658450 +0100
|
||||
@@ -53,6 +53,7 @@ CFLAGS-dl-iterate-phdr.c = $(uses-callba
|
||||
ifeq ($(unwind-find-fde),yes)
|
||||
routines += unwind-dw2-fde-glibc
|
||||
shared-only-routines += unwind-dw2-fde-glibc
|
||||
+CFLAGS-unwind-dw2-fde-glibc.c += -fno-strict-aliasing
|
||||
endif
|
||||
|
||||
before-compile = $(objpfx)trusted-dirs.h
|
||||
--- libc/inet/Makefile.aliasing~ 2012-08-28 16:14:43.000000000 +0200
|
||||
+++ libc/inet/Makefile 2012-12-27 19:48:23.933089723 +0100
|
||||
@@ -62,6 +62,8 @@ tests-$(OPTION_EGLIBC_ADVANCED_INET6) +=
|
||||
|
||||
include ../Rules
|
||||
|
||||
+CFLAGS-tst-inet6_rth.c += -fno-strict-aliasing
|
||||
+
|
||||
ifeq ($(have-thread-library),yes)
|
||||
|
||||
CFLAGS-gethstbyad_r.c = -fexceptions
|
||||
--- libc/nis/Makefile.aliasing~ 2012-05-12 17:44:41.000000000 +0200
|
||||
+++ libc/nis/Makefile 2012-12-27 19:46:13.396658450 +0100
|
||||
@@ -80,6 +80,8 @@ libnss_nisplus-inhibit-o = $(filter-out
|
||||
|
||||
include ../Rules
|
||||
|
||||
+CFLAGS-nis_findserv.c += -fno-strict-aliasing
|
||||
+CFLAGS-ypclnt.c += -fno-strict-aliasing
|
||||
|
||||
$(objpfx)libnss_compat.so: $(objpfx)libnsl.so$(libnsl.so-version)
|
||||
$(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \
|
||||
--- libc/nss/Makefile.aliasing~ 2012-10-10 17:35:46.000000000 +0200
|
||||
+++ libc/nss/Makefile 2012-12-27 19:46:13.396658450 +0100
|
||||
@@ -147,6 +147,7 @@ $(libnss_db-dbs:%=$(objpfx)%.c): $(objpf
|
||||
echo '#include "$<"') > $@.new
|
||||
mv -f $@.new $@
|
||||
|
||||
+CFLAGS-files-hosts.c += -fno-strict-aliasing
|
||||
|
||||
$(objpfx)makedb: $(makedb-modules:%=$(objpfx)%.o)
|
||||
|
||||
--- libc/resolv/Makefile.aliasing~ 2012-10-25 19:18:12.000000000 +0200
|
||||
+++ libc/resolv/Makefile 2012-12-27 19:46:13.396658450 +0100
|
||||
@@ -83,6 +83,7 @@ ifeq (yes,$(have-ssp))
|
||||
CFLAGS-libresolv += -fstack-protector
|
||||
endif
|
||||
CFLAGS-res_hconf.c = -fexceptions
|
||||
+CFLAGS-res_send.c += -fno-strict-aliasing
|
||||
|
||||
# The BIND code elicits some harmless warnings.
|
||||
+cflags += -Wno-strict-prototypes -Wno-write-strings
|
||||
--- libc/sunrpc/Makefile.aliasing~ 2012-05-26 19:46:57.000000000 +0200
|
||||
+++ libc/sunrpc/Makefile 2012-12-27 19:46:13.397658439 +0100
|
||||
@@ -164,6 +164,10 @@ sunrpc-CPPFLAGS = -D_RPC_THREAD_SAFE_
|
||||
CPPFLAGS += $(sunrpc-CPPFLAGS)
|
||||
BUILD_CPPFLAGS += $(sunrpc-CPPFLAGS)
|
||||
|
||||
+CFLAGS-clnt_tcp.c += -fno-strict-aliasing
|
||||
+CFLAGS-clnt_udp.c += -fno-strict-aliasing
|
||||
+CFLAGS-clnt_unix.c += -fno-strict-aliasing
|
||||
+
|
||||
$(objpfx)tst-getmyaddr: $(common-objpfx)linkobj/libc.so
|
||||
$(objpfx)tst-xdrmem: $(common-objpfx)linkobj/libc.so
|
||||
$(objpfx)tst-xdrmem2: $(common-objpfx)linkobj/libc.so
|
||||
--- libc/sysdeps/powerpc/powerpc64/Makefile.aliasing~ 2012-12-27 19:46:13.392658496 +0100
|
||||
+++ libc/sysdeps/powerpc/powerpc64/Makefile 2012-12-27 19:46:13.397658439 +0100
|
||||
@@ -37,6 +37,8 @@ CFLAGS-rtld-strnlen.os = $(no-special-re
|
||||
|
||||
CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables
|
||||
|
||||
+CFLAGS-gmon-start.c += -fno-strict-aliasing
|
||||
+
|
||||
ifeq ($(subdir),csu)
|
||||
sysdep_routines += hp-timing
|
||||
elide-routines.os += hp-timing
|
|
@ -1,9 +1,8 @@
|
|||
diff -p -up glibc-2.8/po/fr.po.orig glibc-2.8/po/fr.po
|
||||
--- glibc-2.8/po/fr.po.orig 2008-05-20 20:01:33.000000000 -0400
|
||||
+++ glibc-2.8/po/fr.po 2008-05-20 20:02:10.000000000 -0400
|
||||
@@ -5351,7 +5351,7 @@ msgstr "Trop de fichiers ouverts dans le
|
||||
--- glibc-2.20/po/fr.po.ENOTTYfr~ 2014-09-08 21:27:29.600168512 +0200
|
||||
+++ glibc-2.20/po/fr.po 2014-09-08 21:28:29.519419418 +0200
|
||||
@@ -6029,7 +6029,7 @@ msgstr "Trop de fichiers ouverts dans le
|
||||
#. TRANS modes on an ordinary file.
|
||||
#: sysdeps/gnu/errlist.c:285
|
||||
#: sysdeps/gnu/errlist.c:286
|
||||
msgid "Inappropriate ioctl for device"
|
||||
-msgstr "Ioctl() inappropré pour un périphérique"
|
||||
+msgstr "Ioctl() inapproprié pour un périphérique"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- glibc-2.18/crypt/crypt-entry.c.relocateFcrypt~ 2013-08-17 14:44:36.146493787 +0200
|
||||
+++ glibc-2.18/crypt/crypt-entry.c 2013-08-17 14:44:42.994408176 +0200
|
||||
@@ -182,20 +182,3 @@ crypt (key, salt)
|
||||
--- glibc-2.23/crypt/crypt-entry.c.relocateFcrypt~ 2016-02-18 21:10:00.072228405 +0100
|
||||
+++ glibc-2.23/crypt/crypt-entry.c 2016-02-18 21:10:58.203506144 +0100
|
||||
@@ -168,18 +168,3 @@ crypt (const char *key, const char *salt
|
||||
return __crypt_r (key, salt, &_ufc_foobar);
|
||||
}
|
||||
#endif
|
||||
|
@ -14,16 +14,14 @@
|
|||
-weak_alias (crypt, fcrypt)
|
||||
-#else
|
||||
-char *
|
||||
-__fcrypt (key, salt)
|
||||
- const char *key;
|
||||
- const char *salt;
|
||||
-__fcrypt (const char *key, const char *salt)
|
||||
-{
|
||||
- return crypt (key, salt);
|
||||
-}
|
||||
-#endif
|
||||
--- glibc-2.18/crypt/wrapper.c.relocateFcrypt~ 2013-08-17 14:44:36.143493824 +0200
|
||||
+++ glibc-2.18/crypt/wrapper.c 2013-08-17 14:44:36.146493787 +0200
|
||||
@@ -324,7 +324,6 @@ weak_alias(__crypt, crypt)
|
||||
--- glibc-2.23/crypt/wrapper.c.relocateFcrypt~ 2016-02-18 21:10:00.071228400 +0100
|
||||
+++ glibc-2.23/crypt/wrapper.c 2016-02-18 21:10:00.072228405 +0100
|
||||
@@ -325,7 +325,6 @@ weak_alias(__crypt, crypt)
|
||||
weak_alias(__crypt_gensalt_rn, crypt_gensalt_rn)
|
||||
weak_alias(__crypt_gensalt_ra, crypt_gensalt_ra)
|
||||
weak_alias(__crypt_gensalt, crypt_gensalt)
|
||||
|
|
|
@ -1,115 +0,0 @@
|
|||
--- glibc-2.18/elf/rtld.c.hpt~ 2013-08-17 14:27:41.038184387 +0200
|
||||
+++ glibc-2.18/elf/rtld.c 2013-08-17 14:29:31.166807590 +0200
|
||||
@@ -16,6 +16,9 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
+/* Early statistics require high-precision timing */
|
||||
+#define NEED_HP_TIMING_HWCAP_AVAIL 1
|
||||
+
|
||||
#include <errno.h>
|
||||
#include <dlfcn.h>
|
||||
#include <fcntl.h>
|
||||
@@ -193,6 +196,12 @@ static void dl_main (const ElfW(Phdr) *p
|
||||
static struct libname_list _dl_rtld_libname;
|
||||
static struct libname_list _dl_rtld_libname2;
|
||||
|
||||
+/* Run-time detect availability of high-precision timer? */
|
||||
+#ifdef HP_TIMING_HWCAP_AVAIL
|
||||
+# undef HP_TIMING_AVAIL
|
||||
+# define HP_TIMING_AVAIL HP_TIMING_HWCAP_AVAIL
|
||||
+#endif
|
||||
+
|
||||
/* We expect less than a second for relocation. */
|
||||
#ifdef HP_SMALL_TIMING_AVAIL
|
||||
# undef HP_TIMING_AVAIL
|
||||
@@ -315,9 +324,8 @@ _dl_start_final (void *arg, struct dl_st
|
||||
|
||||
#endif
|
||||
|
||||
-#if HP_TIMING_AVAIL
|
||||
- HP_TIMING_NOW (GL(dl_cpuclock_offset));
|
||||
-#endif
|
||||
+ if (HP_TIMING_AVAIL)
|
||||
+ HP_TIMING_NOW (GL(dl_cpuclock_offset));
|
||||
|
||||
/* Initialize the stack end variable. */
|
||||
__libc_stack_end = __builtin_frame_address (0);
|
||||
--- glibc-2.18/sysdeps/generic/ldsodefs.h.hpt~ 2013-08-11 00:52:55.000000000 +0200
|
||||
+++ glibc-2.18/sysdeps/generic/ldsodefs.h 2013-08-17 14:27:41.153182949 +0200
|
||||
@@ -321,7 +321,7 @@ struct rtld_global
|
||||
/* The object to be initialized first. */
|
||||
EXTERN struct link_map *_dl_initfirst;
|
||||
|
||||
-#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
|
||||
+#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL || defined HP_TIMING_HWCAP_AVAIL
|
||||
/* Start time on CPU clock. */
|
||||
EXTERN hp_timing_t _dl_cpuclock_offset;
|
||||
#endif
|
||||
@@ -534,7 +534,7 @@ struct rtld_global_ro
|
||||
/* All search directories defined at startup. */
|
||||
EXTERN struct r_search_path_elem *_dl_init_all_dirs;
|
||||
|
||||
-#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
|
||||
+#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL || defined HP_TIMING_HWCAP_AVAIL
|
||||
/* Overhead of a high-precision timing measurement. */
|
||||
EXTERN hp_timing_t _dl_hp_timing_overhead;
|
||||
#endif
|
||||
--- glibc-2.18/sysdeps/i386/i586/hp-timing.c.hpt~ 2013-08-17 14:27:41.153182949 +0200
|
||||
+++ glibc-2.18/sysdeps/i386/i586/hp-timing.c 2013-08-17 14:27:41.153182949 +0200
|
||||
@@ -0,0 +1,2 @@
|
||||
+/* We can use the i686 implementation without changes. */
|
||||
+#include <sysdeps/i386/i686/hp-timing.c>
|
||||
--- glibc-2.18/sysdeps/i386/i586/hp-timing.h.hpt~ 2013-08-17 14:27:41.153182949 +0200
|
||||
+++ glibc-2.18/sysdeps/i386/i586/hp-timing.h 2013-08-17 14:27:41.153182949 +0200
|
||||
@@ -0,0 +1,43 @@
|
||||
+#ifndef _HP_HWCAP_TIMING_H
|
||||
+#define _HP_HWCAP_TIMING_H 1
|
||||
+
|
||||
+/* We can use the i686 implementation with slight changes. */
|
||||
+#include <sysdeps/i386/i686/hp-timing.h>
|
||||
+
|
||||
+/* We need the definition of HWCAP_I386_TSC. */
|
||||
+#include <sysdeps/i386/dl-hwcapinfo.h>
|
||||
+
|
||||
+/* We need to perform a runtime check for the timestamp register. */
|
||||
+#undef HP_TIMING_AVAIL
|
||||
+#define HP_TIMING_AVAIL (0)
|
||||
+
|
||||
+/* HP_TIMING_HWCAP_AVAIL: this macro performs a run-time check for the
|
||||
+ capability. */
|
||||
+#define HP_TIMING_HWCAP_AVAIL (_dl_hp_timing_avail())
|
||||
+
|
||||
+/* Perform the TSC check. */
|
||||
+#ifdef NEED_HP_TIMING_HWCAP_AVAIL
|
||||
+static inline
|
||||
+unsigned int
|
||||
+_dl_cpuid_edx (unsigned int op)
|
||||
+{
|
||||
+ unsigned int edx;
|
||||
+ __asm__ __volatile__("push %%ebx ; cpuid ; pop %%ebx"
|
||||
+ : "=d" (edx) : "a" (op) : "ecx");
|
||||
+ return edx;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+internal_function
|
||||
+_dl_hp_timing_avail (void)
|
||||
+{
|
||||
+ static int has_tsc = -1;
|
||||
+
|
||||
+ if (__builtin_expect (has_tsc == -1, 0))
|
||||
+ has_tsc = (_dl_cpuid_edx(1) & HWCAP_I386_TSC) == HWCAP_I386_TSC;
|
||||
+
|
||||
+ return has_tsc;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* hp-timing.h */
|
||||
--- glibc-2.18/sysdeps/i386/i586/Makefile.hpt~ 2013-08-17 14:27:41.153182949 +0200
|
||||
+++ glibc-2.18/sysdeps/i386/i586/Makefile 2013-08-17 14:27:41.153182949 +0200
|
||||
@@ -0,0 +1,4 @@
|
||||
+ifeq ($(subdir),csu)
|
||||
+sysdep_routines += hp-timing
|
||||
+static-only-routines += hp-timing
|
||||
+endif
|
|
@ -1,11 +1,6 @@
|
|||
2003-08-29 Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
|
||||
|
||||
* sysdeps/i386/dl-machine.h (dl_platform_init): Avoid i686
|
||||
libraries to be loaded if the host doesn't support CMOV.
|
||||
|
||||
--- glibc-2.3.3/sysdeps/i386/dl-machine.h.i586-if-no-cmov 2004-06-03 01:21:36.000000000 +0200
|
||||
+++ glibc-2.3.3/sysdeps/i386/dl-machine.h 2004-06-03 07:09:51.518703634 +0200
|
||||
@@ -347,6 +347,9 @@ _dl_start_user:\n\
|
||||
--- glibc-2.24/sysdeps/i386/dl-machine.h.0072~ 2016-08-02 04:01:36.000000000 +0200
|
||||
+++ glibc-2.24/sysdeps/i386/dl-machine.h 2016-08-17 16:58:27.711996583 +0200
|
||||
@@ -226,6 +226,9 @@ _dl_start_user:\n\
|
||||
Prelinked libraries may use Elf32_Rela though. */
|
||||
#define ELF_MACHINE_PLT_REL 1
|
||||
|
||||
|
@ -15,16 +10,16 @@
|
|||
/* We define an initialization functions. This is called very early in
|
||||
_dl_sysdep_start. */
|
||||
#define DL_PLATFORM_INIT dl_platform_init ()
|
||||
@@ -357,6 +360,12 @@ dl_platform_init (void)
|
||||
if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0')
|
||||
/* Avoid an empty string which would disturb us. */
|
||||
GLRO(dl_platform) = NULL;
|
||||
@@ -241,6 +244,12 @@ dl_platform_init (void)
|
||||
/* init_cpu_features has been called early from __libc_start_main in
|
||||
static executable. */
|
||||
init_cpu_features (&GLRO(dl_x86_cpu_features));
|
||||
+
|
||||
+ if (GLRO(dl_platform) != NULL
|
||||
+ && GLRO(dl_platform)[1] >= '6' && (GLRO(dl_hwcap) & HWCAP_I386_CMOV) == 0)
|
||||
+ /* Avoid i686 compiled libraries to be loaded if the host doesn't
|
||||
+ support CMOV instructions. */
|
||||
+ GLRO(dl_platform) = "i586";
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline Elf32_Addr
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
--- glibc-2.18/crypt/crypt-entry.c.owlCrypt~ 2013-08-11 00:52:55.000000000 +0200
|
||||
+++ glibc-2.18/crypt/crypt-entry.c 2013-08-17 14:39:14.300517415 +0200
|
||||
@@ -81,7 +81,7 @@ extern struct crypt_data _ufc_foobar;
|
||||
--- glibc-2.23/crypt/crypt-entry.c.owlCrypt~ 2016-02-18 18:54:00.000000000 +0100
|
||||
+++ glibc-2.23/crypt/crypt-entry.c 2016-02-18 21:09:26.589068442 +0100
|
||||
@@ -71,8 +71,8 @@ extern struct crypt_data _ufc_foobar;
|
||||
*/
|
||||
|
||||
char *
|
||||
-__crypt_r (key, salt, data)
|
||||
+__des_crypt_r (key, salt, data)
|
||||
const char *key;
|
||||
const char *salt;
|
||||
struct crypt_data * __restrict data;
|
||||
@@ -155,6 +155,7 @@ __crypt_r (key, salt, data)
|
||||
-__crypt_r (const char *key, const char *salt,
|
||||
- struct crypt_data * __restrict data)
|
||||
+__des_crypt_r (const char *key, const char *salt,
|
||||
+ struct crypt_data * __restrict data)
|
||||
{
|
||||
ufc_long res[4];
|
||||
char ktab[9];
|
||||
@@ -143,6 +143,7 @@ __crypt_r (const char *key, const char *
|
||||
_ufc_output_conversion_r (res[0], res[1], salt, data);
|
||||
return data->crypt_3_buf;
|
||||
}
|
||||
|
@ -17,7 +19,7 @@
|
|||
weak_alias (__crypt_r, crypt_r)
|
||||
|
||||
char *
|
||||
@@ -180,6 +181,7 @@ crypt (key, salt)
|
||||
@@ -166,6 +167,7 @@ crypt (const char *key, const char *salt
|
||||
|
||||
return __crypt_r (key, salt, &_ufc_foobar);
|
||||
}
|
||||
|
@ -25,11 +27,11 @@
|
|||
|
||||
|
||||
/*
|
||||
--- glibc-2.18/crypt/Makefile.owlCrypt~ 2013-08-17 14:38:07.574351607 +0200
|
||||
+++ glibc-2.18/crypt/Makefile 2013-08-17 14:40:27.546601713 +0200
|
||||
@@ -20,13 +20,13 @@
|
||||
#
|
||||
subdir := crypt
|
||||
--- glibc-2.23/crypt/Makefile.owlCrypt~ 2016-02-18 18:54:00.000000000 +0100
|
||||
+++ glibc-2.23/crypt/Makefile 2016-02-18 21:08:03.819673066 +0100
|
||||
@@ -22,13 +22,13 @@ subdir := crypt
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
-headers := crypt.h
|
||||
+headers := crypt.h gnu-crypt.h ow-crypt.h
|
||||
|
@ -43,8 +45,8 @@
|
|||
|
||||
tests := cert md5c-test sha256c-test sha512c-test badsalttest
|
||||
|
||||
--- glibc-2.18/crypt/Versions.owlCrypt~ 2013-08-11 00:52:55.000000000 +0200
|
||||
+++ glibc-2.18/crypt/Versions 2013-08-17 14:38:07.574351607 +0200
|
||||
--- glibc-2.23/crypt/Versions.owlCrypt~ 2016-02-18 18:54:00.000000000 +0100
|
||||
+++ glibc-2.23/crypt/Versions 2016-02-18 21:08:03.819673066 +0100
|
||||
@@ -1,5 +1,6 @@
|
||||
libcrypt {
|
||||
GLIBC_2.0 {
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
+#include "crypt_freesec.h"
|
||||
+
|
||||
+#include <signal.h>
|
||||
+#include <bits/libc-lock.h>
|
||||
+#include <libc-lock.h>
|
||||
+
|
||||
+__libc_lock_define_initialized (static, _crypt_extended_init_lock)
|
||||
+
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
--- libc/scripts/check-local-headers.sh.multiarch~ 2012-11-17 18:50:14.000000000 +0100
|
||||
+++ libc/scripts/check-local-headers.sh 2012-12-27 20:01:52.821383910 +0100
|
||||
--- glibc-2.24/scripts/check-local-headers.sh.biarch~ 2016-08-17 16:52:14.092668284 +0200
|
||||
+++ glibc-2.24/scripts/check-local-headers.sh 2016-08-17 16:55:02.911984338 +0200
|
||||
@@ -33,7 +33,7 @@ exec ${AWK} -v includedir="$includedir"
|
||||
BEGIN {
|
||||
status = 0
|
||||
exclude = "^" includedir \
|
||||
- "/(.*-.*-.*/|)(asm[-/]|arch|linux/|selinux/|mach/|gd|nss3/|c\\+\\+/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h)"
|
||||
+ "/(.*-.*-.*/|)(asm[-/]|arch|linux/|selinux/|mach/|multiarch-|gd|nss3/|c\\+\\+/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h)"
|
||||
- "/(.*-.*-.*/|.*-.*/|)(asm[-/]|arch|linux/|selinux/|mach/|device/|hurd/(((hurd|ioctl)_types|paths)\\.h|ioctls\\.defs|ihash\\.h)|cthreads\\.h|gd|nss3/|c\\+\\+/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h)"
|
||||
+ "/(.*-.*-.*/|.*-.*/|)(asm[-/]|arch|linux/|selinux/|mach/|device/|hurd/(((hurd|ioctl)_types|paths)\\.h|ioctls\\.defs|ihash\\.h)|cthreads\\.h|multiarch-|gd|nss3/|c\\+\\+/|sys/(capability|sdt(|-config))\\.h|libaudit\\.h)"
|
||||
}
|
||||
/^[^ ]/ && $1 ~ /.*:/ { obj = $1 }
|
||||
{
|
||||
|
|
|
@ -1,19 +1,9 @@
|
|||
pt_BR i18n fixes from glibc-2.3.4-77143cl.src.rpm (Conectiva Linux)
|
||||
|
||||
--- glibc-2.3.6/po/pt_BR.po.orig 2006-04-17 04:47:44.000000000 -0300
|
||||
+++ glibc-2.3.6/po/pt_BR.po 2006-04-17 04:48:03.000000000 -0300
|
||||
@@ -84,6 +84,7 @@
|
||||
msgstr "\t[%u] - [%u bytes] "
|
||||
|
||||
#: nscd/nscd_stat.c:153
|
||||
+#, c-format
|
||||
msgid ""
|
||||
"\n"
|
||||
"%s cache:\n"
|
||||
@@ -103,11 +104,14 @@
|
||||
--- glibc-2.21/po/pt_BR.po.ptBR~ 2015-02-07 14:28:42.147072936 +0100
|
||||
+++ glibc-2.21/po/pt_BR.po 2015-02-07 14:29:29.831312393 +0100
|
||||
@@ -4693,11 +4693,14 @@ msgstr ""
|
||||
"cache %s:\n"
|
||||
"\n"
|
||||
"%15s cache está habilitado\n"
|
||||
"%15s cache está habilitado\n"
|
||||
-"%15Zd tamanho sugerido%15ld segundos de vida para entradas positivas\n"
|
||||
+"%15Zd tamanho sugerido\n"
|
||||
+"%15ld segundos de vida para entradas positivas\n"
|
||||
|
@ -21,9 +11,9 @@ pt_BR i18n fixes from glibc-2.3.4-77143cl.src.rpm (Conectiva Linux)
|
|||
"%15ld hits do cache para entradas positivas\n"
|
||||
"%15ld hits do cache para entradas negativas\n"
|
||||
-"%15ld%% quantidade de hits no cache\n"
|
||||
+"%15ld ausências no cache para entradas positivas\n"
|
||||
+"%15ld ausências no cache para entradas negativas\n"
|
||||
+"%15ld ausências no cache para entradas positivas\n"
|
||||
+"%15ld ausências no cache para entradas negativas\n"
|
||||
+"%15ld%% taxa de hits no cache\n"
|
||||
"%15s verifique o arquivo /etc/%s para mudanças\n"
|
||||
"%15s verifique o arquivo /etc/%s para mudanças\n"
|
||||
|
||||
#: nis/nis_print.c:251
|
||||
#: nscd/pwdcache.c:428
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
--- glibc-2.16.90-97bc38d7/Makeconfig.orig 2012-09-26 13:48:22.726000556 -0300
|
||||
+++ glibc-2.16.90-97bc38d7/Makeconfig 2012-09-26 13:48:36.276000993 -0300
|
||||
@@ -216,7 +216,7 @@ inst_zonedir = $(install_root)$(zonedir)
|
||||
|
||||
# Where to install the locale files.
|
||||
ifndef localedir
|
||||
-localedir = $(libdir)/locale
|
||||
+localedir = $(datadir)/locale
|
||||
endif
|
||||
inst_localedir = $(install_root)$(localedir)
|
||||
|
||||
--- glibc-2.16.90-97bc38d7/sysdeps/gnu/configure.ac.orig 2012-09-27 13:08:49.949074767 -0300
|
||||
+++ glibc-2.16.90-97bc38d7/sysdeps/gnu/configure.ac 2012-09-27 13:09:22.748076063 -0300
|
||||
@@ -18,7 +18,7 @@ case "$prefix" in
|
||||
if test "$libdir" = '${exec_prefix}/lib'; then
|
||||
libdir='${exec_prefix}/lib64';
|
||||
# Locale data can be shared between 32bit and 64bit libraries
|
||||
- libc_cv_localedir='${exec_prefix}/lib/locale'
|
||||
+ libc_cv_localedir='${exec_prefix}/share/locale'
|
||||
fi
|
||||
;;
|
||||
*)
|
|
@ -1,44 +0,0 @@
|
|||
--- glibc-2.16.90-97bc38d7/misc/tst-error1.c.orig 2012-09-26 15:21:29.672179348 -0300
|
||||
+++ glibc-2.16.90-97bc38d7/misc/tst-error1.c 2012-09-26 15:21:59.422180301 -0300
|
||||
@@ -16,8 +16,8 @@ do_test (int argc, char *argv[])
|
||||
for (int i = 0; i < 1000; ++i)
|
||||
memcpy (&buf[i * (sizeof (str) - 1)], str, sizeof (str));
|
||||
error (0, 0, str);
|
||||
- error (0, 0, buf);
|
||||
- error (0, 0, buf);
|
||||
+ error (0, 0, "%s", buf);
|
||||
+ error (0, 0, "%s", buf);
|
||||
error (0, 0, str);
|
||||
return 0;
|
||||
}
|
||||
--- glibc-2.16.90-97bc38d7/posix/regexbug1.c.orig 2012-09-26 15:23:13.175182590 -0300
|
||||
+++ glibc-2.16.90-97bc38d7/posix/regexbug1.c 2012-09-26 15:23:32.198183235 -0300
|
||||
@@ -18,7 +18,7 @@ main (void)
|
||||
{
|
||||
char buf[100];
|
||||
regerror (reerr, &re, buf, sizeof buf);
|
||||
- error (EXIT_FAILURE, 0, buf);
|
||||
+ error (EXIT_FAILURE, 0, "%s", buf);
|
||||
}
|
||||
|
||||
if (regexec (&re, "002", 2, ma, 0) != 0)
|
||||
@@ -35,7 +35,7 @@ main (void)
|
||||
{
|
||||
char buf[100];
|
||||
regerror (reerr, &re, buf, sizeof buf);
|
||||
- error (EXIT_FAILURE, 0, buf);
|
||||
+ error (EXIT_FAILURE, 0, "%s", buf);
|
||||
}
|
||||
|
||||
if (regexec (&re, "002", 2, ma, 0) != 0)
|
||||
--- glibc-2.16.90-97bc38d7/stdio-common/test-vfprintf.c.orig 2012-09-26 15:23:52.887183970 -0300
|
||||
+++ glibc-2.16.90-97bc38d7/stdio-common/test-vfprintf.c 2012-09-26 15:24:13.870184603 -0300
|
||||
@@ -92,7 +92,7 @@ main (void)
|
||||
fprintf (fp, "%s", large);
|
||||
fprintf (fp, "%.*s", 30000, large);
|
||||
large[20000] = '\0';
|
||||
- fprintf (fp, large);
|
||||
+ fprintf (fp, "%s", large);
|
||||
fprintf (fp, "%-1.300000000s", "hello");
|
||||
|
||||
if (fflush (fp) != 0 || ferror (fp) != 0 || fclose (fp) != 0)
|
|
@ -1,18 +1,19 @@
|
|||
--- glibc-2.18/stdlib/Makefile.ldbl~ 2013-08-17 14:29:53.818524404 +0200
|
||||
+++ glibc-2.18/stdlib/Makefile 2013-08-17 14:36:20.568689362 +0200
|
||||
@@ -130,9 +130,15 @@ ifeq ($(run-built-tests),yes)
|
||||
tests: $(objpfx)tst-fmtmsg.out
|
||||
endif
|
||||
--- glibc-2.20/stdlib/Makefile.ldbl~ 2014-09-08 21:30:48.771678525 +0200
|
||||
+++ glibc-2.20/stdlib/Makefile 2014-09-08 21:34:51.842639720 +0200
|
||||
@@ -125,9 +125,16 @@ test-canon-ARGS = --test-dir=${common-ob
|
||||
|
||||
bug-fmtmsg1-ENV = SEV_LEVEL=foo,11,newsev
|
||||
|
||||
+isomac-includes = -I../include $(+sysdep-includes) $(sysincludes) -I..
|
||||
+ifeq (powerpc:8, $(base-machine):$(sizeof-long-double))
|
||||
+# XXX only necessary for bootstrapping...
|
||||
+isomac-includes += -I../libio -I../stdlib -I../wcsmbs
|
||||
+endif
|
||||
+
|
||||
$(objpfx)isomac.out: $(objpfx)isomac
|
||||
$(dir $<)$(notdir $<) '$(CC)' \
|
||||
'-I../include $(+sysdep-includes) $(sysincludes) -I..' > $<.out
|
||||
+ '$(isomac-includes)' > $<.out
|
||||
'-I../include $(+sysdep-includes) $(sysincludes) -I..' > $<.out; \
|
||||
+ '$(isomac-includes)' > $<.out \
|
||||
$(evaluate-test)
|
||||
|
||||
isomac-CFLAGS = -O
|
||||
$(objpfx)isomac: isomac.c
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
diff --git a/configure.ac b/configure.ac
|
||||
index d369382..ffc6151 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -924,6 +924,16 @@ AC_SUBST(MIG)dnl Needed by sysdeps/mach/configure.in
|
||||
AC_CHECK_PROG_VER(AS, $AS, --version,
|
||||
--- glibc-2.21/configure.ac.gold~ 2015-02-07 14:30:19.652562579 +0100
|
||||
+++ glibc-2.21/configure.ac 2015-02-07 14:31:12.232826621 +0100
|
||||
@@ -912,6 +912,16 @@ AC_CHECK_PROG_VER(AS, $AS, --version,
|
||||
[GNU assembler.* \([0-9]*\.[0-9.]*\)],
|
||||
[2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], AS=: critic_missing="$critic_missing as")
|
||||
[2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
|
||||
AS=: critic_missing="$critic_missing as")
|
||||
+# If the system defaulted to using gold, and the compiler has suggested
|
||||
+# we use a linker that is actually gold, then we ignore the suggestion
|
||||
+# and use ld.bfd instead. This won't fix the implicit uses of gold by
|
||||
|
@ -18,4 +16,4 @@ index d369382..ffc6151 100644
|
|||
+fi
|
||||
AC_CHECK_PROG_VER(LD, $LD, --version,
|
||||
[GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
|
||||
[2.1[0-9][0-9]*|2.[2-9][0-9]*|[3-9].*|[1-9][0-9]*], LD=: critic_missing="$critic_missing ld")
|
||||
[2.1[0-9][0-9]*|2.2[2-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1
|
||||
|
||||
iQEcBAABAgAGBQJS9Q/LAAoJECXvCkNsKkr/tgEH+wf5M8BU9gbVncXh5mikpKIe
|
||||
V81RjOJVP0TI8ix7Eq+GHqPVDDVCHupX81u87VbETRd+8sJMlXQa1fep0y7T8GV4
|
||||
LiapkkBPbC7wGQ6h1jpDE4hQhCiHLYWgDgGhj6qtTQIvhqR5/B5927UKfw7imhHD
|
||||
805UZdO8ryHCWbWAeOljPA3spz0DKtUe/eskWFEdBparSbpEEmaQiHlT+6mGy4Xy
|
||||
mUe0BqXSWFFq/gmZT7DpJxAW7WnO8iwc2/NUli/dl1dSd2cMHlEJ96ZcJ4NKKf7j
|
||||
AxaVwLr6zgyfORaEt28+JAf8nDXIsztTqtNBU5YrJpMmYo0e9v/Zao0G+zbIsWo=
|
||||
=IQM8
|
||||
-----END PGP SIGNATURE-----
|
|
@ -1,47 +1,42 @@
|
|||
From 16552c01a66633c9e412984d9d92616bd4e5303c Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Schwab <schwab@redhat.com>
|
||||
Date: Fri, 11 Jun 2010 11:04:11 +0200
|
||||
Subject: [PATCH] Properly set __libc_multiple_libcs
|
||||
|
||||
* elf/rtld.c (_dl_starting_up): Always define.
|
||||
(dl_main): Always set _dl_starting_up.
|
||||
* elf/dl-support.c (_dl_starting_up): Always define.
|
||||
* elf/dl-init.c (_dl_init): Always clear _dl_starting_up.
|
||||
|
||||
---
|
||||
ChangeLog | 7 +++++++
|
||||
elf/dl-init.c | 4 ----
|
||||
elf/dl-support.c | 2 --
|
||||
elf/rtld.c | 4 ----
|
||||
4 files changed, 7 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/elf/dl-init.c
|
||||
+++ b/elf/dl-init.c
|
||||
@@ -23,11 +23,9 @@
|
||||
/* Type of the initializer. */
|
||||
typedef void (*init_t) (int, char **, char **);
|
||||
|
||||
-#ifndef HAVE_INLINED_SYSCALLS
|
||||
/* Flag, nonzero during startup phase. */
|
||||
extern int _dl_starting_up;
|
||||
extern int _dl_starting_up_internal attribute_hidden;
|
||||
-#endif
|
||||
|
||||
|
||||
static void
|
||||
@@ -132,9 +130,7 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
|
||||
#
|
||||
# Upstream discussions:
|
||||
# https://sourceware.org/ml/libc-alpha/2014-02/msg00580.html
|
||||
#
|
||||
# Based on the following commit:
|
||||
#
|
||||
# From 16552c01a66633c9e412984d9d92616bd4e5303c Mon Sep 17 00:00:00 2001
|
||||
# From: Andreas Schwab <schwab@redhat.com>
|
||||
# Date: Fri, 11 Jun 2010 11:04:11 +0200
|
||||
# Subject: [PATCH] Properly set __libc_multiple_libcs
|
||||
#
|
||||
# * elf/rtld.c (_dl_starting_up): Always define.
|
||||
# (dl_main): Always set _dl_starting_up.
|
||||
# * elf/dl-support.c (_dl_starting_up): Always define.
|
||||
# * elf/dl-init.c (_dl_init): Always clear _dl_starting_up.
|
||||
#
|
||||
# ---
|
||||
# ChangeLog | 7 +++++++
|
||||
# elf/dl-init.c | 4 ----
|
||||
# elf/dl-support.c | 2 --
|
||||
# elf/rtld.c | 4 ----
|
||||
# 4 files changed, 7 insertions(+), 10 deletions(-)
|
||||
#
|
||||
diff -urN glibc-2.20-205-ga39208b/elf/dl-init.c glibc-2.20-205-ga39208b.mod/elf/dl-init.c
|
||||
--- glibc-2.20-205-ga39208b/elf/dl-init.c 2014-11-21 16:08:32.744913590 -0500
|
||||
+++ glibc-2.20-205-ga39208b.mod/elf/dl-init.c 2014-11-21 16:09:42.485708197 -0500
|
||||
@@ -119,8 +119,6 @@
|
||||
while (i-- > 0)
|
||||
call_init (main_map->l_initfini[i], argc, argv, env);
|
||||
|
||||
-#ifndef HAVE_INLINED_SYSCALLS
|
||||
/* Finished starting up. */
|
||||
INTUSE(_dl_starting_up) = 0;
|
||||
_dl_starting_up = 0;
|
||||
-#endif
|
||||
}
|
||||
INTDEF (_dl_init)
|
||||
--- a/elf/dl-support.c
|
||||
+++ b/elf/dl-support.c
|
||||
@@ -81,10 +81,8 @@ unsigned long long _dl_load_adds;
|
||||
diff -urN glibc-2.20-205-ga39208b/elf/dl-support.c glibc-2.20-205-ga39208b.mod/elf/dl-support.c
|
||||
--- glibc-2.20-205-ga39208b/elf/dl-support.c 2014-11-19 14:35:03.000000000 -0500
|
||||
+++ glibc-2.20-205-ga39208b.mod/elf/dl-support.c 2014-11-21 16:09:54.829671843 -0500
|
||||
@@ -118,10 +118,8 @@
|
||||
.r_nlist = 1,
|
||||
};
|
||||
|
||||
|
@ -52,9 +47,10 @@ Subject: [PATCH] Properly set __libc_multiple_libcs
|
|||
|
||||
/* Random data provided by the kernel. */
|
||||
void *_dl_random;
|
||||
--- a/elf/rtld.c
|
||||
+++ b/elf/rtld.c
|
||||
@@ -106,7 +106,6 @@ static struct audit_list
|
||||
diff -urN glibc-2.20-205-ga39208b/elf/rtld.c glibc-2.20-205-ga39208b.mod/elf/rtld.c
|
||||
--- glibc-2.20-205-ga39208b/elf/rtld.c 2014-11-21 16:08:32.745913587 -0500
|
||||
+++ glibc-2.20-205-ga39208b.mod/elf/rtld.c 2014-11-21 16:09:05.614816785 -0500
|
||||
@@ -107,7 +107,6 @@
|
||||
struct audit_list *next;
|
||||
} *audit_list;
|
||||
|
||||
|
@ -62,21 +58,21 @@ Subject: [PATCH] Properly set __libc_multiple_libcs
|
|||
/* Set nonzero during loading and initialization of executable and
|
||||
libraries, cleared before the executable's entry point runs. This
|
||||
must not be initialized to nonzero, because the unused dynamic
|
||||
@@ -116,7 +115,6 @@ static struct audit_list
|
||||
@@ -117,7 +116,6 @@
|
||||
never be called. */
|
||||
int _dl_starting_up = 0;
|
||||
INTVARDEF(_dl_starting_up)
|
||||
rtld_hidden_def (_dl_starting_up)
|
||||
-#endif
|
||||
|
||||
/* This is the structure which defines all variables global to ld.so
|
||||
(except those which cannot be added for some reason). */
|
||||
@@ -929,10 +927,8 @@ dl_main (const ElfW(Phdr) *phdr,
|
||||
@@ -776,10 +774,8 @@
|
||||
/* Process the environment variable which control the behaviour. */
|
||||
process_envvars (&mode);
|
||||
|
||||
-#ifndef HAVE_INLINED_SYSCALLS
|
||||
/* Set up a flag which tells we are just starting. */
|
||||
INTUSE(_dl_starting_up) = 1;
|
||||
_dl_starting_up = 1;
|
||||
-#endif
|
||||
|
||||
if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
|
||||
|
|
|
@ -31,7 +31,7 @@ index 18a83d2..6e16a9a 100644
|
|||
&& (!is_path || name[len] != ':'))
|
||||
return 0;
|
||||
|
||||
- if (__builtin_expect (secure, 0)
|
||||
- if (__glibc_unlikely (secure)
|
||||
- && ((name[len] != '\0' && name[len] != '/'
|
||||
- && (!is_path || name[len] != ':'))
|
||||
- || (name != start + 1 && (!is_path || name[-2] != ':'))))
|
||||
|
@ -48,7 +48,7 @@ index 18a83d2..6e16a9a 100644
|
|||
- is $ORIGIN alone) and it must always appear first in path. */
|
||||
++name;
|
||||
- if ((len = is_dst (start, name, "ORIGIN", is_path,
|
||||
- INTUSE(__libc_enable_secure))) != 0
|
||||
- __libc_enable_secure)) != 0
|
||||
- || (len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0
|
||||
- || (len = is_dst (start, name, "LIB", is_path, 0)) != 0)
|
||||
+ if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0
|
||||
|
@ -62,13 +62,13 @@ index 18a83d2..6e16a9a 100644
|
|||
|
||||
++name;
|
||||
- if ((len = is_dst (start, name, "ORIGIN", is_path,
|
||||
- INTUSE(__libc_enable_secure))) != 0)
|
||||
- __libc_enable_secure)) != 0)
|
||||
+ if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0)
|
||||
{
|
||||
- repl = l->l_origin;
|
||||
+ /* For SUID/GUID programs $ORIGIN must always appear
|
||||
+ first in a path element. */
|
||||
+ if (__builtin_expect (INTUSE(__libc_enable_secure), 0)
|
||||
+ if (__glibc_unlikely (__libc_enable_secure)
|
||||
+ && ((name[len] != '\0' && name[len] != '/'
|
||||
+ && (!is_path || name[len] != ':'))
|
||||
+ || (name != start + 1 && (!is_path || name[-2] != ':'))))
|
||||
|
@ -76,11 +76,11 @@ index 18a83d2..6e16a9a 100644
|
|||
+ else
|
||||
+ repl = l->l_origin;
|
||||
+
|
||||
check_for_trusted = (INTUSE(__libc_enable_secure)
|
||||
check_for_trusted = (__libc_enable_secure
|
||||
&& l->l_type == lt_executable);
|
||||
}
|
||||
@@ -351,9 +348,9 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
|
||||
check_for_trusted = (INTUSE(__libc_enable_secure)
|
||||
check_for_trusted = (__libc_enable_secure
|
||||
&& l->l_type == lt_executable);
|
||||
}
|
||||
- else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0)
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
From 70d0a630700f602a457832383161d261fe222db5 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Schwab <schwab@redhat.com>
|
||||
Date: Thu, 1 Jul 2010 13:14:26 +0200
|
||||
Subject: [PATCH] Fix PLT reference
|
||||
|
||||
* include/sys/resource.h (__getrlimit): Add hidden proto.
|
||||
* sysdeps/unix/sysv/linux/i386/getrlimit.c: Add libc_hidden_weak.
|
||||
* sysdeps/mach/hurd/getrlimit.c: Add libc_hidden_def.
|
||||
* resource/getrlimit.c: Likewise.
|
||||
|
||||
---
|
||||
ChangeLog | 7 +++++++
|
||||
include/sys/resource.h | 1 +
|
||||
resource/getrlimit.c | 1 +
|
||||
sysdeps/mach/hurd/getrlimit.c | 1 +
|
||||
sysdeps/unix/sysv/linux/i386/getrlimit.c | 1 +
|
||||
5 files changed, 11 insertions(+), 0 deletions(-)
|
||||
|
||||
--- a/include/sys/resource.h
|
||||
+++ b/include/sys/resource.h
|
||||
@@ -14,5 +14,6 @@ extern int __getrusage (enum __rusage_who __who, struct rusage *__usage)
|
||||
|
||||
extern int __setrlimit (enum __rlimit_resource __resource,
|
||||
const struct rlimit *__rlimits);
|
||||
+libc_hidden_proto (__getrlimit)
|
||||
#endif
|
||||
#endif
|
||||
--- a/resource/getrlimit.c
|
||||
+++ b/resource/getrlimit.c
|
||||
@@ -27,6 +27,7 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
|
||||
__set_errno (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
+libc_hidden_def (__getrlimit)
|
||||
weak_alias (__getrlimit, getrlimit)
|
||||
|
||||
stub_warning (getrlimit)
|
||||
--- a/sysdeps/mach/hurd/getrlimit.c
|
||||
+++ b/sysdeps/mach/hurd/getrlimit.c
|
||||
@@ -43,4 +43,5 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
|
||||
|
||||
return 0;
|
||||
}
|
||||
+libc_hidden_def (__getrlimit)
|
||||
weak_alias (__getrlimit, getrlimit)
|
|
@ -7,5 +7,5 @@ diff -Nrup a/localedata/Makefile b/localedata/Makefile
|
|||
$(LOCALEDEF) --alias-file=../intl/locale.alias \
|
||||
+ --no-archive \
|
||||
-i locales/$$input -c -f charmaps/$$charset \
|
||||
$(addprefix --prefix=,$(install_root)) $$locale; \
|
||||
echo ' done'; \
|
||||
$(addprefix --prefix=,$(install_root)) $$locale \
|
||||
&& echo ' done'; \
|
||||
|
|
|
@ -4,7 +4,7 @@ diff -Nrup a/nptl/Makefile b/nptl/Makefile
|
|||
@@ -529,15 +529,19 @@ $(addprefix $(objpfx), \
|
||||
$(tests) $(xtests) $(test-srcs))): $(objpfx)libpthread.so \
|
||||
$(objpfx)libpthread_nonshared.a
|
||||
$(objpfx)tst-unload: $(common-objpfx)dlfcn/libdl.so
|
||||
$(objpfx)tst-unload: $(libdl)
|
||||
-# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
|
||||
+# $(objpfx)linklibc.so is used instead of $(common-objpfx)libc.so,
|
||||
# since otherwise libpthread.so comes before libc.so when linking.
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
glibc-2.3.3-1478-g37582bc
|
||||
|
||||
* Thu Nov 30 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-9
|
||||
- on ppc64 build __libc_start_main without unwind info,
|
||||
as it breaks MD_FROB_UPDATE_CONTEXT (#217729, #217775; in the
|
||||
future that could be fixable just by providing .cfi_undefined r2
|
||||
in __libc_start_main instead)
|
||||
|
||||
diff -Nrup a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile
|
||||
--- a/sysdeps/powerpc/powerpc64/Makefile 2012-06-05 07:42:49.000000000 -0600
|
||||
+++ b/sysdeps/powerpc/powerpc64/Makefile 2012-06-07 12:15:21.828318633 -0600
|
||||
@@ -35,6 +35,8 @@ CFLAGS-rtld-memmove.os = $(no-special-re
|
||||
CFLAGS-rtld-memchr.os = $(no-special-regs)
|
||||
CFLAGS-rtld-strnlen.os = $(no-special-regs)
|
||||
|
||||
+CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables
|
||||
+
|
||||
ifeq ($(subdir),csu)
|
||||
sysdep_routines += hp-timing
|
||||
elide-routines.os += hp-timing
|
|
@ -1,61 +0,0 @@
|
|||
From cde99cd2b7b16a6113acb054e89d490047932a9f Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Schwab <schwab@redhat.com>
|
||||
Date: Thu, 8 Apr 2010 11:18:26 +0200
|
||||
Subject: [PATCH] Don't call uname or getrlimit in libpthread init function
|
||||
|
||||
* sysdeps/unix/sysv/linux/i386/Versions: Export __uname under
|
||||
GLIBC_PRIVATE.
|
||||
* nptl/Versions: Export __getrlimit under GLIBC_PRIVATE.
|
||||
* sysdeps/unix/sysv/linux/i386/smp.h: Call __uname instead of uname.
|
||||
* nptl/nptl-init.c: Call __getrlimit instead of getrlimit.
|
||||
|
||||
---
|
||||
ChangeLog | 8 ++++++++
|
||||
nptl/Versions | 1 +
|
||||
nptl/nptl-init.c | 2 +-
|
||||
nptl/sysdeps/unix/sysv/linux/i386/Versions | 6 ++++++
|
||||
nptl/sysdeps/unix/sysv/linux/i386/smp.h | 2 +-
|
||||
5 files changed, 17 insertions(+), 2 deletions(-)
|
||||
create mode 100644 nptl/sysdeps/unix/sysv/linux/i386/Versions
|
||||
|
||||
--- a/nptl/Version
|
||||
+++ b/nptl/Versions
|
||||
@@ -30,6 +30,7 @@ libc {
|
||||
__libc_alloca_cutoff;
|
||||
# Internal libc interface to libpthread
|
||||
__libc_dl_error_tsd;
|
||||
+ __getrlimit;
|
||||
}
|
||||
}
|
||||
|
||||
--- a/nptl/nptl-init.c
|
||||
+++ b/nptl/nptl-init.c
|
||||
@@ -414,7 +414,7 @@ __pthread_initialize_minimal_internal (void)
|
||||
/* Determine the default allowed stack size. This is the size used
|
||||
in case the user does not specify one. */
|
||||
struct rlimit limit;
|
||||
- if (getrlimit (RLIMIT_STACK, &limit) != 0
|
||||
+ if (__getrlimit (RLIMIT_STACK, &limit) != 0
|
||||
|| limit.rlim_cur == RLIM_INFINITY)
|
||||
/* The system limit is not usable. Use an architecture-specific
|
||||
default. */
|
||||
--- a/nptl/sysdeps/unix/sysv/linux/i386/Versions
|
||||
+++ b/nptl/sysdeps/unix/sysv/linux/i386/Versions
|
||||
@@ -0,0 +1,6 @@
|
||||
+libc {
|
||||
+ GLIBC_PRIVATE {
|
||||
+ # Internal libc interface to libpthread
|
||||
+ __uname;
|
||||
+ }
|
||||
+}
|
||||
--- a/nptl/sysdeps/unix/sysv/linux/i386/smp.h
|
||||
+++ b/nptl/sysdeps/unix/sysv/linux/i386/smp.h
|
||||
@@ -36,7 +36,7 @@ is_smp_system (void)
|
||||
char *cp;
|
||||
|
||||
/* Try reading the number using `sysctl' first. */
|
||||
- if (uname (&u.uts) == 0)
|
||||
+ if (__uname (&u.uts) == 0)
|
||||
cp = u.uts.version;
|
||||
else
|
||||
{
|
|
@ -1,163 +0,0 @@
|
|||
#
|
||||
# commit a39208bd7fb76c1b01c127b4c61f9bfd915bfe7c
|
||||
# Author: Carlos O'Donell <carlos@redhat.com>
|
||||
# Date: Wed Nov 19 11:44:12 2014 -0500
|
||||
#
|
||||
# CVE-2014-7817: wordexp fails to honour WRDE_NOCMD.
|
||||
#
|
||||
# The function wordexp() fails to properly handle the WRDE_NOCMD
|
||||
# flag when processing arithmetic inputs in the form of "$((... ``))"
|
||||
# where "..." can be anything valid. The backticks in the arithmetic
|
||||
# epxression are evaluated by in a shell even if WRDE_NOCMD forbade
|
||||
# command substitution. This allows an attacker to attempt to pass
|
||||
# dangerous commands via constructs of the above form, and bypass
|
||||
# the WRDE_NOCMD flag. This patch fixes this by checking for WRDE_NOCMD
|
||||
# in exec_comm(), the only place that can execute a shell. All other
|
||||
# checks for WRDE_NOCMD are superfluous and removed.
|
||||
#
|
||||
# We expand the testsuite and add 3 new regression tests of roughly
|
||||
# the same form but with a couple of nested levels.
|
||||
#
|
||||
# On top of the 3 new tests we add fork validation to the WRDE_NOCMD
|
||||
# testing. If any forks are detected during the execution of a wordexp()
|
||||
# call with WRDE_NOCMD, the test is marked as failed. This is slightly
|
||||
# heuristic since vfork might be used in the future, but it provides a
|
||||
# higher level of assurance that no shells were executed as part of
|
||||
# command substitution with WRDE_NOCMD in effect. In addition it doesn't
|
||||
# require libpthread or libdl, instead we use the public implementation
|
||||
# namespace function __register_atfork (already part of the public ABI
|
||||
# for libpthread).
|
||||
#
|
||||
# Tested on x86_64 with no regressions.
|
||||
#
|
||||
diff --git glibc-2.17-c758a686/posix/wordexp-test.c glibc-2.17-c758a686/posix/wordexp-test.c
|
||||
index 4957006..bdd65e4 100644
|
||||
--- glibc-2.17-c758a686/posix/wordexp-test.c
|
||||
+++ glibc-2.17-c758a686/posix/wordexp-test.c
|
||||
@@ -27,6 +27,25 @@
|
||||
|
||||
#define IFS " \n\t"
|
||||
|
||||
+extern void *__dso_handle __attribute__ ((__weak__, __visibility__ ("hidden")));
|
||||
+extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *);
|
||||
+
|
||||
+static int __app_register_atfork (void (*prepare) (void), void (*parent) (void), void (*child) (void))
|
||||
+{
|
||||
+ return __register_atfork (prepare, parent, child,
|
||||
+ &__dso_handle == NULL ? NULL : __dso_handle);
|
||||
+}
|
||||
+
|
||||
+/* Number of forks seen. */
|
||||
+static int registered_forks;
|
||||
+
|
||||
+/* For each fork increment the fork count. */
|
||||
+static void
|
||||
+register_fork (void)
|
||||
+{
|
||||
+ registered_forks++;
|
||||
+}
|
||||
+
|
||||
struct test_case_struct
|
||||
{
|
||||
int retval;
|
||||
@@ -206,6 +225,12 @@ struct test_case_struct
|
||||
{ WRDE_SYNTAX, NULL, "$((2+))", 0, 0, { NULL, }, IFS },
|
||||
{ WRDE_SYNTAX, NULL, "`", 0, 0, { NULL, }, IFS },
|
||||
{ WRDE_SYNTAX, NULL, "$((010+4+))", 0, 0, { NULL }, IFS },
|
||||
+ /* Test for CVE-2014-7817. We test 3 combinations of command
|
||||
+ substitution inside an arithmetic expression to make sure that
|
||||
+ no commands are executed and error is returned. */
|
||||
+ { WRDE_CMDSUB, NULL, "$((`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
|
||||
+ { WRDE_CMDSUB, NULL, "$((1+`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
|
||||
+ { WRDE_CMDSUB, NULL, "$((1+$((`echo 1`))))", WRDE_NOCMD, 0, { NULL, }, IFS },
|
||||
|
||||
{ -1, NULL, NULL, 0, 0, { NULL, }, IFS },
|
||||
};
|
||||
@@ -258,6 +283,15 @@ main (int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ /* If we are not allowed to do command substitution, we install
|
||||
+ fork handlers to verify that no forks happened. No forks should
|
||||
+ happen at all if command substitution is disabled. */
|
||||
+ if (__app_register_atfork (register_fork, NULL, NULL) != 0)
|
||||
+ {
|
||||
+ printf ("Failed to register fork handler.\n");
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
for (test = 0; test_case[test].retval != -1; test++)
|
||||
if (testit (&test_case[test]))
|
||||
++fail;
|
||||
@@ -367,6 +401,9 @@ testit (struct test_case_struct *tc)
|
||||
|
||||
printf ("Test %d (%s): ", ++tests, tc->words);
|
||||
|
||||
+ if (tc->flags & WRDE_NOCMD)
|
||||
+ registered_forks = 0;
|
||||
+
|
||||
if (tc->flags & WRDE_APPEND)
|
||||
{
|
||||
/* initial wordexp() call, to be appended to */
|
||||
@@ -378,6 +415,13 @@ testit (struct test_case_struct *tc)
|
||||
}
|
||||
retval = wordexp (tc->words, &we, tc->flags);
|
||||
|
||||
+ if ((tc->flags & WRDE_NOCMD)
|
||||
+ && (registered_forks > 0))
|
||||
+ {
|
||||
+ printf ("FAILED fork called for WRDE_NOCMD\n");
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
if (tc->flags & WRDE_DOOFFS)
|
||||
start_offs = sav_we.we_offs;
|
||||
|
||||
diff --git glibc-2.17-c758a686/posix/wordexp.c glibc-2.17-c758a686/posix/wordexp.c
|
||||
index b6b65dd..26f3a26 100644
|
||||
--- glibc-2.17-c758a686/posix/wordexp.c
|
||||
+++ glibc-2.17-c758a686/posix/wordexp.c
|
||||
@@ -893,6 +893,10 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
||||
pid_t pid;
|
||||
int noexec = 0;
|
||||
|
||||
+ /* Do nothing if command substitution should not succeed. */
|
||||
+ if (flags & WRDE_NOCMD)
|
||||
+ return WRDE_CMDSUB;
|
||||
+
|
||||
/* Don't fork() unless necessary */
|
||||
if (!comm || !*comm)
|
||||
return 0;
|
||||
@@ -2082,9 +2086,6 @@ parse_dollars (char **word, size_t *word_length, size_t *max_length,
|
||||
}
|
||||
}
|
||||
|
||||
- if (flags & WRDE_NOCMD)
|
||||
- return WRDE_CMDSUB;
|
||||
-
|
||||
(*offset) += 2;
|
||||
return parse_comm (word, word_length, max_length, words, offset, flags,
|
||||
quoted? NULL : pwordexp, ifs, ifs_white);
|
||||
@@ -2196,9 +2197,6 @@ parse_dquote (char **word, size_t *word_length, size_t *max_length,
|
||||
break;
|
||||
|
||||
case '`':
|
||||
- if (flags & WRDE_NOCMD)
|
||||
- return WRDE_CMDSUB;
|
||||
-
|
||||
++(*offset);
|
||||
error = parse_backtick (word, word_length, max_length, words,
|
||||
offset, flags, NULL, NULL, NULL);
|
||||
@@ -2357,12 +2355,6 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
|
||||
break;
|
||||
|
||||
case '`':
|
||||
- if (flags & WRDE_NOCMD)
|
||||
- {
|
||||
- error = WRDE_CMDSUB;
|
||||
- goto do_error;
|
||||
- }
|
||||
-
|
||||
++words_offset;
|
||||
error = parse_backtick (&word, &word_length, &max_length, words,
|
||||
&words_offset, flags, pwordexp, ifs,
|
|
@ -1,18 +0,0 @@
|
|||
commit f9d2d03254a58d92635a311a42253eeed5a40a47
|
||||
Author: Andreas Schwab <schwab@suse.de>
|
||||
Date: Mon May 26 18:01:31 2014 +0200
|
||||
|
||||
Fix invalid file descriptor reuse while sending DNS query (BZ #15946)
|
||||
|
||||
diff --git glibc-2.17-c758a686/resolv/res_send.c glibc-2.17-c758a686/resolv/res_send.c
|
||||
index 3273d55..af42b8a 100644
|
||||
--- glibc-2.17-c758a686/resolv/res_send.c
|
||||
+++ glibc-2.17-c758a686/resolv/res_send.c
|
||||
@@ -1410,6 +1410,7 @@ send_dg(res_state statp,
|
||||
retval = reopen (statp, terrno, ns);
|
||||
if (retval <= 0)
|
||||
return retval;
|
||||
+ pfd[0].fd = EXT(statp).nssocks[ns];
|
||||
}
|
||||
}
|
||||
goto wait;
|
|
@ -1,20 +0,0 @@
|
|||
commit 2959eda9272a033863c271aff62095abd01bd4e3
|
||||
Author: Arjun Shankar <arjun.is@lostca.se>
|
||||
Date: Tue Apr 21 14:06:31 2015 +0200
|
||||
|
||||
CVE-2015-1781: resolv/nss_dns/dns-host.c buffer overflow [BZ#18287]
|
||||
|
||||
diff --git glibc-2.17-c758a686/resolv/nss_dns/dns-host.c glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
|
||||
index b16b0dd..d8c5579 100644
|
||||
--- glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
|
||||
+++ glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
|
||||
@@ -613,7 +613,8 @@
|
||||
int have_to_map = 0;
|
||||
uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data);
|
||||
buffer += pad;
|
||||
- if (__builtin_expect (buflen < sizeof (struct host_data) + pad, 0))
|
||||
+ buflen = buflen > pad ? buflen - pad : 0;
|
||||
+ if (__builtin_expect (buflen < sizeof (struct host_data), 0))
|
||||
{
|
||||
/* The buffer is too small. */
|
||||
too_small:
|
|
@ -1,542 +0,0 @@
|
|||
diff -Naur glibc-2.19.orig/resolv/nss_dns/dns-host.c glibc-2.19/resolv/nss_dns/dns-host.c
|
||||
--- glibc-2.19.orig/resolv/nss_dns/dns-host.c 2016-02-19 15:40:23.394686772 +0300
|
||||
+++ glibc-2.19/resolv/nss_dns/dns-host.c 2016-02-19 15:40:23.397686773 +0300
|
||||
@@ -1049,7 +1049,10 @@
|
||||
int h_namelen = 0;
|
||||
|
||||
if (ancount == 0)
|
||||
- return NSS_STATUS_NOTFOUND;
|
||||
+ {
|
||||
+ *h_errnop = HOST_NOT_FOUND;
|
||||
+ return NSS_STATUS_NOTFOUND;
|
||||
+ }
|
||||
|
||||
while (ancount-- > 0 && cp < end_of_message && had_error == 0)
|
||||
{
|
||||
@@ -1226,7 +1229,14 @@
|
||||
/* Special case here: if the resolver sent a result but it only
|
||||
contains a CNAME while we are looking for a T_A or T_AAAA record,
|
||||
we fail with NOTFOUND instead of TRYAGAIN. */
|
||||
- return canon == NULL ? NSS_STATUS_TRYAGAIN : NSS_STATUS_NOTFOUND;
|
||||
+ if (canon != NULL)
|
||||
+ {
|
||||
+ *h_errnop = HOST_NOT_FOUND;
|
||||
+ return NSS_STATUS_NOTFOUND;
|
||||
+ }
|
||||
+
|
||||
+ *h_errnop = NETDB_INTERNAL;
|
||||
+ return NSS_STATUS_TRYAGAIN;
|
||||
}
|
||||
|
||||
|
||||
@@ -1240,11 +1250,101 @@
|
||||
|
||||
enum nss_status status = NSS_STATUS_NOTFOUND;
|
||||
|
||||
+ /* Combining the NSS status of two distinct queries requires some
|
||||
+ compromise and attention to symmetry (A or AAAA queries can be
|
||||
+ returned in any order). What follows is a breakdown of how this
|
||||
+ code is expected to work and why. We discuss only SUCCESS,
|
||||
+ TRYAGAIN, NOTFOUND and UNAVAIL, since they are the only returns
|
||||
+ that apply (though RETURN and MERGE exist). We make a distinction
|
||||
+ between TRYAGAIN (recoverable) and TRYAGAIN' (not-recoverable).
|
||||
+ A recoverable TRYAGAIN is almost always due to buffer size issues
|
||||
+ and returns ERANGE in errno and the caller is expected to retry
|
||||
+ with a larger buffer.
|
||||
+
|
||||
+ Lastly, you may be tempted to make significant changes to the
|
||||
+ conditions in this code to bring about symmetry between responses.
|
||||
+ Please don't change anything without due consideration for
|
||||
+ expected application behaviour. Some of the synthesized responses
|
||||
+ aren't very well thought out and sometimes appear to imply that
|
||||
+ IPv4 responses are always answer 1, and IPv6 responses are always
|
||||
+ answer 2, but that's not true (see the implemetnation of send_dg
|
||||
+ and send_vc to see response can arrive in any order, particlarly
|
||||
+ for UDP). However, we expect it holds roughly enough of the time
|
||||
+ that this code works, but certainly needs to be fixed to make this
|
||||
+ a more robust implementation.
|
||||
+
|
||||
+ ----------------------------------------------
|
||||
+ | Answer 1 Status / | Synthesized | Reason |
|
||||
+ | Answer 2 Status | Status | |
|
||||
+ |--------------------------------------------|
|
||||
+ | SUCCESS/SUCCESS | SUCCESS | [1] |
|
||||
+ | SUCCESS/TRYAGAIN | TRYAGAIN | [5] |
|
||||
+ | SUCCESS/TRYAGAIN' | SUCCESS | [1] |
|
||||
+ | SUCCESS/NOTFOUND | SUCCESS | [1] |
|
||||
+ | SUCCESS/UNAVAIL | SUCCESS | [1] |
|
||||
+ | TRYAGAIN/SUCCESS | TRYAGAIN | [2] |
|
||||
+ | TRYAGAIN/TRYAGAIN | TRYAGAIN | [2] |
|
||||
+ | TRYAGAIN/TRYAGAIN' | TRYAGAIN | [2] |
|
||||
+ | TRYAGAIN/NOTFOUND | TRYAGAIN | [2] |
|
||||
+ | TRYAGAIN/UNAVAIL | TRYAGAIN | [2] |
|
||||
+ | TRYAGAIN'/SUCCESS | SUCCESS | [3] |
|
||||
+ | TRYAGAIN'/TRYAGAIN | TRYAGAIN | [3] |
|
||||
+ | TRYAGAIN'/TRYAGAIN' | TRYAGAIN' | [3] |
|
||||
+ | TRYAGAIN'/NOTFOUND | TRYAGAIN' | [3] |
|
||||
+ | TRYAGAIN'/UNAVAIL | UNAVAIL | [3] |
|
||||
+ | NOTFOUND/SUCCESS | SUCCESS | [3] |
|
||||
+ | NOTFOUND/TRYAGAIN | TRYAGAIN | [3] |
|
||||
+ | NOTFOUND/TRYAGAIN' | TRYAGAIN' | [3] |
|
||||
+ | NOTFOUND/NOTFOUND | NOTFOUND | [3] |
|
||||
+ | NOTFOUND/UNAVAIL | UNAVAIL | [3] |
|
||||
+ | UNAVAIL/SUCCESS | UNAVAIL | [4] |
|
||||
+ | UNAVAIL/TRYAGAIN | UNAVAIL | [4] |
|
||||
+ | UNAVAIL/TRYAGAIN' | UNAVAIL | [4] |
|
||||
+ | UNAVAIL/NOTFOUND | UNAVAIL | [4] |
|
||||
+ | UNAVAIL/UNAVAIL | UNAVAIL | [4] |
|
||||
+ ----------------------------------------------
|
||||
+
|
||||
+ [1] If the first response is a success we return success.
|
||||
+ This ignores the state of the second answer and in fact
|
||||
+ incorrectly sets errno and h_errno to that of the second
|
||||
+ answer. However because the response is a success we ignore
|
||||
+ *errnop and *h_errnop (though that means you touched errno on
|
||||
+ success). We are being conservative here and returning the
|
||||
+ likely IPv4 response in the first answer as a success.
|
||||
+
|
||||
+ [2] If the first response is a recoverable TRYAGAIN we return
|
||||
+ that instead of looking at the second response. The
|
||||
+ expectation here is that we have failed to get an IPv4 response
|
||||
+ and should retry both queries.
|
||||
+
|
||||
+ [3] If the first response was not a SUCCESS and the second
|
||||
+ response is not NOTFOUND (had a SUCCESS, need to TRYAGAIN,
|
||||
+ or failed entirely e.g. TRYAGAIN' and UNAVAIL) then use the
|
||||
+ result from the second response, otherwise the first responses
|
||||
+ status is used. Again we have some odd side-effects when the
|
||||
+ second response is NOTFOUND because we overwrite *errnop and
|
||||
+ *h_errnop that means that a first answer of NOTFOUND might see
|
||||
+ its *errnop and *h_errnop values altered. Whether it matters
|
||||
+ in practice that a first response NOTFOUND has the wrong
|
||||
+ *errnop and *h_errnop is undecided.
|
||||
+
|
||||
+ [4] If the first response is UNAVAIL we return that instead of
|
||||
+ looking at the second response. The expectation here is that
|
||||
+ it will have failed similarly e.g. configuration failure.
|
||||
+
|
||||
+ [5] Testing this code is complicated by the fact that truncated
|
||||
+ second response buffers might be returned as SUCCESS if the
|
||||
+ first answer is a SUCCESS. To fix this we add symmetry to
|
||||
+ TRYAGAIN with the second response. If the second response
|
||||
+ is a recoverable error we now return TRYAGIN even if the first
|
||||
+ response was SUCCESS. */
|
||||
+
|
||||
if (anslen1 > 0)
|
||||
status = gaih_getanswer_slice(answer1, anslen1, qname,
|
||||
&pat, &buffer, &buflen,
|
||||
errnop, h_errnop, ttlp,
|
||||
&first);
|
||||
+
|
||||
if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND
|
||||
|| (status == NSS_STATUS_TRYAGAIN
|
||||
/* We want to look at the second answer in case of an
|
||||
@@ -1260,8 +1360,15 @@
|
||||
&pat, &buffer, &buflen,
|
||||
errnop, h_errnop, ttlp,
|
||||
&first);
|
||||
+ /* Use the second response status in some cases. */
|
||||
if (status != NSS_STATUS_SUCCESS && status2 != NSS_STATUS_NOTFOUND)
|
||||
status = status2;
|
||||
+ /* Do not return a truncated second response (unless it was
|
||||
+ unavoidable e.g. unrecoverable TRYAGAIN). */
|
||||
+ if (status == NSS_STATUS_SUCCESS
|
||||
+ && (status2 == NSS_STATUS_TRYAGAIN
|
||||
+ && *errnop == ERANGE && *h_errnop != NO_RECOVERY))
|
||||
+ status = NSS_STATUS_TRYAGAIN;
|
||||
}
|
||||
|
||||
return status;
|
||||
diff -Naur glibc-2.19.orig/resolv/res_query.c glibc-2.19/resolv/res_query.c
|
||||
--- glibc-2.19.orig/resolv/res_query.c 2016-02-19 15:40:23.394686772 +0300
|
||||
+++ glibc-2.19/resolv/res_query.c 2016-02-19 15:41:27.700691113 +0300
|
||||
@@ -391,6 +391,7 @@
|
||||
{
|
||||
free (*answerp2);
|
||||
*answerp2 = NULL;
|
||||
+ *nanswerp2 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -431,6 +432,7 @@
|
||||
{
|
||||
free (*answerp2);
|
||||
*answerp2 = NULL;
|
||||
+ *nanswerp2 = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -502,6 +504,7 @@
|
||||
{
|
||||
free (*answerp2);
|
||||
*answerp2 = NULL;
|
||||
+ *nanswerp2 = 0;
|
||||
}
|
||||
if (saved_herrno != -1)
|
||||
RES_SET_H_ERRNO(statp, saved_herrno);
|
||||
diff -Naur glibc-2.19.orig/resolv/res_send.c glibc-2.19/resolv/res_send.c
|
||||
--- glibc-2.19.orig/resolv/res_send.c 2016-02-19 15:40:23.394686772 +0300
|
||||
+++ glibc-2.19/resolv/res_send.c 2016-02-19 15:46:00.356709515 +0300
|
||||
@@ -1,3 +1,20 @@
|
||||
+/* Copyright (C) 2016 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
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
/*
|
||||
* Copyright (c) 1985, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
@@ -360,6 +377,8 @@
|
||||
#ifdef USE_HOOKS
|
||||
if (__builtin_expect (statp->qhook || statp->rhook, 0)) {
|
||||
if (anssiz < MAXPACKET && ansp) {
|
||||
+ /* Always allocate MAXPACKET, callers expect
|
||||
+ this specific size. */
|
||||
u_char *buf = malloc (MAXPACKET);
|
||||
if (buf == NULL)
|
||||
return (-1);
|
||||
@@ -652,6 +671,77 @@
|
||||
|
||||
/* Private */
|
||||
|
||||
+/* The send_vc function is responsible for sending a DNS query over TCP
|
||||
+ to the nameserver numbered NS from the res_state STATP i.e.
|
||||
+ EXT(statp).nssocks[ns]. The function supports sending both IPv4 and
|
||||
+ IPv6 queries at the same serially on the same socket.
|
||||
+
|
||||
+ Please note that for TCP there is no way to disable sending both
|
||||
+ queries, unlike UDP, which honours RES_SNGLKUP and RES_SNGLKUPREOP
|
||||
+ and sends the queries serially and waits for the result after each
|
||||
+ sent query. This implemetnation should be corrected to honour these
|
||||
+ options.
|
||||
+
|
||||
+ Please also note that for TCP we send both queries over the same
|
||||
+ socket one after another. This technically violates best practice
|
||||
+ since the server is allowed to read the first query, respond, and
|
||||
+ then close the socket (to service another client). If the server
|
||||
+ does this, then the remaining second query in the socket data buffer
|
||||
+ will cause the server to send the client an RST which will arrive
|
||||
+ asynchronously and the client's OS will likely tear down the socket
|
||||
+ receive buffer resulting in a potentially short read and lost
|
||||
+ response data. This will force the client to retry the query again,
|
||||
+ and this process may repeat until all servers and connection resets
|
||||
+ are exhausted and then the query will fail. It's not known if this
|
||||
+ happens with any frequency in real DNS server implementations. This
|
||||
+ implementation should be corrected to use two sockets by default for
|
||||
+ parallel queries.
|
||||
+
|
||||
+ The query stored in BUF of BUFLEN length is sent first followed by
|
||||
+ the query stored in BUF2 of BUFLEN2 length. Queries are sent
|
||||
+ serially on the same socket.
|
||||
+
|
||||
+ Answers to the query are stored firstly in *ANSP up to a max of
|
||||
+ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP
|
||||
+ is non-NULL (to indicate that modifying the answer buffer is allowed)
|
||||
+ then malloc is used to allocate a new response buffer and ANSCP and
|
||||
+ ANSP will both point to the new buffer. If more than *ANSSIZP bytes
|
||||
+ are needed but ANSCP is NULL, then as much of the response as
|
||||
+ possible is read into the buffer, but the results will be truncated.
|
||||
+ When truncation happens because of a small answer buffer the DNS
|
||||
+ packets header feild TC will bet set to 1, indicating a truncated
|
||||
+ message and the rest of the socket data will be read and discarded.
|
||||
+
|
||||
+ Answers to the query are stored secondly in *ANSP2 up to a max of
|
||||
+ *ANSSIZP2 bytes, with the actual response length stored in
|
||||
+ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2
|
||||
+ is non-NULL (required for a second query) then malloc is used to
|
||||
+ allocate a new response buffer, *ANSSIZP2 is set to the new buffer
|
||||
+ size and *ANSP2_MALLOCED is set to 1.
|
||||
+
|
||||
+ The ANSP2_MALLOCED argument will eventually be removed as the
|
||||
+ change in buffer pointer can be used to detect the buffer has
|
||||
+ changed and that the caller should use free on the new buffer.
|
||||
+
|
||||
+ Note that the answers may arrive in any order from the server and
|
||||
+ therefore the first and second answer buffers may not correspond to
|
||||
+ the first and second queries.
|
||||
+
|
||||
+ It is not supported to call this function with a non-NULL ANSP2
|
||||
+ but a NULL ANSCP. Put another way, you can call send_vc with a
|
||||
+ single unmodifiable buffer or two modifiable buffers, but no other
|
||||
+ combination is supported.
|
||||
+
|
||||
+ It is the caller's responsibility to free the malloc allocated
|
||||
+ buffers by detecting that the pointers have changed from their
|
||||
+ original values i.e. *ANSCP or *ANSP2 has changed.
|
||||
+
|
||||
+ If errors are encountered then *TERRNO is set to an appropriate
|
||||
+ errno value and a zero result is returned for a recoverable error,
|
||||
+ and a less-than zero result is returned for a non-recoverable error.
|
||||
+
|
||||
+ If no errors are encountered then *TERRNO is left unmodified and
|
||||
+ a the length of the first response in bytes is returned. */
|
||||
static int
|
||||
send_vc(res_state statp,
|
||||
const u_char *buf, int buflen, const u_char *buf2, int buflen2,
|
||||
@@ -661,11 +751,7 @@
|
||||
{
|
||||
const HEADER *hp = (HEADER *) buf;
|
||||
const HEADER *hp2 = (HEADER *) buf2;
|
||||
- u_char *ans = *ansp;
|
||||
- int orig_anssizp = *anssizp;
|
||||
- // XXX REMOVE
|
||||
- // int anssiz = *anssizp;
|
||||
- HEADER *anhp = (HEADER *) ans;
|
||||
+ HEADER *anhp = (HEADER *) *ansp;
|
||||
struct sockaddr_in6 *nsap = EXT(statp).nsaddrs[ns];
|
||||
int truncating, connreset, resplen, n;
|
||||
struct iovec iov[4];
|
||||
@@ -741,6 +827,8 @@
|
||||
* Receive length & response
|
||||
*/
|
||||
int recvresp1 = 0;
|
||||
+ /* Skip the second response if there is no second query.
|
||||
+ To do that we mark the second response as received. */
|
||||
int recvresp2 = buf2 == NULL;
|
||||
uint16_t rlen16;
|
||||
read_len:
|
||||
@@ -777,33 +865,14 @@
|
||||
u_char **thisansp;
|
||||
int *thisresplenp;
|
||||
if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) {
|
||||
+ /* We have not received any responses
|
||||
+ yet or we only have one response to
|
||||
+ receive. */
|
||||
thisanssizp = anssizp;
|
||||
thisansp = anscp ?: ansp;
|
||||
assert (anscp != NULL || ansp2 == NULL);
|
||||
thisresplenp = &resplen;
|
||||
} else {
|
||||
- if (*anssizp != MAXPACKET) {
|
||||
- /* No buffer allocated for the first
|
||||
- reply. We can try to use the rest
|
||||
- of the user-provided buffer. */
|
||||
-#ifdef _STRING_ARCH_unaligned
|
||||
- *anssizp2 = orig_anssizp - resplen;
|
||||
- *ansp2 = *ansp + resplen;
|
||||
-#else
|
||||
- int aligned_resplen
|
||||
- = ((resplen + __alignof__ (HEADER) - 1)
|
||||
- & ~(__alignof__ (HEADER) - 1));
|
||||
- *anssizp2 = orig_anssizp - aligned_resplen;
|
||||
- *ansp2 = *ansp + aligned_resplen;
|
||||
-#endif
|
||||
- } else {
|
||||
- /* The first reply did not fit into the
|
||||
- user-provided buffer. Maybe the second
|
||||
- answer will. */
|
||||
- *anssizp2 = orig_anssizp;
|
||||
- *ansp2 = *ansp;
|
||||
- }
|
||||
-
|
||||
thisanssizp = anssizp2;
|
||||
thisansp = ansp2;
|
||||
thisresplenp = resplen2;
|
||||
@@ -811,10 +880,14 @@
|
||||
anhp = (HEADER *) *thisansp;
|
||||
|
||||
*thisresplenp = rlen;
|
||||
- if (rlen > *thisanssizp) {
|
||||
- /* Yes, we test ANSCP here. If we have two buffers
|
||||
- both will be allocatable. */
|
||||
- if (__builtin_expect (anscp != NULL, 1)) {
|
||||
+ /* Is the answer buffer too small? */
|
||||
+ if (*thisanssizp < rlen) {
|
||||
+ /* If the current buffer is non-NULL and it's not
|
||||
+ pointing at the static user-supplied buffer then
|
||||
+ we can reallocate it. */
|
||||
+ if (thisansp != NULL && thisansp != ansp) {
|
||||
+ /* Always allocate MAXPACKET, callers expect
|
||||
+ this specific size. */
|
||||
u_char *newp = malloc (MAXPACKET);
|
||||
if (newp == NULL) {
|
||||
*terrno = ENOMEM;
|
||||
@@ -824,6 +897,9 @@
|
||||
*thisanssizp = MAXPACKET;
|
||||
*thisansp = newp;
|
||||
anhp = (HEADER *) newp;
|
||||
+ /* A uint16_t can't be larger than MAXPACKET
|
||||
+ thus it's safe to allocate MAXPACKET but
|
||||
+ read RLEN bytes instead. */
|
||||
len = rlen;
|
||||
} else {
|
||||
Dprint(statp->options & RES_DEBUG,
|
||||
@@ -987,6 +1063,66 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
+/* The send_dg function is responsible for sending a DNS query over UDP
|
||||
+ to the nameserver numbered NS from the res_state STATP i.e.
|
||||
+ EXT(statp).nssocks[ns]. The function supports IPv4 and IPv6 queries
|
||||
+ along with the ability to send the query in parallel for both stacks
|
||||
+ (default) or serially (RES_SINGLKUP). It also supports serial lookup
|
||||
+ with a close and reopen of the socket used to talk to the server
|
||||
+ (RES_SNGLKUPREOP) to work around broken name servers.
|
||||
+
|
||||
+ The query stored in BUF of BUFLEN length is sent first followed by
|
||||
+ the query stored in BUF2 of BUFLEN2 length. Queries are sent
|
||||
+ in parallel (default) or serially (RES_SINGLKUP or RES_SNGLKUPREOP).
|
||||
+
|
||||
+ Answers to the query are stored firstly in *ANSP up to a max of
|
||||
+ *ANSSIZP bytes. If more than *ANSSIZP bytes are needed and ANSCP
|
||||
+ is non-NULL (to indicate that modifying the answer buffer is allowed)
|
||||
+ then malloc is used to allocate a new response buffer and ANSCP and
|
||||
+ ANSP will both point to the new buffer. If more than *ANSSIZP bytes
|
||||
+ are needed but ANSCP is NULL, then as much of the response as
|
||||
+ possible is read into the buffer, but the results will be truncated.
|
||||
+ When truncation happens because of a small answer buffer the DNS
|
||||
+ packets header feild TC will bet set to 1, indicating a truncated
|
||||
+ message, while the rest of the UDP packet is discarded.
|
||||
+
|
||||
+ Answers to the query are stored secondly in *ANSP2 up to a max of
|
||||
+ *ANSSIZP2 bytes, with the actual response length stored in
|
||||
+ *RESPLEN2. If more than *ANSSIZP bytes are needed and ANSP2
|
||||
+ is non-NULL (required for a second query) then malloc is used to
|
||||
+ allocate a new response buffer, *ANSSIZP2 is set to the new buffer
|
||||
+ size and *ANSP2_MALLOCED is set to 1.
|
||||
+
|
||||
+ The ANSP2_MALLOCED argument will eventually be removed as the
|
||||
+ change in buffer pointer can be used to detect the buffer has
|
||||
+ changed and that the caller should use free on the new buffer.
|
||||
+
|
||||
+ Note that the answers may arrive in any order from the server and
|
||||
+ therefore the first and second answer buffers may not correspond to
|
||||
+ the first and second queries.
|
||||
+
|
||||
+ It is not supported to call this function with a non-NULL ANSP2
|
||||
+ but a NULL ANSCP. Put another way, you can call send_vc with a
|
||||
+ single unmodifiable buffer or two modifiable buffers, but no other
|
||||
+ combination is supported.
|
||||
+
|
||||
+ It is the caller's responsibility to free the malloc allocated
|
||||
+ buffers by detecting that the pointers have changed from their
|
||||
+ original values i.e. *ANSCP or *ANSP2 has changed.
|
||||
+
|
||||
+ If an answer is truncated because of UDP datagram DNS limits then
|
||||
+ *V_CIRCUIT is set to 1 and the return value non-zero to indicate to
|
||||
+ the caller to retry with TCP. The value *GOTSOMEWHERE is set to 1
|
||||
+ if any progress was made reading a response from the nameserver and
|
||||
+ is used by the caller to distinguish between ECONNREFUSED and
|
||||
+ ETIMEDOUT (the latter if *GOTSOMEWHERE is 1).
|
||||
+
|
||||
+ If errors are encountered then *TERRNO is set to an appropriate
|
||||
+ errno value and a zero result is returned for a recoverable error,
|
||||
+ and a less-than zero result is returned for a non-recoverable error.
|
||||
+
|
||||
+ If no errors are encountered then *TERRNO is left unmodified and
|
||||
+ a the length of the first response in bytes is returned. */
|
||||
static int
|
||||
send_dg(res_state statp,
|
||||
const u_char *buf, int buflen, const u_char *buf2, int buflen2,
|
||||
@@ -996,8 +1132,6 @@
|
||||
{
|
||||
const HEADER *hp = (HEADER *) buf;
|
||||
const HEADER *hp2 = (HEADER *) buf2;
|
||||
- u_char *ans = *ansp;
|
||||
- int orig_anssizp = *anssizp;
|
||||
struct timespec now, timeout, finish;
|
||||
struct pollfd pfd[1];
|
||||
int ptimeout;
|
||||
@@ -1030,6 +1164,8 @@
|
||||
int need_recompute = 0;
|
||||
int nwritten = 0;
|
||||
int recvresp1 = 0;
|
||||
+ /* Skip the second response if there is no second query.
|
||||
+ To do that we mark the second response as received. */
|
||||
int recvresp2 = buf2 == NULL;
|
||||
pfd[0].fd = EXT(statp).nssocks[ns];
|
||||
pfd[0].events = POLLOUT;
|
||||
@@ -1193,53 +1329,54 @@
|
||||
int *thisresplenp;
|
||||
|
||||
if ((recvresp1 | recvresp2) == 0 || buf2 == NULL) {
|
||||
+ /* We have not received any responses
|
||||
+ yet or we only have one response to
|
||||
+ receive. */
|
||||
thisanssizp = anssizp;
|
||||
thisansp = anscp ?: ansp;
|
||||
assert (anscp != NULL || ansp2 == NULL);
|
||||
thisresplenp = &resplen;
|
||||
} else {
|
||||
- if (*anssizp != MAXPACKET) {
|
||||
- /* No buffer allocated for the first
|
||||
- reply. We can try to use the rest
|
||||
- of the user-provided buffer. */
|
||||
-#ifdef _STRING_ARCH_unaligned
|
||||
- *anssizp2 = orig_anssizp - resplen;
|
||||
- *ansp2 = *ansp + resplen;
|
||||
-#else
|
||||
- int aligned_resplen
|
||||
- = ((resplen + __alignof__ (HEADER) - 1)
|
||||
- & ~(__alignof__ (HEADER) - 1));
|
||||
- *anssizp2 = orig_anssizp - aligned_resplen;
|
||||
- *ansp2 = *ansp + aligned_resplen;
|
||||
-#endif
|
||||
- } else {
|
||||
- /* The first reply did not fit into the
|
||||
- user-provided buffer. Maybe the second
|
||||
- answer will. */
|
||||
- *anssizp2 = orig_anssizp;
|
||||
- *ansp2 = *ansp;
|
||||
- }
|
||||
-
|
||||
thisanssizp = anssizp2;
|
||||
thisansp = ansp2;
|
||||
thisresplenp = resplen2;
|
||||
}
|
||||
|
||||
if (*thisanssizp < MAXPACKET
|
||||
- /* Yes, we test ANSCP here. If we have two buffers
|
||||
- both will be allocatable. */
|
||||
- && anscp
|
||||
+ /* If the current buffer is non-NULL and it's not
|
||||
+ pointing at the static user-supplied buffer then
|
||||
+ we can reallocate it. */
|
||||
+ && (thisansp != NULL && thisansp != ansp)
|
||||
+ /* Is the size too small? */
|
||||
#ifdef FIONREAD
|
||||
&& (ioctl (pfd[0].fd, FIONREAD, thisresplenp) < 0
|
||||
|| *thisanssizp < *thisresplenp)
|
||||
#endif
|
||||
) {
|
||||
+ /* Always allocate MAXPACKET, callers expect
|
||||
+ this specific size. */
|
||||
u_char *newp = malloc (MAXPACKET);
|
||||
if (newp != NULL) {
|
||||
- *anssizp = MAXPACKET;
|
||||
- *thisansp = ans = newp;
|
||||
+ *thisanssizp = MAXPACKET;
|
||||
+ *thisansp = newp;
|
||||
}
|
||||
}
|
||||
+ /* We could end up with truncation if anscp was NULL
|
||||
+ (not allowed to change caller's buffer) and the
|
||||
+ response buffer size is too small. This isn't a
|
||||
+ reliable way to detect truncation because the ioctl
|
||||
+ may be an inaccurate report of the UDP message size.
|
||||
+ Therefore we use this only to issue debug output.
|
||||
+ To do truncation accurately with UDP we need
|
||||
+ MSG_TRUNC which is only available on Linux. We
|
||||
+ can abstract out the Linux-specific feature in the
|
||||
+ future to detect truncation. */
|
||||
+ if (__glibc_unlikely (*thisanssizp < *thisresplenp)) {
|
||||
+ Dprint(statp->options & RES_DEBUG,
|
||||
+ (stdout, ";; response may be truncated (UDP)\n")
|
||||
+ );
|
||||
+ }
|
||||
+
|
||||
HEADER *anhp = (HEADER *) *thisansp;
|
||||
socklen_t fromlen = sizeof(struct sockaddr_in6);
|
||||
assert (sizeof(from) <= fromlen);
|
|
@ -1,11 +1,22 @@
|
|||
diff -rup a/elf/dl-load.c b/elf/dl-load.c
|
||||
--- a/elf/dl-load.c 2012-02-03 10:59:58.917870716 -0700
|
||||
+++ b/elf/dl-load.c 2012-02-03 11:01:01.796580644 -0700
|
||||
@@ -1130,6 +1130,16 @@ _dl_map_object_from_fd (const char *name
|
||||
Index: glibc-2.22-386-g95e8397/elf/dl-load.c
|
||||
===================================================================
|
||||
--- glibc-2.22-386-g95e8397.orig/elf/dl-load.c
|
||||
+++ glibc-2.22-386-g95e8397/elf/dl-load.c
|
||||
@@ -881,7 +881,8 @@ _dl_map_object_from_fd (const char *name
|
||||
|
||||
/* Get file information. */
|
||||
struct r_file_id id;
|
||||
- if (__glibc_unlikely (!_dl_get_file_id (fd, &id)))
|
||||
+ struct stat64 st;
|
||||
+ if (__glibc_unlikely (!_dl_get_file_id (fd, &id, &st)))
|
||||
{
|
||||
errstring = N_("cannot stat shared object");
|
||||
call_lose_errno:
|
||||
@@ -1076,6 +1077,16 @@ _dl_map_object_from_fd (const char *name
|
||||
= N_("ELF load command address/offset not properly aligned");
|
||||
goto call_lose;
|
||||
}
|
||||
+ if (__builtin_expect ((ph->p_offset + ph->p_filesz > st.st_size), 0))
|
||||
+ if (__glibc_unlikely (ph->p_offset + ph->p_filesz > st.st_size))
|
||||
+ {
|
||||
+ /* If the segment requires zeroing of part of its last
|
||||
+ page, we'll crash when accessing the unmapped page.
|
||||
|
@ -16,6 +27,47 @@ diff -rup a/elf/dl-load.c b/elf/dl-load.c
|
|||
+ goto call_lose;
|
||||
+ }
|
||||
|
||||
c = &loadcmds[nloadcmds++];
|
||||
c->mapstart = ph->p_vaddr & ~(GLRO(dl_pagesize) - 1);
|
||||
Only in b/elf: dl-load.c.orig
|
||||
struct loadcmd *c = &loadcmds[nloadcmds++];
|
||||
c->mapstart = ALIGN_DOWN (ph->p_vaddr, GLRO(dl_pagesize));
|
||||
Index: glibc-2.22-386-g95e8397/sysdeps/generic/dl-fileid.h
|
||||
===================================================================
|
||||
--- glibc-2.22-386-g95e8397.orig/sysdeps/generic/dl-fileid.h
|
||||
+++ glibc-2.22-386-g95e8397/sysdeps/generic/dl-fileid.h
|
||||
@@ -29,7 +29,8 @@ struct r_file_id
|
||||
On error, returns false, with errno set. */
|
||||
static inline bool
|
||||
_dl_get_file_id (int fd __attribute__ ((unused)),
|
||||
- struct r_file_id *id __attribute__ ((unused)))
|
||||
+ struct r_file_id *id __attribute__ ((unused)),
|
||||
+ struct stat64_t *st __attribute__((unused)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
Index: glibc-2.22-386-g95e8397/sysdeps/posix/dl-fileid.h
|
||||
===================================================================
|
||||
--- glibc-2.22-386-g95e8397.orig/sysdeps/posix/dl-fileid.h
|
||||
+++ glibc-2.22-386-g95e8397/sysdeps/posix/dl-fileid.h
|
||||
@@ -27,18 +27,16 @@ struct r_file_id
|
||||
ino64_t ino;
|
||||
};
|
||||
|
||||
-/* Sample FD to fill in *ID. Returns true on success.
|
||||
+/* Sample FD to fill in *ID and *ST. Returns true on success.
|
||||
On error, returns false, with errno set. */
|
||||
static inline bool
|
||||
-_dl_get_file_id (int fd, struct r_file_id *id)
|
||||
+_dl_get_file_id (int fd, struct r_file_id *id, struct stat64 *st)
|
||||
{
|
||||
- struct stat64 st;
|
||||
-
|
||||
- if (__glibc_unlikely (__fxstat64 (_STAT_VER, fd, &st) < 0))
|
||||
+ if (__glibc_unlikely (__fxstat64 (_STAT_VER, fd, st) < 0))
|
||||
return false;
|
||||
|
||||
- id->dev = st.st_dev;
|
||||
- id->ino = st.st_ino;
|
||||
+ id->dev = st->st_dev;
|
||||
+ id->ino = st->st_ino;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
|
||||
2012-03-07 Jeff Law <law@redhat.com>
|
||||
|
||||
* elf/dl-reloc.c (_dl_relocate_object): Move code to allocate
|
||||
l_reloc_result prior to calling ELF_DYNAMIC_RELOCATE.
|
||||
|
||||
diff -rup a/elf/dl-reloc.c b/elf/dl-reloc.c
|
||||
--- a/elf/dl-reloc.c 2012-01-01 05:16:32.000000000 -0700
|
||||
+++ b/elf/dl-reloc.c 2012-03-06 15:41:56.486242640 -0700
|
||||
@@ -238,32 +238,9 @@ _dl_relocate_object (struct link_map *l,
|
||||
/* String table object symbols. */
|
||||
const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]);
|
||||
|
||||
- /* This macro is used as a callback from the ELF_DYNAMIC_RELOCATE code. */
|
||||
-#define RESOLVE_MAP(ref, version, r_type) \
|
||||
- (ELFW(ST_BIND) ((*ref)->st_info) != STB_LOCAL \
|
||||
- ? ((__builtin_expect ((*ref) == l->l_lookup_cache.sym, 0) \
|
||||
- && elf_machine_type_class (r_type) == l->l_lookup_cache.type_class) \
|
||||
- ? (bump_num_cache_relocations (), \
|
||||
- (*ref) = l->l_lookup_cache.ret, \
|
||||
- l->l_lookup_cache.value) \
|
||||
- : ({ lookup_t _lr; \
|
||||
- int _tc = elf_machine_type_class (r_type); \
|
||||
- l->l_lookup_cache.type_class = _tc; \
|
||||
- l->l_lookup_cache.sym = (*ref); \
|
||||
- const struct r_found_version *v = NULL; \
|
||||
- if ((version) != NULL && (version)->hash != 0) \
|
||||
- v = (version); \
|
||||
- _lr = _dl_lookup_symbol_x (strtab + (*ref)->st_name, l, (ref), \
|
||||
- scope, v, _tc, \
|
||||
- DL_LOOKUP_ADD_DEPENDENCY, NULL); \
|
||||
- l->l_lookup_cache.ret = (*ref); \
|
||||
- l->l_lookup_cache.value = _lr; })) \
|
||||
- : l)
|
||||
-
|
||||
-#include "dynamic-link.h"
|
||||
-
|
||||
- ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling, skip_ifunc);
|
||||
-
|
||||
+ /* ELF_DYNAMIC_RELOCATE may need to examine l_reloc_result
|
||||
+ when handling MACHINE_IRELATIVE relocs. So we must
|
||||
+ allocate l_reloc_result prior to calling ELF_DYNAMIC_RELOCATE. */
|
||||
#ifndef PROF
|
||||
if (__builtin_expect (consider_profiling, 0))
|
||||
{
|
||||
@@ -290,6 +267,32 @@ _dl_relocate_object (struct link_map *l,
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+
|
||||
+ /* This macro is used as a callback from the ELF_DYNAMIC_RELOCATE code. */
|
||||
+#define RESOLVE_MAP(ref, version, r_type) \
|
||||
+ (ELFW(ST_BIND) ((*ref)->st_info) != STB_LOCAL \
|
||||
+ ? ((__builtin_expect ((*ref) == l->l_lookup_cache.sym, 0) \
|
||||
+ && elf_machine_type_class (r_type) == l->l_lookup_cache.type_class) \
|
||||
+ ? (bump_num_cache_relocations (), \
|
||||
+ (*ref) = l->l_lookup_cache.ret, \
|
||||
+ l->l_lookup_cache.value) \
|
||||
+ : ({ lookup_t _lr; \
|
||||
+ int _tc = elf_machine_type_class (r_type); \
|
||||
+ l->l_lookup_cache.type_class = _tc; \
|
||||
+ l->l_lookup_cache.sym = (*ref); \
|
||||
+ const struct r_found_version *v = NULL; \
|
||||
+ if ((version) != NULL && (version)->hash != 0) \
|
||||
+ v = (version); \
|
||||
+ _lr = _dl_lookup_symbol_x (strtab + (*ref)->st_name, l, (ref), \
|
||||
+ scope, v, _tc, \
|
||||
+ DL_LOOKUP_ADD_DEPENDENCY, NULL); \
|
||||
+ l->l_lookup_cache.ret = (*ref); \
|
||||
+ l->l_lookup_cache.value = _lr; })) \
|
||||
+ : l)
|
||||
+
|
||||
+#include "dynamic-link.h"
|
||||
+
|
||||
+ ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling, skip_ifunc);
|
||||
}
|
||||
|
||||
/* Mark the object so we know this work has been done. */
|
|
@ -12,7 +12,7 @@ diff -Nrup a/posix/fnmatch.c b/posix/fnmatch.c
|
|||
@@ -356,10 +357,8 @@ fnmatch (pattern, string, flags)
|
||||
alloca_used);
|
||||
n = mbsrtowcs (wpattern, &p, n + 1, &ps);
|
||||
if (__builtin_expect (n == (size_t) -1, 0))
|
||||
if (__glibc_unlikely (n == (size_t) -1))
|
||||
- /* Something wrong.
|
||||
- XXX Do we have to set `errno' to something which mbsrtows hasn't
|
||||
- already done? */
|
||||
|
@ -25,20 +25,20 @@ diff -Nrup a/posix/fnmatch.c b/posix/fnmatch.c
|
|||
@@ -371,10 +370,8 @@ fnmatch (pattern, string, flags)
|
||||
prepare_wpattern:
|
||||
n = mbsrtowcs (NULL, &pattern, 0, &ps);
|
||||
if (__builtin_expect (n == (size_t) -1, 0))
|
||||
if (__glibc_unlikely (n == (size_t) -1))
|
||||
- /* Something wrong.
|
||||
- XXX Do we have to set `errno' to something which mbsrtows hasn't
|
||||
- already done? */
|
||||
- return -1;
|
||||
+ /*Something wrong: Fall back to single byte matching. */
|
||||
+ goto try_singlebyte;
|
||||
if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0))
|
||||
if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t)))
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
@@ -401,14 +398,8 @@ fnmatch (pattern, string, flags)
|
||||
alloca_used);
|
||||
n = mbsrtowcs (wstring, &p, n + 1, &ps);
|
||||
if (__builtin_expect (n == (size_t) -1, 0))
|
||||
if (__glibc_unlikely (n == (size_t) -1))
|
||||
- {
|
||||
- /* Something wrong.
|
||||
- XXX Do we have to set `errno' to something which
|
||||
|
@ -55,14 +55,14 @@ diff -Nrup a/posix/fnmatch.c b/posix/fnmatch.c
|
|||
@@ -420,10 +411,8 @@ fnmatch (pattern, string, flags)
|
||||
prepare_wstring:
|
||||
n = mbsrtowcs (NULL, &string, 0, &ps);
|
||||
if (__builtin_expect (n == (size_t) -1, 0))
|
||||
if (__glibc_unlikely (n == (size_t) -1))
|
||||
- /* Something wrong.
|
||||
- XXX Do we have to set `errno' to something which mbsrtows hasn't
|
||||
- already done? */
|
||||
- goto free_return;
|
||||
+ /* Something wrong: Fall back to singlebyte matching. */
|
||||
+ goto free_and_try_singlebyte;
|
||||
if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0))
|
||||
if (__glibc_unlikely (n >= (size_t) -1 / sizeof (wchar_t)))
|
||||
{
|
||||
free (wpattern_malloc);
|
||||
@@ -450,6 +439,10 @@ fnmatch (pattern, string, flags)
|
||||
|
|
45229
glibc-rh841318.patch
45229
glibc-rh841318.patch
File diff suppressed because it is too large
Load diff
|
@ -1,61 +0,0 @@
|
|||
#
|
||||
# Red Hat BZ:
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=911307
|
||||
#
|
||||
# Sourceware BZ: None.
|
||||
#
|
||||
# Upstreamm submission: Not yet completed.
|
||||
#
|
||||
# ChangeLog
|
||||
#
|
||||
# 2013-02-27 Carlos O'Donell <carlos@redhat.com>
|
||||
#
|
||||
# * elf/Makefile (CFLAGS-.o): Add -fno-tree-loop-distribute-patterns.
|
||||
# (CFLAGS-.os): Likewise.
|
||||
# (CFLAGS-.op): Likewise.
|
||||
# (CFLAGS-.ob): Likewise.
|
||||
# (CFLAGS-.oS): Likewise.
|
||||
# * string/Makefile (CFLAGS-.o): Likewise.
|
||||
# (CFLAGS-.os): Likewise.
|
||||
# (CFLAGS-.op): Likewise.
|
||||
# (CFLAGS-.ob): Likewise.
|
||||
# (CFLAGS-.oS): Likewise.
|
||||
#
|
||||
diff -urN glibc-2.17-c758a686/string/Makefile tmp/glibc-2.17-c758a686/string/Makefile
|
||||
--- glibc-2.17-c758a686/string/Makefile 2013-02-27 18:07:34.618968703 -0500
|
||||
+++ tmp/glibc-2.17-c758a686/string/Makefile 2013-02-27 18:08:16.075796160 -0500
|
||||
@@ -72,6 +72,14 @@ CFLAGS-stratcliff.c = -fno-builtin
|
||||
CFLAGS-test-ffs.c = -fno-builtin
|
||||
CFLAGS-tst-inlcall.c = -fno-builtin
|
||||
|
||||
+# Disable any optimization which might result in function calls to the very
|
||||
+# same functions we are trying to compile, thus creating an infinite loop.
|
||||
+CFLAGS-.o += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.os += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.op += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.ob += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.oS += -fno-tree-loop-distribute-patterns
|
||||
+
|
||||
ifeq ($(run-built-tests),yes)
|
||||
tests: $(objpfx)tst-svc.out
|
||||
$(objpfx)tst-svc.out: tst-svc.input $(objpfx)tst-svc
|
||||
diff -urN glibc-2.17-c758a686/elf/Makefile tmp/glibc-2.17-c758a686/elf/Makefile
|
||||
--- glibc-2.17-c758a686/elf/Makefile 2013-02-27 18:07:13.812055613 -0500
|
||||
+++ tmp/glibc-2.17-c758a686/elf/Makefile 2013-02-27 18:08:16.075796160 -0500
|
||||
@@ -432,6 +432,16 @@
|
||||
CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
|
||||
-DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld)
|
||||
|
||||
+# Disable any optimization which might result in function calls during early
|
||||
+# dynamic loader startup. We disable -ftree-loop-distribute-patterns which
|
||||
+# might convert code into calls to functions like memcpy or memset when the PLT
|
||||
+# is not yet setup.
|
||||
+CFLAGS-.o += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.os += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.op += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.ob += -fno-tree-loop-distribute-patterns
|
||||
+CFLAGS-.oS += -fno-tree-loop-distribute-patterns
|
||||
+
|
||||
test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names))))
|
||||
generated += $(addsuffix .so,$(strip $(modules-names)))
|
||||
|
57
glibc.spec
57
glibc.spec
|
@ -1,7 +1,7 @@
|
|||
%define checklist %{_builddir}/%{name}-%{version}/Check.list
|
||||
|
||||
# crypt blowfish support
|
||||
%define crypt_bf_ver 1.2
|
||||
%define crypt_bf_ver 1.3
|
||||
|
||||
%define _slibdir /%{_lib}
|
||||
%define _slibdir32 /lib
|
||||
|
@ -56,8 +56,8 @@
|
|||
Summary: The GNU libc libraries
|
||||
Name: glibc
|
||||
Epoch: 6
|
||||
Version: 2.19
|
||||
Release: 22
|
||||
Version: 2.24
|
||||
Release: 1
|
||||
License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+
|
||||
Group: System/Libraries
|
||||
Url: http://www.eglibc.org/
|
||||
|
@ -109,27 +109,20 @@ Patch5: glibc-arm-hardfloat-3.patch
|
|||
# Needs to be sent upstream
|
||||
Patch6: glibc-rh697421.patch
|
||||
|
||||
# Needs to be sent upstream
|
||||
Patch10: glibc-rh841318.patch
|
||||
|
||||
# All these were from the glibc-fedora.patch mega-patch and need another
|
||||
# round of reviewing. Ideally they'll either be submitted upstream or
|
||||
# dropped.
|
||||
|
||||
Patch11: glibc-fedora-uname-getrlimit.patch
|
||||
Patch12: glibc-fedora-__libc_multiple_libcs.patch
|
||||
Patch14: glibc-fedora-elf-ORIGIN.patch
|
||||
Patch15: glibc-fedora-elf-init-hidden_undef.patch
|
||||
Patch16: glibc-fedora-elf-rh737223.patch
|
||||
Patch18: eglibc-fedora-test-debug-gnuc-hack.patch
|
||||
Patch20: glibc-fedora-getrlimit-PLT.patch
|
||||
Patch21: glibc-fedora-i386-tls-direct-seg-refs.patch
|
||||
Patch22: eglibc-fedora-pt_chown.patch
|
||||
Patch23: glibc-fedora-include-bits-ldbl.patch
|
||||
Patch24: glibc-fedora-ldd.patch
|
||||
Patch25: glibc-fedora-linux-tcsetattr.patch
|
||||
Patch26: eglibc-fedora-locale-euro.patch
|
||||
Patch27: eglibc-fedora-localedata-locales-fixes.patch
|
||||
# We disagree with
|
||||
# glibc-fedora-streams-rh436349.patch
|
||||
# Therefore we don't package/apply it.
|
||||
|
@ -139,8 +132,6 @@ Patch31: glibc-fedora-locarchive.patch
|
|||
Patch32: glibc-fedora-manual-dircategory.patch
|
||||
Patch33: glibc-fedora-nis-rh188246.patch
|
||||
Patch34: glibc-fedora-nptl-linklibc.patch
|
||||
Patch35: glibc-fedora-ppc-unwind.patch
|
||||
Patch37: eglibc-fedora-strict-aliasing.patch
|
||||
|
||||
#
|
||||
# Patches from upstream
|
||||
|
@ -154,20 +145,12 @@ Patch37: eglibc-fedora-strict-aliasing.patch
|
|||
|
||||
Patch38: glibc-rh757881.patch
|
||||
Patch40: glibc-rh741105.patch
|
||||
# Upstream BZ 13818
|
||||
Patch49: glibc-rh800224.patch
|
||||
# Upstream BZ 14247
|
||||
Patch50: glibc-rh827510.patch
|
||||
# Upstream BZ 14185
|
||||
Patch54: glibc-rh819430.patch
|
||||
Patch55: glibc-rh911307.patch
|
||||
Patch51: glibc-rh952799.patch
|
||||
|
||||
Patch501: glibc-rh1170118-CVE-2014-7817.patch
|
||||
Patch502: glibc-rh1194143.patch
|
||||
Patch503: glibc-rh1199525.patch
|
||||
Patch504: glibc-rh1296031.patch
|
||||
|
||||
#-----------------------------------------------------------------------
|
||||
# mandriva patches
|
||||
Patch56: eglibc-mandriva-localedef-archive-follow-symlinks.patch
|
||||
|
@ -186,7 +169,6 @@ Patch67: eglibc-mandriva-biarch-cpp-defines.patch
|
|||
Patch68: eglibc-mandriva-ENOTTY-fr-translation.patch
|
||||
Patch69: eglibc-mandriva-biarch-utils.patch
|
||||
Patch70: eglibc-mandriva-multiarch.patch
|
||||
Patch71: eglibc-mandriva-i586-hptiming.patch
|
||||
Patch72: eglibc-mandriva-i586-if-no-cmov.patch
|
||||
Patch73: eglibc-mandriva-pt_BR-i18nfixes.patch
|
||||
Patch74: eglibc-mandriva-testsuite-ldbl-bits.patch
|
||||
|
@ -197,7 +179,6 @@ Patch75: eglibc-mandriva-testsuite-rt-notparallel.patch
|
|||
# https://bugzilla.redhat.com/attachment.cgi?id=491198
|
||||
Patch77: eglibc-mandriva-fix-for-new-memcpy-behavior.patch
|
||||
Patch79: eglibc-mandriva-no-leaf-attribute.patch
|
||||
Patch80: eglibc-mandriva-string-format-fixes.patch
|
||||
Patch81: eglibc-mandriva-mdv-avx-owl-crypt.patch
|
||||
Patch82: eglibc-mandriva-mdv-owl-crypt_freesec.patch
|
||||
Patch83: eglibc-mandriva-avx-relocate_fcrypt.patch
|
||||
|
@ -205,7 +186,6 @@ Patch84: eglibc-mandriva-avx-increase_BF_FRAME.patch
|
|||
Patch85: eglibc-mandriva-mdv-wrapper_handle_sha.patch
|
||||
# Reverts a part of eglibc-fedora-uname-getrlimit.patch that breaks the build
|
||||
Patch86: nptl-getrlimit-compile.patch
|
||||
Patch87: eglibc-2.17-bo-locale-buildfix.patch
|
||||
# http://sourceware.org/bugzilla/show_bug.cgi?id=14995
|
||||
# http://sourceware.org/bugzilla/attachment.cgi?id=6795
|
||||
Patch88: glibc-2.17-gold.patch
|
||||
|
@ -807,34 +787,25 @@ their ~/.profile configuration file.
|
|||
%patch04 -p1
|
||||
%patch05 -p1
|
||||
%patch06 -p1
|
||||
%patch10 -p1 -b .rh841318~
|
||||
%patch11 -p1
|
||||
%patch12 -p1 -b .multiple~
|
||||
%patch14 -p1 -b .elfORIGIN~
|
||||
%patch15 -p1
|
||||
%patch16 -p1 -b .rh737223~
|
||||
%patch18 -p1
|
||||
%patch20 -p1
|
||||
%patch21 -p1
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24 -p1
|
||||
%patch25 -p1
|
||||
%patch26 -p1 -b .curr~
|
||||
%patch27 -p1
|
||||
%patch29 -p1 -b .locales~
|
||||
%patch30 -p1
|
||||
%patch31 -p1
|
||||
%patch32 -p1
|
||||
%patch33 -p1
|
||||
%patch34 -p1
|
||||
%patch35 -p1
|
||||
%patch37 -p1 -b .aliasing~
|
||||
%patch40 -p1
|
||||
%patch49 -p1 -b .rh800224~
|
||||
%patch50 -p1
|
||||
%patch54 -p1
|
||||
%patch55 -p1
|
||||
%patch51 -p1
|
||||
%patch56 -p1
|
||||
%patch57 -p1
|
||||
|
@ -850,19 +821,11 @@ their ~/.profile configuration file.
|
|||
%patch68 -p1
|
||||
%patch69 -p1
|
||||
%patch70 -p1 -b .multiarch~
|
||||
%patch71 -p1 -b .hpt~
|
||||
%patch72 -p1
|
||||
%patch73 -p1
|
||||
%patch74 -p1 -b .ldbl~
|
||||
%patch75 -p1 -b .tsp~
|
||||
%patch79 -p1
|
||||
%patch80 -p1
|
||||
|
||||
%patch501 -p1
|
||||
%patch502 -p1
|
||||
%patch503 -p1
|
||||
%patch504 -p1
|
||||
|
||||
|
||||
# copy freesec source
|
||||
cp %{SOURCE52} %{SOURCE53} crypt/
|
||||
|
@ -881,8 +844,6 @@ cp -a crypt_blowfish-%{crypt_bf_ver}/*.[chS] crypt/
|
|||
|
||||
%patch86 -p1 -b .compile~
|
||||
|
||||
%patch87 -p1 -b .boLocale~
|
||||
|
||||
%patch88 -p1 -b .gold~
|
||||
|
||||
%patch100 -p1 -b .blowfish_nonx86~
|
||||
|
@ -912,7 +873,6 @@ autoconf
|
|||
#-----------------------------------------------------------------------
|
||||
%build
|
||||
# ...
|
||||
[ -d ports ] || ln -s ../ports .
|
||||
mkdir bin
|
||||
ln -sf %{_bindir}/ld.bfd bin/ld
|
||||
export PATH=$PWD/bin:$PATH
|
||||
|
@ -1002,18 +962,15 @@ function BuildGlibc() {
|
|||
fi
|
||||
%endif
|
||||
|
||||
# NPTL+TLS are now the default
|
||||
Pthreads="nptl"
|
||||
|
||||
# Add-ons
|
||||
AddOns="$Pthreads,ports,libidn"
|
||||
AddOns="libidn"
|
||||
|
||||
# Force a separate and clean object dir
|
||||
rm -rf build-$arch-linux
|
||||
mkdir build-$arch-linux
|
||||
pushd build-$arch-linux
|
||||
[[ "$BuildAltArch" = "yes" ]] && touch ".alt" || touch ".main"
|
||||
CC="$BuildCC" CXX="$BuildCXX" CFLAGS="$BuildFlags" LDFLAGS="%{ldflags} -fuse-ld=bfd" ../configure \
|
||||
CC="$BuildCC" CXX="$BuildCXX" CFLAGS="$BuildFlags -Wno-error" LDFLAGS="%{ldflags} -fuse-ld=bfd" ../configure \
|
||||
$arch-%{_target_vendor}-%{_target_os}%{?_gnu} \
|
||||
--prefix=%{_prefix} \
|
||||
--libexecdir=%{_prefix}/libexec \
|
||||
|
@ -1143,7 +1100,7 @@ esac
|
|||
|
||||
# NPTL <bits/stdio-lock.h> is not usable outside of glibc, so include
|
||||
# the generic one (RH#162634)
|
||||
install -m644 bits/stdio-lock.h -D %{buildroot}%{_includedir}/bits/stdio-lock.h
|
||||
install -m644 sysdeps/generic/stdio-lock.h -D %{buildroot}%{_includedir}/bits/stdio-lock.h
|
||||
# And <bits/libc-lock.h> needs sanitizing as well.
|
||||
install -m644 %{SOURCE10} -D %{buildroot}%{_includedir}/bits/libc-lock.h
|
||||
|
||||
|
@ -1303,7 +1260,7 @@ rm -f %{buildroot}%{_infodir}/dir
|
|||
rm -rf %{buildroot}%{_datadir}/i18n
|
||||
%endif
|
||||
|
||||
%if ! %{without locales}
|
||||
%if %{with locales}
|
||||
export PATH=%{buildroot}%{_bindir}:%{buildroot}%{_sbindir}:$PATH
|
||||
export LD_LIBRARY_PATH=%{buildroot}/%{_lib}:%{buildroot}%{_libdir}:$LD_LIBRARY_PATH
|
||||
export I18NPATH=%{buildroot}%{_datadir}/i18n
|
||||
|
|
Loading…
Add table
Reference in a new issue