GNU C Library Changelog

What's new in GNU C Library 2.30

Aug 2, 2019
  • Major new features:
  • * Unicode 12.1.0 Support: Character encoding, character type info, and
  • transliteration tables are all updated to Unicode 12.1.0, using
  • generator scripts contributed by Mike FABIAN (Red Hat).
  • * The dynamic linker accepts the --preload argument to preload shared
  • objects, in addition to the LD_PRELOAD environment variable.
  • * The twalk_r function has been added. It is similar to the existing
  • twalk function, but it passes an additional caller-supplied argument
  • to the callback function.
  • * On Linux, the getdents64, gettid, and tgkill functions have been added.
  • * Minguo (Republic of China) calendar support has been added as an
  • alternative calendar for the following locales: zh_TW, cmn_TW, hak_TW,
  • nan_TW, lzh_TW.
  • * The entry for the new Japanese era has been added for ja_JP locale.
  • * Memory allocation functions malloc, calloc, realloc, reallocarray, valloc,
  • pvalloc, memalign, and posix_memalign fail now with total object size
  • larger than PTRDIFF_MAX. This is to avoid potential undefined behavior with
  • pointer subtraction within the allocated object, where results might
  • overflow the ptrdiff_t type.
  • * The dynamic linker no longer refuses to load objects which reference
  • versioned symbols whose implementation has moved to a different soname
  • since the object has been linked. The old error message, symbol
  • FUNCTION-NAME, version SYMBOL-VERSION not defined in file DSO-NAME with
  • link time reference, is gone.
  • * Add new POSIX-proposed pthread_cond_clockwait, pthread_mutex_clocklock,
  • pthread_rwlock_clockrdlock, pthread_rwlock_clockwrlock and sem_clockwait
  • functions. These behave similarly to their "timed" equivalents, but also
  • accept a clockid_t parameter to determine which clock their timeout should
  • be measured against. All functions allow waiting against CLOCK_MONOTONIC
  • and CLOCK_REALTIME. The decision of which clock to be used is made at the
  • time of the wait (unlike with pthread_condattr_setclock, which requires
  • the clock choice at initialization time).
  • * On AArch64 the GNU IFUNC resolver call ABI changed: old resolvers still
  • work, new resolvers can use a second argument which can be extended in
  • the future, currently it contains the AT_HWCAP2 value.
  • Deprecated and removed features, and other changes affecting compatibility:
  • * The copy_file_range function fails with ENOSYS if the kernel does not
  • support the system call of the same name. Previously, user space
  • emulation was performed, but its behavior did not match the kernel
  • behavior, which was deemed too confusing. Applications which use the
  • copy_file_range function can no longer rely on glibc to provide a fallback
  • on kernels that do not support the copy_file_range system call, and if
  • this function returns ENOSYS, they will need to use their own fallback.
  • Support for copy_file_range for most architectures was added in version
  • 4.5 of the mainline Linux kernel.
  • * The functions clock_gettime, clock_getres, clock_settime,
  • clock_getcpuclockid, clock_nanosleep were removed from the librt library
  • for new applications (on architectures which had them). Instead, the
  • definitions in libc will be used automatically, which have been available
  • since glibc 2.17.
  • * The obsolete and never-implemented XSI STREAMS header files
  • and have been removed.
  • * Support for the "inet6" option in /etc/resolv.conf and the RES_USE_INET6
  • resolver flag (deprecated in glibc 2.25) have been removed.
  • * The obsolete RES_INSECURE1 and RES_INSECURE2 option flags for the DNS stub
  • resolver have been removed from .
  • * With --enable-bind-now, installed programs are now linked with the
  • BIND_NOW flag.
  • * Support for the PowerPC SPE ISA extension (powerpc-*-*gnuspe*
  • configurations) has been removed, following the deprecation of this
  • subarchitecture in version 8 of GCC, and its removal in version 9.
  • * On 32-bit Arm, support for the port-based I/O emulation and the
  • header have been removed.
  • * The Linux-specific header and the sysctl function have been
  • deprecated and will be removed from a future version of glibc.
  • Application should directly access /proc instead. For obtaining random
  • bits, the getentropy function can be used.
  • Changes to build and runtime requirements:
  • * GCC 6.2 or later is required to build the GNU C Library.
  • Older GCC versions and non-GNU compilers are still supported when
  • compiling programs that use the GNU C Library.
  • Security related changes:
  • CVE-2019-7309: x86-64 memcmp used signed Jcc instructions to check
  • size. For x86-64, memcmp on an object size larger than SSIZE_MAX
  • has undefined behavior. On x32, the size_t argument may be passed
  • in the lower 32 bits of the 64-bit RDX register with non-zero upper
  • 32 bits. When it happened with the sign bit of RDX register set,
  • memcmp gave the wrong result since it treated the size argument as
  • zero. Reported by H.J. Lu.
  • CVE-2019-9169: Attempted case-insensitive regular-expression match
  • via proceed_next_node in posix/regexec.c leads to heap-based buffer
  • over-read. Reported by Hongxu Chen.
  • The following bugs are resolved with this release:
  • [2872] locale: Transliteration Cyrillic -> ASCII fails
  • [6399] libc: gettid() should have a wrapper
  • [16573] malloc: mtrace hangs when MALLOC_TRACE is defined
  • [16976] glob: fnmatch unbounded stack VLA for collating symbols
  • [17396] localedata: globbing for locale by [[.collating-element.]]
  • [18035] dynamic-link: pldd does no longer work, enters infinite loop
  • [18465] malloc: memusagestat is built using system C library
  • [18830] locale: iconv -c -f ascii with >buffer size worth of input before
  • invalid input drops valid char
  • [20188] nptl: libpthread IFUNC resolver for vfork can lead to crash
  • [20568] locale: Segfault with wide characters and setlocale/fgetwc/UTF-8
  • [21897] localedata: Afar locales: Fix mon, abmon, and abday
  • [22964] localedata: The Japanese Era name will be changed on May 1, 2019
  • [23352] malloc: __malloc_check_init still defined in public header
  • malloc.h.
  • [23403] nptl: Wrong alignment of TLS variables
  • [23501] libc: nftw() doesn't return dangling symlink's inode
  • [23733] malloc: Check the count before calling tcache_get()
  • [23741] malloc: Missing __attribute_alloc_size__ in many allocation
  • functions
  • [23831] localedata: nl_NL missing LC_NUMERIC thousands_sep
  • [23844] nptl: pthread_rwlock_trywrlock results in hang
  • [23983] argparse: Missing compat versions of argp_failure and argp_error
  • for long double = double
  • [23984] libc: Missing compat versions of err.h and error.h functions for
  • long double = double
  • [23996] localedata: Dutch salutations
  • [24040] libc: riscv64: unterminated call chain in __thread_start
  • [24047] network: libresolv should use IP_RECVERR/IPV6_RECVERR to avoid
  • long timeouts
  • [24051] stdio: puts and putchar ouput to _IO_stdout instead of stdout
  • [24059] nss: nss_files: get_next_alias calls fgets_unlocked without
  • checking for NULL.
  • [24114] regex: regexec buffer read overrun in "grep -i
  • '(()*.)*()()1'"
  • [24122] libc: Segfaults if 0 returned from la_version
  • [24153] stdio: Some input functions do not react to stdin assignment
  • [24155] string: x32 memcmp can treat positive length as 0 (if sign bit in
  • RDX is set) (CVE-2019-7309)
  • [24161] nptl: __run_fork_handlers self-deadlocks in malloc/tst-mallocfork2
  • [24164] libc: Systemtap probes need to use "nr" constraint on 32-bit Arm,
  • not the default "nor"
  • [24166] dynamic-link: Dl_serinfo.dls_serpath[1] in dlfcn.h causes UBSAN
  • false positives, change to modern flexible array
  • [24180] nptl: pthread_mutex_trylock does not use the correct order of
  • instructions while maintaining the robust mutex list due to missing
  • compiler barriers.
  • [24194] librt: Non-compatibility symbols for clock_gettime etc. cause
  • unnecessary librt dependencies
  • [24200] localedata: Revert first_weekday removal in en_IE locale
  • [24211] nptl: Use-after-free in Systemtap probe in pthread_join
  • [24215] nptl: pthread_timedjoin_np should be a cancellation point
  • [24216] malloc: Check for large bin list corruption when inserting
  • unsorted chunk
  • [24228] stdio: old x86 applications that use legacy libio crash on exit
  • [24231] dynamic-link: [sparc64] R_SPARC_H34 implementation falls through
  • to R_SPARC_H44
  • [24293] localedata: Missing Minguo calendar support for TW locales
  • [24296] localedata: Orthographic mistakes in 'day' and 'abday' sections in
  • tt_RU (Tatar) locale
  • [24307] localedata: Update locale data to Unicode 12.0.0
  • [24323] dynamic-link: dlopen should not be able open PIE objects
  • [24335] build: "Obsolete types detected" with Linux 5.0 headers
  • [24369] localedata: Orthographic mistakes in 'mon' and 'abmon' sections in
  • tt_RU (Tatar) locale
  • [24370] localedata: Add lang_name for tt_RU locale
  • [24372] locale: Binary locale files are not architecture independent
  • [24394] time: strptime %Ey mis-parses final year of era
  • [24476] dynamic-link: __libc_freeres triggers bad free in libdl if dlerror
  • was not used
  • [24506] dynamic-link: FAIL: elf/tst-pldd with --enable-hardcoded-path-in-
  • tests
  • [24531] malloc: Malloc tunables give tcache assertion failures
  • [24532] libc: conform/arpa/inet.h failures due to linux kernel 64-bit
  • time_t changes
  • [24535] localedata: Update locale data to Unicode 12.1.0
  • [24537] build: nptl/tst-eintr1 test case can hit task limits on some
  • kernels and break testing
  • [24544] build: elf/tst-pldd doesn't work if you install with a --prefix
  • [24556] build: [GCC 9] error: ‘%s’ directive argument is null
  • [-Werror=format-overflow=]
  • [24570] libc: alpha: compat msgctl uses __IPC_64
  • [24584] locale: Data race in __wcsmbs_clone_conv
  • [24588] stdio: Remove codecvt vtables from libio
  • [24603] math: sysdeps/ieee754/dbl-64/branred.c is slow when compiled with
  • -O3 -march=skylake
  • [24614] localedata: nl_NL LC_MONETARY doesn't match CLDR 35
  • [24632] stdio: Old binaries which use freopen with default stdio handles
  • crash
  • [24640] libc: __ppc_get_timebase_freq() always return 0 when using static
  • linked glibc
  • [24652] localedata: szl_PL spelling correction
  • [24695] nss: nss_db: calling getpwent after endpwent crashes
  • [24696] nss: endgrent() clobbers errno=ERRNO for 'group: db files' entry
  • in /etc/nsswitch.conf
  • [24699] libc: mmap64 with very large offset broken on MIPS64 n32
  • [24740] libc: getdents64 type confusion
  • [24741] dynamic-link: ld.so should not require that a versioned symbol is
  • always implemented in the same library
  • [24744] libc: Remove copy_file_range emulation
  • [24757] malloc: memusagestat is linked against system libpthread
  • [24794] libc: Partial test suite run builds corrupt test-in-container
  • testroot

New in GNU C Library 2.29 (Feb 5, 2019)

  • * The getcpu wrapper function has been added, which returns the currently used CPU and NUMA node. This function is Linux-specific.
  • * A new convenience target has been added for distribution maintainers to build and install all locales as directories with files. The new target is run by issuing the following command in your build tree: 'make localedata/install-locale-files', with an optional DESTDIR to set the install root if you wish to install into a non-default configured location.
  • * Optimized generic exp, exp2, log, log2, pow, sinf, cosf, sincosf and tanf.
  • * The reallocarray function is now declared under _DEFAULT_SOURCE, not just for _GNU_SOURCE, to match BSD environments.
  • * For powercp64le ABI, Transactional Lock Elision is now enabled iff kernel indicates that it will abort the transaction prior to entering the kernel (PPC_FEATURE2_HTM_NOSC on hwcap2). On older kernels the transaction is suspended, and this caused some undefined side-effects issues by aborting transactions manually. Glibc avoided it by abort transactions manually on each syscall, but it lead to performance issues on newer kernels where the HTM state is saved and restore lazily (the state being saved even when the process actually does not use HTM).
  • * The functions posix_spawn_file_actions_addchdir_np and posix_spawn_file_actions_addfchdir_np have been added, enabling posix_spawn and posix_spawnp to run the new process in a different directory. These functions are GNU extensions. The function posix_spawn_file_actions_addchdir_np is similar to the Solaris function of the same name.
  • * The popen and system do not run atfork handlers anymore (BZ#17490). Although it is a possible POSIX violation, the POSIX rationale in pthread_atfork documentation regarding atfork handlers is to handle inconsistent mutex state after a fork call in a multi-threaded process. In both popen and system there is no direct access to user-defined mutexes.
  • * Support for the C-SKY ABIV2 running on Linux has been added. This port requires at least binutils-2.32, gcc-9.0, and linux-4.20. Two ABIs are supported...
  • - C-SKY ABIV2 soft-float little-endian
  • - C-SKY ABIV2 hard-float little-endian
  • * strftime's default formatting of a locale's alternative year (%Ey) has been changed to zero-pad the year to a minimum of two digits, like "%y". This improves the display of Japanese era years during the first nine years of a new era, and is expected to be harmless for all other locales (only Japanese locales regularly have alternative year numbers less than 10). Zero-padding can be overridden with the '_' or '-' flags (which are GNU extensions).
  • * As a GNU extension, the '_' and '-' flags can now be applied to "%EY" to control how the year number is formatted; they have the same effect that they would on "%Ey".
  • Deprecated and removed features, and other changes affecting compatibility:
  • * The glibc.tune tunable namespace has been renamed to glibc.cpu and the tunable glibc.tune.cpu has been renamed to glibc.cpu.name.
  • * The type of the pr_uid and pr_gid members of struct elf_prpsinfo, defined in < sys/procfs.h >, has been corrected to match the type actually used by the Linux kernel. This affects the size and layout of that structure on MicroBlaze, MIPS (n64 ABI only), Nios II and RISC-V.
  • * For the MIPS n32 ABI, the type of the pr_sigpend and pr_sighold members of struct elf_prstatus, and the pr_flag member of struct elf_prpsinfo, defined in , has been corrected to match the type actually used by the Linux kernel. This affects the size and layout of those structures.
  • * An archaic GNU extension to scanf, under which '%as', '%aS', and '%a[...]' meant to scan a string and allocate space for it with malloc, is now restricted to programs compiled in C89 or C++98 mode with _GNU_SOURCE defined. This extension conflicts with C99's use of '%a' to scan a hexadecimal floating-point number, which is now available to programs compiled as C99 or C++11 or higher, regardless of _GNU_SOURCE.
  • POSIX.1-2008 includes the feature of allocating a buffer for string input with malloc, using the modifier letter 'm' instead. Programs using '%as', '%aS', or '%a[...]' with the old GNU meaning should change to '%ms', '%mS', or '%m[...]' respectively. Programs that wish to use the C99 '%a' no longer need to avoid _GNU_SOURCE.
  • GCC's -Wformat warnings can detect most uses of this extension, as long as all functions that call vscanf, vfscanf, or vsscanf are annotated with __attribute__ ((format (scanf, ...))).
  • Changes to build and runtime requirements:
  • * Python 3.4 or later is required to build the GNU C Library.
  • * On most architectures, GCC 5 or later is required to build the GNU C Library. (On powerpc64le, GCC 6.2 or later is still required, as before.)
  • Older GCC versions and non-GNU compilers are still supported when compiling programs that use the GNU C Library.
  • Security related changes:
  • CVE-2018-19591: A file descriptor leak in if_nametoindex can lead to a denial of service due to resource exhaustion when processing getaddrinfo calls with crafted host names. Reported by Guido Vranken.
  • CVE-2019-6488: On x32, the size_t parameter may be passed in the lower 32 bits of a 64-bit register with with non-zero upper 32 bit. When it happened, accessing the 32-bit size_t value as the full 64-bit register in the assembly string/memory functions would cause a buffer overflow. Reported by H.J. Lu.
  • CVE-2016-10739: The getaddrinfo function could successfully parse IPv4 addresses with arbitrary trailing characters, potentially leading to data or command injection issues in applications.

New in GNU C Library 2.27 (Feb 11, 2018)

  • https://sourceware.org/ml/libc-announce/2018/msg00000.html

New in GNU C Library 2.24 (Aug 5, 2016)

  • The minimum Linux kernel version that this version of the GNU C Library can be used with is 3.2, except on i[4567]86 and x86_64, where Linux kernel version 2.6.32 or later suffices (on architectures that already required kernel versions more recent than 3.2, those requirements remain unchanged). Linux 3.2 or later kernel headers are required on all architectures.
  • The pap_AN locale has been deleted. This has been deprecated for a long time. It has been replaced by pap_AW & pap_CW, both of which have long been included in previous releases.
  • The readdir_r and readdir64_r functions have been deprecated. It is recommended to use readdir and readdir64 instead.
  • The type “union wait” has been removed. It was deprecated in the early 1990s and never part of POSIX. Application code should use the int type instead of “union wait”.
  • A new NSS action is added to facilitate large distributed system administration. The action, MERGE, allows remote user stores like LDAP to be merged into local user stores like /etc/groups in order to provide easy to use, updated, and managed sets of merged credentials. The new action can be used by configuring it in /etc/nsswitch.conf: group: files [SUCCESS=merge] nis Implemented by Stephen Gallagher (Red Hat).
  • The deprecated __malloc_initialize_hook variable has been removed from the API.
  • The long unused localedef --old-style option has been removed. It hasn't done anything in over 16 years. Scripts using this option can safely drop it.
  • nextupl, nextup, nextupf, nextdownl, nextdown and nextdownf are added to libm. They are defined by TS 18661 and IEEE754-2008. The nextup functions return the next representable value in the direction of positive infinity and the nextdown functions return the next representable value in the direction of negative infinity. These are currently enabled as GNU extensions.
  • Security related changes:
  • An unnecessary stack copy in _nss_dns_getnetbyname_r was removed. It could result in a stack overflow when getnetbyname was called with an overly long name. (CVE-2016-3075)
  • Previously, getaddrinfo copied large amounts of address data to the stack, even after the fix for CVE-2013-4458 has been applied, potentially resulting in a stack overflow. getaddrinfo now uses a heap allocation instead. Reported by Michael Petlan. (CVE-2016-3706)
  • The glob function suffered from a stack-based buffer overflow when it was called with the GLOB_ALTDIRFUNC flag and encountered a long file name. Reported by Alexander Cherepanov. (CVE-2016-1234)
  • The Sun RPC UDP client could exhaust all available stack space when flooded with crafted ICMP and UDP messages. Reported by Aldy Hernandez' alloca plugin for GCC. (CVE-2016-4429)
  • The IPv6 name server management code in libresolv could result in a memory leak for each thread which is created, performs a failing naming lookup, and exits. Over time, this could result in a denial of service due to memory exhaustion. Reported by Matthias Schiffer. (CVE-2016-5417)
  • The following bugs are resolved with this release:
  • [1170] localedata: ne_NP: update Nepali locale definition file [3629] manual: stpcpy description in string.texi refers to MS-DOG instead of MS-DOS. [6527] malloc: [powerpc] Malloc alignment insufficient for PowerPC [6796] math: fdim() does not set errno on overflow [10354] libc: posix_spawn should use vfork() in more cases than presently [11213] localedata: localedata: add copyright disclaimer to locale files [12143] localedata: chr_US: new Cherokee locale [12450] localedata: sgs_LT: new locale [12676] localedata: ln_CD: new locale [13237] localedata: LC_ADDRESS.country_name: update all locales w/latest CLDR data [13304] math: fma, fmaf, fmal produce wrong results [14259] build: --localedir arg to configure is ignored [14499] nptl: Does posix_spawn invoke atfork handlers / use vfork? [14750] libc: Race condition in posix_spawn vfork usage vs signal handlers [14934] localedata: es_CL: wrong first weekday chilean locale [15262] localedata: LC_MESSAGES.yesexpr/noexpr: inconsistent use of romanisation [15263] localedata: LC_MESSAGES.yesexpr/noexpr: inconsistent use of 1/0 and +/- [15264] localedata: LC_MESSAGES.yesstr/nostr: lacking in many locales [15368] nptl: raise() is not async-signal-safe [15479] math: ceil, floor, round and trunc raise inexact exception [15578] localedata: kk_KZ: various updates [16003] localedata: pap_AN: punt old locale [16137] localedata: iw_IL: punt old locale [16190] localedata: eo: new esperanto locale [16374] localedata: lv_LV: change currency symbol in LC_MONETARY to euro [16742] malloc: race condition: pthread_atfork() called before first malloc() results in unexpected locking behaviour/deadlocks [16975] localedata: LC_MESSAGES.yesexpr/noexpr: revisit capitalization in all locales [16983] localedata: postal_fmt does not allow %l and %n modifiers [17565] localedata: pt_PT: wrong (work-)week start [17899] math: [powerpc] floorl returns negative zero with FE_DOWNWARD [17950] build: Build fails with -msse [18205] localedata: be_BY*: wrong first_weekday and first_workday [18433] libc: posix_spawn does not return correctly upon failure to execute [18453] localedata: charmaps/IBM875: incorrect codes [18712] string: bits/string2.h incompatible with -O2 -Werror=packed -Wsystem-headers [18896] localedata: he_IL: improvements for currency [18911] localedata: ro_RO: Correcting week day name for "Tuesday" in Romanian locale data [18960] locale: s390: _nl_locale_subfreeres uses larl opcode on misaligned symbol [19056] libc: Deprecate readdir_r [19133] localedata: pt_*: days & months should be lowercase in Portuguese language [19198] localedata: nl_NL: small improvements for Dutch locales [19257] network: Per-thread memory leak in __res_vinit with IPv6 nameservers (CVE-2016-5417) [19269] build: tst-audit4 and tst-audit10 failures with gcc-6 on non avx machine [19400] locale: Language missing in "iso-639.def", trivial fix in description [19431] malloc: Deadlock between fflush, getdelim, and fork [19505] libc: Incorrect file descriptor validity checks in posix_spawn_file_actions_add{open,close,dup2} [19509] dynamic-link: dlsym, dlvsym do not report errors through dlerror when using RTLD_NEXT [19512] locale: Stale `#ifndef HAVE_BUILTIN_EXPECT' in `intl/{gettextP,loadinfo}.h' [19534] libc: execle, execlp may use malloc [19568] localedata: *_CH: Swiss locales have inconsistent start of week [19573] network: res_nclose and __res_maybe_init disagree about name server initialization, breaking Hesiod [19575] localedata: Status of GB18030 tables [19581] localedata: sr_* date_fmt string contains additional newline [19583] string: SSSE3_Fast_Copy_Backward flag needs to be enabled for AMD Excavator core [19592] math: [ldbl-128ibm] ceill incorrect in non-default rounding modes [19593] math: [ldbl-128ibm] truncl incorrect in non-default rounding modes [19594] math: [ldbl-128ibm] roundl incorrect in non-default rounding modes [19595] math: [ldbl-128ibm] fmodl incorrect for results in subnormal double range [19602] math: [ldbl-128ibm] fmodl handling of equal arguments with low part zero incorrect [19603] math: [ldbl-128ibm] remainderl, remquol incorrect sign handling in equality tests [19610] dynamic-link: ldconfig -X removes stale symbolic links [19613] libc: s390x (64 bit) macro expansion WCOREDUMP and others [19633] locale: strfmon_l applies global locale to number formatting [19642] network: Memory leak in getnameinfo [19648] libc: test-skeleton.c: Do not set RLIMIT_DATA [19653] libc: Potential for NULL pointer dereference (CWE-476) in glibc-2.22 [19654] math: [x86_64] Need testcase for BZ #19590 fix [19671] localedata: Missing Sanity Check for malloc() in 'tst-fmon.c' & 'tst-numeric.c' [19674] math: [ldbl-128ibm] powl incorrect overflow handling [19677] math: [ldbl-128ibm] remainderl equality test incorrect for zero low part [19678] math: [ldbl-128ibm] nextafterl, nexttowardl incorrect sign of zero result [19679] dynamic-link: gcc-4.9.3 C++ exception handling broken due to unaligned stack [19726] locale: Converting UCS4LE to INTERNAL with iconv() does not update pointers and lengths in error-case. [19727] locale: Converting from/to UTF-xx with iconv() does not always report errors on UTF-16 surrogates values. [19755] nscd: nscd assertion failure in gc [19758] dynamic-link: Typo in EXTRA_LD_ENVVARS for x86-64 [19759] libc: mempcpy shouldn't be inlined [19762] dynamic-link: HAS_CPU_FEATURE/HAS_ARCH_FEATURE are easy to misuse [19765] libc: s390 needs an optimized mempcpy [19779] glob: glob: buffer overflow with GLOB_ALTDIRFUNC due to incorrect NAME_MAX limit assumption (CVE-2016-1234) [19783] build: benchtests don't support --enable-hardcoded-path-in-tests [19787] network: Missing and incorrect truncation checks in getnameinfo [19790] math: [ldbl-128ibm] nearbyintl incorrect in non-default rounding modes [19791] network: Assertion failure in res_query.c with un-connectable name server addresses [19792] libc: MIPS: backtrace yields infinite backtrace with makecontext [19822] math: libm.so install clobbers old version [19825] network: resolv: send_vc can return uninitialized data in second response to getaddrinfo [19830] network: nss_dns: should check RDATA length against buffer length [19831] network: nss_dns: getaddrinfo returns uninitialized data when confronted with A/AAAA records of invalid size [19837] nss: nss_db: No retries for some long lines with a larger buffer [19848] math: powl(10,n) for n=-4,-5,-6,-7 is off by more than 1 ULP [19853] stdio: Printing IBM long double in decimal with high precision is sometimes incorrect [19860] build: x86_64: compile errors for tst-audit10 and tst-auditmod10b [19861] nptl: libpthread IFUNC resolver for fork can lead to crash [19862] network: resolv, nss_dns: Remove remaining logging of unexpected record types [19865] network: Assertion failure or memory leak in _nss_dns_getcanonname_r [19868] network: nss_dns: netent code does not skip over non-PTR records [19879] network: nss_dns: Stack overflow in getnetbyname implementation (CVE-2016-3075) [19881] string: Improve x86-64 memset [19907] string: Incorrect memcpy tests [19916] dynamic-link: S390: fprs/vrs are not saved/restored while resolving symbols [19925] libc: termios.h XCASE namespace [19928] string: memmove-vec-unaligned-erms.S is slow with large data size [19929] libc: limits.h NL_NMAX namespace [19931] stdio: Memory leak in vfprintf [19957] libc: clone(CLONE_VM) access invalid parent memory [19963] localedata: en_IL: New locale [19989] stdio: stdio.h cuserid namespace [19994] network: getaddrinfo does not restore RES_USE_INET6 flag in gethosts [19996] locale: langinfo.h nl_langinfo_l namespace [20005] stdio: fflush on a file opened with fmemopen resets position to 0 [20010] network: getaddrinfo: Stack overflow in hostent translation (CVE-2016-3706) [20012] stdio: libio: fmemopen append mode failure [20014] stdio: stdio.h namespace for pre-threads POSIX [20017] network: resolv: Use gmtime_r instead of gmtime in p_secstodate [20023] libc: fcntl.h timespec namespace [20024] math: [x86_64] vectorized sincos trashes the stack [20031] network: nss_hesiod: Heap overflow in get_txt_records [20041] time: sys/time.h timespec namespace [20043] libc: unistd.h missing cuserid for UNIX98 and before [20044] libc: unistd.h missing pthread_atfork for UNIX98 [20051] libc: ttyslot in wrong header under wrong conditions [20054] libc: gethostname not declared for XPG4 [20055] libc: termios.h missing tcgetsid for XPG4 [20072] dynamic-link: x86 init_cpu_features is called twice in static executable [20073] libc: sys/stat.h fchmod namespace [20074] libc: stdlib.h rand_r namespace [20076] libc: sys/stat.h missing S_IFSOCK, S_ISSOCK for XPG4 [20094] libc: stdlib.h should not declare grantpt, ptsname, unlockpt for XPG3 [20111] libc: struct sockaddr_storage cannot be aggregate-copied [20112] network: sunrpc: stack (frame) overflow in Sun RPC clntudp_call (CVE-2016-4429) [20115] string: Extra alignment in memset-vec-unaligned-erms.S [20119] libc: Wrong mask for processors level type from CPUID [20139] dynamic-link: Upper part of zmm is zeroed if Glibc is built with AS not supporting AVX512 [20151] math: [ldbl-128/ldbl-128ibm] j0l, j1l, y0l, y1l return sNaN for sNaN argument [20153] math: [ldbl-128ibm] sqrtl (sNaN) returns sNaN [20156] math: [ldbl-128ibm] ceill, rintl etc. return sNaN for sNaN argument [20157] math: [powerpc] fabsl (sNaN) wrongly raises "invalid" [20160] math: [powerpc] ceil, rint etc. return sNaN for sNaN input [20178] libc: posix_spawn{p} should not call exit [20191] stdio: libio: vtables hardening [20195] string: FMA4 detection requires CPUID execution with register eax=0x80000001 [20198] libc: quick_exit incorrectly destroys C++11 thread objects. [20205] math: [i386/x86_64] nextafterl incorrect incrementing negative subnormals [20212] math: acos (sNaN) returns sNaN [20213] math: asin (sNaN) returns sNaN [20214] network: Linux header sync with linux/in6.h and ipv6.h again. [20218] math: [i386] asinhl (sNaN) returns sNaN [20219] math: [i386] atanhl (sNaN) returns sNaN [20222] stdio: fopencookie: Mangle function pointers [20224] math: [i386] cbrtl (sNaN) returns sNaN [20225] math: ldexp, scalbn, scalbln return sNaN for sNaN input [20226] math: [i386/x86_64] expl, exp10l, expm1l return sNaN for sNaN input [20227] math: [i386/x86_64] logl (sNaN) returns sNaN [20228] math: [i386/x86_64] log10l (sNaN) returns sNaN [20229] math: [i386/x86_64] log1pl (sNaN) returns sNaN [20232] math: [ldbl-128] expm1l (sNaN) returns sNaN [20233] math: [ldbl-128ibm] expm1l (sNaN) returns sNaN [20234] math: [ldbl-128ibm] log1pl (sNaN) returns sNaN [20235] math: [i386/x86_64] log2l (sNaN) returns sNaN [20237] nss: nss_db: get*ent segfaults without preceding set*ent [20240] math: modf (sNaN) returns sNaN [20248] libc: debug/tst-longjump_chk2 calls printf from a signal handler [20250] math: frexp (sNaN) returns sNaN [20252] math: atan2 (sNaN, qNaN) fails to raise "invalid" [20255] math: [i386] fdim, fdimf return with excess range and precision / double rounding [20256] math: [i386/x86_64] fdiml returns sNaN for sNaN input [20260] string: ../sysdeps/x86/bits/string.h:1092:3: error: array subscript is below array bounds [-Werror=array-bounds] [20262] nis: _nss_nis_initgroups_dyn always returns NSS_STATUS_NOTFOUND [20263] nptl: robust mutex deadlocks if other thread requests timedlock (Only arm/linux) [20277] libc: $dp is not initialized correctly in sysdeps/hppa/start.S [20284] malloc: malloc: Corrupt arena avoidance causes unnecessary mmap fallbacks [20296] math: [i386/x86_64] scalbl returns sNaN for sNaN input, missing "invalid" exceptions [20314] nptl: make[4]: *** [/usr/include/stdlib.h] Error 1 [20316] localedata: id_ID: Februari instead of Pebruari [20327] string: POWER8 strcasecmp returns incorrect result [20347] math: Failure: Test: j0_downward (0xap+0) [20348] libc: FAIL: misc/tst-preadvwritev64 [20349] libc: 64-bit value is passed differently in p{readv,writev}{64} [20350] libc: There is no test for p{read,write}64 [20357] math: Incorrect cos result for 1.5174239687223976 [20384] build: Don't run libmvec-sincos-avx* tests on non avx machines

New in GNU C Library 2.23 (Feb 22, 2016)

  • CVE-2015-7547: glibc getaddrinfo() stack-based buffer overflow -- Fixed on development branch for glibc 2.23 release.

New in GNU C Library 2.21 (Feb 7, 2015)

  • The following bugs are resolved with this release: 6652, 10672, 12674, 12847, 12926, 13862, 14132, 14138, 14171, 14498, 15215, 15378, 15884, 16009, 16418, 16191, 16469, 16576, 16617, 16618, 16619, 16657, 16740, 16857, 17192, 17266, 17273, 17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583, 17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633, 17634, 17635, 17647, 17653, 17657, 17658, 17664, 17665, 17668, 17682, 17702, 17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733, 17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782, 17791, 17793, 17796, 17797, 17801, 17803, 17806, 17834, 17844, 17848, 17868, 17869, 17870, 17885, 17892.
  • CVE-2015-1472 Under certain conditions wscanf can allocate too little memory for the to-be-scanned arguments and overflow the allocated buffer. The implementation now correctly computes the required buffer size when using malloc.
  • A new semaphore algorithm has been implemented in generic C code for all machines. Previous custom assembly implementations of semaphore were difficult to reason about or ensure that they were safe. The new version of semaphore supports machines with 64-bit or 32-bit atomic operations. The new semaphore algorithm is used by sem_init, sem_open, sem_post, sem_wait, sem_timedwait, sem_trywait, and sem_getvalue.
  • Port to Altera Nios II has been contributed by Mentor Graphics.
  • Optimized strcpy, stpcpy, strncpy, stpncpy, strcmp, and strncmp implementations for powerpc64/powerpc64le. Implemented by Adhemerval Zanella (IBM).
  • Added support for TSX lock elision of pthread mutexes on powerpc32, powerpc64 and powerpc64le. This may improve lock scaling of existing programs on HTM capable systems. The lock elision code is only enabled with --enable-lock-elision=yes. Also, the TSX lock elision implementation for powerpc will issue a transaction abort on every syscall to avoid side effects being visible outside transactions.
  • Optimized strcpy, stpcpy, strchrnul and strrchr implementations for AArch64. Contributed by ARM Ltd.
  • i386 memcpy functions optimized with SSE2 unaligned load/store.
  • CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag under certain input conditions resulting in the execution of a shell for command substitution when the applicaiton did not request it. The implementation now checks WRDE_NOCMD immediately before executing the shell and returns the error WRDE_CMDSUB as expected.
  • CVE-2012-3406 printf-style functions could run into a stack overflow when processing format strings with a large number of format specifiers.
  • CVE-2014-9402 The nss_dns implementation of getnetbyname could run into an infinite loop if the DNS response contained a PTR record of an unexpected format.
  • The minimum GCC version that can be used to build this version of the GNU C Library is GCC 4.6. Older GCC versions, and non-GNU compilers, can still be used to compile programs using the GNU C Library.
  • The GNU C Library is now built with -Werror by default. This can be disabled by configuring with --disable-werror.
  • New locales: tu_IN, bh_IN, raj_IN, ce_RU.
  • The obsolete sigvec function has been removed. This was the original 4.2BSD interface that inspired the POSIX.1 sigaction interface, which programs have been using instead for about 25 years. Of course, ABI compatibility for old binaries using sigvec remains intact.
  • Merged gettext 0.19.3 into the intl subdirectory. This fixes building with newer versions of bison.
  • Support for MIPS o32 FPXX, FP64A and FP64 ABI Extensions. The original MIPS o32 hard-float ABI requires an FPU where double-precision registers overlay two consecutive single-precision registers. MIPS32R2 introduced a new FPU mode (FR=1) where double-precision registers extend the corresponding single-precision registers which is incompatible with the o32 hard-float ABI. The MIPS SIMD ASE and the MIPSR6 architecture both require the use of FR=1 making a transition necessary. New o32 ABI extensions enable users to migrate over time from the original o32 ABI through to the updated o32 FP64 ABI. To achieve this the dynamic linker now tracks the ABI of any loaded object and verifies that new objects are compatible. Mode transitions will also be requested as required and unsupportable objects will be rejected. The ABI checks include both soft and hard float ABIs for o32, n32 and n64.