diff options
Diffstat (limited to 'source/l/glibc')
-rw-r--r-- | source/l/glibc/doinst.sh-glibc | 36 | ||||
-rw-r--r-- | source/l/glibc/doinst.sh-glibc-solibs | 36 | ||||
-rw-r--r-- | source/l/glibc/glibc-2.14-reexport-rpc-interface.patch | 26 | ||||
-rw-r--r-- | source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch | 27 | ||||
-rw-r--r-- | source/l/glibc/glibc-2.14.1-fixes-1.patch | 159 | ||||
-rw-r--r-- | source/l/glibc/glibc-2.15-revert-c5a0802a.diff | 226 | ||||
-rw-r--r-- | source/l/glibc/glibc-2.15.nscd-race-fix.diff | 47 | ||||
-rwxr-xr-x | source/l/glibc/glibc.SlackBuild | 34 | ||||
-rw-r--r-- | source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff | 322 | ||||
-rw-r--r-- | source/l/glibc/glibc.strtod.CVE-2012-3480.diff | 407 | ||||
-rw-r--r-- | source/l/glibc/slack-desc.glibc-zoneinfo | 2 | ||||
-rw-r--r-- | source/l/glibc/slack-desc.glibc-zoneinfo.olson | 19 | ||||
-rw-r--r-- | source/l/glibc/timezone-scripts/timeconfig | 90 |
13 files changed, 1388 insertions, 43 deletions
diff --git a/source/l/glibc/doinst.sh-glibc b/source/l/glibc/doinst.sh-glibc index 427723c2..1b3e03e3 100644 --- a/source/l/glibc/doinst.sh-glibc +++ b/source/l/glibc/doinst.sh-glibc @@ -111,43 +111,43 @@ rm -f etc/profile.d/glibc.sh.new # In case there's no ldconfig, make the links manually: if [ ! -x /sbin/ldconfig ]; then ( cd lib ; rm -rf libnss_nis.so.2 ) -( cd lib ; ln -sf libnss_nis-2.13.so libnss_nis.so.2 ) +( cd lib ; ln -sf libnss_nis-2.15.so libnss_nis.so.2 ) ( cd lib ; rm -rf libm.so.6 ) -( cd lib ; ln -sf libm-2.13.so libm.so.6 ) +( cd lib ; ln -sf libm-2.15.so libm.so.6 ) ( cd lib ; rm -rf libnss_files.so.2 ) -( cd lib ; ln -sf libnss_files-2.13.so libnss_files.so.2 ) +( cd lib ; ln -sf libnss_files-2.15.so libnss_files.so.2 ) ( cd lib ; rm -rf libresolv.so.2 ) -( cd lib ; ln -sf libresolv-2.13.so libresolv.so.2 ) +( cd lib ; ln -sf libresolv-2.15.so libresolv.so.2 ) ( cd lib ; rm -rf libnsl.so.1 ) -( cd lib ; ln -sf libnsl-2.13.so libnsl.so.1 ) +( cd lib ; ln -sf libnsl-2.15.so libnsl.so.1 ) ( cd lib ; rm -rf libutil.so.1 ) -( cd lib ; ln -sf libutil-2.13.so libutil.so.1 ) +( cd lib ; ln -sf libutil-2.15.so libutil.so.1 ) ( cd lib ; rm -rf libnss_compat.so.2 ) -( cd lib ; ln -sf libnss_compat-2.13.so libnss_compat.so.2 ) +( cd lib ; ln -sf libnss_compat-2.15.so libnss_compat.so.2 ) ( cd lib ; rm -rf libthread_db.so.1 ) ( cd lib ; ln -sf libthread_db-1.0.so libthread_db.so.1 ) ( cd lib ; rm -rf libnss_hesiod.so.2 ) -( cd lib ; ln -sf libnss_hesiod-2.13.so libnss_hesiod.so.2 ) +( cd lib ; ln -sf libnss_hesiod-2.15.so libnss_hesiod.so.2 ) ( cd lib ; rm -rf libanl.so.1 ) -( cd lib ; ln -sf libanl-2.13.so libanl.so.1 ) +( cd lib ; ln -sf libanl-2.15.so libanl.so.1 ) ( cd lib ; rm -rf libcrypt.so.1 ) -( cd lib ; ln -sf libcrypt-2.13.so libcrypt.so.1 ) +( cd lib ; ln -sf libcrypt-2.15.so libcrypt.so.1 ) ( cd lib ; rm -rf libBrokenLocale.so.1 ) -( cd lib ; ln -sf libBrokenLocale-2.13.so libBrokenLocale.so.1 ) +( cd lib ; ln -sf libBrokenLocale-2.15.so libBrokenLocale.so.1 ) ( cd lib ; rm -rf ld-linux.so.2 ) -( cd lib ; ln -sf ld-2.13.so ld-linux.so.2 ) +( cd lib ; ln -sf ld-2.15.so ld-linux.so.2 ) ( cd lib ; rm -rf libdl.so.2 ) -( cd lib ; ln -sf libdl-2.13.so libdl.so.2 ) +( cd lib ; ln -sf libdl-2.15.so libdl.so.2 ) ( cd lib ; rm -rf libnss_dns.so.2 ) -( cd lib ; ln -sf libnss_dns-2.13.so libnss_dns.so.2 ) +( cd lib ; ln -sf libnss_dns-2.15.so libnss_dns.so.2 ) ( cd lib ; rm -rf libpthread.so.0 ) -( cd lib ; ln -sf libpthread-2.13.so libpthread.so.0 ) +( cd lib ; ln -sf libpthread-2.15.so libpthread.so.0 ) ( cd lib ; rm -rf libnss_nisplus.so.2 ) -( cd lib ; ln -sf libnss_nisplus-2.13.so libnss_nisplus.so.2 ) +( cd lib ; ln -sf libnss_nisplus-2.15.so libnss_nisplus.so.2 ) ( cd lib ; rm -rf libc.so.6 ) -( cd lib ; ln -sf libc-2.13.so libc.so.6 ) +( cd lib ; ln -sf libc-2.15.so libc.so.6 ) ( cd lib ; rm -rf librt.so.1 ) -( cd lib ; ln -sf librt-2.13.so librt.so.1 ) +( cd lib ; ln -sf librt-2.15.so librt.so.1 ) fi # More links: diff --git a/source/l/glibc/doinst.sh-glibc-solibs b/source/l/glibc/doinst.sh-glibc-solibs index adcb4131..f6e41a96 100644 --- a/source/l/glibc/doinst.sh-glibc-solibs +++ b/source/l/glibc/doinst.sh-glibc-solibs @@ -91,41 +91,41 @@ rm -f etc/profile.d/glibc.sh.new # In case there's no ldconfig, make the links manually: if [ ! -x /sbin/ldconfig ]; then ( cd lib ; rm -rf libnss_nis.so.2 ) -( cd lib ; ln -sf libnss_nis-2.13.so libnss_nis.so.2 ) +( cd lib ; ln -sf libnss_nis-2.15.so libnss_nis.so.2 ) ( cd lib ; rm -rf libm.so.6 ) -( cd lib ; ln -sf libm-2.13.so libm.so.6 ) +( cd lib ; ln -sf libm-2.15.so libm.so.6 ) ( cd lib ; rm -rf libnss_files.so.2 ) -( cd lib ; ln -sf libnss_files-2.13.so libnss_files.so.2 ) +( cd lib ; ln -sf libnss_files-2.15.so libnss_files.so.2 ) ( cd lib ; rm -rf libresolv.so.2 ) -( cd lib ; ln -sf libresolv-2.13.so libresolv.so.2 ) +( cd lib ; ln -sf libresolv-2.15.so libresolv.so.2 ) ( cd lib ; rm -rf libnsl.so.1 ) -( cd lib ; ln -sf libnsl-2.13.so libnsl.so.1 ) +( cd lib ; ln -sf libnsl-2.15.so libnsl.so.1 ) ( cd lib ; rm -rf libutil.so.1 ) -( cd lib ; ln -sf libutil-2.13.so libutil.so.1 ) +( cd lib ; ln -sf libutil-2.15.so libutil.so.1 ) ( cd lib ; rm -rf libnss_compat.so.2 ) -( cd lib ; ln -sf libnss_compat-2.13.so libnss_compat.so.2 ) +( cd lib ; ln -sf libnss_compat-2.15.so libnss_compat.so.2 ) ( cd lib ; rm -rf libthread_db.so.1 ) ( cd lib ; ln -sf libthread_db-1.0.so libthread_db.so.1 ) ( cd lib ; rm -rf libnss_hesiod.so.2 ) -( cd lib ; ln -sf libnss_hesiod-2.13.so libnss_hesiod.so.2 ) +( cd lib ; ln -sf libnss_hesiod-2.15.so libnss_hesiod.so.2 ) ( cd lib ; rm -rf libanl.so.1 ) -( cd lib ; ln -sf libanl-2.13.so libanl.so.1 ) +( cd lib ; ln -sf libanl-2.15.so libanl.so.1 ) ( cd lib ; rm -rf libcrypt.so.1 ) -( cd lib ; ln -sf libcrypt-2.13.so libcrypt.so.1 ) +( cd lib ; ln -sf libcrypt-2.15.so libcrypt.so.1 ) ( cd lib ; rm -rf libBrokenLocale.so.1 ) -( cd lib ; ln -sf libBrokenLocale-2.13.so libBrokenLocale.so.1 ) +( cd lib ; ln -sf libBrokenLocale-2.15.so libBrokenLocale.so.1 ) ( cd lib ; rm -rf ld-linux.so.2 ) -( cd lib ; ln -sf ld-2.13.so ld-linux.so.2 ) +( cd lib ; ln -sf ld-2.15.so ld-linux.so.2 ) ( cd lib ; rm -rf libdl.so.2 ) -( cd lib ; ln -sf libdl-2.13.so libdl.so.2 ) +( cd lib ; ln -sf libdl-2.15.so libdl.so.2 ) ( cd lib ; rm -rf libnss_dns.so.2 ) -( cd lib ; ln -sf libnss_dns-2.13.so libnss_dns.so.2 ) +( cd lib ; ln -sf libnss_dns-2.15.so libnss_dns.so.2 ) ( cd lib ; rm -rf libpthread.so.0 ) -( cd lib ; ln -sf libpthread-2.13.so libpthread.so.0 ) +( cd lib ; ln -sf libpthread-2.15.so libpthread.so.0 ) ( cd lib ; rm -rf libnss_nisplus.so.2 ) -( cd lib ; ln -sf libnss_nisplus-2.13.so libnss_nisplus.so.2 ) +( cd lib ; ln -sf libnss_nisplus-2.15.so libnss_nisplus.so.2 ) ( cd lib ; rm -rf libc.so.6 ) -( cd lib ; ln -sf libc-2.13.so libc.so.6 ) +( cd lib ; ln -sf libc-2.15.so libc.so.6 ) ( cd lib ; rm -rf librt.so.1 ) -( cd lib ; ln -sf librt-2.13.so librt.so.1 ) +( cd lib ; ln -sf librt-2.15.so librt.so.1 ) fi diff --git a/source/l/glibc/glibc-2.14-reexport-rpc-interface.patch b/source/l/glibc/glibc-2.14-reexport-rpc-interface.patch new file mode 100644 index 00000000..a0a38162 --- /dev/null +++ b/source/l/glibc/glibc-2.14-reexport-rpc-interface.patch @@ -0,0 +1,26 @@ +diff --git a/include/libc-symbols.h b/include/libc-symbols.h +index 67e1ca2..5e7cca5 100644 +--- a/include/libc-symbols.h ++++ b/include/libc-symbols.h +@@ -635,7 +635,7 @@ for linking") + # define libc_hidden_proto(name, attrs...) hidden_proto (name, ##attrs) + # define libc_hidden_def(name) hidden_def (name) + # define libc_hidden_weak(name) hidden_weak (name) +-# define libc_hidden_nolink(name, version) hidden_nolink (name, libc, version) ++# define libc_hidden_nolink(name, version) hidden_def (name) + # define libc_hidden_ver(local, name) hidden_ver (local, name) + # define libc_hidden_data_def(name) hidden_data_def (name) + # define libc_hidden_data_weak(name) hidden_data_weak (name) +diff --git a/sunrpc/Makefile b/sunrpc/Makefile +index 5134ce9..40c73d1 100644 +--- a/sunrpc/Makefile ++++ b/sunrpc/Makefile +@@ -53,7 +53,7 @@ headers-in-tirpc = $(addprefix rpc/,auth.h auth_unix.h clnt.h pmap_clnt.h \ + des_crypt.h) + headers-not-in-tirpc = $(addprefix rpc/,key_prot.h rpc_des.h) \ + $(rpcsvc:%=rpcsvc/%) rpcsvc/bootparam.h +-headers = rpc/netdb.h ++headers = rpc/netdb.h $(headers-in-tirpc) $(headers-not-in-tirpc) + install-others = $(inst_sysconfdir)/rpc + generated = $(rpcsvc:%.x=rpcsvc/%.h) $(rpcsvc:%.x=x%.c) $(rpcsvc:%.x=x%.stmp) \ + $(rpcsvc:%.x=rpcsvc/%.stmp) rpcgen
\ No newline at end of file diff --git a/source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch b/source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch new file mode 100644 index 00000000..554b9e56 --- /dev/null +++ b/source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch @@ -0,0 +1,27 @@ +From bdd816a366c4e5bba5de7157d948e0c0737fb4fb Mon Sep 17 00:00:00 2001 +From: Andreas Schwab <schwab@redhat.com> +Date: Tue, 17 May 2011 17:42:30 +0200 +Subject: [PATCH] Reinstall NIS RPC headers + +--- + nis/Makefile | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/nis/Makefile b/nis/Makefile +index b5c9609..d2934d9 100644 +--- a/nis/Makefile ++++ b/nis/Makefile +@@ -23,9 +23,9 @@ subdir := nis + + aux := nis_hash + ++headers := $(wildcard rpcsvc/*.[hx]) + distribute := nss-nis.h nss-nisplus.h nis_intern.h Banner \ +- nisplus-parser.h nis_xdr.h nss \ +- $(wildcard rpcsvc/*.[hx]) ++ nisplus-parser.h nis_xdr.h nss + + # These are the databases available for the nis (and perhaps later nisplus) + # service. This must be a superset of the services in nss. +-- +1.7.5.4 diff --git a/source/l/glibc/glibc-2.14.1-fixes-1.patch b/source/l/glibc/glibc-2.14.1-fixes-1.patch new file mode 100644 index 00000000..b2b87f12 --- /dev/null +++ b/source/l/glibc/glibc-2.14.1-fixes-1.patch @@ -0,0 +1,159 @@ +Submitted By: Matt Burgess <matthew_at_linuxfromscratch_dot_org> +Date: 2011-10-07 +Initial Package Version: 2.14.1 +Upstream Status: From upstream +Origin: Matt Burgess +Description: Fixes Firefox crashes and a bug when programs link to + SDL. + +diff -Naur glibc-2.14.1.orig/elf/dl-close.c glibc-2.14.1/elf/dl-close.c +--- glibc-2.14.1.orig/elf/dl-close.c 2011-10-07 09:48:55.000000000 +0000 ++++ glibc-2.14.1/elf/dl-close.c 2011-10-07 19:43:10.346411120 +0000 +@@ -119,17 +119,8 @@ + if (map->l_direct_opencount > 0 || map->l_type != lt_loaded + || dl_close_state != not_pending) + { +- if (map->l_direct_opencount == 0) +- { +- if (map->l_type == lt_loaded) +- dl_close_state = rerun; +- else if (map->l_type == lt_library) +- { +- struct link_map **oldp = map->l_initfini; +- map->l_initfini = map->l_orig_initfini; +- _dl_scope_free (oldp); +- } +- } ++ if (map->l_direct_opencount == 0 && map->l_type == lt_loaded) ++ dl_close_state = rerun; + + /* There are still references to this object. Do nothing more. */ + if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0)) +diff -Naur glibc-2.14.1.orig/elf/dl-deps.c glibc-2.14.1/elf/dl-deps.c +--- glibc-2.14.1.orig/elf/dl-deps.c 2011-10-07 09:48:55.000000000 +0000 ++++ glibc-2.14.1/elf/dl-deps.c 2011-10-07 19:43:10.348432639 +0000 +@@ -478,6 +478,7 @@ + nneeded * sizeof needed[0]); + atomic_write_barrier (); + l->l_initfini = l_initfini; ++ l->l_free_initfini = 1; + } + + /* If we have no auxiliary objects just go on to the next map. */ +@@ -678,6 +679,7 @@ + l_initfini[nlist] = NULL; + atomic_write_barrier (); + map->l_initfini = l_initfini; ++ map->l_free_initfini = 1; + if (l_reldeps != NULL) + { + atomic_write_barrier (); +@@ -686,7 +688,7 @@ + _dl_scope_free (old_l_reldeps); + } + if (old_l_initfini != NULL) +- map->l_orig_initfini = old_l_initfini; ++ _dl_scope_free (old_l_initfini); + + if (errno_reason) + _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname, +diff -Naur glibc-2.14.1.orig/elf/dl-libc.c glibc-2.14.1/elf/dl-libc.c +--- glibc-2.14.1.orig/elf/dl-libc.c 2011-10-07 09:48:55.000000000 +0000 ++++ glibc-2.14.1/elf/dl-libc.c 2011-10-07 19:43:10.352411141 +0000 +@@ -279,6 +279,10 @@ + if (! old->dont_free) + free (old); + } ++ ++ /* Free the initfini dependency list. */ ++ if (l->l_free_initfini) ++ free (l->l_initfini); + } + + if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0 +diff -Naur glibc-2.14.1.orig/elf/rtld.c glibc-2.14.1/elf/rtld.c +--- glibc-2.14.1.orig/elf/rtld.c 2011-10-07 09:48:55.000000000 +0000 ++++ glibc-2.14.1/elf/rtld.c 2011-10-07 19:43:10.355406263 +0000 +@@ -2263,6 +2263,7 @@ + lnp->dont_free = 1; + lnp = lnp->next; + } ++ l->l_free_initfini = 0; + + if (l != &GL(dl_rtld_map)) + _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0, +diff -Naur glibc-2.14.1.orig/include/link.h glibc-2.14.1/include/link.h +--- glibc-2.14.1.orig/include/link.h 2011-10-07 09:48:55.000000000 +0000 ++++ glibc-2.14.1/include/link.h 2011-10-07 19:43:10.357462703 +0000 +@@ -192,6 +192,9 @@ + during LD_TRACE_PRELINKING=1 + contains any DT_SYMBOLIC + libraries. */ ++ unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be ++ freed, ie. not allocated with ++ the dummy malloc in ld.so. */ + + /* Collected information about own RPATH directories. */ + struct r_search_path_struct l_rpath_dirs; +@@ -240,9 +243,6 @@ + + /* List of object in order of the init and fini calls. */ + struct link_map **l_initfini; +- /* The init and fini list generated at startup, saved when the +- object is also loaded dynamically. */ +- struct link_map **l_orig_initfini; + + /* List of the dependencies introduced through symbol binding. */ + struct link_map_reldeps +diff -Naur glibc-2.14.1.orig/resolv/res_query.c glibc-2.14.1/resolv/res_query.c +--- glibc-2.14.1.orig/resolv/res_query.c 2011-10-07 09:48:55.000000000 +0000 ++++ glibc-2.14.1/resolv/res_query.c 2011-10-07 19:43:10.361412711 +0000 +@@ -122,6 +122,7 @@ + int *resplen2) + { + HEADER *hp = (HEADER *) answer; ++ HEADER *hp2; + int n, use_malloc = 0; + u_int oflags = statp->_flags; + +@@ -239,26 +240,25 @@ + /* __libc_res_nsend might have reallocated the buffer. */ + hp = (HEADER *) *answerp; + +- /* We simplify the following tests by assigning HP to HP2. It +- is easy to verify that this is the same as ignoring all +- tests of HP2. */ +- HEADER *hp2 = answerp2 ? (HEADER *) *answerp2 : hp; +- +- if (n < (int) sizeof (HEADER) && answerp2 != NULL +- && *resplen2 > (int) sizeof (HEADER)) ++ /* We simplify the following tests by assigning HP to HP2 or ++ vice versa. It is easy to verify that this is the same as ++ ignoring all tests of HP or HP2. */ ++ if (answerp2 == NULL || *resplen2 < (int) sizeof (HEADER)) + { +- /* Special case of partial answer. */ +- assert (hp != hp2); +- hp = hp2; ++ hp2 = hp; + } +- else if (answerp2 != NULL && *resplen2 < (int) sizeof (HEADER) +- && n > (int) sizeof (HEADER)) ++ else + { +- /* Special case of partial answer. */ +- assert (hp != hp2); +- hp2 = hp; ++ hp2 = (HEADER *) *answerp2; ++ if (n < (int) sizeof (HEADER)) ++ { ++ hp = hp2; ++ } + } + ++ /* Make sure both hp and hp2 are defined */ ++ assert((hp != NULL) && (hp2 != NULL)); ++ + if ((hp->rcode != NOERROR || ntohs(hp->ancount) == 0) + && (hp2->rcode != NOERROR || ntohs(hp2->ancount) == 0)) { + #ifdef DEBUG diff --git a/source/l/glibc/glibc-2.15-revert-c5a0802a.diff b/source/l/glibc/glibc-2.15-revert-c5a0802a.diff new file mode 100644 index 00000000..b53581b3 --- /dev/null +++ b/source/l/glibc/glibc-2.15-revert-c5a0802a.diff @@ -0,0 +1,226 @@ +diff -rup a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S +--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2011-12-22 18:04:12.937212834 +0000 ++++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2011-12-22 18:04:42.104222278 +0000 +@@ -137,7 +137,6 @@ __pthread_cond_wait: + cmpl $PI_BIT, %eax + jne 18f + +-90: + movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %ecx + movl %ebp, %edx + xorl %esi, %esi +@@ -151,9 +150,6 @@ __pthread_cond_wait: + sete 16(%esp) + je 19f + +- cmpl $-EAGAIN, %eax +- je 91f +- + /* Normal and PI futexes dont mix. Use normal futex functions only + if the kernel does not support the PI futex functions. */ + cmpl $-ENOSYS, %eax +@@ -398,78 +394,6 @@ __pthread_cond_wait: + #endif + call __lll_unlock_wake + jmp 11b +- +-91: +-.LcleanupSTART2: +- /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN. We need to +- call it again. */ +- +- /* Get internal lock. */ +- movl $1, %edx +- xorl %eax, %eax +- LOCK +-#if cond_lock == 0 +- cmpxchgl %edx, (%ebx) +-#else +- cmpxchgl %edx, cond_lock(%ebx) +-#endif +- jz 92f +- +-#if cond_lock == 0 +- movl %ebx, %edx +-#else +- leal cond_lock(%ebx), %edx +-#endif +-#if (LLL_SHARED-LLL_PRIVATE) > 255 +- xorl %ecx, %ecx +-#endif +- cmpl $-1, dep_mutex(%ebx) +- setne %cl +- subl $1, %ecx +- andl $(LLL_SHARED-LLL_PRIVATE), %ecx +-#if LLL_PRIVATE != 0 +- addl $LLL_PRIVATE, %ecx +-#endif +- call __lll_lock_wait +- +-92: +- /* Increment the cond_futex value again, so it can be used as a new +- expected value. */ +- addl $1, cond_futex(%ebx) +- movl cond_futex(%ebx), %ebp +- +- /* Unlock. */ +- LOCK +-#if cond_lock == 0 +- subl $1, (%ebx) +-#else +- subl $1, cond_lock(%ebx) +-#endif +- je 93f +-#if cond_lock == 0 +- movl %ebx, %eax +-#else +- leal cond_lock(%ebx), %eax +-#endif +-#if (LLL_SHARED-LLL_PRIVATE) > 255 +- xorl %ecx, %ecx +-#endif +- cmpl $-1, dep_mutex(%ebx) +- setne %cl +- subl $1, %ecx +- andl $(LLL_SHARED-LLL_PRIVATE), %ecx +-#if LLL_PRIVATE != 0 +- addl $LLL_PRIVATE, %ecx +-#endif +- call __lll_unlock_wake +- +-93: +- /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */ +- xorl %ecx, %ecx +- movl dep_mutex(%ebx), %edi +- jmp 90b +-.LcleanupEND2: +- + .size __pthread_cond_wait, .-__pthread_cond_wait + versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, + GLIBC_2_3_2) +@@ -642,10 +566,6 @@ __condvar_w_cleanup: + .long .LcleanupEND-.Lsub_cond_futex + .long __condvar_w_cleanup-.LSTARTCODE + .uleb128 0 +- .long .LcleanupSTART2-.LSTARTCODE +- .long .LcleanupEND2-.LcleanupSTART2 +- .long __condvar_w_cleanup-.LSTARTCODE +- .uleb128 0 + .long .LcallUR-.LSTARTCODE + .long .LENDCODE-.LcallUR + .long 0 +Only in b/nptl/sysdeps/unix/sysv/linux/i386/i486: pthread_cond_wait.S.orig +diff -rup a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S +--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2011-12-22 18:04:12.941212837 +0000 ++++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2011-12-22 18:05:05.155229737 +0000 +@@ -23,7 +23,6 @@ + #include <lowlevelcond.h> + #include <tcb-offsets.h> + #include <pthread-pi-defines.h> +-#include <pthread-errnos.h> + + #include <kernel-features.h> + +@@ -137,14 +136,11 @@ __pthread_cond_wait: + cmpl $PI_BIT, %eax + jne 61f + +-90: + movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %esi + movl $SYS_futex, %eax + syscall + + movl $1, %r8d +- cmpq $-EAGAIN, %rax +- je 91f + #ifdef __ASSUME_REQUEUE_PI + jmp 62f + #else +@@ -331,70 +327,6 @@ __pthread_cond_wait: + + 13: movq %r10, %rax + jmp 14b +- +-91: +-.LcleanupSTART2: +- /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN. We need to +- call it again. */ +- movq 8(%rsp), %rdi +- +- /* Get internal lock. */ +- movl $1, %esi +- xorl %eax, %eax +- LOCK +-#if cond_lock == 0 +- cmpxchgl %esi, (%rdi) +-#else +- cmpxchgl %esi, cond_lock(%rdi) +-#endif +- jz 92f +- +-#if cond_lock != 0 +- addq $cond_lock, %rdi +-#endif +- cmpq $-1, dep_mutex-cond_lock(%rdi) +- movl $LLL_PRIVATE, %eax +- movl $LLL_SHARED, %esi +- cmovne %eax, %esi +- callq __lll_lock_wait +-#if cond_lock != 0 +- subq $cond_lock, %rdi +-#endif +-92: +- /* Increment the cond_futex value again, so it can be used as a new +- expected value. */ +- incl cond_futex(%rdi) +- movl cond_futex(%rdi), %edx +- +- /* Release internal lock. */ +- LOCK +-#if cond_lock == 0 +- decl (%rdi) +-#else +- decl cond_lock(%rdi) +-#endif +- jz 93f +- +-#if cond_lock != 0 +- addq $cond_lock, %rdi +-#endif +- cmpq $-1, dep_mutex-cond_lock(%rdi) +- movl $LLL_PRIVATE, %eax +- movl $LLL_SHARED, %esi +- cmovne %eax, %esi +- /* The call preserves %rdx. */ +- callq __lll_unlock_wake +-#if cond_lock != 0 +- subq $cond_lock, %rdi +-#endif +-93: +- /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */ +- xorq %r10, %r10 +- movq dep_mutex(%rdi), %r8 +- leaq cond_futex(%rdi), %rdi +- jmp 90b +-.LcleanupEND2: +- + .size __pthread_cond_wait, .-__pthread_cond_wait + versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, + GLIBC_2_3_2) +@@ -547,15 +479,11 @@ __condvar_cleanup1: + .uleb128 .LcleanupSTART-.LSTARTCODE + .uleb128 .LcleanupEND-.LcleanupSTART + .uleb128 __condvar_cleanup1-.LSTARTCODE +- .uleb128 0 +- .uleb128 .LcleanupSTART2-.LSTARTCODE +- .uleb128 .LcleanupEND2-.LcleanupSTART2 +- .uleb128 __condvar_cleanup1-.LSTARTCODE +- .uleb128 0 ++ .uleb128 0 + .uleb128 .LcallUR-.LSTARTCODE + .uleb128 .LENDCODE-.LcallUR + .uleb128 0 +- .uleb128 0 ++ .uleb128 0 + .Lcstend: + diff --git a/source/l/glibc/glibc-2.15.nscd-race-fix.diff b/source/l/glibc/glibc-2.15.nscd-race-fix.diff new file mode 100644 index 00000000..f1323570 --- /dev/null +++ b/source/l/glibc/glibc-2.15.nscd-race-fix.diff @@ -0,0 +1,47 @@ +--- c/nscd/nscd_gethst_r.c 2012-01-01 05:16:32.000000000 -0700 ++++ c/nscd/nscd_gethst_r.c 2012-03-28 10:45:51.546600822 -0600 +@@ -101,9 +101,27 @@ libc_freeres_fn (hst_map_free) + uint32_t + __nscd_get_nl_timestamp (void) + { ++ uint32_t retval; + if (__nss_not_use_nscd_hosts != 0) + return 0; + ++ int cnt = 0; ++ /* __nscd_get_mapping can change hst_map_handle.mapped to NO_MAPPING. ++ However, __nscd_get_mapping assumes the prior value was not NO_MAPPING. ++ Thus we have to acquire the lock to prevent this thread from changing ++ hst_map_handle.mapped to NO_MAPPING while another thread is inside ++ __nscd_get_mapping. */ ++ while (__builtin_expect ++ (atomic_compare_and_exchange_val_acq (&__hst_map_handle.lock, ++ 1, 0) != 0, 0)) ++ { ++ // XXX Best number of rounds? ++ if (__builtin_expect (++cnt > 5, 0)) ++ return 0; ++ ++ atomic_delay (); ++ } ++ + struct mapped_database *map = __hst_map_handle.mapped; + + if (map == NULL +@@ -113,9 +131,14 @@ __nscd_get_nl_timestamp (void) + map = __nscd_get_mapping (GETFDHST, "hosts", &__hst_map_handle.mapped); + + if (map == NO_MAPPING) +- return 0; ++ retval = 0; ++ else ++ retval = map->head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP]; ++ ++ /* Release the lock. */ ++ __hst_map_handle.lock = 0; + +- return map->head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP]; ++ return retval; + } + + diff --git a/source/l/glibc/glibc.SlackBuild b/source/l/glibc/glibc.SlackBuild index d3f21ae5..0ab9e714 100755 --- a/source/l/glibc/glibc.SlackBuild +++ b/source/l/glibc/glibc.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006, 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,9 +22,9 @@ ## build glibc-$VERSION for Slackware -VERSION=${VERSION:-2.13} +VERSION=${VERSION:-2.15} CHECKOUT=${CHECKOUT:-""} -BUILD=${BUILD:-4} +BUILD=${BUILD:-7} ## Included in glibc now: ## glibc-libidn version @@ -134,6 +134,13 @@ fix_doinst() { # This is a patch function to put all glibc patches in the build script # up near the top. apply_patches() { + # Reexport the RPC interfaces that were removed in glibc-2.14. + # Sure, it's crufy code, but stuff needs it, so rather than pull the + # rug out from under you, we'll just humbly recommend that you consider + # transitioning away from it... :-) + zcat $CWD/glibc-2.14-reexport-rpc-interface.patch.gz | patch -p1 --verbose || exit 1 + # Add back the NIS and RPC headers: + zcat $CWD/glibc-2.14-reinstall-nis-rpc-headers.patch.gz | patch -p1 --verbose || exit 1 # Use old-style locale directories rather than a single (and strangely # formatted) /usr/lib/locale/locale-archive file: zcat $CWD/glibc.locale.no-archive.diff.gz | patch -p1 --verbose || exit 1 @@ -165,7 +172,17 @@ apply_patches() { # Avoid the Intel optimized asm routines for now because they break # the flash player. We'll phase this in when it's safer to do so. zcat $CWD/glibc.disable.broken.optimized.memcpy.diff.gz | patch -p1 --verbose || exit 1 - # Update the timezone information. + # Upstream fixes to avert Firefox crashes: (still applies to 2.15... probably better not to drop it) + zcat $CWD/glibc-2.14.1-fixes-1.patch.gz | patch -p1 --verbose || exit 1 + # Upstream patch to fix relocation sorting related crashes: + zcat $CWD/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff.gz | patch -p1 --verbose || exit 1 + # Upstream patch to fix crashes when nscd is not running: + zcat $CWD/glibc-2.15.nscd-race-fix.diff.gz | patch -p1 --verbose || exit 1 + # Revert a patch that went into 2.15 that causes NPTL related crashes: + zcat $CWD/glibc-2.15-revert-c5a0802a.diff.gz | patch -p1 --verbose || exit 1 + # Patch integer overflows in strtod*() functions: + zcat $CWD/glibc.strtod.CVE-2012-3480.diff.gz | patch -p1 --verbose || exit 1 + # Update the timezone information: ( cd timezone tar xzf $CWD/tzdata?????.tar.gz chown root:root * @@ -175,6 +192,8 @@ apply_patches() { mkdir tzcode cd tzcode tar xzf $CWD/tzcode?????.tar.gz + # A partial build is needed here to update TZVERSION in version.h: + make -i chown -R root:root . chmod 644 * cp -a *.c *.h .. @@ -256,7 +275,7 @@ CFLAGS="-g $OPTIMIZ" \ ../configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ - --enable-kernel=2.6.18 \ + --enable-kernel=2.6.32 \ --with-headers=/usr/include \ --enable-add-ons=libidn,nptl \ --enable-profile \ @@ -358,6 +377,9 @@ rm $PKG/etc/ld.so.cache ################################## # glibc-zoneinfo. We will start with an easy one to avoid breaking a sweat. ;-) +cd $CWD +ZONE_VERSIONS="$(echo tzcode* | cut -f1 -d . | cut -b7-11)_$(echo tzdata* | cut -f1 -d . | cut -b7-11)" +echo $ZONE_VERSIONS cd $PZONE # Install some scripts to help select a timezone: mkdir -p $PZONE/var/log/setup @@ -379,7 +401,7 @@ mkdir -p $PZONE/etc # This is already hard-coded into doinst.sh (like it'll be there anyway ;-): rm -f etc/localtime # Wrap it up: -makepkg -l y -c n $TMP/glibc-zoneinfo-$VERSION-noarch-$BUILD.txz +makepkg -l y -c n $TMP/glibc-zoneinfo-$ZONE_VERSIONS-noarch-$BUILD.txz # glibc-profile: cd $PPROFILE diff --git a/source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff b/source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff new file mode 100644 index 00000000..e9b3ba40 --- /dev/null +++ b/source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff @@ -0,0 +1,322 @@ +From 6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4 Mon Sep 17 00:00:00 2001 +From: Ulrich Drepper <drepper@gmail.com> +Date: Fri, 27 Jan 2012 15:05:19 -0500 +Subject: [PATCH] Sort objects before relocations + +--- + ChangeLog | 11 ++++ + Makeconfig | 6 ++ + NEWS | 4 +- + elf/Makefile | 15 +++++- + elf/dl-open.c | 128 ++++++++++++++++++++++++++++++++++++------------ + elf/tst-relsort1.c | 19 +++++++ + elf/tst-relsort1mod1.c | 7 +++ + elf/tst-relsort1mod2.c | 7 +++ + 8 files changed, 160 insertions(+), 37 deletions(-) + create mode 100644 elf/tst-relsort1.c + create mode 100644 elf/tst-relsort1mod1.c + create mode 100644 elf/tst-relsort1mod2.c + +#diff --git a/ChangeLog b/ChangeLog +#index 24c9550..2efe17a 100644 +#--- a/ChangeLog +#+++ b/ChangeLog +#@@ -1,3 +1,14 @@ +#+2012-01-27 Ulrich Drepper <drepper@gmail.com> +#+ +#+ [BZ #13618] +#+ * elf/dl-open.c (dl_open_worker): Sort objects by dependency before +#+ relocation. +#+ * Makeconfig (libm): Define. +#+ * elf/Makefile: Add rules to build and run tst-relsort1. +#+ * elf/tst-relsort1.c: New file. +#+ * elf/tst-relsort1mod1.c: New file. +#+ * elf/tst-relsort1mod2.c: New file. +#+ + 2012-01-26 Joseph Myers <joseph@codesourcery.com> + + * crypt/md5.h: Remove __STDC__ conditionals. +diff --git a/Makeconfig b/Makeconfig +index 2db2821..68547b2 100644 +--- a/Makeconfig ++++ b/Makeconfig +@@ -900,6 +900,12 @@ else + libdl = $(common-objpfx)dlfcn/libdl.a + endif + ++ifeq ($(build-shared),yes) ++libm = $(common-objpfx)math/libm.so$(libm.so-version) ++else ++libm = $(common-objpfx)math/libm.a ++endif ++ + # These are the subdirectories containing the library source. The order + # is more or less arbitrary. The sorting step will take care of the + # dependencies. +#diff --git a/NEWS b/NEWS +#index 42e09c1..3b502b7 100644 +#--- a/NEWS +#+++ b/NEWS +#@@ -1,4 +1,4 @@ +#-GNU C Library NEWS -- history of user-visible changes. 2012-1-26 +#+GNU C Library NEWS -- history of user-visible changes. 2012-1-27 + #Copyright (C) 1992-2009, 2010, 2011, 2012 Free Software Foundation, Inc. + #See the end for copying conditions. +# +#@@ -10,7 +10,7 @@ Version 2.16 + #* The following bugs are resolved with this release: +# + #13525, 13526, 13527, 13528, 13529, 13531, 13532, 13533, 13547, 13530, +#- 13551, 13552, 13553, 13555, 13559, 13583 +#+ 13551, 13552, 13553, 13555, 13559, 13583, 13618 +# + #* ISO C11 support: +# +diff --git a/elf/Makefile b/elf/Makefile +index 052e763..3f1772a 100644 +--- a/elf/Makefile ++++ b/elf/Makefile +@@ -124,7 +124,8 @@ distribute := rtld-Rules \ + tst-initordera1.c tst-initordera2.c tst-initorderb1.c \ + tst-initorderb2.c tst-initordera3.c tst-initordera4.c \ + tst-initorder.c \ +- tst-initorder2.c ++ tst-initorder2.c \ ++ tst-relsort1.c tst-relsort1mod1.c tst-relsort1mod2.c + + CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables + CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables +@@ -227,7 +228,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ + tst-audit1 tst-audit2 \ + tst-stackguard1 tst-addr1 tst-thrlock \ + tst-unique1 tst-unique2 tst-unique3 tst-unique4 \ +- tst-initorder tst-initorder2 ++ tst-initorder tst-initorder2 tst-relsort1 + # reldep9 + test-srcs = tst-pathopt + selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null) +@@ -290,7 +291,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ + tst-initordera1 tst-initorderb1 \ + tst-initordera2 tst-initorderb2 \ + tst-initordera3 tst-initordera4 \ +- tst-initorder2a tst-initorder2b tst-initorder2c tst-initorder2d ++ tst-initorder2a tst-initorder2b tst-initorder2c \ ++ tst-initorder2d \ ++ tst-relsort1mod1 tst-relsort1mod2 + ifeq (yes,$(have-initfini-array)) + modules-names += tst-array2dep tst-array5dep + endif +@@ -1195,3 +1198,9 @@ CFLAGS-tst-auditmod6b.c += $(AVX-CFLAGS) + CFLAGS-tst-auditmod6c.c += $(AVX-CFLAGS) + CFLAGS-tst-auditmod7b.c += $(AVX-CFLAGS) + endif ++ ++$(objpfx)tst-relsort1: $(libdl) ++$(objpfx)tst-relsort1mod1.so: $(libm) $(objpfx)tst-relsort1mod2.so ++$(objpfx)tst-relsort1mod2.so: $(libm) ++$(objpfx)tst-relsort1.out: $(objpfx)tst-relsort1mod1.so \ ++ $(objpfx)tst-relsort1mod2.so +diff --git a/elf/dl-open.c b/elf/dl-open.c +index a0b5c50..a56bdc1 100644 +--- a/elf/dl-open.c ++++ b/elf/dl-open.c +@@ -1,5 +1,5 @@ + /* Load a shared object at runtime, relocate it, and run its initializer. +- Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc. ++ Copyright (C) 1996-2007, 2009, 2010, 2011, 2012 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 +@@ -302,45 +302,109 @@ dl_open_worker (void *a) + if (GLRO(dl_lazy)) + reloc_mode |= mode & RTLD_LAZY; + +- /* Relocate the objects loaded. We do this in reverse order so that copy +- relocs of earlier objects overwrite the data written by later objects. */ +- ++ /* Sort the objects by dependency for the relocation process. This ++ allows IFUNC relocations to work and it also means copy ++ relocation of dependencies are if necessary overwritten. */ ++ size_t nmaps = 0; + struct link_map *l = new; +- while (l->l_next) +- l = l->l_next; +- while (1) ++ do ++ { ++ if (! l->l_real->l_relocated) ++ ++nmaps; ++ l = l->l_next; ++ } ++ while (l != NULL); ++ struct link_map *maps[nmaps]; ++ nmaps = 0; ++ l = new; ++ do + { + if (! l->l_real->l_relocated) ++ maps[nmaps++] = l; ++ l = l->l_next; ++ } ++ while (l != NULL); ++ if (nmaps > 1) ++ { ++ char seen[nmaps]; ++ memset (seen, '\0', nmaps); ++ size_t i = 0; ++ while (1) + { +-#ifdef SHARED +- if (__builtin_expect (GLRO(dl_profile) != NULL, 0)) ++ ++seen[i]; ++ struct link_map *thisp = maps[i]; ++ ++ /* Find the last object in the list for which the current one is ++ a dependency and move the current object behind the object ++ with the dependency. */ ++ size_t k = nmaps - 1; ++ while (k > i) + { +- /* If this here is the shared object which we want to profile +- make sure the profile is started. We can find out whether +- this is necessary or not by observing the `_dl_profile_map' +- variable. If was NULL but is not NULL afterwars we must +- start the profiling. */ +- struct link_map *old_profile_map = GL(dl_profile_map); ++ struct link_map **runp = maps[k]->l_initfini; ++ if (runp != NULL) ++ /* Look through the dependencies of the object. */ ++ while (*runp != NULL) ++ if (__builtin_expect (*runp++ == thisp, 0)) ++ { ++ /* Move the current object to the back past the last ++ object with it as the dependency. */ ++ memmove (&maps[i], &maps[i + 1], ++ (k - i) * sizeof (maps[0])); ++ maps[k] = thisp; ++ ++ if (seen[i + 1] > 1) ++ { ++ ++i; ++ goto next_clear; ++ } ++ ++ char this_seen = seen[i]; ++ memmove (&seen[i], &seen[i + 1], ++ (k - i) * sizeof (seen[0])); ++ seen[k] = this_seen; ++ ++ goto next; ++ } ++ ++ --k; ++ } + +- _dl_relocate_object (l, l->l_scope, reloc_mode | RTLD_LAZY, 1); ++ if (++i == nmaps) ++ break; ++ next_clear: ++ memset (&seen[i], 0, (nmaps - i) * sizeof (seen[0])); ++ next:; ++ } ++ } + +- if (old_profile_map == NULL && GL(dl_profile_map) != NULL) +- { +- /* We must prepare the profiling. */ +- _dl_start_profile (); ++ for (size_t i = nmaps; i-- > 0; ) ++ { ++ l = maps[i]; + +- /* Prevent unloading the object. */ +- GL(dl_profile_map)->l_flags_1 |= DF_1_NODELETE; +- } ++#ifdef SHARED ++ if (__builtin_expect (GLRO(dl_profile) != NULL, 0)) ++ { ++ /* If this here is the shared object which we want to profile ++ make sure the profile is started. We can find out whether ++ this is necessary or not by observing the `_dl_profile_map' ++ variable. If it was NULL but is not NULL afterwars we must ++ start the profiling. */ ++ struct link_map *old_profile_map = GL(dl_profile_map); ++ ++ _dl_relocate_object (l, l->l_scope, reloc_mode | RTLD_LAZY, 1); ++ ++ if (old_profile_map == NULL && GL(dl_profile_map) != NULL) ++ { ++ /* We must prepare the profiling. */ ++ _dl_start_profile (); ++ ++ /* Prevent unloading the object. */ ++ GL(dl_profile_map)->l_flags_1 |= DF_1_NODELETE; + } +- else +-#endif +- _dl_relocate_object (l, l->l_scope, reloc_mode, 0); + } +- +- if (l == new) +- break; +- l = l->l_prev; ++ else ++#endif ++ _dl_relocate_object (l, l->l_scope, reloc_mode, 0); + } + + /* If the file is not loaded now as a dependency, add the search +diff --git a/elf/tst-relsort1.c b/elf/tst-relsort1.c +new file mode 100644 +index 0000000..972100c +--- /dev/null ++++ b/elf/tst-relsort1.c +@@ -0,0 +1,19 @@ ++#include <dlfcn.h> ++#include <stdio.h> ++ ++ ++static int ++do_test () ++{ ++ const char lib[] = "$ORIGIN/tst-relsort1mod1.so"; ++ void *h = dlopen (lib, RTLD_NOW); ++ if (h == NULL) ++ { ++ puts (dlerror ()); ++ return 1; ++ } ++ return 0; ++} ++ ++#define TEST_FUNCTION do_test () ++#include "../test-skeleton.c" +diff --git a/elf/tst-relsort1mod1.c b/elf/tst-relsort1mod1.c +new file mode 100644 +index 0000000..9e4a943 +--- /dev/null ++++ b/elf/tst-relsort1mod1.c +@@ -0,0 +1,7 @@ ++extern int foo (double); ++ ++int ++bar (void) ++{ ++ return foo (1.2); ++} +diff --git a/elf/tst-relsort1mod2.c b/elf/tst-relsort1mod2.c +new file mode 100644 +index 0000000..a2c3e55 +--- /dev/null ++++ b/elf/tst-relsort1mod2.c +@@ -0,0 +1,7 @@ ++#include <math.h> ++ ++int ++foo (double d) ++{ ++ return floor (d) != 0.0; ++} +-- +1.7.3.4 + diff --git a/source/l/glibc/glibc.strtod.CVE-2012-3480.diff b/source/l/glibc/glibc.strtod.CVE-2012-3480.diff new file mode 100644 index 00000000..7a7bdeb7 --- /dev/null +++ b/source/l/glibc/glibc.strtod.CVE-2012-3480.diff @@ -0,0 +1,407 @@ +From 8a780f7f68a1cd4c575bb17973a9e18826b05ef9 Mon Sep 17 00:00:00 2001 +From: Joseph Myers <joseph@codesourcery.com> +Date: Mon, 27 Aug 2012 15:59:24 +0000 +Subject: [PATCH 1/1] Fix strtod integer/buffer overflow (bug 14459). + (cherry picked from commit d6e70f4368533224e66d10b7f2126b899a3fd5e4) + +Conflicts: + + ChangeLog + NEWS + stdlib/Makefile +--- + ChangeLog | 17 +++++ + NEWS | 2 +- + stdlib/Makefile | 2 +- + stdlib/strtod_l.c | 142 ++++++++++++++++++++++++++++++++--------- + stdlib/tst-strtod-overflow.c | 48 ++++++++++++++ + 5 files changed, 178 insertions(+), 33 deletions(-) + create mode 100644 stdlib/tst-strtod-overflow.c + +diff --git a/stdlib/Makefile b/stdlib/Makefile +index 04c6ac5..b55f573 100644 +--- a/stdlib/Makefile ++++ b/stdlib/Makefile +@@ -71,7 +71,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \ + tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \ + tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2 \ + tst-makecontext2 tst-strtod6 tst-unsetenv1 \ +- tst-makecontext3 bug-getcontext ++ tst-makecontext3 bug-getcontext tst-strtod-overflow + + include ../Makeconfig + +diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c +index f24d4de..0deaebf 100644 +--- a/stdlib/strtod_l.c ++++ b/stdlib/strtod_l.c +@@ -62,6 +62,7 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **, + #include <math.h> + #include <stdlib.h> + #include <string.h> ++#include <stdint.h> + + /* The gmp headers need some configuration frobs. */ + #define HAVE_ALLOCA 1 +@@ -74,7 +75,6 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **, + #include "longlong.h" + #include "fpioconst.h" + +-#define NDEBUG 1 + #include <assert.h> + + +@@ -176,19 +176,19 @@ extern const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1]; + /* Return a floating point number of the needed type according to the given + multi-precision number after possible rounding. */ + static FLOAT +-round_and_return (mp_limb_t *retval, int exponent, int negative, ++round_and_return (mp_limb_t *retval, intmax_t exponent, int negative, + mp_limb_t round_limb, mp_size_t round_bit, int more_bits) + { + if (exponent < MIN_EXP - 1) + { +- mp_size_t shift = MIN_EXP - 1 - exponent; +- +- if (shift > MANT_DIG) ++ if (exponent < MIN_EXP - 1 - MANT_DIG) + { + __set_errno (ERANGE); + return 0.0; + } + ++ mp_size_t shift = MIN_EXP - 1 - exponent; ++ + more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0; + if (shift == MANT_DIG) + /* This is a special case to handle the very seldom case where +@@ -235,6 +235,9 @@ round_and_return (mp_limb_t *retval, int exponent, int negative, + __set_errno (ERANGE); + } + ++ if (exponent > MAX_EXP) ++ goto overflow; ++ + if ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0 + && (more_bits || (retval[0] & 1) != 0 + || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0)) +@@ -260,6 +263,7 @@ round_and_return (mp_limb_t *retval, int exponent, int negative, + } + + if (exponent > MAX_EXP) ++ overflow: + return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; + + return MPN2FLOAT (retval, exponent, negative); +@@ -273,7 +277,7 @@ round_and_return (mp_limb_t *retval, int exponent, int negative, + factor for the resulting number (see code) multiply by it. */ + static const STRING_TYPE * + str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize, +- int *exponent ++ intmax_t *exponent + #ifndef USE_WIDE_CHAR + , const char *decimal, size_t decimal_len, const char *thousands + #endif +@@ -303,6 +307,7 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize, + cy += __mpn_add_1 (n, n, *nsize, low); + if (cy != 0) + { ++ assert (*nsize < MPNSIZE); + n[*nsize] = cy; + ++(*nsize); + } +@@ -337,7 +342,7 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize, + } + while (--digcnt > 0); + +- if (*exponent > 0 && cnt + *exponent <= MAX_DIG_PER_LIMB) ++ if (*exponent > 0 && *exponent <= MAX_DIG_PER_LIMB - cnt) + { + low *= _tens_in_limb[*exponent]; + start = _tens_in_limb[cnt + *exponent]; +@@ -357,7 +362,10 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize, + cy = __mpn_mul_1 (n, n, *nsize, start); + cy += __mpn_add_1 (n, n, *nsize, low); + if (cy != 0) +- n[(*nsize)++] = cy; ++ { ++ assert (*nsize < MPNSIZE); ++ n[(*nsize)++] = cy; ++ } + } + + return str; +@@ -415,7 +423,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + { + int negative; /* The sign of the number. */ + MPN_VAR (num); /* MP representation of the number. */ +- int exponent; /* Exponent of the number. */ ++ intmax_t exponent; /* Exponent of the number. */ + + /* Numbers starting `0X' or `0x' have to be processed with base 16. */ + int base = 10; +@@ -437,7 +445,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + /* Points at the character following the integer and fractional digits. */ + const STRING_TYPE *expp; + /* Total number of digit and number of digits in integer part. */ +- int dig_no, int_no, lead_zero; ++ size_t dig_no, int_no, lead_zero; + /* Contains the last character read. */ + CHAR_TYPE c; + +@@ -769,7 +777,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + are all or any is really a fractional digit will be decided + later. */ + int_no = dig_no; +- lead_zero = int_no == 0 ? -1 : 0; ++ lead_zero = int_no == 0 ? (size_t) -1 : 0; + + /* Read the fractional digits. A special case are the 'american + style' numbers like `16.' i.e. with decimal point but without +@@ -791,12 +799,13 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c); + lo >= L_('a') && lo <= L_('f'); }))) + { +- if (c != L_('0') && lead_zero == -1) ++ if (c != L_('0') && lead_zero == (size_t) -1) + lead_zero = dig_no - int_no; + ++dig_no; + c = *++cp; + } + } ++ assert (dig_no <= (uintmax_t) INTMAX_MAX); + + /* Remember start of exponent (if any). */ + expp = cp; +@@ -819,24 +828,80 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + + if (c >= L_('0') && c <= L_('9')) + { +- int exp_limit; ++ intmax_t exp_limit; + + /* Get the exponent limit. */ + if (base == 16) +- exp_limit = (exp_negative ? +- -MIN_EXP + MANT_DIG + 4 * int_no : +- MAX_EXP - 4 * int_no + 4 * lead_zero + 3); ++ { ++ if (exp_negative) ++ { ++ assert (int_no <= (uintmax_t) (INTMAX_MAX ++ + MIN_EXP - MANT_DIG) / 4); ++ exp_limit = -MIN_EXP + MANT_DIG + 4 * (intmax_t) int_no; ++ } ++ else ++ { ++ if (int_no) ++ { ++ assert (lead_zero == 0 ++ && int_no <= (uintmax_t) INTMAX_MAX / 4); ++ exp_limit = MAX_EXP - 4 * (intmax_t) int_no + 3; ++ } ++ else if (lead_zero == (size_t) -1) ++ { ++ /* The number is zero and this limit is ++ arbitrary. */ ++ exp_limit = MAX_EXP + 3; ++ } ++ else ++ { ++ assert (lead_zero ++ <= (uintmax_t) (INTMAX_MAX - MAX_EXP - 3) / 4); ++ exp_limit = (MAX_EXP ++ + 4 * (intmax_t) lead_zero ++ + 3); ++ } ++ } ++ } + else +- exp_limit = (exp_negative ? +- -MIN_10_EXP + MANT_DIG + int_no : +- MAX_10_EXP - int_no + lead_zero + 1); ++ { ++ if (exp_negative) ++ { ++ assert (int_no ++ <= (uintmax_t) (INTMAX_MAX + MIN_10_EXP - MANT_DIG)); ++ exp_limit = -MIN_10_EXP + MANT_DIG + (intmax_t) int_no; ++ } ++ else ++ { ++ if (int_no) ++ { ++ assert (lead_zero == 0 ++ && int_no <= (uintmax_t) INTMAX_MAX); ++ exp_limit = MAX_10_EXP - (intmax_t) int_no + 1; ++ } ++ else if (lead_zero == (size_t) -1) ++ { ++ /* The number is zero and this limit is ++ arbitrary. */ ++ exp_limit = MAX_10_EXP + 1; ++ } ++ else ++ { ++ assert (lead_zero ++ <= (uintmax_t) (INTMAX_MAX - MAX_10_EXP - 1)); ++ exp_limit = MAX_10_EXP + (intmax_t) lead_zero + 1; ++ } ++ } ++ } ++ ++ if (exp_limit < 0) ++ exp_limit = 0; + + do + { +- exponent *= 10; +- exponent += c - L_('0'); +- +- if (__builtin_expect (exponent > exp_limit, 0)) ++ if (__builtin_expect ((exponent > exp_limit / 10 ++ || (exponent == exp_limit / 10 ++ && c - L_('0') > exp_limit % 10)), 0)) + /* The exponent is too large/small to represent a valid + number. */ + { +@@ -845,7 +910,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + /* We have to take care for special situation: a joker + might have written "0.0e100000" which is in fact + zero. */ +- if (lead_zero == -1) ++ if (lead_zero == (size_t) -1) + result = negative ? -0.0 : 0.0; + else + { +@@ -864,6 +929,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + /* NOTREACHED */ + } + ++ exponent *= 10; ++ exponent += c - L_('0'); ++ + c = *++cp; + } + while (c >= L_('0') && c <= L_('9')); +@@ -932,7 +1000,14 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + } + #endif + startp += lead_zero + decimal_len; +- exponent -= base == 16 ? 4 * lead_zero : lead_zero; ++ assert (lead_zero <= (base == 16 ++ ? (uintmax_t) INTMAX_MAX / 4 ++ : (uintmax_t) INTMAX_MAX)); ++ assert (lead_zero <= (base == 16 ++ ? ((uintmax_t) exponent ++ - (uintmax_t) INTMAX_MIN) / 4 ++ : ((uintmax_t) exponent - (uintmax_t) INTMAX_MIN))); ++ exponent -= base == 16 ? 4 * (intmax_t) lead_zero : (intmax_t) lead_zero; + dig_no -= lead_zero; + } + +@@ -974,7 +1049,10 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + } + + /* Adjust the exponent for the bits we are shifting in. */ +- exponent += bits - 1 + (int_no - 1) * 4; ++ assert (int_no <= (uintmax_t) (exponent < 0 ++ ? (INTMAX_MAX - bits + 1) / 4 ++ : (INTMAX_MAX - exponent - bits + 1) / 4)); ++ exponent += bits - 1 + ((intmax_t) int_no - 1) * 4; + + while (--dig_no > 0 && idx >= 0) + { +@@ -1014,13 +1092,15 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + really integer digits or belong to the fractional part; i.e. we normalize + 123e-2 to 1.23. */ + { +- register int incr = (exponent < 0 ? MAX (-int_no, exponent) +- : MIN (dig_no - int_no, exponent)); ++ register intmax_t incr = (exponent < 0 ++ ? MAX (-(intmax_t) int_no, exponent) ++ : MIN ((intmax_t) dig_no - (intmax_t) int_no, ++ exponent)); + int_no += incr; + exponent -= incr; + } + +- if (__builtin_expect (int_no + exponent > MAX_10_EXP + 1, 0)) ++ if (__builtin_expect (exponent > MAX_10_EXP + 1 - (intmax_t) int_no, 0)) + { + __set_errno (ERANGE); + return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL; +@@ -1205,7 +1285,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + digits we should have enough bits for the result. The remaining + decimal digits give us the information that more bits are following. + This can be used while rounding. (Two added as a safety margin.) */ +- if (dig_no - int_no > (MANT_DIG - bits + 2) / 3 + 2) ++ if ((intmax_t) dig_no > (intmax_t) int_no + (MANT_DIG - bits + 2) / 3 + 2) + { + dig_no = int_no + (MANT_DIG - bits + 2) / 3 + 2; + more_bits = 1; +@@ -1213,7 +1293,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) + else + more_bits = 0; + +- neg_exp = dig_no - int_no - exponent; ++ neg_exp = (intmax_t) dig_no - (intmax_t) int_no - exponent; + + /* Construct the denominator. */ + densize = 0; +diff --git a/stdlib/tst-strtod-overflow.c b/stdlib/tst-strtod-overflow.c +new file mode 100644 +index 0000000..668d55b +--- /dev/null ++++ b/stdlib/tst-strtod-overflow.c +@@ -0,0 +1,48 @@ ++/* Test for integer/buffer overflow in strtod. ++ Copyright (C) 2012 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 ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ <http://www.gnu.org/licenses/>. */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++ ++#define EXPONENT "e-2147483649" ++#define SIZE 214748364 ++ ++static int ++do_test (void) ++{ ++ char *p = malloc (1 + SIZE + sizeof (EXPONENT)); ++ if (p == NULL) ++ { ++ puts ("malloc failed, cannot test for overflow"); ++ return 0; ++ } ++ p[0] = '1'; ++ memset (p + 1, '0', SIZE); ++ memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT)); ++ double d = strtod (p, NULL); ++ if (d != 0) ++ { ++ printf ("strtod returned wrong value: %a\n", d); ++ return 1; ++ } ++ return 0; ++} ++ ++#define TEST_FUNCTION do_test () ++#include "../test-skeleton.c" +-- +1.7.3.4 diff --git a/source/l/glibc/slack-desc.glibc-zoneinfo b/source/l/glibc/slack-desc.glibc-zoneinfo index 24dfd0e9..69420f78 100644 --- a/source/l/glibc/slack-desc.glibc-zoneinfo +++ b/source/l/glibc/slack-desc.glibc-zoneinfo @@ -12,7 +12,7 @@ glibc-zoneinfo: This package allows you to configure your time zone. glibc-zoneinfo: glibc-zoneinfo: This timezone database comes from the tzdata and tzcode packages by glibc-zoneinfo: Arthur David Olson et.al. The latest version and more information -glibc-zoneinfo: may be found at ftp://elsie.nci.nih.gov/pub/ +glibc-zoneinfo: may be found at: http://www.iana.org/time-zones glibc-zoneinfo: glibc-zoneinfo: Use the timeconfig utility to set your local time zone. glibc-zoneinfo: diff --git a/source/l/glibc/slack-desc.glibc-zoneinfo.olson b/source/l/glibc/slack-desc.glibc-zoneinfo.olson new file mode 100644 index 00000000..24dfd0e9 --- /dev/null +++ b/source/l/glibc/slack-desc.glibc-zoneinfo.olson @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' on +# the right side marks the last column you can put a character in. You must make +# exactly 11 lines for the formatting to be correct. It's also customary to +# leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +glibc-zoneinfo: glibc-zoneinfo (timezone database) +glibc-zoneinfo: +glibc-zoneinfo: This package allows you to configure your time zone. +glibc-zoneinfo: +glibc-zoneinfo: This timezone database comes from the tzdata and tzcode packages by +glibc-zoneinfo: Arthur David Olson et.al. The latest version and more information +glibc-zoneinfo: may be found at ftp://elsie.nci.nih.gov/pub/ +glibc-zoneinfo: +glibc-zoneinfo: Use the timeconfig utility to set your local time zone. +glibc-zoneinfo: +glibc-zoneinfo: diff --git a/source/l/glibc/timezone-scripts/timeconfig b/source/l/glibc/timezone-scripts/timeconfig index 33dc89d4..56e786c3 100644 --- a/source/l/glibc/timezone-scripts/timeconfig +++ b/source/l/glibc/timezone-scripts/timeconfig @@ -165,6 +165,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "Africa/Gaborone" " " \ "Africa/Harare" " " \ "Africa/Johannesburg" " " \ +"Africa/Juba" " " \ "Africa/Kampala" " " \ "Africa/Khartoum" " " \ "Africa/Kigali" " " \ @@ -215,6 +216,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "America/Atikokan" " " \ "America/Atka" " " \ "America/Bahia" " " \ +"America/Bahia_Banderas" " " \ "America/Barbados" " " \ "America/Belem" " " \ "America/Belize" " " \ @@ -278,19 +280,23 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "America/Kentucky/Louisville" " " \ "America/Kentucky/Monticello" " " \ "America/Knox_IN" " " \ +"America/Kralendijk" " " \ "America/La_Paz" " " \ "America/Lima" " " \ "America/Los_Angeles" " " \ "America/Louisville" " " \ +"America/Lower_Princes" " " \ "America/Maceio" " " \ "America/Managua" " " \ "America/Manaus" " " \ "America/Marigot" " " \ "America/Martinique" " " \ +"America/Matamoros" " " \ "America/Mazatlan" " " \ "America/Mendoza" " " \ "America/Menominee" " " \ "America/Merida" " " \ +"America/Metlakatla" " " \ "America/Mexico_City" " " \ "America/Miquelon" " " \ "America/Moncton" " " \ @@ -303,8 +309,10 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "America/Nipigon" " " \ "America/Nome" " " \ "America/Noronha" " " \ +"America/North_Dakota/Beulah" " " \ "America/North_Dakota/Center" " " \ "America/North_Dakota/New_Salem" " " \ +"America/Ojinaga" " " \ "America/Panama" " " \ "America/Pangnirtung" " " \ "America/Paramaribo" " " \ @@ -321,12 +329,14 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "America/Resolute" " " \ "America/Rio_Branco" " " \ "America/Rosario" " " \ +"America/Santa_Isabel" " " \ "America/Santarem" " " \ "America/Santiago" " " \ "America/Santo_Domingo" " " \ "America/Sao_Paulo" " " \ "America/Scoresbysund" " " \ "America/Shiprock" " " \ +"America/Sitka" " " \ "America/St_Barthelemy" " " \ "America/St_Johns" " " \ "America/St_Kitts" " " \ @@ -349,6 +359,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "Antarctica/Casey" " " \ "Antarctica/Davis" " " \ "Antarctica/DumontDUrville" " " \ +"Antarctica/Macquarie" " " \ "Antarctica/Mawson" " " \ "Antarctica/McMurdo" " " \ "Antarctica/Palmer" " " \ @@ -385,6 +396,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "Asia/Dushanbe" " " \ "Asia/Gaza" " " \ "Asia/Harbin" " " \ +"Asia/Hebron" " " \ "Asia/Ho_Chi_Minh" " " \ "Asia/Hong_Kong" " " \ "Asia/Hovd" " " \ @@ -411,6 +423,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "Asia/Manila" " " \ "Asia/Muscat" " " \ "Asia/Nicosia" " " \ +"Asia/Novokuznetsk" " " \ "Asia/Novosibirsk" " " \ "Asia/Omsk" " " \ "Asia/Oral" " " \ @@ -643,6 +656,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "Pacific/Apia" " " \ "Pacific/Auckland" " " \ "Pacific/Chatham" " " \ +"Pacific/Chuuk" " " \ "Pacific/Easter" " " \ "Pacific/Efate" " " \ "Pacific/Enderbury" " " \ @@ -668,6 +682,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "Pacific/Pago_Pago" " " \ "Pacific/Palau" " " \ "Pacific/Pitcairn" " " \ +"Pacific/Pohnpei" " " \ "Pacific/Ponape" " " \ "Pacific/Port_Moresby" " " \ "Pacific/Rarotonga" " " \ @@ -718,6 +733,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/Africa/Gaborone" " " \ "posix/Africa/Harare" " " \ "posix/Africa/Johannesburg" " " \ +"posix/Africa/Juba" " " \ "posix/Africa/Kampala" " " \ "posix/Africa/Khartoum" " " \ "posix/Africa/Kigali" " " \ @@ -768,6 +784,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/America/Atikokan" " " \ "posix/America/Atka" " " \ "posix/America/Bahia" " " \ +"posix/America/Bahia_Banderas" " " \ "posix/America/Barbados" " " \ "posix/America/Belem" " " \ "posix/America/Belize" " " \ @@ -831,19 +848,23 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/America/Kentucky/Louisville" " " \ "posix/America/Kentucky/Monticello" " " \ "posix/America/Knox_IN" " " \ +"posix/America/Kralendijk" " " \ "posix/America/La_Paz" " " \ "posix/America/Lima" " " \ "posix/America/Los_Angeles" " " \ "posix/America/Louisville" " " \ +"posix/America/Lower_Princes" " " \ "posix/America/Maceio" " " \ "posix/America/Managua" " " \ "posix/America/Manaus" " " \ "posix/America/Marigot" " " \ "posix/America/Martinique" " " \ +"posix/America/Matamoros" " " \ "posix/America/Mazatlan" " " \ "posix/America/Mendoza" " " \ "posix/America/Menominee" " " \ "posix/America/Merida" " " \ +"posix/America/Metlakatla" " " \ "posix/America/Mexico_City" " " \ "posix/America/Miquelon" " " \ "posix/America/Moncton" " " \ @@ -856,8 +877,10 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/America/Nipigon" " " \ "posix/America/Nome" " " \ "posix/America/Noronha" " " \ +"posix/America/North_Dakota/Beulah" " " \ "posix/America/North_Dakota/Center" " " \ "posix/America/North_Dakota/New_Salem" " " \ +"posix/America/Ojinaga" " " \ "posix/America/Panama" " " \ "posix/America/Pangnirtung" " " \ "posix/America/Paramaribo" " " \ @@ -874,12 +897,14 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/America/Resolute" " " \ "posix/America/Rio_Branco" " " \ "posix/America/Rosario" " " \ +"posix/America/Santa_Isabel" " " \ "posix/America/Santarem" " " \ "posix/America/Santiago" " " \ "posix/America/Santo_Domingo" " " \ "posix/America/Sao_Paulo" " " \ "posix/America/Scoresbysund" " " \ "posix/America/Shiprock" " " \ +"posix/America/Sitka" " " \ "posix/America/St_Barthelemy" " " \ "posix/America/St_Johns" " " \ "posix/America/St_Kitts" " " \ @@ -902,6 +927,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/Antarctica/Casey" " " \ "posix/Antarctica/Davis" " " \ "posix/Antarctica/DumontDUrville" " " \ +"posix/Antarctica/Macquarie" " " \ "posix/Antarctica/Mawson" " " \ "posix/Antarctica/McMurdo" " " \ "posix/Antarctica/Palmer" " " \ @@ -938,6 +964,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/Asia/Dushanbe" " " \ "posix/Asia/Gaza" " " \ "posix/Asia/Harbin" " " \ +"posix/Asia/Hebron" " " \ "posix/Asia/Ho_Chi_Minh" " " \ "posix/Asia/Hong_Kong" " " \ "posix/Asia/Hovd" " " \ @@ -964,6 +991,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/Asia/Manila" " " \ "posix/Asia/Muscat" " " \ "posix/Asia/Nicosia" " " \ +"posix/Asia/Novokuznetsk" " " \ "posix/Asia/Novosibirsk" " " \ "posix/Asia/Omsk" " " \ "posix/Asia/Oral" " " \ @@ -1196,6 +1224,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/Pacific/Apia" " " \ "posix/Pacific/Auckland" " " \ "posix/Pacific/Chatham" " " \ +"posix/Pacific/Chuuk" " " \ "posix/Pacific/Easter" " " \ "posix/Pacific/Efate" " " \ "posix/Pacific/Enderbury" " " \ @@ -1221,6 +1250,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "posix/Pacific/Pago_Pago" " " \ "posix/Pacific/Palau" " " \ "posix/Pacific/Pitcairn" " " \ +"posix/Pacific/Pohnpei" " " \ "posix/Pacific/Ponape" " " \ "posix/Pacific/Port_Moresby" " " \ "posix/Pacific/Rarotonga" " " \ @@ -1284,6 +1314,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/Africa/Gaborone" " " \ "right/Africa/Harare" " " \ "right/Africa/Johannesburg" " " \ +"right/Africa/Juba" " " \ "right/Africa/Kampala" " " \ "right/Africa/Khartoum" " " \ "right/Africa/Kigali" " " \ @@ -1334,6 +1365,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/America/Atikokan" " " \ "right/America/Atka" " " \ "right/America/Bahia" " " \ +"right/America/Bahia_Banderas" " " \ "right/America/Barbados" " " \ "right/America/Belem" " " \ "right/America/Belize" " " \ @@ -1397,19 +1429,23 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/America/Kentucky/Louisville" " " \ "right/America/Kentucky/Monticello" " " \ "right/America/Knox_IN" " " \ +"right/America/Kralendijk" " " \ "right/America/La_Paz" " " \ "right/America/Lima" " " \ "right/America/Los_Angeles" " " \ "right/America/Louisville" " " \ +"right/America/Lower_Princes" " " \ "right/America/Maceio" " " \ "right/America/Managua" " " \ "right/America/Manaus" " " \ "right/America/Marigot" " " \ "right/America/Martinique" " " \ +"right/America/Matamoros" " " \ "right/America/Mazatlan" " " \ "right/America/Mendoza" " " \ "right/America/Menominee" " " \ "right/America/Merida" " " \ +"right/America/Metlakatla" " " \ "right/America/Mexico_City" " " \ "right/America/Miquelon" " " \ "right/America/Moncton" " " \ @@ -1422,8 +1458,10 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/America/Nipigon" " " \ "right/America/Nome" " " \ "right/America/Noronha" " " \ +"right/America/North_Dakota/Beulah" " " \ "right/America/North_Dakota/Center" " " \ "right/America/North_Dakota/New_Salem" " " \ +"right/America/Ojinaga" " " \ "right/America/Panama" " " \ "right/America/Pangnirtung" " " \ "right/America/Paramaribo" " " \ @@ -1440,12 +1478,14 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/America/Resolute" " " \ "right/America/Rio_Branco" " " \ "right/America/Rosario" " " \ +"right/America/Santa_Isabel" " " \ "right/America/Santarem" " " \ "right/America/Santiago" " " \ "right/America/Santo_Domingo" " " \ "right/America/Sao_Paulo" " " \ "right/America/Scoresbysund" " " \ "right/America/Shiprock" " " \ +"right/America/Sitka" " " \ "right/America/St_Barthelemy" " " \ "right/America/St_Johns" " " \ "right/America/St_Kitts" " " \ @@ -1468,6 +1508,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/Antarctica/Casey" " " \ "right/Antarctica/Davis" " " \ "right/Antarctica/DumontDUrville" " " \ +"right/Antarctica/Macquarie" " " \ "right/Antarctica/Mawson" " " \ "right/Antarctica/McMurdo" " " \ "right/Antarctica/Palmer" " " \ @@ -1504,6 +1545,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/Asia/Dushanbe" " " \ "right/Asia/Gaza" " " \ "right/Asia/Harbin" " " \ +"right/Asia/Hebron" " " \ "right/Asia/Ho_Chi_Minh" " " \ "right/Asia/Hong_Kong" " " \ "right/Asia/Hovd" " " \ @@ -1530,6 +1572,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/Asia/Manila" " " \ "right/Asia/Muscat" " " \ "right/Asia/Nicosia" " " \ +"right/Asia/Novokuznetsk" " " \ "right/Asia/Novosibirsk" " " \ "right/Asia/Omsk" " " \ "right/Asia/Oral" " " \ @@ -1762,6 +1805,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/Pacific/Apia" " " \ "right/Pacific/Auckland" " " \ "right/Pacific/Chatham" " " \ +"right/Pacific/Chuuk" " " \ "right/Pacific/Easter" " " \ "right/Pacific/Efate" " " \ "right/Pacific/Enderbury" " " \ @@ -1787,6 +1831,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then "right/Pacific/Pago_Pago" " " \ "right/Pacific/Palau" " " \ "right/Pacific/Pitcairn" " " \ +"right/Pacific/Pohnpei" " " \ "right/Pacific/Ponape" " " \ "right/Pacific/Port_Moresby" " " \ "right/Pacific/Rarotonga" " " \ @@ -1889,6 +1934,7 @@ Africa/Freetown Africa/Gaborone Africa/Harare Africa/Johannesburg +Africa/Juba Africa/Kampala Africa/Khartoum Africa/Kigali @@ -1939,6 +1985,7 @@ America/Asuncion America/Atikokan America/Atka America/Bahia +America/Bahia_Banderas America/Barbados America/Belem America/Belize @@ -2002,19 +2049,23 @@ America/Juneau America/Kentucky/Louisville America/Kentucky/Monticello America/Knox_IN +America/Kralendijk America/La_Paz America/Lima America/Los_Angeles America/Louisville +America/Lower_Princes America/Maceio America/Managua America/Manaus America/Marigot America/Martinique +America/Matamoros America/Mazatlan America/Mendoza America/Menominee America/Merida +America/Metlakatla America/Mexico_City America/Miquelon America/Moncton @@ -2027,8 +2078,10 @@ America/New_York America/Nipigon America/Nome America/Noronha +America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem +America/Ojinaga America/Panama America/Pangnirtung America/Paramaribo @@ -2045,12 +2098,14 @@ America/Regina America/Resolute America/Rio_Branco America/Rosario +America/Santa_Isabel America/Santarem America/Santiago America/Santo_Domingo America/Sao_Paulo America/Scoresbysund America/Shiprock +America/Sitka America/St_Barthelemy America/St_Johns America/St_Kitts @@ -2073,6 +2128,7 @@ America/Yellowknife Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville +Antarctica/Macquarie Antarctica/Mawson Antarctica/McMurdo Antarctica/Palmer @@ -2109,6 +2165,7 @@ Asia/Dubai Asia/Dushanbe Asia/Gaza Asia/Harbin +Asia/Hebron Asia/Ho_Chi_Minh Asia/Hong_Kong Asia/Hovd @@ -2135,6 +2192,7 @@ Asia/Makassar Asia/Manila Asia/Muscat Asia/Nicosia +Asia/Novokuznetsk Asia/Novosibirsk Asia/Omsk Asia/Oral @@ -2367,6 +2425,7 @@ PST8PDT Pacific/Apia Pacific/Auckland Pacific/Chatham +Pacific/Chuuk Pacific/Easter Pacific/Efate Pacific/Enderbury @@ -2392,6 +2451,7 @@ Pacific/Noumea Pacific/Pago_Pago Pacific/Palau Pacific/Pitcairn +Pacific/Pohnpei Pacific/Ponape Pacific/Port_Moresby Pacific/Rarotonga @@ -2442,6 +2502,7 @@ posix/Africa/Freetown posix/Africa/Gaborone posix/Africa/Harare posix/Africa/Johannesburg +posix/Africa/Juba posix/Africa/Kampala posix/Africa/Khartoum posix/Africa/Kigali @@ -2492,6 +2553,7 @@ posix/America/Asuncion posix/America/Atikokan posix/America/Atka posix/America/Bahia +posix/America/Bahia_Banderas posix/America/Barbados posix/America/Belem posix/America/Belize @@ -2555,19 +2617,23 @@ posix/America/Juneau posix/America/Kentucky/Louisville posix/America/Kentucky/Monticello posix/America/Knox_IN +posix/America/Kralendijk posix/America/La_Paz posix/America/Lima posix/America/Los_Angeles posix/America/Louisville +posix/America/Lower_Princes posix/America/Maceio posix/America/Managua posix/America/Manaus posix/America/Marigot posix/America/Martinique +posix/America/Matamoros posix/America/Mazatlan posix/America/Mendoza posix/America/Menominee posix/America/Merida +posix/America/Metlakatla posix/America/Mexico_City posix/America/Miquelon posix/America/Moncton @@ -2580,8 +2646,10 @@ posix/America/New_York posix/America/Nipigon posix/America/Nome posix/America/Noronha +posix/America/North_Dakota/Beulah posix/America/North_Dakota/Center posix/America/North_Dakota/New_Salem +posix/America/Ojinaga posix/America/Panama posix/America/Pangnirtung posix/America/Paramaribo @@ -2598,12 +2666,14 @@ posix/America/Regina posix/America/Resolute posix/America/Rio_Branco posix/America/Rosario +posix/America/Santa_Isabel posix/America/Santarem posix/America/Santiago posix/America/Santo_Domingo posix/America/Sao_Paulo posix/America/Scoresbysund posix/America/Shiprock +posix/America/Sitka posix/America/St_Barthelemy posix/America/St_Johns posix/America/St_Kitts @@ -2626,6 +2696,7 @@ posix/America/Yellowknife posix/Antarctica/Casey posix/Antarctica/Davis posix/Antarctica/DumontDUrville +posix/Antarctica/Macquarie posix/Antarctica/Mawson posix/Antarctica/McMurdo posix/Antarctica/Palmer @@ -2662,6 +2733,7 @@ posix/Asia/Dubai posix/Asia/Dushanbe posix/Asia/Gaza posix/Asia/Harbin +posix/Asia/Hebron posix/Asia/Ho_Chi_Minh posix/Asia/Hong_Kong posix/Asia/Hovd @@ -2688,6 +2760,7 @@ posix/Asia/Makassar posix/Asia/Manila posix/Asia/Muscat posix/Asia/Nicosia +posix/Asia/Novokuznetsk posix/Asia/Novosibirsk posix/Asia/Omsk posix/Asia/Oral @@ -2920,6 +2993,7 @@ posix/PST8PDT posix/Pacific/Apia posix/Pacific/Auckland posix/Pacific/Chatham +posix/Pacific/Chuuk posix/Pacific/Easter posix/Pacific/Efate posix/Pacific/Enderbury @@ -2945,6 +3019,7 @@ posix/Pacific/Noumea posix/Pacific/Pago_Pago posix/Pacific/Palau posix/Pacific/Pitcairn +posix/Pacific/Pohnpei posix/Pacific/Ponape posix/Pacific/Port_Moresby posix/Pacific/Rarotonga @@ -3008,6 +3083,7 @@ right/Africa/Freetown right/Africa/Gaborone right/Africa/Harare right/Africa/Johannesburg +right/Africa/Juba right/Africa/Kampala right/Africa/Khartoum right/Africa/Kigali @@ -3058,6 +3134,7 @@ right/America/Asuncion right/America/Atikokan right/America/Atka right/America/Bahia +right/America/Bahia_Banderas right/America/Barbados right/America/Belem right/America/Belize @@ -3121,19 +3198,23 @@ right/America/Juneau right/America/Kentucky/Louisville right/America/Kentucky/Monticello right/America/Knox_IN +right/America/Kralendijk right/America/La_Paz right/America/Lima right/America/Los_Angeles right/America/Louisville +right/America/Lower_Princes right/America/Maceio right/America/Managua right/America/Manaus right/America/Marigot right/America/Martinique +right/America/Matamoros right/America/Mazatlan right/America/Mendoza right/America/Menominee right/America/Merida +right/America/Metlakatla right/America/Mexico_City right/America/Miquelon right/America/Moncton @@ -3146,8 +3227,10 @@ right/America/New_York right/America/Nipigon right/America/Nome right/America/Noronha +right/America/North_Dakota/Beulah right/America/North_Dakota/Center right/America/North_Dakota/New_Salem +right/America/Ojinaga right/America/Panama right/America/Pangnirtung right/America/Paramaribo @@ -3164,12 +3247,14 @@ right/America/Regina right/America/Resolute right/America/Rio_Branco right/America/Rosario +right/America/Santa_Isabel right/America/Santarem right/America/Santiago right/America/Santo_Domingo right/America/Sao_Paulo right/America/Scoresbysund right/America/Shiprock +right/America/Sitka right/America/St_Barthelemy right/America/St_Johns right/America/St_Kitts @@ -3192,6 +3277,7 @@ right/America/Yellowknife right/Antarctica/Casey right/Antarctica/Davis right/Antarctica/DumontDUrville +right/Antarctica/Macquarie right/Antarctica/Mawson right/Antarctica/McMurdo right/Antarctica/Palmer @@ -3228,6 +3314,7 @@ right/Asia/Dubai right/Asia/Dushanbe right/Asia/Gaza right/Asia/Harbin +right/Asia/Hebron right/Asia/Ho_Chi_Minh right/Asia/Hong_Kong right/Asia/Hovd @@ -3254,6 +3341,7 @@ right/Asia/Makassar right/Asia/Manila right/Asia/Muscat right/Asia/Nicosia +right/Asia/Novokuznetsk right/Asia/Novosibirsk right/Asia/Omsk right/Asia/Oral @@ -3486,6 +3574,7 @@ right/PST8PDT right/Pacific/Apia right/Pacific/Auckland right/Pacific/Chatham +right/Pacific/Chuuk right/Pacific/Easter right/Pacific/Efate right/Pacific/Enderbury @@ -3511,6 +3600,7 @@ right/Pacific/Noumea right/Pacific/Pago_Pago right/Pacific/Palau right/Pacific/Pitcairn +right/Pacific/Pohnpei right/Pacific/Ponape right/Pacific/Port_Moresby right/Pacific/Rarotonga |