From 69d24275e4d5296a5f02e4c4d0fc438a80d159b8 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 21 Dec 2011 23:14:55 +0000 Subject: Wed Dec 21 23:14:54 UTC 2011 --- core/glibc/PKGBUILD | 25 ++++++---- core/glibc/glibc-2.14.1-tzfile-overflow.patch | 72 +++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 core/glibc/glibc-2.14.1-tzfile-overflow.patch (limited to 'core/glibc') diff --git a/core/glibc/PKGBUILD b/core/glibc/PKGBUILD index 0be9ebb2f..3247503ad 100644 --- a/core/glibc/PKGBUILD +++ b/core/glibc/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 144848 2011-12-08 12:17:04Z allan $ +# $Id: PKGBUILD 145254 2011-12-20 11:55:23Z allan $ # Maintainer: Allan McRae # toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc @@ -6,7 +6,7 @@ pkgname=glibc pkgver=2.14.1 -pkgrel=2 +pkgrel=4 _glibcdate=20111025 pkgdesc="GNU C Library" arch=('i686' 'x86_64') @@ -31,6 +31,7 @@ source=(ftp://ftp.archlinux.org/other/glibc/${pkgname}-${pkgver}_${_glibcdate}.t glibc-2.14-revert-4768ae77.patch glibc-2.14-reexport-rpc-interface.patch glibc-2.14-reinstall-nis-rpc-headers.patch + glibc-2.14.1-tzfile-overflow.patch nscd locale.gen.txt locale-gen) @@ -45,11 +46,11 @@ md5sums=('c52a15134dfa9f2c94f2ccd4cb155cf1' '7da8c554a3b591c7401d7023b1928afc' 'c5de2a946215d647c8af5432ec4b0da0' '55febbb72139ac7b65757df085024b83' + '178779bfaa1418c709f31c25eb3d8a3e' 'b587ee3a70c9b3713099295609afde49' '07ac979b6ab5eeb778d55f041529d623' '476e9113489f93b348b21e144b6a8fcf') - mksource() { git clone git://sourceware.org/git/glibc.git pushd glibc @@ -99,6 +100,10 @@ build() { # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=bdd816a3 (only fedora branch...) patch -Np1 -i ${srcdir}/glibc-2.14-reinstall-nis-rpc-headers.patch + # http://sourceware.org/bugzilla/show_bug.cgi?id=13506 + # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=97ac2654 + patch -Np1 -i ${srcdir}/glibc-2.14.1-tzfile-overflow.patch + install -dm755 ${pkgdir}/etc touch ${pkgdir}/etc/ld.so.conf @@ -181,9 +186,12 @@ package() { ln -v -s ../lib/ld* . fi - # manually strip files as stripping libpthread-*.so and libthread_db.so - # with the default $STRIP_SHARED breaks gdb and stripping ld-*.so breaks - # valgrind on x86_64 + # Do not strip the following files for improved debugging support + # ("improved" as in not breaking gdb and valgrind...): + # ld-${pkgver}.so + # libc-${pkgver}.so + # libpthread-${pkgver}.so + # libthread_db-1.0.so cd $pkgdir strip $STRIP_BINARIES sbin/{ldconfig,sln} \ @@ -193,10 +201,9 @@ package() { usr/sbin/{iconvconfig,nscd} [[ $CARCH = "i686" ]] && strip $STRIP_BINARIES usr/bin/lddlibc4 - strip $STRIP_STATIC usr/lib/*.a \ - lib/{{ld,libpthread}-${pkgver},libthread_db-1.0}.so + strip $STRIP_STATIC usr/lib/*.a - strip $STRIP_SHARED lib/{libanl,libBrokenLocale,libc,libcidn,libcrypt}-${pkgver}.so \ + strip $STRIP_SHARED lib/{libanl,libBrokenLocale,libcidn,libcrypt}-${pkgver}.so \ lib/libnss_{compat,dns,files,hesiod,nis,nisplus}-${pkgver}.so \ lib/{libdl,libm,libnsl,libresolv,librt,libutil}-${pkgver}.so \ lib/{libmemusage,libpcprofile,libSegFault}.so \ diff --git a/core/glibc/glibc-2.14.1-tzfile-overflow.patch b/core/glibc/glibc-2.14.1-tzfile-overflow.patch new file mode 100644 index 000000000..9e21cbfd3 --- /dev/null +++ b/core/glibc/glibc-2.14.1-tzfile-overflow.patch @@ -0,0 +1,72 @@ +diff --git a/time/tzfile.c b/time/tzfile.c +index 144e20b..402389c 100644 +--- a/time/tzfile.c ++++ b/time/tzfile.c +@@ -234,23 +234,58 @@ __tzfile_read (const char *file, size_t extra, char **extrap) + goto read_again; + } + ++ if (__builtin_expect (num_transitions ++ > ((SIZE_MAX - (__alignof__ (struct ttinfo) - 1)) ++ / (sizeof (time_t) + 1)), 0)) ++ goto lose; + total_size = num_transitions * (sizeof (time_t) + 1); + total_size = ((total_size + __alignof__ (struct ttinfo) - 1) + & ~(__alignof__ (struct ttinfo) - 1)); + types_idx = total_size; +- total_size += num_types * sizeof (struct ttinfo) + chars; ++ if (__builtin_expect (num_types ++ > (SIZE_MAX - total_size) / sizeof (struct ttinfo), 0)) ++ goto lose; ++ total_size += num_types * sizeof (struct ttinfo); ++ if (__builtin_expect (chars > SIZE_MAX - total_size, 0)) ++ goto lose; ++ total_size += chars; ++ if (__builtin_expect (__alignof__ (struct leap) - 1 ++ > SIZE_MAX - total_size, 0)) ++ goto lose; + total_size = ((total_size + __alignof__ (struct leap) - 1) + & ~(__alignof__ (struct leap) - 1)); + leaps_idx = total_size; ++ if (__builtin_expect (num_leaps ++ > (SIZE_MAX - total_size) / sizeof (struct leap), 0)) ++ goto lose; + total_size += num_leaps * sizeof (struct leap); +- tzspec_len = (sizeof (time_t) == 8 && trans_width == 8 +- ? st.st_size - (ftello (f) +- + num_transitions * (8 + 1) +- + num_types * 6 +- + chars +- + num_leaps * 12 +- + num_isstd +- + num_isgmt) - 1 : 0); ++ tzspec_len = 0; ++ if (sizeof (time_t) == 8 && trans_width == 8) ++ { ++ off_t rem = st.st_size - ftello (f); ++ if (__builtin_expect (rem < 0 ++ || (size_t) rem < (num_transitions * (8 + 1) ++ + num_types * 6 ++ + chars), 0)) ++ goto lose; ++ tzspec_len = (size_t) rem - (num_transitions * (8 + 1) ++ + num_types * 6 ++ + chars); ++ if (__builtin_expect (num_leaps > SIZE_MAX / 12 ++ || tzspec_len < num_leaps * 12, 0)) ++ goto lose; ++ tzspec_len -= num_leaps * 12; ++ if (__builtin_expect (tzspec_len < num_isstd, 0)) ++ goto lose; ++ tzspec_len -= num_isstd; ++ if (__builtin_expect (tzspec_len == 0 || tzspec_len - 1 < num_isgmt, 0)) ++ goto lose; ++ tzspec_len -= num_isgmt + 1; ++ if (__builtin_expect (SIZE_MAX - total_size < tzspec_len, 0)) ++ goto lose; ++ } ++ if (__builtin_expect (SIZE_MAX - total_size - tzspec_len < extra, 0)) ++ goto lose; + + /* Allocate enough memory including the extra block requested by the + caller. */ -- cgit v1.2.3-54-g00ecf