2.10.1-2
This commit is contained in:
parent
a89acb3a54
commit
f0c930b8a8
152
glibc-accept4.patch
Normal file
152
glibc-accept4.patch
Normal file
@ -0,0 +1,152 @@
|
||||
2009-05-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/accept4.c: Include kernel-features.h.
|
||||
(accept4): If __NR_accept4 is not defined, but __NR_socketcall
|
||||
is, either do nothing at all if __ASSUME_ACCEPT4, or
|
||||
call __internal_accept4 and handle EINVAL -> ENOSYS translation.
|
||||
* sysdeps/unix/sysv/linux/internal_accept4.S: New file.
|
||||
* sysdeps/unix/sysv/linux/i386/accept4.S (SOCKOP_accept4): Don't
|
||||
define.
|
||||
* sysdeps/unix/sysv/linux/i386/internal_accept4.S: New file.
|
||||
* sysdeps/unix/sysv/linux/Makefile (sysdep-routines): Add
|
||||
internal_accept4 in socket directory.
|
||||
|
||||
2009-05-21 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/kernel-features.h: Don't define
|
||||
__ASSUME_ACCEPT4 for IA-64.
|
||||
|
||||
2009-05-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/accept4.c (__NR_accept4): Don't define.
|
||||
|
||||
* sysdeps/unix/sysv/linux/socketcall.h (SOCKOP_paccept): Remove.
|
||||
(SOCKOP_accept4): Define.
|
||||
|
||||
--- libc/sysdeps/unix/sysv/linux/Makefile
|
||||
+++ libc/sysdeps/unix/sysv/linux/Makefile
|
||||
@@ -11,6 +11,10 @@ ifeq ($(subdir),malloc)
|
||||
CFLAGS-malloc.c += -DMORECORE_CLEARS=2
|
||||
endif
|
||||
|
||||
+ifeq ($(subdir),socket)
|
||||
+sysdep_routines += internal_accept4
|
||||
+endif
|
||||
+
|
||||
ifeq ($(subdir),misc)
|
||||
sysdep_routines += sysctl clone llseek umount umount2 readahead \
|
||||
setfsuid setfsgid makedev epoll_pwait signalfd \
|
||||
--- libc/sysdeps/unix/sysv/linux/accept4.c
|
||||
+++ libc/sysdeps/unix/sysv/linux/accept4.c
|
||||
@@ -23,8 +23,7 @@
|
||||
|
||||
#include <sysdep-cancel.h>
|
||||
#include <sys/syscall.h>
|
||||
-
|
||||
-#define __NR_accept4 288
|
||||
+#include <kernel-features.h>
|
||||
|
||||
|
||||
#ifdef __NR_accept4
|
||||
@@ -43,6 +42,50 @@ accept4 (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len, int flags)
|
||||
|
||||
return result;
|
||||
}
|
||||
+#elif defined __NR_socketcall
|
||||
+# ifndef __ASSUME_ACCEPT4
|
||||
+extern int __internal_accept4 (int fd, __SOCKADDR_ARG addr,
|
||||
+ socklen_t *addr_len, int flags)
|
||||
+ attribute_hidden;
|
||||
+
|
||||
+static int have_accept4;
|
||||
+
|
||||
+int
|
||||
+accept4 (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len, int flags)
|
||||
+{
|
||||
+ if (__builtin_expect (have_accept4 >= 0, 1))
|
||||
+ {
|
||||
+ int ret = __internal_accept4 (fd, addr, addr_len, flags);
|
||||
+ /* The kernel returns -EINVAL for unknown socket operations.
|
||||
+ We need to convert that error to an ENOSYS error. */
|
||||
+ if (__builtin_expect (ret < 0, 0)
|
||||
+ && have_accept4 == 0
|
||||
+ && errno == EINVAL)
|
||||
+ {
|
||||
+ /* Try another call, this time with the FLAGS parameter
|
||||
+ cleared and an invalid file descriptor. This call will not
|
||||
+ cause any harm and it will return immediately. */
|
||||
+ ret = __internal_accept4 (-1, addr, addr_len, 0);
|
||||
+ if (errno == EINVAL)
|
||||
+ {
|
||||
+ have_accept4 = -1;
|
||||
+ __set_errno (ENOSYS);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ have_accept4 = 1;
|
||||
+ __set_errno (EINVAL);
|
||||
+ }
|
||||
+ return -1;
|
||||
+ }
|
||||
+ return ret;
|
||||
+ }
|
||||
+ __set_errno (ENOSYS);
|
||||
+ return -1;
|
||||
+}
|
||||
+# else
|
||||
+/* When __ASSUME_ACCEPT4 accept4 is defined in internal_accept4.S. */
|
||||
+# endif
|
||||
#else
|
||||
int
|
||||
accept4 (int fd, __SOCKADDR_ARG addr, socklen_t *addr_len, int flags)
|
||||
--- libc/sysdeps/unix/sysv/linux/i386/accept4.S
|
||||
+++ libc/sysdeps/unix/sysv/linux/i386/accept4.S
|
||||
@@ -24,10 +24,6 @@
|
||||
#define EINVAL 22
|
||||
#define ENOSYS 38
|
||||
|
||||
-#ifndef SOCKOP_accept4
|
||||
-# define SOCKOP_accept4 18
|
||||
-#endif
|
||||
-
|
||||
#ifdef __ASSUME_ACCEPT4
|
||||
# define errlabel SYSCALL_ERROR_LABEL
|
||||
#else
|
||||
--- libc/sysdeps/unix/sysv/linux/internal_accept4.S
|
||||
+++ libc/sysdeps/unix/sysv/linux/internal_accept4.S
|
||||
@@ -0,0 +1,14 @@
|
||||
+#include <kernel-features.h>
|
||||
+#include <sys/syscall.h>
|
||||
+#if !defined __NR_accept4 && defined __NR_socketcall
|
||||
+# define socket accept4
|
||||
+# ifdef __ASSUME_ACCEPT4
|
||||
+# define __socket accept4
|
||||
+# else
|
||||
+# define __socket __internal_accept4
|
||||
+# endif
|
||||
+# define NARGS 4
|
||||
+# define NEED_CANCELLATION
|
||||
+# define NO_WEAK_ALIAS
|
||||
+# include <socket.S>
|
||||
+#endif
|
||||
--- libc/sysdeps/unix/sysv/linux/kernel-features.h
|
||||
+++ libc/sysdeps/unix/sysv/linux/kernel-features.h
|
||||
@@ -521,7 +521,7 @@
|
||||
/* Support for the accept4 syscall was added in 2.6.28. */
|
||||
#if __LINUX_KERNEL_VERSION >= 0x02061c \
|
||||
&& (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
|
||||
- || defined __ia64__ || defined __sparc__ || defined __s390__)
|
||||
+ || defined __sparc__ || defined __s390__)
|
||||
# define __ASSUME_ACCEPT4 1
|
||||
#endif
|
||||
|
||||
--- libc/sysdeps/unix/sysv/linux/socketcall.h
|
||||
+++ libc/sysdeps/unix/sysv/linux/socketcall.h
|
||||
@@ -43,6 +43,6 @@
|
||||
#define SOCKOP_getsockopt 15
|
||||
#define SOCKOP_sendmsg 16
|
||||
#define SOCKOP_recvmsg 17
|
||||
-#define SOCKOP_paccept 18
|
||||
+#define SOCKOP_accept4 18
|
||||
|
||||
#endif /* sys/socketcall.h */
|
38
glibc-bz10162.patch
Normal file
38
glibc-bz10162.patch
Normal file
@ -0,0 +1,38 @@
|
||||
2009-05-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
[BZ #10162]
|
||||
* sysdeps/ia64/memchr.S: Use speculative load.
|
||||
|
||||
--- libc/sysdeps/ia64/memchr.S
|
||||
+++ libc/sysdeps/ia64/memchr.S
|
||||
@@ -96,7 +96,8 @@ ENTRY(__memchr)
|
||||
mov pr.rot = 1 << 16 ;;
|
||||
.l2:
|
||||
(p[0]) mov addr[0] = ret0
|
||||
-(p[0]) ld8 value[0] = [ret0], 8
|
||||
+(p[0]) ld8.s value[0] = [ret0], 8 // speculative load
|
||||
+(p[MEMLAT]) chk.s value[MEMLAT], .recovery // check and recovery
|
||||
(p[MEMLAT]) xor aux[0] = value[MEMLAT], chrx8
|
||||
(p[MEMLAT+1]) czx1.r poschr[0] = aux[1]
|
||||
(p[MEMLAT+2]) cmp.ne p7, p0 = 8, poschr[1]
|
||||
@@ -124,6 +125,20 @@ ENTRY(__memchr)
|
||||
mov ar.lc = saved_lc
|
||||
br.ret.sptk.many b0
|
||||
|
||||
+.recovery:
|
||||
+ adds ret0 = -((MEMLAT + 1) * 8), ret0;;
|
||||
+(p[MEMLAT+1]) add ret0 = -8, ret0;;
|
||||
+(p[MEMLAT+2]) add ret0 = -8, ret0;;
|
||||
+.l4:
|
||||
+ mov addr[MEMLAT+2] = ret0
|
||||
+ 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]
|
||||
+(p7) br.cond.spnt .foundit;;
|
||||
+ adds ret0 = 8, ret0 // load the next unchecked 8byte
|
||||
+ br.sptk .l4;;
|
||||
+
|
||||
END(__memchr)
|
||||
|
||||
weak_alias (__memchr, memchr)
|
57
glibc-nscd-avc_destroy.patch
Normal file
57
glibc-nscd-avc_destroy.patch
Normal file
@ -0,0 +1,57 @@
|
||||
2009-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* nscd/selinux.c (nscd_avc_destroy): Removed.
|
||||
* nscd/selinux.h (nscd_avc_destroy): Likewise.
|
||||
* nscd/nscd.c (termination_handler): Don't call
|
||||
nscd_avc_destroy.
|
||||
|
||||
--- libc/nscd/nscd.c
|
||||
+++ libc/nscd/nscd.c
|
||||
@@ -488,10 +488,6 @@ termination_handler (int signum)
|
||||
msync (dbs[cnt].head, dbs[cnt].memsize, MS_ASYNC);
|
||||
}
|
||||
|
||||
- /* Shutdown the SELinux AVC. */
|
||||
- if (selinux_enabled)
|
||||
- nscd_avc_destroy ();
|
||||
-
|
||||
_exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
--- libc/nscd/selinux.c
|
||||
+++ libc/nscd/selinux.c
|
||||
@@ -418,15 +418,4 @@ nscd_avc_print_stats (struct avc_cache_stats *cstats)
|
||||
cstats->cav_probes, cstats->cav_misses);
|
||||
}
|
||||
|
||||
-
|
||||
-/* Clean up the AVC before exiting. */
|
||||
-void
|
||||
-nscd_avc_destroy (void)
|
||||
-{
|
||||
- avc_destroy ();
|
||||
-#ifdef HAVE_LIBAUDIT
|
||||
- audit_close (audit_fd);
|
||||
-#endif
|
||||
-}
|
||||
-
|
||||
#endif /* HAVE_SELINUX */
|
||||
--- libc/nscd/selinux.h
|
||||
+++ libc/nscd/selinux.h
|
||||
@@ -35,8 +35,6 @@ struct avc_cache_stats;
|
||||
|
||||
/* Initialize the userspace AVC. */
|
||||
extern void nscd_avc_init (void);
|
||||
-/* Destroy the userspace AVC. */
|
||||
-extern void nscd_avc_destroy (void);
|
||||
/* Determine if we are running on an SELinux kernel. */
|
||||
extern void nscd_selinux_enabled (int *selinux_enabled);
|
||||
/* Check if the client has permission for the request type. */
|
||||
@@ -55,7 +53,6 @@ extern void install_real_capabilities (cap_t new_caps);
|
||||
#else
|
||||
# define selinux_enabled 0
|
||||
# define nscd_avc_init() (void) 0
|
||||
-# define nscd_avc_destroy() (void) 0
|
||||
# define nscd_selinux_enabled(selinux_enabled) (void) 0
|
||||
# define nscd_request_avc_has_perm(fd, req) 0
|
||||
# define nscd_avc_cache_stats(cstats) (void) 0
|
228
glibc-nscd-cache-search.patch
Normal file
228
glibc-nscd-cache-search.patch
Normal file
@ -0,0 +1,228 @@
|
||||
2009-05-18 Jakub Jelinek <jakub@redhat.com>
|
||||
Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c (MINIMUM_HASHENTRY_SIZE): Define.
|
||||
(__nscd_cache_search): Assume each entry in the
|
||||
hash chain needs one hashentry and half of datahead. Use
|
||||
MINIMUM_HASHENTRY_SIZE instead of sizeof(hashentry).
|
||||
|
||||
2009-05-16 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c (__nscd_cache_search): Fix exit condition in last
|
||||
patch.
|
||||
|
||||
2009-05-15 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c (__nscd_cache_search): Introduce loop counter.
|
||||
Use it if we absolutely cannot reach any more correct list elements
|
||||
because that many do not fit into the currently mapped database.
|
||||
|
||||
2009-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* nscd/nscd_helper.c: Include stddef.h.
|
||||
(__nscd_cache_search): Add datalen argument. Use atomic_forced_read
|
||||
in a couple of places. Return NULL if trail is not less than
|
||||
datasize, don't consider dataheads with length smaller than
|
||||
offsetof (struct datahead, data) + datalen.
|
||||
* nscd/nscd_client.h (__nscd_cache_search): Adjust prototype.
|
||||
* nscd/nscd_gethst_r.c (nscd_gethst_r): Adjust callers.
|
||||
* nscd/nscd_getpw_r.c (nscd_getpw_r): Likewise.
|
||||
* nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
|
||||
* nscd/nscd_getai.c (__nscd_getai): Likewise.
|
||||
* nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise.
|
||||
* nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise.
|
||||
|
||||
--- libc/nscd/nscd-client.h
|
||||
+++ libc/nscd/nscd-client.h
|
||||
@@ -44,7 +44,7 @@
|
||||
/* Path for the configuration file. */
|
||||
#define _PATH_NSCDCONF "/etc/nscd.conf"
|
||||
|
||||
-/* Maximu allowed length for the key. */
|
||||
+/* Maximum allowed length for the key. */
|
||||
#define MAXKEYLEN 1024
|
||||
|
||||
|
||||
@@ -329,7 +329,8 @@ static inline int __nscd_drop_map_ref (struct mapped_database *map,
|
||||
extern struct datahead *__nscd_cache_search (request_type type,
|
||||
const char *key,
|
||||
size_t keylen,
|
||||
- const struct mapped_database *mapped);
|
||||
+ const struct mapped_database *mapped,
|
||||
+ size_t datalen);
|
||||
|
||||
/* Wrappers around read, readv and write that only read/write less than LEN
|
||||
bytes on error or EOF. */
|
||||
--- libc/nscd/nscd_getai.c
|
||||
+++ libc/nscd/nscd_getai.c
|
||||
@@ -75,7 +76,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
struct datahead *found = __nscd_cache_search (GETAI, key, keylen,
|
||||
- mapped);
|
||||
+ mapped, sizeof ai_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
respdata = (char *) (&found->data[0].aidata + 1);
|
||||
--- libc/nscd/nscd_getgr_r.c
|
||||
+++ libc/nscd/nscd_getgr_r.c
|
||||
@@ -107,7 +107,8 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
|
||||
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
- struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
+ struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
+ sizeof gr_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
len = (const uint32_t *) (&found->data[0].grdata + 1);
|
||||
--- libc/nscd/nscd_gethst_r.c
|
||||
+++ libc/nscd/nscd_gethst_r.c
|
||||
@@ -137,7 +138,8 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
/* No const qualifier, as it can change during garbage collection. */
|
||||
- struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
+ struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
+ sizeof hst_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
h_name = (char *) (&found->data[0].hstdata + 1);
|
||||
--- libc/nscd/nscd_getpw_r.c
|
||||
+++ libc/nscd/nscd_getpw_r.c
|
||||
@@ -104,7 +104,8 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
|
||||
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
- struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
+ struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
+ sizeof pw_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
pw_name = (const char *) (&found->data[0].pwdata + 1);
|
||||
--- libc/nscd/nscd_getserv_r.c
|
||||
+++ libc/nscd/nscd_getserv_r.c
|
||||
@@ -104,7 +104,8 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
|
||||
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
- struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
|
||||
+ struct datahead *found = __nscd_cache_search (type, key, keylen, mapped,
|
||||
+ sizeof serv_resp);
|
||||
|
||||
if (found != NULL)
|
||||
{
|
||||
--- libc/nscd/nscd_helper.c
|
||||
+++ libc/nscd/nscd_helper.c
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdbool.h>
|
||||
+#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
@@ -467,23 +468,36 @@ __nscd_get_map_ref (request_type type, const char *name,
|
||||
}
|
||||
|
||||
|
||||
+/* Using sizeof (hashentry) is not always correct to determine the size of
|
||||
+ the data structure as found in the nscd cache. The program could be
|
||||
+ a 64-bit process and nscd could be a 32-bit process. In this case
|
||||
+ sizeof (hashentry) would overestimate the size. The following is
|
||||
+ the minimum size of such an entry, good enough for our tests here. */
|
||||
+#define MINIMUM_HASHENTRY_SIZE \
|
||||
+ (offsetof (struct hashentry, dellist) + sizeof (int32_t))
|
||||
+
|
||||
+
|
||||
/* Don't return const struct datahead *, as eventhough the record
|
||||
is normally constant, it can change arbitrarily during nscd
|
||||
garbage collection. */
|
||||
struct datahead *
|
||||
__nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
- const struct mapped_database *mapped)
|
||||
+ const struct mapped_database *mapped, size_t datalen)
|
||||
{
|
||||
unsigned long int hash = __nis_hash (key, keylen) % mapped->head->module;
|
||||
size_t datasize = mapped->datasize;
|
||||
|
||||
ref_t trail = mapped->head->array[hash];
|
||||
+ trail = atomic_forced_read (trail);
|
||||
ref_t work = trail;
|
||||
+ size_t loop_cnt = datasize / (MINIMUM_HASHENTRY_SIZE
|
||||
+ + offsetof (struct datahead, data) / 2);
|
||||
int tick = 0;
|
||||
|
||||
- while (work != ENDREF && work + sizeof (struct hashentry) <= datasize)
|
||||
+ while (work != ENDREF && work + MINIMUM_HASHENTRY_SIZE <= datasize)
|
||||
{
|
||||
struct hashentry *here = (struct hashentry *) (mapped->data + work);
|
||||
+ ref_t here_key, here_packet;
|
||||
|
||||
#ifndef _STRING_ARCH_unaligned
|
||||
/* Although during garbage collection when moving struct hashentry
|
||||
@@ -498,13 +512,14 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
|
||||
if (type == here->type
|
||||
&& keylen == here->len
|
||||
- && here->key + keylen <= datasize
|
||||
- && memcmp (key, mapped->data + here->key, keylen) == 0
|
||||
- && here->packet + sizeof (struct datahead) <= datasize)
|
||||
+ && (here_key = atomic_forced_read (here->key)) + keylen <= datasize
|
||||
+ && memcmp (key, mapped->data + here_key, keylen) == 0
|
||||
+ && ((here_packet = atomic_forced_read (here->packet))
|
||||
+ + sizeof (struct datahead) <= datasize))
|
||||
{
|
||||
/* We found the entry. Increment the appropriate counter. */
|
||||
struct datahead *dh
|
||||
- = (struct datahead *) (mapped->data + here->packet);
|
||||
+ = (struct datahead *) (mapped->data + here_packet);
|
||||
|
||||
#ifndef _STRING_ARCH_unaligned
|
||||
if ((uintptr_t) dh & (__alignof__ (*dh) - 1))
|
||||
@@ -513,14 +528,17 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
|
||||
/* See whether we must ignore the entry or whether something
|
||||
is wrong because garbage collection is in progress. */
|
||||
- if (dh->usable && here->packet + dh->allocsize <= datasize)
|
||||
+ if (dh->usable
|
||||
+ && here_packet + dh->allocsize <= datasize
|
||||
+ && (here_packet + offsetof (struct datahead, data) + datalen
|
||||
+ <= datasize))
|
||||
return dh;
|
||||
}
|
||||
|
||||
- work = here->next;
|
||||
+ work = atomic_forced_read (here->next);
|
||||
/* Prevent endless loops. This should never happen but perhaps
|
||||
the database got corrupted, accidentally or deliberately. */
|
||||
- if (work == trail)
|
||||
+ if (work == trail || loop_cnt-- == 0)
|
||||
break;
|
||||
if (tick)
|
||||
{
|
||||
@@ -532,7 +550,11 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
|
||||
if ((uintptr_t) trailelem & (__alignof__ (*trailelem) - 1))
|
||||
return NULL;
|
||||
#endif
|
||||
- trail = trailelem->next;
|
||||
+
|
||||
+ if (trail + MINIMUM_HASHENTRY_SIZE > datasize)
|
||||
+ return NULL;
|
||||
+
|
||||
+ trail = atomic_forced_read (trailelem->next);
|
||||
}
|
||||
tick = 1 - tick;
|
||||
}
|
||||
--- libc/nscd/nscd_initgroups.c
|
||||
+++ libc/nscd/nscd_initgroups.c
|
||||
@@ -55,7 +55,8 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
|
||||
if (mapped != NO_MAPPING)
|
||||
{
|
||||
struct datahead *found = __nscd_cache_search (INITGROUPS, user,
|
||||
- userlen, mapped);
|
||||
+ userlen, mapped,
|
||||
+ sizeof initgr_resp);
|
||||
if (found != NULL)
|
||||
{
|
||||
respdata = (char *) (&found->data[0].initgrdata + 1);
|
101
glibc-ppc-math-errno.patch
Normal file
101
glibc-ppc-math-errno.patch
Normal file
@ -0,0 +1,101 @@
|
||||
2009-05-22 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_sinl.c: Set errno for ±Inf.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_cosl.c: Likewise.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_tanl.c: Likewise.
|
||||
* sysdeps/ieee754/ldbl-128ibm/s_expm1l.c: Set errno for overflow.
|
||||
|
||||
--- libc/sysdeps/ieee754/ldbl-128ibm/s_cosl.c
|
||||
+++ libc/sysdeps/ieee754/ldbl-128ibm/s_cosl.c
|
||||
@@ -44,6 +44,7 @@
|
||||
* TRIG(x) returns trig(x) nearly rounded
|
||||
*/
|
||||
|
||||
+#include <errno.h>
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
#include <math_ldbl_opt.h>
|
||||
@@ -67,9 +68,11 @@
|
||||
return __kernel_cosl(x,z);
|
||||
|
||||
/* cos(Inf or NaN) is NaN */
|
||||
- else if (ix>=0x7ff0000000000000LL)
|
||||
+ else if (ix>=0x7ff0000000000000LL) {
|
||||
+ if (ix == 0x7ff0000000000000LL)
|
||||
+ __set_errno (EDOM);
|
||||
return x-x;
|
||||
-
|
||||
+ }
|
||||
/* argument reduction needed */
|
||||
else {
|
||||
n = __ieee754_rem_pio2l(x,y);
|
||||
--- libc/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c
|
||||
+++ libc/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c
|
||||
@@ -51,6 +51,7 @@
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
+#include <errno.h>
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
#include <math_ldbl_opt.h>
|
||||
@@ -120,7 +121,10 @@ __expm1l (long double x)
|
||||
|
||||
/* Overflow. */
|
||||
if (x > maxlog)
|
||||
- return (big * big);
|
||||
+ {
|
||||
+ __set_errno (ERANGE);
|
||||
+ return (big * big);
|
||||
+ }
|
||||
|
||||
/* Minimum value. */
|
||||
if (x < minarg)
|
||||
--- libc/sysdeps/ieee754/ldbl-128ibm/s_sinl.c
|
||||
+++ libc/sysdeps/ieee754/ldbl-128ibm/s_sinl.c
|
||||
@@ -44,6 +44,7 @@
|
||||
* TRIG(x) returns trig(x) nearly rounded
|
||||
*/
|
||||
|
||||
+#include <errno.h>
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
#include <math_ldbl_opt.h>
|
||||
@@ -67,8 +68,11 @@
|
||||
return __kernel_sinl(x,z,0);
|
||||
|
||||
/* sin(Inf or NaN) is NaN */
|
||||
- else if (ix>=0x7ff0000000000000LL) return x-x;
|
||||
-
|
||||
+ else if (ix>=0x7ff0000000000000LL) {
|
||||
+ if (ix == 0x7ff0000000000000LL)
|
||||
+ __set_errno (EDOM);
|
||||
+ return x-x;
|
||||
+ }
|
||||
/* argument reduction needed */
|
||||
else {
|
||||
n = __ieee754_rem_pio2l(x,y);
|
||||
--- libc/sysdeps/ieee754/ldbl-128ibm/s_tanl.c
|
||||
+++ libc/sysdeps/ieee754/ldbl-128ibm/s_tanl.c
|
||||
@@ -44,6 +44,7 @@
|
||||
* TRIG(x) returns trig(x) nearly rounded
|
||||
*/
|
||||
|
||||
+#include <errno.h>
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
#include <math_ldbl_opt.h>
|
||||
@@ -66,8 +67,11 @@
|
||||
if(ix <= 0x3fe921fb54442d10LL) return __kernel_tanl(x,z,1);
|
||||
|
||||
/* tanl(Inf or NaN) is NaN */
|
||||
- else if (ix>=0x7ff0000000000000LL) return x-x; /* NaN */
|
||||
-
|
||||
+ else if (ix>=0x7ff0000000000000LL) {
|
||||
+ if (ix == 0x7ff0000000000000LL)
|
||||
+ __set_errno (EDOM);
|
||||
+ return x-x; /* NaN */
|
||||
+ }
|
||||
/* argument reduction needed */
|
||||
else {
|
||||
n = __ieee754_rem_pio2l(x,y);
|
6523
glibc-sunrpc-license.patch
Normal file
6523
glibc-sunrpc-license.patch
Normal file
File diff suppressed because it is too large
Load Diff
23
glibc.spec
23
glibc.spec
@ -23,7 +23,7 @@
|
||||
Summary: The GNU libc libraries
|
||||
Name: glibc
|
||||
Version: 2.10.1
|
||||
Release: 1
|
||||
Release: 2
|
||||
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
|
||||
# Things that are linked directly into dynamically linked programs
|
||||
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
|
||||
@ -41,6 +41,12 @@ Source2: %(echo %{glibcsrcdir} | sed s/glibc-/glibc-libidn-/).tar.bz2
|
||||
Source3: %{glibcname}-fedora-%{glibcdate}.tar.bz2
|
||||
Patch0: %{glibcname}-fedora.patch
|
||||
Patch1: %{name}-ia64-lib64.patch
|
||||
Patch2: glibc-accept4.patch
|
||||
Patch3: glibc-bz10162.patch
|
||||
Patch4: glibc-nscd-avc_destroy.patch
|
||||
Patch5: glibc-nscd-cache-search.patch
|
||||
Patch6: glibc-ppc-math-errno.patch
|
||||
Patch7: glibc-sunrpc-license.patch
|
||||
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
Obsoletes: glibc-profile < 2.4
|
||||
Provides: ldconfig
|
||||
@ -232,6 +238,12 @@ package or when debugging this package.
|
||||
%patch1 -p1
|
||||
%endif
|
||||
%endif
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
|
||||
# A lot of programs still misuse memcpy when they have to use
|
||||
# memmove. The memcpy implementation below is not tolerant at
|
||||
@ -1013,6 +1025,15 @@ rm -f *.filelist*
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Fri May 22 2009 Jakub Jelinek <jakub@redhat.com> 2.10.1-2
|
||||
- fix accept4 on architectures other than i?86/x86_64
|
||||
- robustify nscd client code during server GC
|
||||
- fix up nscd segfaults during daemon shutdown
|
||||
- fix memchr on ia64 (BZ#10162)
|
||||
- replace the Sun RPC license with the BSD license, with the explicit
|
||||
permission of Sun Microsystems
|
||||
- fix up powerpc long double errno reporting
|
||||
|
||||
* Sun May 10 2009 Jakub Jelinek <jakub@redhat.com> 2.10.1-1
|
||||
- fix up getsgent_r and getsgnam_r exports on i?86 and ppc
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user