[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r10172 - in /fsf/trunk/libc: ./ crypt/ malloc/ posix/ sysdeps/unix/ sysdeps/unix/sysv/linux/ sysdeps/unix/sysv/linux/i386/
- To: commits@xxxxxxxxxx
- Subject: [commits] r10172 - in /fsf/trunk/libc: ./ crypt/ malloc/ posix/ sysdeps/unix/ sysdeps/unix/sysv/linux/ sysdeps/unix/sysv/linux/i386/
- From: eglibc@xxxxxxxxxx
- Date: Sun, 04 Apr 2010 07:04:18 -0000
Author: eglibc
Date: Sun Apr 4 00:04:16 2010
New Revision: 10172
Log:
Import glibc-mainline for 2010-04-04
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/crypt/crypt_util.c
fsf/trunk/libc/malloc/malloc.c
fsf/trunk/libc/posix/gai.conf
fsf/trunk/libc/sysdeps/unix/readdir_r.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/getsysstats.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/readdir64_r.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/ifaddrs.c
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Sun Apr 4 00:04:16 2010
@@ -1,3 +1,39 @@
+2010-04-03 Ulrich Drepper <drepper@xxxxxxxxxx>
+
+ [BZ #11333]
+ * sysdeps/unix/readdir_r.c (__READDIR_R): Add support for platforms
+ which include unnecessary padding in d_reclen.
+ * sysdeps/unix/sysv/linux/i386/readdir64_r.c: Select work-around for
+ unnecessary padding.
+
+ [BZ #11387]
+ * sysdeps/unix/sysv/linux/ifaddrs.c (map_newlin): Don't abort on
+ unknown interface, return -1.
+ (getifaddrs_internal): Rename from getifaddrs. Handle errors in
+ map_newlink be returning -EAGAIN.
+ (getifaddrs): If -EAGAIN is returned from getifaddrs_internal try
+ again.
+
+2010-03-25 Ryan S. Arnold <rsa@xxxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/getsysstats.c (next_line): Remove
+ redundant and incorrect else block which overwrites current line
+ with the partial next line.
+
+2010-04-03 Ulrich Drepper <drepper@xxxxxxxxxx>
+
+ [BZ #11438]
+ * posix/gai.conf: Document problems with IPv4 site-local addresses and
+ NATs.
+
+ [BZ #11449]
+ * crypt/crypt_util.c (__init_des_r): Add memory barrier before setting
+ small_tables_initialized.
+
+ * malloc/malloc.c (_int_free): Add one more sanity check for fastbins.
+
+ * malloc/malloc.c (set_max_fast): Fix computation of the value.
+
2010-03-30 David S. Miller <davem@xxxxxxxxxxxxx>
* sysdeps/unix/sysv/linux/mmap64.c (__mmap64): Fix
Modified: fsf/trunk/libc/crypt/crypt_util.c
==============================================================================
--- fsf/trunk/libc/crypt/crypt_util.c (original)
+++ fsf/trunk/libc/crypt/crypt_util.c Sun Apr 4 00:04:16 2010
@@ -1,7 +1,7 @@
/*
* UFC-crypt: ultra fast crypt(3) implementation
*
- * Copyright (C) 1991, 92, 93, 96, 97, 98, 2000 Free Software Foundation, Inc.
+ * Copyright (C) 1991-1993,1996-1998,2000,2010 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -27,6 +27,7 @@
#ifdef DEBUG
#include <stdio.h>
#endif
+#include <atomic.h>
#include <string.h>
#ifndef STATIC
@@ -114,53 +115,53 @@
* The sboxes
*/
static const int sbox[8][4][16]= {
- { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
- { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },
- { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },
- { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 }
- },
-
- { { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 },
- { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },
- { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },
- { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 }
- },
-
- { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },
- { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },
- { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },
- { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 }
- },
-
- { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },
- { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },
- { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },
- { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 }
- },
-
- { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 },
- { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 },
- { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 },
- { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 }
- },
-
- { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 },
- { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 },
- { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 },
- { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 }
- },
-
- { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 },
- { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 },
- { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 },
- { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 }
- },
-
- { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 },
- { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 },
- { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 },
- { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 }
- }
+ { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
+ { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },
+ { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },
+ { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 }
+ },
+
+ { { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 },
+ { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },
+ { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },
+ { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 }
+ },
+
+ { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },
+ { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },
+ { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },
+ { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 }
+ },
+
+ { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },
+ { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },
+ { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },
+ { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 }
+ },
+
+ { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 },
+ { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 },
+ { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 },
+ { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 }
+ },
+
+ { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 },
+ { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 },
+ { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 },
+ { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 }
+ },
+
+ { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 },
+ { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 },
+ { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 },
+ { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 }
+ },
+
+ { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 },
+ { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 },
+ { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 },
+ { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 }
+ }
};
/*
@@ -468,6 +469,7 @@
efp[comes_from_word][word_value][o_long] |= mask2;
}
}
+ atomic_write_barrier ();
small_tables_initialized = 1;
#ifdef __GNU_LIBRARY__
small_tables_done:
Modified: fsf/trunk/libc/malloc/malloc.c
==============================================================================
--- fsf/trunk/libc/malloc/malloc.c (original)
+++ fsf/trunk/libc/malloc/malloc.c Sun Apr 4 00:04:16 2010
@@ -2350,7 +2350,8 @@
*/
#define set_max_fast(s) \
- global_max_fast = ((s) == 0)? SMALLBIN_WIDTH: request2size(s)
+ global_max_fast = (((s) == 0) \
+ ? SMALLBIN_WIDTH: ((s + SIZE_SZ) & ~MALLOC_ALIGN_MASK))
#define get_max_fast() global_max_fast
@@ -4851,7 +4852,8 @@
free_perturb (chunk2mem(p), size - SIZE_SZ);
set_fastchunks(av);
- fb = &fastbin (av, fastbin_index(size));
+ unsigned int idx = fastbin_index(size);
+ fb = &fastbin (av, idx);
#ifdef ATOMIC_FASTBINS
mchunkptr fd;
@@ -4865,6 +4867,12 @@
errstr = "double free or corruption (fasttop)";
goto errout;
}
+ if (old != NULL
+ && __builtin_expect (fastbin_index(chunksize(old)) != idx, 0))
+ {
+ errstr = "invalid fastbin entry (free)";
+ goto errout;
+ }
p->fd = fd = old;
}
while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd);
@@ -4874,6 +4882,12 @@
if (__builtin_expect (*fb == p, 0))
{
errstr = "double free or corruption (fasttop)";
+ goto errout;
+ }
+ if (*fb != NULL
+ && __builtin_expect (fastbin_index(chunksize(*fb)) != idx, 0))
+ {
+ errstr = "invalid fastbin entry (free)";
goto errout;
}
Modified: fsf/trunk/libc/posix/gai.conf
==============================================================================
--- fsf/trunk/libc/posix/gai.conf (original)
+++ fsf/trunk/libc/posix/gai.conf Sun Apr 4 00:04:16 2010
@@ -66,3 +66,12 @@
#scopev4 ::ffff:172.16.0.0/108 5
#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:
+#
+#scopev4 ::ffff:169.254.0.0/112 2
+#scopev4 ::ffff:127.0.0.0/104 2
+#scopev4 ::ffff:0.0.0.0/96 14
Modified: fsf/trunk/libc/sysdeps/unix/readdir_r.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/readdir_r.c (original)
+++ fsf/trunk/libc/sysdeps/unix/readdir_r.c Sun Apr 4 00:04:16 2010
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000,02
+/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000,02,10
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -113,7 +113,17 @@
while (dp->d_ino == 0);
if (dp != NULL)
- *result = memcpy (entry, dp, reclen);
+ {
+#ifdef GETDENTS_64BIT_ALIGNED
+ /* The d_reclen value might include padding which is not part of
+ the DIRENT_TYPE data structure. */
+ reclen = MIN (reclen, sizeof (DIRENT_TYPE));
+#endif
+ *result = memcpy (entry, dp, reclen);
+#ifdef GETDENTS_64BIT_ALIGNED
+ entry->d_reclen = reclen;
+#endif
+ }
else
*result = NULL;
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/getsysstats.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/getsysstats.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/getsysstats.c Sun Apr 4 00:04:16 2010
@@ -1,5 +1,5 @@
/* Determine various system internal values, Linux version.
- Copyright (C) 1996-2003, 2006, 2007, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1996-2003,2006,2007,2009,2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1996.
@@ -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);
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/readdir64_r.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/readdir64_r.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/readdir64_r.c Sun Apr 4 00:04:16 2010
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2004, 2010 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
@@ -19,6 +19,7 @@
#define __READDIR_R __readdir64_r
#define __GETDENTS __getdents64
#define DIRENT_TYPE struct dirent64
+#define GETDENTS_64BIT_ALIGNED 1
#include <sysdeps/unix/readdir_r.c>
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/ifaddrs.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/ifaddrs.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/ifaddrs.c Sun Apr 4 00:04:16 2010
@@ -1,5 +1,5 @@
/* getifaddrs -- get names and addresses of all network interfaces
- Copyright (C) 2003-2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2003-2008, 2009, 2010 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
@@ -315,17 +315,19 @@
else if (map[i] == index)
return i;
}
- /* This should never be reached. If this will be reached, we have
- a very big problem. */
- abort ();
+
+ /* This means interfaces changed inbetween the reading of the
+ RTM_GETLINK and RTM_GETADDR information. We have to repeat
+ everything. */
+ return -1;
}
/* Create a linked list of `struct ifaddrs' structures, one for each
network interface on the host machine. If successful, store the
list in *IFAP and return 0. On errors, return -1 and set `errno'. */
-int
-getifaddrs (struct ifaddrs **ifap)
+static int
+getifaddrs_internal (struct ifaddrs **ifap)
{
struct netlink_handle nh = { 0, 0, 0, NULL, NULL };
struct netlink_res *nlp;
@@ -481,6 +483,13 @@
kernel. */
ifa_index = map_newlink (ifim->ifi_index - 1, ifas,
map_newlink_data, newlink);
+ if (__builtin_expect (ifa_index == -1, 0))
+ {
+ try_again:
+ result = -EAGAIN;
+ free (ifas);
+ goto exit_free;
+ }
ifas[ifa_index].ifa.ifa_flags = ifim->ifi_flags;
while (RTA_OK (rta, rtasize))
@@ -565,9 +574,11 @@
that we have holes in the interface part of the list,
but we always have already the interface for this address. */
ifa_index = newlink + newaddr_idx;
- ifas[ifa_index].ifa.ifa_flags
- = ifas[map_newlink (ifam->ifa_index - 1, ifas,
- map_newlink_data, newlink)].ifa.ifa_flags;
+ int idx = map_newlink (ifam->ifa_index - 1, ifas,
+ map_newlink_data, newlink);
+ if (__builtin_expect (idx == -1, 0))
+ goto try_again;
+ ifas[ifa_index].ifa.ifa_flags = ifas[idx].ifa.ifa_flags;
if (ifa_index > 0)
ifas[ifa_index - 1].ifa.ifa_next = &ifas[ifa_index].ifa;
++newaddr_idx;
@@ -747,9 +758,13 @@
/* If we didn't get the interface name with the
address, use the name from the interface entry. */
if (ifas[ifa_index].ifa.ifa_name == NULL)
- ifas[ifa_index].ifa.ifa_name
- = ifas[map_newlink (ifam->ifa_index - 1, ifas,
- map_newlink_data, newlink)].ifa.ifa_name;
+ {
+ int idx = map_newlink (ifam->ifa_index - 1, ifas,
+ map_newlink_data, newlink);
+ if (__builtin_expect (idx == -1, 0))
+ goto try_again;
+ ifas[ifa_index].ifa.ifa_name = ifas[idx].ifa.ifa_name;
+ }
/* Calculate the netmask. */
if (ifas[ifa_index].ifa.ifa_addr
@@ -826,6 +841,22 @@
return result;
}
+
+
+/* Create a linked list of `struct ifaddrs' structures, one for each
+ network interface on the host machine. If successful, store the
+ list in *IFAP and return 0. On errors, return -1 and set `errno'. */
+int
+getifaddrs (struct ifaddrs **ifap)
+{
+ int res;
+
+ do
+ res = getifaddrs_internal (ifap);
+ while (res == -EAGAIN);
+
+ return res;
+}
libc_hidden_def (getifaddrs)