Hello community,
here is the log from the commit of package glibc for openSUSE:Factory checked in at 2014-03-27 09:28:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/glibc (Old)
and /work/SRC/openSUSE:Factory/.glibc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "glibc"
Changes:
--------
--- /work/SRC/openSUSE:Factory/glibc/glibc-testsuite.changes 2014-03-22 07:49:52.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.glibc.new/glibc-testsuite.changes 2014-03-27 09:28:40.000000000 +0100
@@ -1,0 +2,30 @@
+Tue Mar 25 09:26:44 UTC 2014 - schwab@suse.de
+
+- abort-no-flush.patch: Don't close or flush stdio streams on abort (BZ
+ #15436)
+- fix-locking-in-_IO_cleanup.patch: always do locking when accessing
+ streams (bnc#796982, BZ #15142)
+- resolv-dont-ignore-second-answer.patch: don't ignore second answer from
+ nameserver if the first one was empty (bnc#767266, BZ #13651)
+- ldd-system-interp.patch: Never try to execute the file in ldd
+ (bnc#677787, BZ #16750)
+
+-------------------------------------------------------------------
+Mon Mar 24 12:26:50 UTC 2014 - schwab@suse.de
+
+- check-pf-alloca.patch: Account for alloca use when collecting interface
+ addresses (bnc#785041, BZ #16002)
+
+-------------------------------------------------------------------
+Mon Mar 24 07:59:40 UTC 2014 - schwab@suse.de
+
+- powerpc-opt-power8.patch: two more POWER8 optimisations (bnc#866711,
+ fate#315443)
+
+-------------------------------------------------------------------
+Thu Mar 20 14:52:47 UTC 2014 - schwab@suse.de
+
+- getaddrinfo-uninit-result.patch: Fix use of half-initialized result in
+ getaddrinfo when using nscd (bnc#867636, BZ #16743)
+
+-------------------------------------------------------------------
glibc-utils.changes: same change
glibc.changes: same change
New:
----
abort-no-flush.patch
check-pf-alloca.patch
fix-locking-in-_IO_cleanup.patch
getaddrinfo-uninit-result.patch
ldd-system-interp.patch
resolv-dont-ignore-second-answer.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ glibc-testsuite.spec ++++++
--- /var/tmp/diff_new_pack.zfeEgC/_old 2014-03-27 09:28:41.000000000 +0100
+++ /var/tmp/diff_new_pack.zfeEgC/_new 2014-03-27 09:28:41.000000000 +0100
@@ -240,10 +240,22 @@
Patch1003: nscd-track-startup-failures.patch
# PATCH-FIX-UPSTREAM GLIBC Optimizations For POWER8 Hardware
Patch1004: powerpc-opt-power8.patch
+# PATCH-FIX-UPSTREAM Account for alloca use when collecting interface addresses
+Patch1005: check-pf-alloca.patch
+# PATCH-FIX-UPSTREAM Fix use of half-initialized result in getaddrinfo when using nscd
+Patch1006: getaddrinfo-uninit-result.patch
###
# Patches awaiting upstream approval
###
+# PATCH-FIX-UPSTREAM Always to locking when accessing streams (BZ #15142)
+Patch2000: fix-locking-in-_IO_cleanup.patch
+# PATCH-FIX-UPSTREAM Don't ignore second answer from nameserver if the first one was empty (BZ #13651)
+Patch2001: resolv-dont-ignore-second-answer.patch
+# PATCH-FIX-UPSTREAM Never try to execute the file in ldd (BZ #16750)
+Patch2002: ldd-system-interp.patch
+# PATCH-FIX-UPSTREAM Don't close or flush stdio streams on abort (BZ #15436)
+Patch2003: abort-no-flush.patch
# Non-glibc patches
# PATCH-FIX-OPENSUSE Remove debianisms from manpages
@@ -449,6 +461,13 @@
%patch1002 -p1
%patch1003 -p1
%patch1004 -p1
+%patch1005 -p1
+%patch1006 -p1
+
+%patch2000 -p1
+%patch2001 -p1
+%patch2002 -p1
+%patch2003 -p1
%patch3000
glibc-utils.spec: same change
++++++ glibc.spec ++++++
--- /var/tmp/diff_new_pack.zfeEgC/_old 2014-03-27 09:28:41.000000000 +0100
+++ /var/tmp/diff_new_pack.zfeEgC/_new 2014-03-27 09:28:41.000000000 +0100
@@ -240,10 +240,22 @@
Patch1003: nscd-track-startup-failures.patch
# PATCH-FIX-UPSTREAM GLIBC Optimizations For POWER8 Hardware
Patch1004: powerpc-opt-power8.patch
+# PATCH-FIX-UPSTREAM Account for alloca use when collecting interface addresses
+Patch1005: check-pf-alloca.patch
+# PATCH-FIX-UPSTREAM Fix use of half-initialized result in getaddrinfo when using nscd
+Patch1006: getaddrinfo-uninit-result.patch
###
# Patches awaiting upstream approval
###
+# PATCH-FIX-UPSTREAM Always to locking when accessing streams (BZ #15142)
+Patch2000: fix-locking-in-_IO_cleanup.patch
+# PATCH-FIX-UPSTREAM Don't ignore second answer from nameserver if the first one was empty (BZ #13651)
+Patch2001: resolv-dont-ignore-second-answer.patch
+# PATCH-FIX-UPSTREAM Never try to execute the file in ldd (BZ #16750)
+Patch2002: ldd-system-interp.patch
+# PATCH-FIX-UPSTREAM Don't close or flush stdio streams on abort (BZ #15436)
+Patch2003: abort-no-flush.patch
# Non-glibc patches
# PATCH-FIX-OPENSUSE Remove debianisms from manpages
@@ -449,6 +461,13 @@
%patch1002 -p1
%patch1003 -p1
%patch1004 -p1
+%patch1005 -p1
+%patch1006 -p1
+
+%patch2000 -p1
+%patch2001 -p1
+%patch2002 -p1
+%patch2003 -p1
%patch3000
++++++ abort-no-flush.patch ++++++
Don't close or flush stdio streams on abort
[BZ #15436]
* stdlib/abort.c (abort): Don't call fflush and __fcloseall.
Index: glibc-2.19/stdlib/abort.c
===================================================================
--- glibc-2.19.orig/stdlib/abort.c
+++ glibc-2.19/stdlib/abort.c
@@ -30,9 +30,6 @@
# define ABORT_INSTRUCTION
#endif
-#include
-#define fflush(s) _IO_flush_all_lockp (0)
-
/* Exported variable to locate abort message in core files etc. */
struct abort_msg_s *__abort_msg __attribute__ ((nocommon));
libc_hidden_def (__abort_msg)
@@ -66,16 +63,8 @@ abort (void)
__sigprocmask (SIG_UNBLOCK, &sigs, (sigset_t *) NULL);
}
- /* Flush all streams. We cannot close them now because the user
- might have registered a handler for SIGABRT. */
- if (stage == 1)
- {
- ++stage;
- fflush (NULL);
- }
-
/* Send signal which possibly calls a user handler. */
- if (stage == 2)
+ if (stage == 1)
{
/* This stage is special: we must allow repeated calls of
`abort' when a user defined handler for SIGABRT is installed.
@@ -93,7 +82,7 @@ abort (void)
}
/* There was a handler installed. Now remove it. */
- if (stage == 3)
+ if (stage == 2)
{
++stage;
memset (&act, '\0', sizeof (struct sigaction));
@@ -103,30 +92,22 @@ abort (void)
__sigaction (SIGABRT, &act, NULL);
}
- /* Now close the streams which also flushes the output the user
- defined handler might has produced. */
- if (stage == 4)
- {
- ++stage;
- __fcloseall ();
- }
-
/* Try again. */
- if (stage == 5)
+ if (stage == 3)
{
++stage;
raise (SIGABRT);
}
/* Now try to abort using the system specific command. */
- if (stage == 6)
+ if (stage == 4)
{
++stage;
ABORT_INSTRUCTION;
}
/* If we can't signal ourselves and the abort instruction failed, exit. */
- if (stage == 7)
+ if (stage == 5)
{
++stage;
_exit (127);
++++++ check-pf-alloca.patch ++++++
* sysdeps/unix/sysv/linux/check_pf.c (make_request): Add out_fail2
label to be used after in6ailist is initialized.
[BZ #16002]
* sysdeps/unix/sysv/linux/check_pf.c (make_request): Use
alloca_account and account alloca use for struct in6ailist.
Index: glibc-2.19/sysdeps/unix/sysv/linux/check_pf.c
===================================================================
--- glibc-2.19.orig/sysdeps/unix/sysv/linux/check_pf.c
+++ glibc-2.19/sysdeps/unix/sysv/linux/check_pf.c
@@ -139,9 +139,10 @@ make_request (int fd, pid_t pid)
#endif
bool use_malloc = false;
char *buf;
+ size_t alloca_used = 0;
if (__libc_use_alloca (buf_size))
- buf = alloca (buf_size);
+ buf = alloca_account (buf_size, alloca_used);
else
{
buf = malloc (buf_size);
@@ -163,6 +164,7 @@ make_request (int fd, pid_t pid)
{
struct in6addrinfo info;
struct in6ailist *next;
+ bool use_malloc;
} *in6ailist = NULL;
size_t in6ailistlen = 0;
bool seen_ipv4 = false;
@@ -180,10 +182,10 @@ make_request (int fd, pid_t pid)
ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0));
if (read_len < 0)
- goto out_fail;
+ goto out_fail2;
if (msg.msg_flags & MSG_TRUNC)
- goto out_fail;
+ goto out_fail2;
struct nlmsghdr *nlmh;
for (nlmh = (struct nlmsghdr *) buf;
@@ -239,7 +241,19 @@ make_request (int fd, pid_t pid)
}
}
- struct in6ailist *newp = alloca (sizeof (*newp));
+ struct in6ailist *newp;
+ if (__libc_use_alloca (alloca_used + sizeof (*newp)))
+ {
+ newp = alloca_account (sizeof (*newp), alloca_used);
+ newp->use_malloc = false;
+ }
+ else
+ {
+ newp = malloc (sizeof (*newp));
+ if (newp == NULL)
+ goto out_fail2;
+ newp->use_malloc = true;
+ }
newp->info.flags = (((ifam->ifa_flags
& (IFA_F_DEPRECATED
| IFA_F_OPTIMISTIC))
@@ -275,7 +289,7 @@ make_request (int fd, pid_t pid)
result = malloc (sizeof (*result)
+ in6ailistlen * sizeof (struct in6addrinfo));
if (result == NULL)
- goto out_fail;
+ goto out_fail2;
result->timestamp = get_nl_timestamp ();
result->usecnt = 2;
@@ -286,7 +300,10 @@ make_request (int fd, pid_t pid)
do
{
result->in6ai[--in6ailistlen] = in6ailist->info;
- in6ailist = in6ailist->next;
+ struct in6ailist *next = in6ailist->next;
+ if (in6ailist->use_malloc)
+ free (in6ailist);
+ in6ailist = next;
}
while (in6ailist != NULL);
}
@@ -302,7 +319,15 @@ make_request (int fd, pid_t pid)
free (buf);
return result;
-out_fail:
+ out_fail2:
+ while (in6ailist != NULL)
+ {
+ struct in6ailist *next = in6ailist->next;
+ if (in6ailist->use_malloc)
+ free (in6ailist);
+ in6ailist = next;
+ }
+ out_fail:
if (use_malloc)
free (buf);
return NULL;
++++++ fix-locking-in-_IO_cleanup.patch ++++++
Always do locking when accessing streams
[BZ #15142]
* libio/genops.c (_IO_list_all_stamp): Delete. All uses removed.
(_IO_flush_all_all_lockp): Delete.
(_IO_flush_all): Replace with body of _IO_flush_all_all_lockp.
Always do locking.
(_IO_unbuffer_write): Always do locking.
(_IO_cleanup): Call _IO_flush_all instead of _IO_flush_all_lockp.
* libio/libioP.h (_IO_flush_all_all_lockp): Remove declaration.
diff --git a/libio/genops.c b/libio/genops.c
index e0ce8cc..9def1d4 100644
--- a/libio/genops.c
+++ b/libio/genops.c
@@ -38,10 +38,6 @@
static _IO_lock_t list_all_lock = _IO_lock_initializer;
#endif
-/* Used to signal modifications to the list of FILE decriptors. */
-static int _IO_list_all_stamp;
-
-
static _IO_FILE *run_fp;
#ifdef _IO_MTSAFE_IO
@@ -70,16 +66,12 @@ _IO_un_link (fp)
if (_IO_list_all == NULL)
;
else if (fp == _IO_list_all)
- {
- _IO_list_all = (struct _IO_FILE_plus *) _IO_list_all->file._chain;
- ++_IO_list_all_stamp;
- }
+ _IO_list_all = (struct _IO_FILE_plus *) _IO_list_all->file._chain;
else
for (f = &_IO_list_all->file._chain; *f; f = &(*f)->_chain)
if (*f == (_IO_FILE *) fp)
{
*f = fp->file._chain;
- ++_IO_list_all_stamp;
break;
}
fp->file._flags &= ~_IO_LINKED;
@@ -108,7 +100,6 @@ _IO_link_in (fp)
#endif
fp->file._chain = (_IO_FILE *) _IO_list_all;
_IO_list_all = fp;
- ++_IO_list_all_stamp;
#ifdef _IO_MTSAFE_IO
_IO_funlockfile ((_IO_FILE *) fp);
run_fp = NULL;
@@ -818,25 +809,20 @@ _IO_get_column (fp)
int
-_IO_flush_all_lockp (int do_lock)
+_IO_flush_all (void)
{
int result = 0;
struct _IO_FILE *fp;
- int last_stamp;
#ifdef _IO_MTSAFE_IO
- __libc_cleanup_region_start (do_lock, flush_cleanup, NULL);
- if (do_lock)
- _IO_lock_lock (list_all_lock);
+ _IO_cleanup_region_start_noarg (flush_cleanup);
+ _IO_lock_lock (list_all_lock);
#endif
- last_stamp = _IO_list_all_stamp;
- fp = (_IO_FILE *) _IO_list_all;
- while (fp != NULL)
+ for (fp = (_IO_FILE *) _IO_list_all; fp != NULL; fp = fp->_chain)
{
run_fp = fp;
- if (do_lock)
- _IO_flockfile (fp);
+ _IO_flockfile (fp);
if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base)
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
@@ -848,52 +834,30 @@ _IO_flush_all_lockp (int do_lock)
&& _IO_OVERFLOW (fp, EOF) == EOF)
result = EOF;
- if (do_lock)
- _IO_funlockfile (fp);
+ _IO_funlockfile (fp);
run_fp = NULL;
-
- if (last_stamp != _IO_list_all_stamp)
- {
- /* Something was added to the list. Start all over again. */
- fp = (_IO_FILE *) _IO_list_all;
- last_stamp = _IO_list_all_stamp;
- }
- else
- fp = fp->_chain;
}
#ifdef _IO_MTSAFE_IO
- if (do_lock)
- _IO_lock_unlock (list_all_lock);
- __libc_cleanup_region_end (0);
+ _IO_lock_unlock (list_all_lock);
+ _IO_cleanup_region_end (0);
#endif
return result;
}
-
-
-int
-_IO_flush_all (void)
-{
- /* We want locking. */
- return _IO_flush_all_lockp (1);
-}
libc_hidden_def (_IO_flush_all)
void
_IO_flush_all_linebuffered (void)
{
struct _IO_FILE *fp;
- int last_stamp;
#ifdef _IO_MTSAFE_IO
_IO_cleanup_region_start_noarg (flush_cleanup);
_IO_lock_lock (list_all_lock);
#endif
- last_stamp = _IO_list_all_stamp;
- fp = (_IO_FILE *) _IO_list_all;
- while (fp != NULL)
+ for (fp = (_IO_FILE *) _IO_list_all; fp != NULL; fp = fp->_chain)
{
run_fp = fp;
_IO_flockfile (fp);
@@ -903,15 +867,6 @@ _IO_flush_all_linebuffered (void)
_IO_funlockfile (fp);
run_fp = NULL;
-
- if (last_stamp != _IO_list_all_stamp)
- {
- /* Something was added to the list. Start all over again. */
- fp = (_IO_FILE *) _IO_list_all;
- last_stamp = _IO_list_all_stamp;
- }
- else
- fp = fp->_chain;
}
#ifdef _IO_MTSAFE_IO
@@ -947,6 +902,12 @@ static void
_IO_unbuffer_write (void)
{
struct _IO_FILE *fp;
+
+#ifdef _IO_MTSAFE_IO
+ _IO_cleanup_region_start_noarg (flush_cleanup);
+ _IO_lock_lock (list_all_lock);
+#endif
+
for (fp = (_IO_FILE *) _IO_list_all; fp; fp = fp->_chain)
{
if (! (fp->_flags & _IO_UNBUFFERED)
@@ -956,15 +917,8 @@ _IO_unbuffer_write (void)
&& fp->_mode != 0)
{
#ifdef _IO_MTSAFE_IO
- int cnt;
-#define MAXTRIES 2
- for (cnt = 0; cnt < MAXTRIES; ++cnt)
- if (fp->_lock == NULL || _IO_lock_trylock (*fp->_lock) == 0)
- break;
- else
- /* Give the other thread time to finish up its use of the
- stream. */
- __sched_yield ();
+ run_fp = fp;
+ _IO_flockfile (fp);
#endif
if (! dealloc_buffers && !(fp->_flags & _IO_USER_BUF))
@@ -980,8 +934,8 @@ _IO_unbuffer_write (void)
_IO_SETBUF (fp, NULL, 0);
#ifdef _IO_MTSAFE_IO
- if (cnt < MAXTRIES && fp->_lock != NULL)
- _IO_lock_unlock (*fp->_lock);
+ _IO_funlockfile (fp);
+ run_fp = NULL;
#endif
}
@@ -989,6 +943,11 @@ _IO_unbuffer_write (void)
used. */
fp->_mode = -1;
}
+
+#ifdef _IO_MTSAFE_IO
+ _IO_lock_unlock (list_all_lock);
+ _IO_cleanup_region_end (0);
+#endif
}
@@ -1008,9 +967,7 @@ libc_freeres_fn (buffer_free)
int
_IO_cleanup (void)
{
- /* We do *not* want locking. Some threads might use streams but
- that is their problem, we flush them underneath them. */
- int result = _IO_flush_all_lockp (0);
+ int result = _IO_flush_all ();
/* We currently don't have a reliable mechanism for making sure that
C++ static destructors are executed in the correct order.
diff --git a/libio/libioP.h b/libio/libioP.h
index 8a7b85b..3e3a724 100644
--- a/libio/libioP.h
+++ b/libio/libioP.h
@@ -488,7 +488,6 @@ extern int _IO_new_do_write (_IO_FILE *, const char *, _IO_size_t);
extern int _IO_old_do_write (_IO_FILE *, const char *, _IO_size_t);
extern int _IO_wdo_write (_IO_FILE *, const wchar_t *, _IO_size_t);
libc_hidden_proto (_IO_wdo_write)
-extern int _IO_flush_all_lockp (int);
extern int _IO_flush_all (void);
libc_hidden_proto (_IO_flush_all)
extern int _IO_cleanup (void);
--
1.9.1
++++++ getaddrinfo-uninit-result.patch ++++++
* sysdeps/posix/getaddrinfo.c (gaih_inet): Properly skip over
non-matching result from nscd.
Index: glibc-2.19/sysdeps/posix/getaddrinfo.c
===================================================================
--- glibc-2.19.orig/sysdeps/posix/getaddrinfo.c
+++ glibc-2.19/sysdeps/posix/getaddrinfo.c
@@ -710,6 +710,14 @@ gaih_inet (const char *name, const struc
struct gaih_addrtuple *addrfree = addrmem;
for (int i = 0; i < air->naddrs; ++i)
{
+ if (!((air->family[i] == AF_INET
+ && req->ai_family == AF_INET6
+ && (req->ai_flags & AI_V4MAPPED) != 0)
+ || req->ai_family == AF_UNSPEC
+ || air->family[i] == req->ai_family))
+ /* Skip over non-matching result. */
+ continue;
+
socklen_t size = (air->family[i] == AF_INET
? INADDRSZ : IN6ADDRSZ);
if (*pat == NULL)
++++++ ldd-system-interp.patch ++++++
Never try to execute the file in ldd
Executing a random file is never a good idea. Treat all arguments as if
they are invoked with __libc_enable_secure, and run them through the known
good dynamic linker.
* elf/ldd.bash.in: Always run through the dynamic linker, even if
the file has its own interpreter. Remove unneeded executable
check.
Index: glibc-2.19/elf/ldd.bash.in
===================================================================
--- glibc-2.19.orig/elf/ldd.bash.in
+++ glibc-2.19/elf/ldd.bash.in
@@ -150,8 +150,6 @@ for file do
echo "ldd: ${file}:" $"not regular file" >&2
result=1
elif test -r "$file"; then
- test -x "$file" || echo 'ldd:' $"\
-warning: you do not have execution permission for" "\`$file'" >&2
RTLD=
ret=1
for rtld in ${RTLDLIST}; do
@@ -164,18 +162,6 @@ warning: you do not have execution permi
fi
done
case $ret in
- 0)
- # If the program exits with exit code 5, it means the process has been
- # invoked with __libc_enable_secure. Fall back to running it through
- # the dynamic linker.
- try_trace "$file"
- rc=$?
- if [ $rc = 5 ]; then
- try_trace "$RTLD" "$file"
- rc=$?
- fi
- [ $rc = 0 ] || result=1
- ;;
1)
# This can be a non-ELF binary or no binary at all.
nonelf "$file" || {
@@ -183,7 +169,7 @@ warning: you do not have execution permi
result=1
}
;;
- 2)
+ [02])
try_trace "$RTLD" "$file" || result=1
;;
*)
++++++ powerpc-opt-power8.patch ++++++
++++ 718 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/glibc/powerpc-opt-power8.patch
++++ and /work/SRC/openSUSE:Factory/.glibc.new/powerpc-opt-power8.patch
++++++ resolv-dont-ignore-second-answer.patch ++++++
Don't ignore second answer from nameserver if the first one was empty (BZ #13651)
Index: glibc-2.19/resolv/res_query.c
===================================================================
--- glibc-2.19.orig/resolv/res_query.c
+++ glibc-2.19/resolv/res_query.c
@@ -382,7 +382,7 @@ __libc_res_nsearch(res_state statp,
answer, anslen, answerp,
answerp2, nanswerp2, resplen2,
answerp2_malloced);
- if (ret > 0 || trailing_dot)
+ if (ret > 0 || (ret == 0 && *resplen2 > 0) || trailing_dot)
return (ret);
saved_herrno = h_errno;
tried_as_is++;
@@ -422,7 +422,7 @@ __libc_res_nsearch(res_state statp,
answer, anslen, answerp,
answerp2, nanswerp2,
resplen2, answerp2_malloced);
- if (ret > 0)
+ if (ret > 0 || (ret == 0 && *resplen2 > 0))
return (ret);
if (answerp && *answerp != answer) {
@@ -491,7 +491,7 @@ __libc_res_nsearch(res_state statp,
answer, anslen, answerp,
answerp2, nanswerp2, resplen2,
answerp2_malloced);
- if (ret > 0)
+ if (ret > 0 || (ret == 0 && *resplen2 > 0))
return (ret);
}
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org