summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-08-31 06:53:32 +0000
committerJakub Jelinek <jakub@redhat.com>2006-08-31 06:53:32 +0000
commit936bb2647a835e63e99fa2d1590ab1e14aab4712 (patch)
treee0fcf856a8a2051f8878dd4c8eca215bc549de13
parent2455d11258712bbab8a52c7951301924a483a295 (diff)
downloadglibc-936bb2647a835e63e99fa2d1590ab1e14aab4712.tar.gz
Updated to fedora-glibc-20060831T0640cvs/fedora-glibc-2_4_90-27
-rw-r--r--ChangeLog20
-rw-r--r--elf/dl-load.c20
-rw-r--r--elf/dl-open.c7
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in8
-rw-r--r--nptl/ChangeLog9
-rw-r--r--nptl/pthread_rwlock_trywrlock.c7
-rw-r--r--nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c6
-rw-r--r--nptl/sysdeps/pthread/pthread_rwlock_wrlock.c6
-rw-r--r--sysdeps/unix/sysv/linux/alpha/bits/fcntl.h3
-rw-r--r--sysdeps/unix/sysv/linux/i386/bits/fcntl.h3
-rw-r--r--sysdeps/unix/sysv/linux/ia64/bits/fcntl.h3
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h3
-rw-r--r--sysdeps/unix/sysv/linux/s390/bits/fcntl.h3
-rw-r--r--sysdeps/unix/sysv/linux/sh/bits/fcntl.h3
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/fcntl.h3
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list2
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h3
18 files changed, 87 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index 2f46b1e408..a75ac8b23b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2006-08-30 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (splice): Add offin
+ and offout arguments to the prototype.
+ * sysdeps/unix/sysv/linux/s390/bits/fcntl.h (splice): Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h (splice): Likewise.
+ * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h (splice): Likewise.
+ * sysdeps/unix/sysv/linux/sh/bits/fcntl.h (splice): Likewise.
+ * sysdeps/unix/sysv/linux/i386/bits/fcntl.h (splice): Likewise.
+ * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h (splice): Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h (splice): Likewise.
+ * sysdeps/unix/sysv/linux/syscalls.list (splice): Adjust args string.
+
+2006-08-28 Ulrich Drepper <drepper@redhat.com>
+
+ * elf/dl-load.c (_dl_init_paths): Expand DSTs.
+
+ * elf/dl-open.c (dl_open_worker): Allow $LIB and $PLATFORM in
+ dlopen parameters.
+
2006-08-28 Jakub Jelinek <jakub@redhat.com>
* inet/getnameinfo.c (getnameinfo): For AF_INET, check errno
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 902ffc4109..36dc123c01 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -749,7 +749,25 @@ _dl_init_paths (const char *llp)
{
size_t nllp;
const char *cp = llp;
- char *llp_tmp = strdupa (llp);
+ char *llp_tmp;
+
+#ifdef SHARED
+ /* Expand DSTs. */
+ size_t cnt = DL_DST_COUNT (llp, 1);
+ if (__builtin_expect (cnt == 0, 1))
+ llp_tmp = strdupa (llp);
+ else
+ {
+ /* Determine the length of the substituted string. */
+ size_t total = DL_DST_REQUIRED (l, llp, strlen (llp), cnt);
+
+ /* Allocate the necessary memory. */
+ llp_tmp = (char *) alloca (total + 1);
+ llp_tmp = _dl_dst_substitute (l, llp, llp_tmp, 1);
+ }
+#else
+ llp_tmp = strdupa (llp);
+#endif
/* Decompose the LD_LIBRARY_PATH contents. First determine how many
elements it has. */
diff --git a/elf/dl-open.c b/elf/dl-open.c
index cdbb6601d2..8d057f82eb 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -221,13 +221,6 @@ dl_open_worker (void *a)
size_t required;
char *new_file;
- /* DSTs must not appear in SUID/SGID programs. */
- if (INTUSE(__libc_enable_secure))
- /* This is an error. */
- _dl_signal_error (0, "dlopen", NULL,
- N_("DST not allowed in SUID/SGID programs"));
-
-
/* Determine how much space we need. We have to allocate the
memory locally. */
required = DL_DST_REQUIRED (call_map, file, len, _dl_dst_count (dst, 0));
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 7e4461da37..32a0feccd1 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -3,5 +3,5 @@ glibc-branch := fedora
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-fc4
-fedora-sync-date := 2006-08-28 19:03 UTC
-fedora-sync-tag := fedora-glibc-20060828T1903
+fedora-sync-date := 2006-08-31 06:40 UTC
+fedora-sync-tag := fedora-glibc-20060831T0640
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index 2674d2b564..519c50d449 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -1,4 +1,4 @@
-%define glibcrelease 26
+%define glibcrelease 27
%define auxarches i586 i686 athlon sparcv9 alphaev6
%define xenarches i686 athlon
%ifarch %{xenarches}
@@ -1448,6 +1448,12 @@ rm -f *.filelist*
%endif
%changelog
+* Thu Aug 31 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-27
+- allow $LIB and $PLATFORM in dlopen parameters even in suid/sgid (#204399)
+- fix splice prototype (#204530)
+- fix pthread_rwlock_{,try,timed}wrlock to honor reader preference
+ if requested
+
* Mon Aug 28 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-26
- real fix for the doubly linked list corruption problem
- try harder in realloc to allocate memory (BZ#2684)
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index eb4680d159..2c9c9e2732 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,12 @@
+2006-08-30 Ulrich Drepper <drepper@redhat.com>
+
+ * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Respect
+ reader preference.
+ * sysdeps/pthread/pthread_rwlock_timedwrlock.c
+ (pthread_rwlock_timedwrlock): Likewise.
+ * sysdeps/pthread/pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock):
+ Likewise.
+
2006-08-25 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/libc_pthread_init.c (freeres_libpthread):
diff --git a/nptl/pthread_rwlock_trywrlock.c b/nptl/pthread_rwlock_trywrlock.c
index b754a19565..63760064c5 100644
--- a/nptl/pthread_rwlock_trywrlock.c
+++ b/nptl/pthread_rwlock_trywrlock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -30,7 +30,10 @@ __pthread_rwlock_trywrlock (rwlock)
lll_mutex_lock (rwlock->__data.__lock);
- if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0)
+ if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0
+ /* Respect the preference. */
+ && (rwlock->__data.__flags != 0
+ || rwlock->__data.__nr_readers_queued == 0))
{
rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);
result = 0;
diff --git a/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c b/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c
index 97c0598f96..ab7bc7babb 100644
--- a/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c
+++ b/nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
@@ -40,7 +40,9 @@ pthread_rwlock_timedwrlock (rwlock, abstime)
int err;
/* Get the rwlock if there is no writer and no reader. */
- if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0)
+ if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0
+ && (rwlock->__data.__flags != 0
+ || rwlock->__data.__nr_readers_queued == 0))
{
/* Mark self as writer. */
rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);
diff --git a/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c b/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c
index 822aeed79c..4d967f2496 100644
--- a/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c
+++ b/nptl/sysdeps/pthread/pthread_rwlock_wrlock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
@@ -37,7 +37,9 @@ __pthread_rwlock_wrlock (rwlock)
while (1)
{
/* Get the rwlock if there is no writer and no reader. */
- if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0)
+ if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0
+ && (rwlock->__data.__flags != 0
+ || rwlock->__data.__nr_readers_queued == 0))
{
/* Mark self as writer. */
rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
index 6084c38c91..f17dc2bdc1 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
@@ -216,7 +216,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/sysdeps/unix/sysv/linux/i386/bits/fcntl.h b/sysdeps/unix/sysv/linux/i386/bits/fcntl.h
index 1f7ac0f25a..6de33302ee 100644
--- a/sysdeps/unix/sysv/linux/i386/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/i386/bits/fcntl.h
@@ -224,7 +224,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h b/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
index ef66d465de..ed8c2da9e2 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
@@ -218,7 +218,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h b/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
index 57fc7bd987..c4964e0fd8 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
@@ -224,7 +224,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
index e5a917dbfa..c611028f29 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
@@ -244,7 +244,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/sysdeps/unix/sysv/linux/sh/bits/fcntl.h b/sysdeps/unix/sysv/linux/sh/bits/fcntl.h
index 1f7ac0f25a..6de33302ee 100644
--- a/sysdeps/unix/sysv/linux/sh/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/sh/bits/fcntl.h
@@ -224,7 +224,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h b/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h
index a965d31654..d68bfeb0ef 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h
@@ -243,7 +243,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index afb6d80978..fca29b26ff 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -67,7 +67,7 @@ setfsgid EXTRA setfsgid i:i setfsgid
setfsuid EXTRA setfsuid i:i setfsuid
setpgid - setpgid i:ii __setpgid setpgid
sigaltstack - sigaltstack i:PP __sigaltstack sigaltstack
-splice EXTRA splice i:iiii splice
+splice EXTRA splice i:iPiPii splice
sysinfo EXTRA sysinfo i:p sysinfo
swapon - swapon i:si __swapon swapon
swapoff - swapoff i:s __swapoff swapoff
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h b/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h
index 4f10f22224..fa1d02bc1f 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h
@@ -238,7 +238,8 @@ extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
unsigned int __flags);
/* Splice two files together. */
-extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
+extern int splice (int __fdin, __off64_t *__offin, int __fdout,
+ __off64_t *__offout, size_t __len, unsigned int __flags)
__THROW;
/* In-kernel implementation of tee for pipe buffers. */