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
- 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
- The Linux-specific
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:
 locale: Transliteration Cyrillic -> ASCII fails  libc: gettid() should have a wrapper  malloc: mtrace hangs when MALLOC_TRACE is defined  glob: fnmatch unbounded stack VLA for collating symbols  localedata: globbing for locale by [[.collating-element.]]  dynamic-link: pldd does no longer work, enters infinite loop  malloc: memusagestat is built using system C library  locale: iconv -c -f ascii with >buffer size worth of input before invalid input drops valid char  nptl: libpthread IFUNC resolver for vfork can lead to crash  locale: Segfault with wide characters and setlocale/fgetwc/UTF-8  localedata: Afar locales: Fix mon, abmon, and abday  localedata: The Japanese Era name will be changed on May 1, 2019  malloc: __malloc_check_init still defined in public header malloc.h.  nptl: Wrong alignment of TLS variables  libc: nftw() doesn't return dangling symlink's inode  malloc: Check the count before calling tcache_get()  malloc: Missing __attribute_alloc_size__ in many allocation functions  localedata: nl_NL missing LC_NUMERIC thousands_sep  nptl: pthread_rwlock_trywrlock results in hang  argparse: Missing compat versions of argp_failure and argp_error for long double = double  libc: Missing compat versions of err.h and error.h functions for long double = double  localedata: Dutch salutations  libc: riscv64: unterminated call chain in __thread_start  network: libresolv should use IP_RECVERR/IPV6_RECVERR to avoid long timeouts  stdio: puts and putchar ouput to _IO_stdout instead of stdout  nss: nss_files: get_next_alias calls fgets_unlocked without checking for NULL.  regex: regexec buffer read overrun in "grep -i '\(\(\)*.\)*\(\)\(\)\1'"  libc: Segfaults if 0 returned from la_version  stdio: Some input functions do not react to stdin assignment  string: x32 memcmp can treat positive length as 0 (if sign bit in RDX is set) (CVE-2019-7309)  nptl: __run_fork_handlers self-deadlocks in malloc/tst-mallocfork2  libc: Systemtap probes need to use "nr" constraint on 32-bit Arm, not the default "nor"  dynamic-link: Dl_serinfo.dls_serpath in dlfcn.h causes UBSAN false positives, change to modern flexible array  nptl: pthread_mutex_trylock does not use the correct order of instructions while maintaining the robust mutex list due to missing compiler barriers.  librt: Non-compatibility symbols for clock_gettime etc. cause unnecessary librt dependencies  localedata: Revert first_weekday removal in en_IE locale  nptl: Use-after-free in Systemtap probe in pthread_join  nptl: pthread_timedjoin_np should be a cancellation point  malloc: Check for large bin list corruption when inserting unsorted chunk  stdio: old x86 applications that use legacy libio crash on exit  dynamic-link: [sparc64] R_SPARC_H34 implementation falls through to R_SPARC_H44  localedata: Missing Minguo calendar support for TW locales  localedata: Orthographic mistakes in 'day' and 'abday' sections in tt_RU (Tatar) locale  localedata: Update locale data to Unicode 12.0.0  dynamic-link: dlopen should not be able open PIE objects  build: "Obsolete types detected" with Linux 5.0 headers  localedata: Orthographic mistakes in 'mon' and 'abmon' sections in tt_RU (Tatar) locale  localedata: Add lang_name for tt_RU locale  locale: Binary locale files are not architecture independent  time: strptime %Ey mis-parses final year of era  dynamic-link: __libc_freeres triggers bad free in libdl if dlerror was not used  dynamic-link: FAIL: elf/tst-pldd with --enable-hardcoded-path-in-tests  malloc: Malloc tunables give tcache assertion failures  libc: conform/arpa/inet.h failures due to linux kernel 64-bit time_t changes  localedata: Update locale data to Unicode 12.1.0  build: nptl/tst-eintr1 test case can hit task limits on some kernels and break testing  build: elf/tst-pldd doesn't work if you install with a --prefix  build: [GCC 9] error: ‘%s’ directive argument is null [-Werror=format-overflow=]  libc: alpha: compat msgctl uses __IPC_64  locale: Data race in __wcsmbs_clone_conv  stdio: Remove codecvt vtables from libio  math: sysdeps/ieee754/dbl-64/branred.c is slow when compiled with-O3 -march=skylake  localedata: nl_NL LC_MONETARY doesn't match CLDR 35  stdio: Old binaries which use freopen with default stdio handles crash  libc: __ppc_get_timebase_freq() always return 0 when using static linked glibc  localedata: szl_PL spelling correction  nss: nss_db: calling getpwent after endpwent crashes  nss: endgrent() clobbers errno=ERRNO for 'group: db files' entry in /etc/nsswitch.conf  libc: mmap64 with very large offset broken on MIPS64 n32  libc: getdents64 type confusion  dynamic-link: ld.so should not require that a versioned symbol is always implemented in the same library  libc: Remove copy_file_range emulation  malloc: memusagestat is linked against system libpthread  libc: Partial test suite run builds corrupt test-in-container testroot
0a8262a1b2 Tag 2.30 release.
ChangeLog | 4 ++++
include/features.h | 2 +-
version.h | 4 ++--
3 files changed, 7 insertions(+), 3 deletions(-)