Accepting request 40411 from Base:System

Copy from Base:System/glibc based on submit request 40411 from user pbaudis

OBS-URL: https://build.opensuse.org/request/show/40411
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/glibc?expand=0&rev=20
This commit is contained in:
OBS User autobuild 2010-05-25 08:18:17 +00:00 committed by Git OBS Bridge
parent 6112838f52
commit 230c58fe1a
13 changed files with 60 additions and 385 deletions

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e03c84ffe3b41a81a070a896307fa59b4618f2cc053360a65c867a79a32a718c
size 15670997

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:badb11c8eef452ee7acf9842fb71daf46c96426dd8ce49f71b2c364c6e600082
size 15675556

View File

@ -1,11 +0,0 @@
--- sysdeps/x86_64/dl-machine.h~ 2010-03-01 18:51:13.914317000 +0100
+++ sysdeps/x86_64/dl-machine.h 2010-03-01 18:52:01.258038000 +0100
@@ -453,7 +453,7 @@
case R_X86_64_PC32:
value += reloc->r_addend - (Elf64_Addr) reloc_addr;
*(unsigned int *) reloc_addr = value;
- if (__builtin_expect (value != (unsigned int) value, 0))
+ if (__builtin_expect (value != (int) value, 0))
{
fmt = "\
%s: Symbol `%s' causes overflow in R_X86_64_PC32 relocation\n";

View File

@ -1,14 +1,13 @@
Pending acceptance upstream when this gets RFC'd:
http://sourceware.org/bugzilla/show_bug.cgi?id=11438
--- posix/gai.conf~ 2010-04-20 13:05:50.197813000 +0200
+++ posix/gai.conf 2010-04-20 13:08:46.472675000 +0200
@@ -66,3 +66,68 @@
#scopev4 ::ffff:172.16.0.0/108 5
--- posix/gai.conf~ 2010-05-12 04:10:58.087661000 +0200
+++ posix/gai.conf 2010-05-12 04:14:40.638820000 +0200
@@ -67,11 +67,66 @@
#scopev4 ::ffff:192.168.0.0/112 5
#scopev4 ::ffff:0.0.0.0/96 14
+
+
#
-# For sites which use site-local IPv4 addresses behind NAT there is
-# the problem that even if IPv4 addresses are preferred they do not
-# have the same scope and are therefore not sorted first. To change
-# this use only these rules:
+# Back in 2003, the sorting algorithm used by getaddrinfo() was defined in RFC
+# 3484. However, this document did not take into account (or foresee) the
+# ubiquity of IPv4 NAT on today's internet. This in turn causes some real
@ -68,7 +67,10 @@ http://sourceware.org/bugzilla/show_bug.cgi?id=11438
+# >
+# > By changing the address scope of private IPv4 address to global, this
+# > problem can be solved.
+
#
-#scopev4 ::ffff:169.254.0.0/112 2
-#scopev4 ::ffff:127.0.0.0/104 2
-#scopev4 ::ffff:0.0.0.0/96 14
+scopev4 ::ffff:10.0.0.0/104 14
+scopev4 ::ffff:172.16.0.0/108 14
+scopev4 ::ffff:192.168.0.0/112 14

View File

@ -1,148 +0,0 @@
This bug is in reference to a bug introduced in glibc 2.11 but present in glibc
HEAD by the following patch set:
http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=6a3d03ff58742430a252beac4a1917506512e319
The patch came from this bugzilla bug:
https://bugzilla.redhat.com/show_bug.cgi?id=494631
Which simply proposed the first part:
+ nl = memchr (*cp, '\n', *re - *cp);
+ while (nl == NULL && *re == buffer_end)
+ {
+ /* Truncate too long lines. */
+ *re = buffer + 3 * (buffer_end - buffer) / 4;
+ n = read_not_cancel (fd, *re, buffer_end - *re);
+ if (n < 0)
+ return NULL;
+
+ nl = memchr (*re, '\n', n);
+ **re = '\n';
+ *re += n;
+ }
}
+ else
+ nl = memchr (*cp, '\n', *re - *cp);
This was checked in with a second part:
else if (nl + 5 >= *re)
{
memmove (buffer, nl, *re - nl);
*re = buffer + (*re - nl);
nl = *cp = buffer;
ssize_t n = read_not_cancel (fd, *re, buffer_end - *re);
if (n < 0)
return NULL;
*re += n;
}
Which is meant to determine whether there's enough room at the end of the
buffer to hold "cpu*\n".
else if (nl + 5 >= *re)
{
memmove (buffer, nl, *re - nl);
*re = buffer + (*re - nl);
nl = *cp = buffer;
ssize_t n = read_not_cancel (fd, *re, buffer_end - *re);
if (n < 0)
return NULL;
*re += n;
}
*cp = nl + 1;
This second block is erroneous (and redundant). If there's not enough room to
complete a cpu[:digit:] line it'll try to move what's partially in the end of
the buffer to the front (preserving that portion) and then read in a bunch
more, assuming that a \n is in the next read.
But it actually ends up overwriting the current line with the contents of the
second line.
Consider the following line
| C | P | U | 1 | \n | C | P | U | 2 | \n | C | P | U | 3 | F | O | O | B | A |
R | F | O | O | B |
A | R | \n | ...
where sizeof(buffer) == 12.
The first time through 'buffer' is filled as follows:
| C | P | U | 1 | \n | C | P | U | 2 | \n | C | P |
and 'cpu1' is the line that is returned. The second time through 'cpu2' is the
line that is supposed to be returned but this problematic branch is hit and the
last C P is copied to the front of the buffer over top of C P U 2. Following
this U 3 F O O B A R F O is read into the rest of 'buffer':
| C | P ||| U | 3 | F | O | O | B | A | R | F | O |
This throws off the whole incrementing calculation.
This second else block isn't necessary. Jakub's first part covers the scenario
shown in the example above quite well:
The following test case:
#include<stdio.h>
#include<sys/sysinfo.h>
int main()
{
int lcpus=get_nprocs();
printf("logical cpus = %d\n",lcpus);
return 0;
}
Can be run against the attached /proc/stat file which is known to reproduce the
problem:
This stat file can be used with the testcase by bind mounting it over
/proc/stat:
cp stat /dev/shm/stat
mount --bind /dev/shm/stat /proc/stat
When run this should show:
logical cpus = 1024
since cpu1024 is high cpu number. But it shows something like:
logical cpus = 137
Also attached is a patch which removes the erroneous else block.
When re-run against with this patch it reports the correct number of cpus.
Thanks to Milton Miller for describing this problem.
--- glibc-2.11.1/sysdeps/unix/sysv/linux/getsysstats.c 2010-01-18 11:01:41.000000000 -0600
+++ glibc-2.11.1-new/sysdeps/unix/sysv/linux/getsysstats.c 2010-03-23 08:00:26.000000000 -0500
@@ -117,18 +117,6 @@
if (nl == NULL)
nl = *re - 1;
}
- else if (nl + 5 >= *re)
- {
- memmove (buffer, nl, *re - nl);
- *re = buffer + (*re - nl);
- nl = *cp = buffer;
-
- ssize_t n = read_not_cancel (fd, *re, buffer_end - *re);
- if (n < 0)
- return NULL;
-
- *re += n;
- }
*cp = nl + 1;
assert (*cp <= *re);

View File

@ -1,39 +0,0 @@
2010-02-05 H.J. Lu <hongjiu.lu@intel.com>
PR libc/11230
* sysdeps/ia64/memchr.S: Don't read beyond the last byte
during recovery.
diff --git a/sysdeps/ia64/memchr.S b/sysdeps/ia64/memchr.S
index cdd71ca..56d8056 100644
--- a/sysdeps/ia64/memchr.S
+++ b/sysdeps/ia64/memchr.S
@@ -47,7 +47,7 @@
#define saved_lc r16
#define chr r17
#define len r18
-#define pos0 r20
+#define last r20
#define val r21
#define tmp r24
#define chrx8 r25
@@ -67,6 +67,7 @@ ENTRY(__memchr)
mov saved_pr = pr // save the predicates
.body
mov ret0 = str
+ add last = str, in2 // last byte
and tmp = 7, str // tmp = str % 8
cmp.ne p7, p0 = r0, r0 // clear p7
extr.u chr = in1, 0, 8 // chr = (unsigned char) in1
@@ -143,7 +144,10 @@ ENTRY(__memchr)
ld8 tmp = [ret0];; // load the first unchecked 8byte
xor aux[1] = tmp, chrx8;;
czx1.r poschr[1] = aux[1];;
- cmp.ne p7, p0 = 8, poschr[1]
+ cmp.ne p7, p0 = 8, poschr[1];;
+(p7) add ret0 = addr[MEMLAT+2], poschr[1];;
+(p7) cmp.geu p6, p7 = ret0, last // don't go over the last byte
+(p6) br.cond.spnt .notfound;;
(p7) br.cond.spnt .foundit;;
adds ret0 = 8, ret0 // load the next unchecked 8byte
br.sptk .l4;;

View File

@ -0,0 +1,19 @@
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index ed55bec..f06db75 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -243,9 +243,12 @@ parse_line (const char *fname, int line_num, const char *str)
if (c == NULL)
{
char *buf;
+ char *hint = "";
- if (__asprintf (&buf, _("%s: line %d: bad command `%s'\n"),
- fname, line_num, start) < 0)
+ if (__strncasecmp (start, "mdns", len) == 0 && len == 4)
+ hint = "Multicast DNS is now configured in /etc/nsswitch.conf instead.\nSee also the package and manpage of nss-mdns.\n";
+ if (__asprintf (&buf, _("%s: line %d: bad command `%s'\n%s"),
+ fname, line_num, start, hint) < 0)
return;
__fxprintf (NULL, "%s", buf);

View File

@ -1,11 +0,0 @@
--- localedata/locales/i18n~ 2010-01-19 03:51:14.208960000 +0100
+++ localedata/locales/i18n 2010-01-19 03:51:24.444040000 +0100
@@ -928,7 +928,7 @@
(<U006D>,<U004D>);(<U006E>,<U004E>);(<U006F>,<U004F>);(<U0070>,<U0050>);/
(<U0071>,<U0051>);(<U0072>,<U0052>);(<U0073>,<U0053>);(<U0074>,<U0054>);/
(<U0075>,<U0055>);(<U0076>,<U0056>);(<U0077>,<U0057>);(<U0078>,<U0058>);/
- (<U0079>,<U0059>);(<U007A>,<U005A>);(<U00B5>,<U039C>);(<U00DF>,<U1E9E>);/
+ (<U0079>,<U0059>);(<U007A>,<U005A>);(<U00B5>,<U039C>);/
(<U00E0>,<U00C0>);/
(<U00E1>,<U00C1>);(<U00E2>,<U00C2>);(<U00E3>,<U00C3>);(<U00E4>,<U00C4>);/
(<U00E5>,<U00C5>);(<U00E6>,<U00C6>);(<U00E7>,<U00C7>);(<U00E8>,<U00C8>);/

View File

@ -1,84 +0,0 @@
Hi,
unfortunately it turned out that the UTF-16 to UTF-32 and UTF-16 to
UTF-8 conversion instructions fail to recognize certain conditions if
the input stream is corrupted.
The attached patch disables these instructions and adjusts the
software implementation in order to take care of the error condition.
Hopefully we can re-enable them if a millicode fix becomes available.
Tested without regressions on s390x.
Please apply if you think it is ok.
Bye,
-Andreas-
2010-02-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* sysdeps/s390/s390-64/utf8-utf16-z9.c: Disable hardware
instructions cu21 and cu24. Add well-formedness checking
parameter and adjust the software implementation.
* sysdeps/s390/s390-64/utf16-utf32-z9.c: Likewise.
Index: libc/sysdeps/s390/s390-64/utf8-utf16-z9.c
===================================================================
--- libc.orig/sysdeps/s390/s390-64/utf8-utf16-z9.c
+++ libc/sysdeps/s390/s390-64/utf8-utf16-z9.c
@@ -345,9 +345,12 @@ gconv_end (struct __gconv_step *data)
Operation. */
#define BODY \
{ \
- if (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) \
+ /* The hardware instruction currently fails to report an error for \
+ isolated low surrogates so we have to disable the instruction \
+ until this gets resolved. */ \
+ if (0) /* (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) */ \
{ \
- HARDWARE_CONVERT ("cu21 %0, %1"); \
+ HARDWARE_CONVERT ("cu21 %0, %1, 1"); \
if (inptr != inend) \
{ \
/* Check if the third byte is \
@@ -388,7 +391,7 @@ gconv_end (struct __gconv_step *data)
\
outptr += 2; \
} \
- else if (c >= 0x0800 && c <= 0xd7ff) \
+ else if ((c >= 0x0800 && c <= 0xd7ff) || c > 0xdfff) \
{ \
/* Three byte UTF-8 char. */ \
\
Index: libc/sysdeps/s390/s390-64/utf16-utf32-z9.c
===================================================================
--- libc.orig/sysdeps/s390/s390-64/utf16-utf32-z9.c
+++ libc/sysdeps/s390/s390-64/utf16-utf32-z9.c
@@ -203,7 +203,10 @@ gconv_end (struct __gconv_step *data)
swapping). */
#define BODY \
{ \
- if (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) \
+ /* The hardware instruction currently fails to report an error for \
+ isolated low surrogates so we have to disable the instruction \
+ until this gets resolved. */ \
+ if (0) /* (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) */ \
{ \
HARDWARE_CONVERT ("cu24 %0, %1, 1"); \
if (inptr != inend) \
@@ -229,6 +232,12 @@ gconv_end (struct __gconv_step *data)
} \
else \
{ \
+ /* An isolated low-surrogate was found. This has to be \
+ considered ill-formed. */ \
+ if (__builtin_expect (u1 >= 0xdc00, 0)) \
+ { \
+ STANDARD_FROM_LOOP_ERR_HANDLER (2); \
+ } \
/* It's a surrogate character. At least the first word says \
it is. */ \
if (__builtin_expect (inptr + 4 > inend, 0)) \

View File

@ -1,32 +0,0 @@
Index: glibc-2.11.1/malloc/malloc.c
===================================================================
--- glibc-2.11.1.orig/malloc/malloc.c 2010-01-18 18:01:41.000000000 +0100
+++ glibc-2.11.1/malloc/malloc.c 2010-02-23 13:47:59.000000000 +0100
@@ -3933,9 +3933,10 @@ public_vALLOc(size_t bytes)
if(!p) {
/* Maybe the failure is due to running out of mmapped areas. */
if(ar_ptr != &main_arena) {
- (void)mutex_lock(&main_arena.mutex);
- p = _int_memalign(&main_arena, pagesz, bytes);
- (void)mutex_unlock(&main_arena.mutex);
+ ar_ptr = &main_arena;
+ (void)mutex_lock(&ar_ptr->mutex);
+ p = _int_memalign(ar_ptr, pagesz, bytes);
+ (void)mutex_unlock(&ar_ptr->mutex);
} else {
#if USE_ARENAS
/* ... or sbrk() has failed and there is still a chance to mmap() */
@@ -3978,9 +3979,10 @@ public_pVALLOc(size_t bytes)
if(!p) {
/* Maybe the failure is due to running out of mmapped areas. */
if(ar_ptr != &main_arena) {
- (void)mutex_lock(&main_arena.mutex);
- p = _int_memalign(&main_arena, pagesz, rounded_bytes);
- (void)mutex_unlock(&main_arena.mutex);
+ ar_ptr = &main_arena;
+ (void)mutex_lock(&ar_ptr->mutex);
+ p = _int_memalign(ar_ptr, pagesz, rounded_bytes);
+ (void)mutex_unlock(&ar_ptr->mutex);
} else {
#if USE_ARENAS
/* ... or sbrk() has failed and there is still a chance to mmap() */

View File

@ -1,3 +1,23 @@
-------------------------------------------------------------------
Thu May 20 02:19:28 CEST 2010 - pbaudis@suse.cz
- Upgrade to glibc-2.11.2 (f2020c64596a)
- Virtually no changes since previous revision, just official tag
-------------------------------------------------------------------
Wed May 12 04:24:13 CEST 2010 - pbaudis@suse.cz
- Upgrade to latest release/2.11/master - glibc-2.11.1-6d270188ef3f
- This contains considerable amount of bugfixes cherrypicked from
the master branch, slated to become glibc-2.11.2 soon with little
further changes
-------------------------------------------------------------------
Mon May 10 23:33:35 CEST 2010 - pbaudis@suse.cz
- Add a hint about /etc/host.conf mdns option removal to the parser
error reporting [bnc#569273]
-------------------------------------------------------------------
Tue May 4 05:47:41 UTC 2010 - aj@suse.de

View File

@ -1,5 +1,5 @@
#
# spec file for package glibc (Version 2.11.1)
# spec file for package glibc (Version 2.11.2)
#
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@ -63,12 +63,12 @@ Obsoletes: glibc-32bit
%endif
Provides: rtld(GNU_HASH)
AutoReqProv: on
Version: 2.11.1
Release: 4
Version: 2.11.2
Release: 1
Url: http://www.gnu.org/software/libc/libc.html
PreReq: filesystem
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Source: glibc-%{version}-11c19d374bd4.tar.bz2
Source: glibc-%{version}-f2020c64596a.tar.bz2
Source2: glibc-ports-2.10.1-2b2b217196.tar.bz2
Source3: noversion.tar.bz2
Source4: manpages.tar.bz2
@ -132,16 +132,10 @@ Patch47: libm-x86-64-exceptions.diff
Patch48: glibc-uio-cell.diff
Patch50: glibc-nameserver-localhost.diff
Patch54: glibc-statfs64-ia64.diff
Patch55: glibc-memchr-ia64.diff
Patch56: glibc-utf-s390.diff
Patch57: glibc-valloc-assert.diff
Patch58: glibc-dl-x86-64-pc32.diff
Patch59: glibc-sap-captialsharps.diff
Patch60: ld-prelink-unique.diff
Patch61: glibc-ppc64-vdso-time.diff
Patch62: nptl-ppc64-vdso-timedwait.diff
Patch63: glibc-getnprocs.diff
Patch64: glibc-gai-private4.diff
Patch65: glibc-resolv-mdnshint.diff
Patch500: ARM_glibc-2.10.1-local-eabi-wchar.diff
Patch501: ARM_glibc-2.10.1-local-hwcap-updates.diff
Patch502: ARM_glibc-2.10.1-local-lowlevellock.diff
@ -357,16 +351,10 @@ rm nscd/s-stamp
%patch48 -p1
%patch50 -p1
%patch54
%patch55 -p1
%patch56 -p1
%patch57 -p1
%patch58
%patch59
%patch60 -p1
%patch61 -p1
%patch62 -p1
%patch63 -p1
%patch64
%patch65 -p1
%ifarch %arm armv5tel armv7l
%patch500
%patch501

View File

@ -1,29 +0,0 @@
Index: glibc-2.11.1/nptl/pthread_cond_timedwait.c
===================================================================
--- glibc-2.11.1.old/nptl/pthread_cond_timedwait.c
+++ glibc-2.11.1/nptl/pthread_cond_timedwait.c
@@ -27,6 +27,15 @@
#include <shlib-compat.h>
+#ifndef HAVE_CLOCK_GETTIME_VSYSCALL
+# undef INTERNAL_VSYSCALL
+# define INTERNAL_VSYSCALL INTERNAL_SYSCALL
+# undef INLINE_VSYSCALL
+# define INLINE_VSYSCALL INLINE_SYSCALL
+#else
+# include <bits/libc-vdso.h>
+#endif
+
/* Cleanup handler, defined in pthread_cond_wait.c. */
extern void __condvar_cleanup (void *arg)
@@ -102,7 +111,7 @@ __pthread_cond_timedwait (cond, mutex, a
#ifdef __NR_clock_gettime
INTERNAL_SYSCALL_DECL (err);
int ret;
- ret = INTERNAL_SYSCALL (clock_gettime, err, 2,
+ ret = INTERNAL_VSYSCALL (clock_gettime, err, 2,
(cond->__data.__nwaiters
& ((1 << COND_NWAITERS_SHIFT) - 1)),
&rt);