diff options
| author | EuAndreh <eu@euandre.org> | 2024-01-02 06:13:38 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2024-01-02 06:13:38 -0300 |
| commit | 621104393dbd1b9e2f524715e0ea49ee288b5e75 (patch) | |
| tree | 0c4d2229f03aa9796e9f8ffec06ec24b46b052d9 /WHATSNEW | |
| parent | mntent: fields are delimited only by tabs or spaces, not general whitespace (diff) | |
| download | grovel-621104393dbd1b9e2f524715e0ea49ee288b5e75.tar.gz grovel-621104393dbd1b9e2f524715e0ea49ee288b5e75.tar.xz | |
git mv WHATSNEW CHANGELOG.md
Diffstat (limited to 'WHATSNEW')
| -rw-r--r-- | WHATSNEW | 2398 |
1 files changed, 0 insertions, 2398 deletions
diff --git a/WHATSNEW b/WHATSNEW deleted file mode 100644 index c5c8c9f4..00000000 --- a/WHATSNEW +++ /dev/null @@ -1,2398 +0,0 @@ -0.5.0 - initial release - - - -0.5.9 - signal ABI bugfix, various cleanup and fixes: - -sigset_t was wrongly defined as 1024 bytes instead of 1024 bits, -breaking the intended ABI compatibility with the LSB/glibc sigaction -structure. users should upgrade immediately and rebuild any libraries -or object files that might be using the incorrect definitions. - -improved security against DoS with tcb shadow passwords by checking -that the file opened was really an ordinary file. - -fixed a bug in the implementation of atomic ops that could have -allowed the compiler to incorrectly reorder them (in practice, gcc -with the default settings on i386 was not reordering them). - -greatly improved conformance to the C and POSIX standards regarding -what the standard header files make visible. _POSIX_C_SOURCE is now -needed to get POSIX functions in standard C headers, and _XOPEN_SOURCE -or _GNU_SOURCE are required to get XSI interfaces or GNU extensions, -respectively. - -many internal improvements have been made to the syscall-related code -in preparation for porting to x86_64 and other archs. - - - -0.6.0 - x86_64 port, various important bugs fixed - -new x86_64 (amd64) architecture port, contributed by Nicholas J. Kain, -along with PORTING guide. source tree layout and build system have -been improved to accommodate further ports. - -various bugs that were introduced while making the headers respect C -and POSIX namespace standards have been fixed. conformance to the -standards has been improved. - -fixed an inefficiency in qsort that triggered a bug (occasionaly -internal compiler error) in some versions of gcc. - -fixed a major bug in the printf %n specifier that prevented it from -working and caused memory corruption. - - - -0.7.0 - major improvements to posix conformance and completeness - -implemented posix shared memory and semaphore interfaces. - -implemented all remaining required pthread and clock interfaces. - -major fixes to signal semantics. - -greatly improved temporary file name generation for safety against -denial of service due to intentional name collisions. - -added syscall wrappers for the linux inotify interface. - -malloc(0) now returns a non-null pointer. - -fixed printf %n specifier (again), pthread_once (it was always -hanging), and non-default-type mutex behavior. - -added ucontext/sigcontext support in headers to facilitate building -libgcc with dwarf2 unwind support, and possibly other low-level tools. - -improved musl-gcc compiler wrapper. - -implemented many small missing functions here and there, minor header -fixes, etc. - - - -0.7.1 - improvements to completeness, bug fixes - -implemented flockfile, wprintf, and robust mutex functions. - -fixed stack corruption bug in times(), minor header bugs, and some -error return value bugs in thread interfaces. - - - -0.7.5 - new features, major optimization, and robustness - -implemented POSIX timers. - -optimized and simplified many thread-related functions. - -eliminated resource leak races in thread cancellation. (almost all -existing implementations, including glibc, have these leaks.) - -overhauled stdio implementation to take advantage of readv/writev for -reduced syscall load, and improved stdio's handling of error status. - -added syscall header and interface for applications to use and -greatly simplified internal system for making syscalls. - -strangthened tmpnam/tempnam/tmpfile filename generation and made the -straight C functions not depend on POSIX symbols. - -fixed pthread cancellation ABI on i386 to match the LSB/glibc ABI - -better double-free handling in malloc - -various minor bug fixes - - - -0.7.6 - major bug fixes - -fixed rare but serious under-allocation bug in malloc. - -fixed signedness bug in strchr that prevented finding high bytes. - -fixed serious parsing bugs in strtold. - -fixed statvfs syscall (it was always failing with EINVAL). - -fixed race condition in set*id() functions with threads (possible -deadlock). further audit still needed though. - -fseek no longer sets the stream error flag on failed seeks (this was -wrong and broke some programs, notably GNU m4). - -nl_langinfo is no longer a dummy function. (the functionality was -previously implemented but accidentally left unused). - -various small fixes have been made to the implementations and -prototypes for nonstandard and obsolete functions - - - -0.7.7 - more bug fixes and program-compatibility improvements - -fixed floating point formatting and rounding bugs in printf. - -fixed broken %N$ positional argument specifiers in printf. - -fixed misaligned read/overread bug in strchr which could lead to -crashes scanning tiny strings at the end of a page when the next page -is not readable, or on archs (not yet supported) that forbid -misaligned reads. - -fixed breakage of statvfs on x86_64 - -fixed crash in getmntent_r - -fixed bug in POSIX timers created with NULL sigevent argument - -improved semaphore performance, and sem_wait is now interruptable by -signals, as required by POSIX. - -added many compatibility and system-level interfaces, increasing the -proportion of busybox that works with musl. - - - -0.7.8 - more bug fixes and compatibility improvements - -fixed problems with ipv6 dns and address printing code that made ipv6 -support practically unusable, and some other getaddrinfo bugs. - -fixed broken sendmsg/recvmsg functions on x86_64 (caused by incorrect -msghdr structure). - -fixed broken sigsetjmp asm on x86_64. - -worked around a problem with input buffering on terminals reblocking -after getting a blank line, due to a bug in the linux readv syscall. - -various improvements to the "rsyscall" system used to implement -threaded setuid, setgid, etc. - -exiting/cancelling the a timer handler thread no longer kills the -timer. - -fixed incorrect trailing zeros on some %g conversions in printf. - -fixed buggy byte-swapping functions and moved them to inlines in -byteswap.h. - -many small improvements to header/application compatibility, support -for nonstandard macros, etc. - - - -0.7.9 release notes - -new pthread cancellation implementation: -- safe against resource-leak/side-effect-leak race conditions -- safe against interruption by signal handlers -- reduced bloat in all cancellable functions -- reduced bloat for blocking cancellation - -new interfaces implemented: -- realpath (limited functionality) -- wordexp (limited functionality) -- flock (nonstandard) -- forkpty (nonstandard) -- posix_fadvise -- posix_fallocate - -general bug fixes: -- syslog function failure to communicate with syslogd -- bug in siginfo_t definition if wait.h was included before signal.h -- incorrect struct definitions for most of sysv ipc -- pthread_exit/cancel on timer handler wrongly destroying the timer -- linux dup2 ebusy workaround -- obscure issues in non-threaded programs using some pthread functions -- getopt_long allowed mismatch in last char of option name -- incorrect parsing of obscure ip address forms -- initgroups not working reliably (uninitialized var) -- shadow pass treating empty expiry field as pass-expired-in-1970 -- bogus longjmp if pthread_exit was called from cancellation handlers - -x86_64-specific bug fixes: -- fcntl file locking -- thread stack alignment -- broken select timeouts due to incorrect timeval definition - - - -0.7.10 release notes - -new features: -- ipv6 numeric string parsing -- eventfd syscall wrappers - -optimizations: -- new qsort implementation using the smoothsort algorithm -- much smaller/faster sigset_t handling functions -- lowered spin count before futex wait in synchronization functions - -general bug fixes: -- incorrect floating point round-to-even behavior in printf -- major bugs in pthread barrier implementation -- off-by-one error in scanf %n results -- scanf failure to report EOF when scanning for literal text -- minor missing/incorrect prototype issues -- dependency on undefined call order in fclose - -compiler issue workarounds: -- incorrect inlining of variadic functions on recent gcc versions -- pcc preprocessor bug with recursive macro expansion - - - -0.7.11 release notes - -new features: -- integrated dynamic linker -- dynamic loading (dlopen/dlsym) (for dynamic-linked programs only) -- XSI search.h API -- POSIX message queues -- POSIX spawn interfaces -- BSD pseudo-random number generator API (random/srandom/initstate/etc.) -- floating point environment (limited usefulness due to gcc bugs) - -general bug fixes: -- possible crashes with wordexp due to uninitialized variable -- race condition in pthread_kill (also present and unfixed in glibc/nptl) -- pthread exit destructors called too late -- dangerous unbounded vla in glob -- brk/sbrk legacy functions mismatching legacy semantics -- wcsncpy dest buffer overflow -- strncat and wcsncat possible overflows due to double-termination - - - -0.7.12 release notes - -new features: -- support for textrels in shared objects -- rpath support in dynamic linker -- stdio_ext.h functions (for better gnu software compatibility) - -bug fixes: -- some compilers miscompiling dlopen due to misuse of longjmp -- safe handling of invalid long-double bit patterns (affects printf) -- workaround for bugs in linux mprotect syscall -- thread-safety for random() functions -- various minor issues - - - -0.8.0 release notes - -new features: -- chinese and japanese legacy charset support in iconv -- zero-syscall clock_gettime support (dynamic-linked x86_64 only) -- futex-based locking for stdio (previously used spinlocks) -- LD_PRELOAD and RTLD_NEXT support in dynamic linker -- strptime (mostly working but incomplete) -- posix aio (mostly working but not entirely conformant) -- memory streams (fmemopen, open_memstream, ...) -- stub/dummy implementations for various useless legacy functions -- if_nameindex - -security hardening: -- setuid, etc. should not longer be able to "partially fail" with threads -- ensure suid programs start with fd 0,1,2 open -- improved openpty/forkpty failure checks - -threads/synchronization bug fixes: -- dangerous spurious wakeup in pthread_join lead to early return -- race condition enabling async cancellation (delayed/lost cancellation) -- destruction/unmapping race conditions in semaphores, mutexes, rwlocks -- recursive rwlock_rdlock deadlock when a writer is waiting -- race condition in sigqueue with fork -- timer expiration thread exit wasn't running dtors -- timer threads weren't blocking signals -- close was wrongly cancellable after succeeding on some devices -- robust mutex list was not reset on fork - -general bug fixes: -- incorrect logic in fread (spurious blocking; crash on write-only files) -- many corner cases and overflow cases for strtol-family functions -- various printf integer formatting issues with flags/width/precision -- incorrect iconv return value on failure -- broken FD_* macros on 64-bit targets -- clock function returning wrong value (real time not cpu time) -- siglongjmp signal mask clobbering (off-by-one pointer error) -- dynamic linker weak symbol resolution issues -- fdopendir failure to set errno -- various minor header fixes - - - -0.8.1 release notes - -bug fixes: -- mismatching prototypes caused build failure on 64-bit -- other minor prototype errors in the headers have been fixed -- various other small omissions fixed - - - -0.8.2 release notes - -new features: -- ptrace syscall support - -bug fixes: -- const error (only a warning with many compilers) in lio_listio -- minor portability fixes aimed at supporting new arch targets - - - -0.8.3 release notes - -new features: -- arm port (experimental) -- better musl-gcc wrapper script for building against musl -- added clone system call - -bug fixes: -- numerous header file typos, copy/paste errors, omissions -- statfs and statvfs ABI are now LSB-conformant (and actually work) - - - -0.8.4 release notes - -new features: -- arm dynamic linker support -- process-shared pthread barriers now work -- efficient futex-requeue-based cond var broadcast -- more optional cancellation points are now cancellable -- printf accepts null pointers with %s, prints as "(null)" -- recursive mutexes are now fully reentrant -- __cxa_atexit support -- real vfork -- dynamic linker now gold-compatible -- prlimit syscall -- support for large limits with setrlimit/getrlimit (even on 32-bit) -- glob now supports GLOB_PERIOD option (GNU extension) - -bug fixes: -- many serious issues in condition variables -- rwlock failure-to-wake deadlock issues -- various small header files bugs/omissions -- wrong failure return for pthread_create -- path handling issues on execvp -- lock count corruption with robust recursive mutexes on owner death -- integer overflows in atoi, etc. reading most-negative value -- spurious mremaps on every realloc of large memory chunks -- pthread cancellation failure in single-threaded programs - -security: -- avoid fd_set overflow in dns lookups - - - -0.8.5 release notes - -new features: -- stdio operations are now cancellable (only when low-level io happens) -- global ctor/dtor support in main program start code and shared libs -- dynamic linker support for PIE executables (but missing startup code) -- vfork support on x86_64 -- complete set of locale_t functions (all ignore the locale argument) -- provide define float_t and double_t in math.h -- lighter/faster cancellation cleanup handler register/unregister - -bug fixes: -- gcc wrapper now supports -shared, -nostdlib, -nostartfiles -- removed one wrongly-classified character from iswspace set (zwsp) -- fixed crashes in dns lookup on some errors, e.g. resolv.conf missing -- "make install" no longer tries to build shared libc if disabled -- ptrace argument handling bugs fixed -- work around visibility-hidden bugs in gcc 3.x -- fix thread-pointer-loss issue when it's initialized in signal handlers -- various minor typo/misc fixes in headers - -compatibility: -- glob behaves more like traditional implementations w.r.t. GLOB_MARK -- added legacy futimes, lutimes functions -- more compatibility macros in sys/param.h (nonstandard header) -- setfs[ug]id syscall wrappers (linux specific) -- fgetpwent function (nonstandard) -- utmp.h matches traditional version more closely -- caddr_t now matches glibc type (void * instead of long) -- dummy (always-fail) dlopen and dlsym functions for static linked programs -- [efg]cvt functions (previously posix, removed from standard) -- get_current_dir_name function (nonstandard) - - - -0.8.6 release notes - -bug fixes: -- fix crash in dns lookups for all static-linked, non-threaded programs - - - -0.8.7 release notes - -new features: -- c++ support with g++'s libstdc++ -- c99 math library (float, long double, complex, etc.) -- numerous wchar_t functions -- a64l, l64a functions -- getdate function - -compatibility: -- c89 compatibility in math.h -- syscall.h alias for sys/syscall.h -- memory.h alias for string.h -- getcwd supports null buffer argument (auto-allocation) - -bug fixes: -- major fenv (floating point environment) fixes and optimizations -- strptime mishandling of day/month names -- strtoull wrongly rejecting the highest 16 possible values as overflow -- math.h constant expression fixes for INFINITY/NAN/etc. -- scanf mishandling of "0" with "%x" - - - -0.8.8 release notes - -new feature: -- major math correctness and performance improvements -- many math functions implemented in asm for i386 -- some math functions (mostly long double) in asm for x86_64 -- new floating point parser/converter with correct rounding -- implement wcstod, wcstof, and wcstold -- new scanf implementation - cleaner, faster, more correct -- minimal/incomplete strfmon implementation - -compatibility: -- header fixes for c++ -- regex code resync with TRE; support common regex extensions -- support for compiling apps with gcc's -funsigned-char -- sysconf now returns dynamic limits for open files, processes -- give dlerror proper error status stickiness -- make alloca work even with -fno-builtin - -critical security fixes: -- stack-based buffer overflow in fprintf on unbuffered files - -other bug fixes: -- rare gcc register allocation (miscompilation) bug in syscall wrappers -- printf was rejecting the valid (but redundant) %lf format specifier -- fixed big data bloat (missing const) in math functions -- many math fixes related to floating point exceptions and rounding -- corrected DECIMAL_DIG definitions -- tgammal was wrongly setting global signgam -- crash in wordfree with uninitialized we_offs -- fix wordexp not null-initializing the we_offs initial slots - - - -0.8.9 release notes - -bug fixes: -- major breakage in strtol and family: failure to accept leading spaces -- incorrect name for MATH_ERREXCEPT in math.h - -compatibility: -- prototypes for a few additional nonstandard functions - - - -0.8.10 release notes - -new features: -- correct over/underflow detection (ERANGE setting) for strtod -- new musl-gcc wrapper, specfile based, faster and more robust -- meaningful return strings for dlerror -- new iswalpha, iswpunct, and wcwidth; sync'd to Unicode 6.1 -- towupper/towlower sync'd with Unicode 6.1 -- new futex-based libc-internal locks instead of spinlocks -- experimental stack protector support (minimal; no random canary) -- experimental gdb shared library tracking support - -compatibility: -- getusershell family functions -- getresuid and getresgid syscall wrappers -- byte swapping macros in endian.h -- getdtablesize was wrongly declared in unistd.h for _XOPEN_SOURCE - -bug fixes: -- iconv_open wrongly rejecting most dest charsets (broken in 0.8.0) -- sysconf failure when correct value is -1 (broken in 0.8.8) -- scanf and strtod family functions overreading past NAN (4 bytes vs 3) -- scanf and strtod wrongly treating "0.00000000001", etc. as 0 -- many bugs in towupper/towlower (never seriously tested before) -- int8_t definition was wrong when gcc -funsigned-char was used - - - -0.9.0 release notes - -license change: MIT - -new features: -- configure script, improved build system -- full stack protector support -- PIE support on x86 and x86_64 -- new O(1) space, O(nm) time implementation of fnmatch -- improved support for sse2 floating point mode on x86 - -compatibility: -- added linux unshare syscall -- exp10/pow10 function -- sqrtl support on arm (previously missing) -- removed minimal linux/*.h headers that could conflict with real ones -- support for _LARGEFILE64_SOURCE (mapped to standard fcns with #define) -- better c89 compatibility in headers -- stub versions of sched_* functions (previously missing) -- pthread stacks no longer executable (compat with hardened kernels) -- new ar.h and lastlog.h (legacy junk) -- various other header improvements - -optimization: -- additional x86_64 math asm -- better formula for acos use in i386 asm - -bug fixes: -- large (up to a few %) errors in strtod for certain values due to bug -- mbsnrtowcs and wcsnrtombs were completely broken (bad exit logic) -- wide printf %.0s could fail due to uninitialized variable -- missing dlerror strings for dlsym in some cases - - - -0.9.1 release notes - -new features: -- dynamic linker can be used as a program to explicitly load/run executables -- ldd command, usable by making a symlink to the dynamic linker named ldd - -bug fixes: -- major bugs in POSIX BRE parsing inherited from TRE regex code -- character matching bug in regex on ARM: WCHAR_MAX was assumed to be signed -- various obscure fixes related to signals and pthread cancellation -- remquot subnormal remainder bug -- buggy macros in (nonstandard) sys/param.h -- major bug in pthread barriers on x86_64 (out of bounds write) -- utimes (legacy) function was making wrong syscall (utime instead of utimes) -- avoid using "old" syscalls that don't exist on arm eabi linux -- broken strrchr(str, 0) -- broken mbsinit(0) -- broken wcsncmp -- syntax error in nextafter macro in tgmath.h -- missing support for -pie in musl-gcc wrapper -- abort could wrongly fail to terminate the program in some cases - -compatibility: -- increase default thread stack size to 80k -- support _BSD_SOURCE feature test macro -- support _LARGEFILE64_SOURCE feature test macro (merely exposes alt names) -- lots of legacy-compatibility improvements in headers -- various minor GNU extension functions -- sysconf reporting number of available CPUs/cores -- various LSB/glibc ABI interfaces aimed at compatibility with some binaries -- use fistpll asm mnemonic instead of fistpq for compat with clang - - - -0.9.2 release notes - -bug fixes: -- pointer overflow in printf (crash on 32bit userspace, 64bit kernel) -- printf %ls over-read bug -- strtod failure to read -0x as negative zero -- flush stdio after dtors, not before -- wrong file position for buffered input streams on exit -- popen was broken when stdin/out were already closed -- broken wcwidth tables (missing many characters) -- fwrite: wrong return value of partial/failed write -- broken utf-16 conversions -- bad buffer length check in getlogin_r -- bad perror("") behavior; did not match perror(0) -- broken sysinfo syscall/structure -- stdint.h const macro signedness bugs -- broken include guards in some headers -- bogus localeconv values -- cancellation-safety for popen and pclose -- fma corner cases wrong on i386 -- fcntl F_GETOWN errno missing on failure. -- char signedness bug in dynamic linker broke dlopen on arm -- mprotect failure in dynamic linker caused crash instead of error - -build system: -- configure check to work around hacked-up gcc versions -- test for old binutils that can't support musl dynamic linker - -compatibility: -- make _GNU_SOURCE imply _LARGEFILE64_SOURCE -- syscall wrapper for lots of nonstandard and/or legacy linux syscalls -- versionsort stub -- timegm function (inverse of gmtime) -- various minor header tweaks -- make __freading/__fwriting semantics match traditional ones -- added gnulib-compatibility stdio interfaces -- added pthread_attr_setstack interface -- make strerror_r return partial string when buffer is too small -- duplocale should accept LC_GLOBAL_LOCALE -- align ptsname_r to upcoming posix requirements -- support invalid ld80 bit patterns as extra nans. - - - -0.9.3 release notes - -new features: -- mips (32-bit, o32 abi) port, currently static-linked only -- newly overhauled crypt implementation -- improved library pathname info for debugger from the dynamic linker -- getaddrinfo (and getservbyname) now support /etc/services lookups -- pipe2 syscall wrapper -- splice and vmsplice syscall wrappers -- syscall wrappers for extended attribute interfaces -- ioperm/iopl syscall wrappers on archs that support these operations - -bug fixes: -- dlsym RTLD_NEXT library search order was wrong -- multiple dlopen pathname and library name handling errors -- potential race condition in detached thread exit -- broken internal-lock-handling code not updated for futex-based __lock -- sem_trywait spurious EAGAIN errors arising from CAS failures -- workaround kernel bug in cmsghdr size_t vs socklen_t issue (64-bit) -- getservby* crash on null protocol argument -- logic error skipping failed interfaces in if_nameindex -- various minor header/declaration related issues - -arm-specific bug fixes: -- broken crti/crtn startup code when gcc crtbegin/end files are linked -- sigsetjmp tail call optimization failure broke the function -- incorrect little-endian assumptions in atomic.h functions -- use of blx instruction in asm (not supported on pre-v5 arm) - -build system: -- only use expensive -ffloat-store cflag on archs/compilers that need it -- make musl-gcc wrapper support -lgcc (mainly for self-hosting) - - - -0.9.4 release notes - -new features: -- blowfish crypt -- dynamic linking on mips -- arm hard float support -- BSD fgetln function in stdio -- minor header improvements for compatibility -- support for CROSS_COMPILE variable to configure -- legacy significand function -- better support for SUSv3-targeted programs - -performance: -- assembly (string ops based) memcpy for i386 and x86_64 -- reduce printf overhead - -bug fixes: -- failure of strtod, etc. to process extremely long strings correctly -- read overrun in wcsstr for short needles -- various major mips issues that prevented most software from working -- erroneous floating point exception behavior in i386/x86_64 exp asm -- crashes on null arguments to legacy err.h functions -- various header file/type issues -- extremely rare/obscure race condition with robust mutexes -- crypt now never returns null (most programs don't check, then crash) -- missing xattr remove functions - - - -0.9.5 release notes - -compatibility and headers: -- POSIX+XSI+BSD features enabled by default with no macros defined -- most programs can now be built without adding -D_GNU_SOURCE -- added C99 restrict keyword where required in all prototypes -- greater C89 compatibility -- cleaner, more-compatible public syscall.h -- many other header fixes -- support for compiling musl with clang/llvm - -new features: -- sha 256/512 password hash functions in crypt -- GNU hash support in dynamic linker -- partial C11 coverage -- dladdr function added -- dynamic linker reports all errors instead of exiting on first error -- syscall wrappers added for most remaining linux syscalls -- provide POSIX O_SEARCH open mode using linux O_PATH - -bug fixes: -- most atexit functions were being skipped when exiting -- some BSD functions were not being exposed under _BSD_SOURCE -- issues loading ssp-protected DSO into non-ssp program with dlopen - -debloating: -- eliminate .eh_frame (10-15% loaded size bloat) -- optimal inline syscall asm for ARM and MIPS -- no longer force -O3 for shared libs - - - -0.9.6 release notes - -bug fixes: -- serious breakage in definition of O_ACCMODE mask (missing a bit) - -new features: -- O_EXEC open mode -- md5 crypt hash function - - - -0.9.7 release notes - -new features: -- thread-local storage (__thread/_Thread_local) -- microblaze port -- getopt option parsing reset support -- vsyscall (sysenter, etc.) support on i386 (faster syscalls) -- memmem function (GNU extension) -- mips fenv support -- accept "nan(n-char-sequence)" in strtod/scanf family functions -- configure now supports compiling with pcc - -quality and correctness improvements: -- close-on-exec flag for all library-internal file descriptors -- cancellation-safety and corner-case overhaul in shm_open/sem_open -- close EINTR vs EINPROGRESS issue -- mark binaries as not requiring executable stack -- better gdb compatibility in dynamic linker -- support recursive dlopen (dlopen called from constructors) -- posix_spawn/system/popen no longer momentarily double commit charge -- all stdio functions wait for locks - -bug fixes: -- broken sysvipc *ctl functions on 64-bit archs -- broken shmdt on some archs -- getaddrinfo failure with port "0" -- dirname handling of trailing slash -- vfork race in posix_spawn - - - -0.9.8 release notes - -new features: -- powerpc port -- dl_iterate_phdr interface -- added mips-specific syscalls -- thread priority scheduling -- C11 CMPLX macro in complex.h -- x86 port io functions in sys/io.h - -compatibility: -- improved headers for trace/debugging/machine-access -- stub functions for unsupported thread-related functionality - -bug fixes: -- numerous math bugs (mostly exception flags and excess-precision issues) -- register clobber error in i386 vsyscall asm (did not affect most callers) -- various incorrect definitions in mips headers -- broken dlsym asm on mips -- empty prefix handling in configure script (--prefix="") -- ldso search path logic issues -- lock handling for stdio memory streams at exit time -- invalid SO_REUSEPORT definition in socket.h (not supported by Linux) -- broken redirection attempt to /dev/null in configure script - - - -0.9.9 release notes - -new features: -- tgamma implementation (no longer lgamma wrapper with low precision) -- various gnu extensions: sigandset, sigorset, etc. -- futimesat function (obsolete) -- various linux syscalls: arch_prctl, personality, etc. - -optimizations: -- hyperbolic, inverse hyperbolic, and inverse trig, bessel functions -- is* comparison macros in math.h now expand inline properly - -library bugs fixed: -- calling getenv from shared library ctors was broken -- invalid read in mmap-serviced aligned_alloc/memalign (possible crash) -- wrong errno result in fallback path of pipe2 -- various math functions raising spurious exceptions -- mmap errno value on invalid offsets -- backwards alignment logic in strlcpy -- integer overflows in bessel functions -- large (up to 60ulp) error in erfcf -- dlsym/dlclose crashing on invalid library handles -- failure to handle arch variations for cloexec/nonblock flags -- lio_listio wrong return value for LIO_WAIT mode -- dladdr failure to resolve PLT addresses -- time_t/struct tm conversion off-by-one-day in december -- malloc corruption on nonstandard kernels with non-page-aligned brk - -arch-specific bugs fixed: -- arm ctors/dtors were not working with recent gcc versions -- arm and mips setjmp/longjmp wrongly saved/restored fenv state -- loss of precision in i386/x86_64 expl - -header bugs fixed: -- incorrect PRI/SCN macros in inttypes.h for some types -- arm sys/user.h regressions -- failure of offsetof() to be an integer constant expression -- tgmath return value type problems - -header compatibility improvements: -- _GNU_SOURCE now enables everything; _ALL_SOURCE also works -- scsi/scsi.h and scsi/sg.h are now provided -- additional MAP_* flags for mmap -- additional F_* commands and flags for fcntl -- additional socket option, IPPROTO_* values, and multicase macros -- thread-related waitpid flags -- EHWPOISON added to errno.h -- additional macros for mount, swap, and reboot operations -- expose additional link.h structures -- always ensure sizeof(NULL)==sizeof(void *), even in c++ -- additional flags for poll, epoll, inotify, timerfd, timex, dlfcn -- register names in signal.h/ucontext.h for x86 -- ipc.h ipc_perm nonstandard struct field name compatibility improve - - - -0.9.10 release notes - -new features: -- getifaddrs -- pthread_getattr_np (widely used by garbage collectors) -- mkostemps, mkostemp, mkstemps functions (mkostemp is future-POSIX) -- strcasestr and strverscmp (previously stubs) - -improvements: -- major performance improvements in mbtowc -- avoid filling caller-provided thread stacks with large TLS -- debloat unnecessary static buffers -- robust posix_spawn based on CLONE_VM instead of vfork -- new system() and popen() based on posix_spawn -- better strerror strings -- further emulation of atomic close-on-exec/nonblock options for old kernels -- provide macro constants for new-ish kernel features - -compatibility: -- several nonstandard but widely-available pwd/grp/shadow functions -- program_invocation_[short_]name -- re-added useconds_t type used by some programs -- some legacy arpa headers -- dn_skipname function (legacy resolver API) -- additional ABI aliases for supporting glibc-linked libraries/binaries - -general bugs fixed: -- stale locks and bogus munmap call when pthread_create fails -- uninitialized argument to munmap when dynlink load_library fails -- incorrect error returns in gethostby*_r -- memory leak in gethostbyname family -- blank ai_canonname in getaddrinfo for non-CNAME records -- undefined HZ macro in scsi/sg.h -- wrong return value for wmemmove on forward-copy -- namespace conformance in strings.h -- various utmp.h bugs -- unnecessary DT_SONAME in libc.so caused problems on some systems -- multiple bugs in syslog, some possibly dangerous -- non-functional setpriority function -- slight mishandling of 0xf5 byte in UTF-8 decoder -- misaligned memory accesses in mbsrtowcs - -arch-specific bugs fixed: -- crash in shared library loading on arm -- missing __aeabi_atexit needed by arm eabi -- wrong float_t definition on x86_64 -- various low-impact type size/alignment mismatches in some headers -- epoll struct alignment wrong on non-x86[_64] archs -- broken pipe2 fallback code on mips with old kernels - - - -0.9.11 release notes - -new features: -- %m allocation modifier for scanf -- week number and ISO week-based-year functionality in strftime -- per-process and per-thread cputime clocks -- ethernet address conversion interfaces -- legacy classful ipv4 network address interfaces -- minimal dlinfo function (nonstandard) - -other improvements: -- dynamic linker path file can now use newlines to separate paths -- math optimizations for archs with extended precision (i386) -- musl-gcc wrapper now exposes gcc's intrinsic headers -- quality of rand and rand_r pseudo-random sequences -- support for large device minor numbers (greater than 8 bits) -- various header conformance and compatibility fixes - -directly user-visible bugs fixed: -- scanf losing characters on unbuffered streams and fmemopen streams -- failure of mbsrtowcs to record stop position when dest is full -- failure of iconv to convert to legacy codepages -- non-working pthread_[sg]etschedparam functions (wrong syscall arguments) - -other potentially-serious bugs fixed: -- resource leaks in sem_open -- various bugs in thread exit synchronization -- invalid access in aio notification after aiocb free/reuse -- synchronization in dynamic linker when new thread dlopens during ctors -- lack of error handling for failure to read dynamic linker path file -- creation by mmap or shmget of objects larger than PTRDIFF_MAX - -minor conformance bugs fixed: -- overflow handling for the clock function -- workaround for incorrect exceptions in fma due to compiler bugs -- workaround wrong kernel type for sem_nsems field in struct semid_ds - -arch-specific bugs fixed: -- x86_64 sigsetjmp clobbered the signal mask rather than saving it -- misaligned stack when calling ctors/dtors (crashing on x86_64) - - - -0.9.12 release notes - -new features: -- zoneinfo time zone support -- PIE support on all supported archs -- named sub-archs for endian and float ABI variants -- improved support for non-root installs of the dynamic linker -- ability to selectively build only performance-critical modules with -O3 -- simple buffer overflow detection in free/realloc -- inet_ntop now presents v4-mapped addresses in ::ffff:a.b.c.d form -- ldd now reports libc and the dynamic linker in its output - -compatibility: -- support for new init/fini array (needed for ctors/dtors on newer gcc) -- C++ ABI fully matches glibc/LSB, at least on x86 -- many added ABI compatibility symbols for using glibc-linked libs -- support for STB_GNU_UNIQUE symbol bindings (found in some C++ libs) -- macros/types for new Linux kernel features in headers - -bugs fixed: -- crashes in scanf on literal mismatches (regression from adding %m) -- dl_iterate_phdr was passing invalid phdr pointers to its callback -- getaddrinfo with null host and AF_UNSPEC was failing to report IPv6 -- integer overflows in date/time conversion code -- misinterpretation of pre-1930s dates as post-2038 on 32-bit archs -- make install failed to install bits headers if make was not run first -- shm_open was wrongly cancellable -- low- or no-impact heap corruption in memalign -- explicitly running the dynamic linker on PIE programs did not work -- missing macros and sysconf for some supported POSIX option groups -- missing close-on-exec flags for several internal fd uses - -arch-specific bugs: -- wrong SIG_ATOMIC_MIN/MAX macros on x86_64 -- erfcl was missing on archs where long double is same as double -- broken dynamic-model TLS in static-linked arm/mips/powerpc programs - - - -0.9.13 release notes - -new features: -- iconv support for EUC-KR and Big5 (including HKSCS) encodings -- field widths (POSIX 2008 feature) in strftime -- recursive rpath and $ORIGIN support in dynamic linker -- cpu affinity interfaces -- support for armhf (hardfloat) floating point environment (fenv) -- support for SSE fenv on i386 (for apps using -mfpmath=sse -msse2) -- strftime %s format (seconds since the epoch, future POSIX requirement) -- configure script now saves its command line as a comment in config.mak -- legacy functions valloc and euidaccess - -performance: -- optimized asm memcpy for arm -- optimized asm memset for i386 and x86_64 -- optimized C versions of memcpy and memset for all archs -- eliminated major spurious syscalls from posix_spawn -- some math asm for armhf (hardfloat) - -workarounds for: -- qemu-user's rt_sigaction syscall does not allow old to alias new -- qemu-user's madvise always succeeds (broke pthread_getattr_np) -- passing PT_INTERP to dlopen attempted to double-load libc -- gcc 4.8.x generating self-referential (infinite recursion) memcpy/memset -- linux's lack of support for fchdir, fchmod, fchown, fstat on O_PATH fds - -bugs fixed: -- failure to honor flags for fchmodat and faccessat (linux syscall api flaws) -- SIGEV_THREAD timer id corruption and race condition issues -- timer thread TLS incorrectly keeping values from previous expiry run -- ecvt/fcvt decimal position off-by-one -- in symbol-versioned libs, symbol resolved to oldest instead of newest -- posix_spawn not correctly reporting errno from exec failure -- "make install" was not atomic (overwrote files rather than replacing) -- integer overflows in strftime -- unset/empty TZ variable was mishandled -- strftime could crash if the struct tm did not have valid tm_zone field -- failure of fenv functions to handle invalid arguments (required by ISO C) -- failure of some math functions (C and i386 asm) to raise underflow flag -- broken dn_expand function (previously not used internally) -- race conditions with signals during fork -- incorrect access check in mktemp (obsolete function) -- unnecessary arbitrary limits on size of program headers in dynamic loader -- text formatting bugs in output of err.h functions - -arch-specific bugs: -- fesetenv(FE_DFL_ENV) crashed on i386 -- breakage of arm crt code when libc is compiled as thumb -- arm/armhf (hardfloat) misidentified by configure -- ambiguity of wait (exit status) macros on mips with signal number 127 -- wrong value of _NSIG and SIGRTMAX on mips - - - -0.9.14 release notes - -bugs fixed: -- failure to properly install dynamic linker with DESTDIR set (symlink wrong) -- rare deadlock in libc-internal locking routines -- dynamic linker used fallback paths wrongly on (possibly transient) errors -- popen broken when stdin or stdout was already closed in parent -- deadlock/memory-corruption in multithreaded set*id and setrlimit functions -- realpath failed when file was not readable -- readpath mistakenly had cancellation points in it -- crashes in scanf with invalid %m conversion specifiers -- misclassificiation of some invalid ld80 float representation in fpclassify -- various overflow and underflow flag issues in math functions -- domain handling errors for acoshf and acoshl -- wrong values for some sysconf properties -- lack of proper memory barriers on arm - -mips-specific bugs: -- broken sysv ipc structures -- multiple stack-related bugs in clone, leading to crashes in parent or child -- overflow writing sigset_t in multithreaded set*id and setrlimit functions - -other improvements: -- size and performance improvements to various math functions -- wait.h as a compatibility alias for sys/wait.h -- various header improvements -- support for runtime-variable page size on archs that need it (mainly mips) - - - -0.9.15 release notes - -new features: -- support for mixing IPv4 and v6 nameserver addresses in resolv.conf -- RFC 3678 multicast structures/macros in netinet/in.h -- putspent and fgetspent functions (shadow password API) -- timef function (obsolete, removed in POSIX 2008) -- fanotify syscalls (Linux-specific feature) -- semtimedop syscall (Linux-specific sysvipc extension) -- quotactl syscall and header (filesystem quotas support) -- drem and finite functions (obsolete BSD functions) -- getloadavg function (non-standard) -- herror function (non-standard and obsolete) -- libc.so now stores and prints its version information -- expose constants for new Linux features including O_TMPFILE -- implement FNM_LEADING_DIR option to fnmatch (GNU extension) -- posix_close function (accepted for inclusion in next POSIX issue) - -bugs fixed: -- buffer overflow in mbsrtowcs -- clobbering of gr_name in getgrnam_r and getgrgid_r -- execle ignoring the environment argument -- setenv crash on malloc failure -- out-of-bounds access in fnmatch with FNM_PATHNAME and certain patterns -- failure of malloc to set errno when failing to extend heap -- incorrect errno value from getcwd with zero size -- spurious failure in faccessat with AT_EACCESS flag with suid/sgid programs -- several fd leaks due to missing close-on-exec flag -- misspellings/typos in macro names in several headers -- incorrect failure return value in inet_pton -- various numeric ip address parsing and validation fixes -- namespace conformance issues in several headers -- minor header issues -- zombie processes left by faccessat with AT_EACCESS -- timezone file parser failing/crashing on 64-bit archs -- hang in localtime with near-overflowing time_t values on 64-bit archs -- timezone path search was only trying first path -- incorrect handling of excessive-length TZ environment strings -- timezone file loading was wrongly enforcing O_NOFOLLOW/rejecting symlinks -- iswspace was wrongly returning true for the null character -- various bugs in wordexp -- putgrent could write corrupt lines after write failures -- dn_expand misinterpreted in-packet offsets greater than 255 -- spurious strftime/wcsftime failure on len+1==bufsize case -- incorrect underflow flag in fma corner cases -- log*(0) wrongly returned +inf in downward-rounding mode -- failure of fchmod, fstat, fchdir, and fchown to produce EBADF - -arch-specific bugs fixed: -- i386: failure of fesetround to set sse rounding mode -- i386: floating point limit constants misinterpreted due to excess precision -- powerpc: broken thread pointer access when compiled with clang -- microblaze: dynamic linker entry point code possibly clobbering argv - -strict conformance issues: -- NULL definition re-aligned with POSIX (requires (void *) cast) -- alignment of math.h is* comparison functions with C11 annex F requirements - - - -1.0.0 release notes - -new features: -- support for mips softfloat ABI variant -- legacy setkey and encrypt API for DES -- support for BSD version of struct tcphdr in addition to GNU version -- added ipv6 and icmpv6 protocol lookups to getprotoent-family functions - -new experimental ports: -- sh (SuperH) -- x32 (ILP32 ABI for x86_64) - -compatibility: -- improved c89 compiler support in math.h -- eliminate some compiler warnings in public headers -- added some missing things for LFS64 APIs -- added fallback emulation of accept4 for older kernels - -bugs fixed: -- buffer overflow in printf when printing smallest denormal exactly -- rounding errors in printf in some just-over-halfway cases -- posix_spawn did not accept null pid pointer (crashed) -- ftello gave incorrect result for unflushed append-mode streams -- mishandling of n=0 case in wcsxfrm (wild buffer overrun) -- possible system breakage during libc upgrade due to install.sh bugs -- nftw FTW_MOUNT flag prevented walking any directories at all -- ptsname/ptsname_r returned negated error codes -- getprotoent function returned junk after listing valid protocols -- wrong error code from readdir when the directory has been deleted -- various prototype/argument-type fixes, mostly to legacy functions -- various header namespace violations - -arch-specific bugs fixed: -- fesetenv(FE_DFL_ENV) was broken on i386 and x86_64 -- strerror(EDQUOT) did not work on mips -- recvmsg/sendmsg were broken on powerpc -- sysv ipc was broken on powerpc and mips -- statfs/statvfs were broken on mips -- sigaltstack was broken on mips - - - -1.1.0 release notes - -new features: -- relro memory protection in dynamic linker -- malloc can now extend heap with mmap if brk fails -- vdso clock_gettime/gettimeofday/time acceleration on x86_64 -- thread/library-safe versions of search.h functions (nonstandard) -- getauxval function (nonstandard) -- sysconf extensions to query physical memory size - -bugs fixed: -- floating point printf output corruption from carry into uninitialized slot -- possible runaway carry overflow in printf floating point -- printf %g failure to strip trailing zeros in some cases -- search past end of haystack in memmem -- off-by-one error in confstr return value -- crashes in some near-empty static programs that use stack protector -- deadlock race in pthread_once -- non-working clock_gettime fallback for old kernels - -arch-specific bugs fixed: -- crash from missing syscall asm register clobbers on real microblaze kernel -- crash in all nontrivial dynamic linker use on microblaze -- incorrect rlimit constants on mips -- broken, possibly dangerous, use of getrlimit syscall on x32 in sysconf - - - -1.1.1 release notes - -new features: -- new options --preload and --library-path to dynamic linker -- public execvpe function (nonstandard extension) -- iconv support for cp437 and cp850 - -bugs fixed: -- false negatives with some periodic needles in strstr, wcsstr, and memmem -- crash on invalid zoneinfo files -- incorrect zero-padding of some outputs for strftime %s specifier -- misreporting of errors in configure script when $CC does not work at all -- treating not-yet-implemented strptime specifiers as errors - -compatibility: -- configure now detects serious constant-folding bug in gcc 4.9.0 -- removed __yield symbol (unused) that clashed with some compilers -- improvements to sysconf's handling of unsupported/invalid arguments - -arch-specific bugs fixed: -- misdetection of superh ABI variant by configure on gcc 3.x -- missing SO_RCVBUFFORCE and SO_SNDBUFFORCE in mips socket.h -- build regression on armv6 and later with -mthumb - - - -1.1.2 release notes - -new features: -- multi-protocol matches (tcp and udp) in getaddrinfo -- support for AI_V4MAPPED and AI_ALL flags to getaddrinfo -- reverse name lookups from /etc/hosts -- reverse service lookups from /etc/services -- support for service aliases in /etc/services -- ipsec and tunneling protocols to getprotoent-family functions -- res_send, res_mkquery, res_querydomain, and dn_comp functions -- ipv6 scope id handling for link-local scope addresses -- previously-unimplemented %C and %y in strptime now work -- vdso clock_gettime acceleration on i386 (new kernel feature) -- better O_CLOEXEC/SOCK_CLOEXEC fallbacks for old kernels - -bugs fixed: -- buffer overflow in dns response parsing (CVE-2014-3484) -- possible infinite loop in dns response parsing -- sendfile off_t 32/64-bit size mismatch -- incorrect end pointer in some cases when wcsrtombs stops early -- incorrect if_nametoindex return value when interface does not exist -- dummy "ent" function aliases that possibly shadowed real ones -- tmpfile fd leak on memory exhaustion -- getaddrinfo returning EAI_NONAME for some transient failures - -arch-specific bugs fixed: -- broken kernel side RLIM_INFINITY on mips -- incorrect syscall argument 6/7 types for pselect on x32 - - - -1.1.3 release notes - -new features: -- address sorting in getaddrinfo, etc. modeled on rfc 3484/6724 -- default timezone taken from /etc/localtime when $TZ is unset -- getopt double-colon extension for optional arguments -- support for TLSDESC-based (gnu2) TLS dialect on i386 and x86_64 -- sendmmsg/recvmmsg (linux-specific) -- fmtmsg (last mandatory XSI function that was missing) - -compatibility: -- treat dns rcode=2 as temporary failure, not negative result -- working thread-pointer for pre-2.6 kernels on i386 -- further ABI-compat symbols: __xmknod[at], __sysv_signal - -bugs fixed: -- memmem false positives/false negatives/crashes from invalid logic -- gethostby*_r not setting result pointer to null on failure -- aliasing violations in syscall.h SYSLOG_NAMES feature -- fanotify_mark syscall arguments wrong - -arch-specific bugs fixed: -- various subtle relocation bugs in powerpc and sh dynamic linker - - - -1.1.4 release notes - -new features: -- experimental locale support for LC_MESSAGES and LC_TIME -- non-stub gettext family functions for message translation -- or1k (OpenRISC 1000) port -- syslog options LOG_CONS and LOG_PERROR -- issetugid function (from OpenBSD) -- improved if_nameindex and getifaddrs functions - -compatibility: -- work around bug #61144 in gcc 4.9.0 and 4.9.1 -- support getauxval(AT_SECURE) even on kernels without AT_SECURE - -bugs fixed: -- empty dynamic linker error messages (regression in 1.1.3) -- if_nameindex omitted unconfigured and ipv6-only interfaces -- incorrect return value for fwide function -- failure of wide printf/scanf functions to set wide orientation -- multiple issues in legacy function getpass -- dynamic linker did not accept colon as a separator for LD_PRELOAD -- errno clobber in syslog caused wrong output for %m specifier -- crash in regexec for nonzero nmatch argument with REG_NOSUB -- minor bugs in rarely-used nl_langinfo item lookups - -arch-specific bugs fixed: -- broken relocations in mips dynamic linker (regression in 1.1.3) -- register state corruption in setjmp asm for microblaze -- broken struct stat st_ino field on microblaze -- broken struct stat st_dev field on big endian mips -- broken asm register constraints in atomics on powerpc -- missing barriers in atomics on mips, powerpc, microblaze, and sh - - - -1.1.5 release notes - -new features: -- full C11 coverage (threads, UTF-16/32 API, timespec_get, etc.) -- malloc_usable_size function (nonstandard) -- support for new F_OFD_* fcntl operations (linux 3.15, POSIX-future) -- new _DEFAULT_SOURCE feature test macro to request default profile - -performance: -- private-futex support -- redesigned cond var implementation with major performance improvement -- tweaked spinning in userspace before performing futex waits - -bugs fixed: -- failure of dn_expand to null-terminate name for crafted DNS packets -- corruption of cond var mutex state when switching mutexes -- use of uninitialized memory with application-provided thread stacks -- false ownership of orphaned mutexes due to tid reuse -- possible failure-to-wake for robust mutexes on owner death -- subtle errors in robust mutex unrecoverable status handling -- missing memory/compiler barrier spinning to obtain locks -- wrong behavior in various zero-length stdio operations -- buffer overflow in swab with odd argument -- incorrect sequence generation in the rand48 family of prng functions -- missing cancellation check in non-wait paths of sem_wait, pthread_join -- missing barrier in pthread_once fast path -- memory leak in regexec when input contains illegal sequence -- various parser bugs in regcomp -- wrong return value on overflow in some strtoul-family functions -- broken CPU_EQUAL macro in sched.h -- dlerror not working in static-linked programs -- mishandling of negative non-whole-hour TZ offsets -- incorrect case mappings for U+00DF -- namespace pollution via accidentally-non-static function named "dummy" -- missing __fpclassifyl and __signbitl definitions for ld64 archs - - - -1.1.6 release notes - -new features: -- getopt '-' flag for processing non-option arguments -- getopt_long argument permutation extension -- getopt_long abbreviated options -- ns_parserr and related DNS-packet-parsing functions -- fnmatch FNM_CASEFOLD extension -- support for translation of getopt error messages -- login_tty function (legacy) - -performance: -- efficient atomics on armv7+ targets -- pthread_once shrink-wrapping of fast path - -compatibility: -- baseline arm binaries now work on new cpus/kernels without kuser_helper -- dynamic linker now honors DT_RUNPATH without DT_RPATH (new binutils) -- arm asm is now compatible with clang's internal assembler -- suppress macro implementations of functions when headers are used in C++ -- increased message length limit for syslog - -bugs fixed: -- open ignored file creation mode argument for O_TMPFILE -- wrong printf formatting for %#.0o with value zero -- missing private state for uchar.h functions (null ps pointer) -- sched_getaffinity left uninitialized data in output bit array -- wrong return values for pthread_getaffinity_np and pthread_setaffinity_np -- buggy handling of multibyte option chars with arguments in getopt -- printf failed to report or stop on write errors -- printf failed to honor '+' modifier when printing NANs -- wcsnrtombs returned the wrong value in one code path -- syslog failed to check for connect error -- multi-threaded set*id() had spurious failures from ugly workaround code -- various minor header conformance bugs (signedness, constant expressions, ...) - -arch-specific bugs fixed: -- on or1k, some syscalls with 64-bit arguments were broken (misaligned) -- usage of sahf instruction on x86_64 crashed on some early cpu models - - - -1.1.7 release notes - -new features: -- alternate passwd/group backend support via nscd protocol -- masked cancellation mode extension (experimental) -- aio cancellation -- aarch64 port (experimental) - -performance: -- significant memset asm optimizations on i386 and x86_64 - -compatibility: -- suppress EINTR in semaphores for old kernels where futex restart is broken -- always set optarg in getopt_long -- support SOCK_RAW socket type in getaddrinfo -- report success instead of EINPROGRESS when close is interrupted - -bugs fixed: -- multithreaded set*id() was not async-signal safe, had various race bugs -- getspnam_r returned results for partial username matches -- wordexp bad character checker mis-counted parentheses -- close on fd with pending aio could lead to file corruption -- old aio implementation had numerous conformance bugs -- malloc init code could deadlock due to race condition -- pthread_exit did not disable cancellation -- pthread_cond_wait could wrongly consume signal on cancellation -- execvp wrongly stopped path search on EACCESS -- fsync, fdatasync, and msync were not honored as cancellation points -- fchmodat was subject to fd leak race (missing O_CLOEXEC) -- fchmodat failed to report EOPNOTSUPP in race path -- passwd/group lookup functions had various minor error-reporting bugs -- isatty had false-positives/device-state-corruption for OSS sound devices -- configure script failed to detect gcc with translated messages -- FLT_ROUNDS macro failed to reflect rounding mode changes in fenv - -arch-specific bugs fixed: -- mips fesetenv did not handle FE_DFL_ENV -- mips POLLWRNORM and POLLWRBAND macros had wrong values -- x32 pthread synchronization object type definitions were wrong -- powerpc minimum signal stack size was insufficient - - - -1.1.8 release notes - -bugs fixed: -- stack-based buffer overflow in inet_pton (CVE-2015-1817) -- regcomp crash/mem-corruption with illegal bytes after backslash -- regcomp wrongly allowed backrefs in ER -- regcomp miscompiled character class brace-repetitions -- regcomp wrongly processed \0 as an unmatchable backref -- new FLT_ROUNDS definition failed to work in C++ code - -arch-specific bugs fixed: -- aarch64 was missing max_align_t definition - - - -1.1.9 release notes - -new features: -- ability to protect libc code itself with stack protector -- sigsetjmp now restores signal mask after restoring context, not before -- thread-local dlerror status/messages -- dlerror messages are no longer truncated -- diagnostics for constraint violations with ctype.h macros - -optimizations: -- reduce cost of PIC on archs where PLT calls need a fixed GOT register -- spin locks no longer constantly invalidate cache lines while spinning -- code size reduction in static-linked TLS init - -bugs fixed: -- failure to process robust mutexes on detached-thread exit -- possible memory corruption due to robust mutex list on detached-thread exit -- crash on memory exhaustion in getgr* internals -- misaligned memory accesses in static binaries with low-alignment TLS blocks -- multiple cases of wrongful path search continuation after transient failure -- small memory leak on failure of dlopen with RPATH $ORIGIN -- several small math bugs related to exception flags with non-finite args -- mmap leak in sem_open failure path for link call -- duplocale clobbered new locale struct with memcpy of old -- futimes crashed with null timeval argument - -arch-specific bugs fixed: -- stack protector spuriously aborted after forking on x32 -- stack protector spuriously aborted with flockfile on powerpc -- theoretically-possible clobbering of syscall return value on mips -- random thread-pointer setup failure on sh (uninitialized return value) -- possible crash in dlsym on sh due to incorrectly-computed branch target -- broken fesetenv(FE_DFL_ENV) on mips -- dynamic linker name for sh ignored fpu/nofpu and endianness -- various minor aarch64 bugs -- dangling pointers in x32 syscall timespec fixup code - - - -1.1.10 release notes - -new features: -- fail-safe (allocation-free) C locale for newlocale to return -- all locale categories track requested locale name -- rcrt1.o start file for static PIE - -optimizations: -- inline atomics for sh4a -- removed heavy atomics from locale-related code paths -- removed global data accesses from CURRENT_LOCALE macro & callers -- dynamic linker stage 1 size reduction - -compatibility: -- better configure detection of unsupported compiler options -- support for more relocation types in libc.so, not currently used -- iconv_open accepts "" and "CHAR" as aliases for native (UTF-8) -- additional LFS64 macros in sys/resource.h - -regressions fixed: -- dynamic linker crash on NONE-type relocations (only mips affected) -- inability to build as thumb2 on arm -- failure to run under qemu-i386 user-level emulation -- inability to access globals from libc on powerpc -- PIE link errors in Scrt1.o under unusual usage on some archs - -other bugs fixed: -- failure of ungetc/ungetwc to work on FILE streams in EOF state -- possible null pointer dereference in gettext -- possible initial stack misalignment on mips with PIE - - - -1.1.11 release notes - -new features: -- byte-based C locale -- vdso clock_gettime on arm -- musl-clang wrapper -- sh2 nommu target support - -performance: -- major speed-up for dynamic linker symbol lookups with GNU hash - -compatibility: -- strverscmp now matches GNU behavior in corner cases -- empty TZ environment variable gives GMT rather than system default -- reconnection on syslog server socket loss (syslogd restart) -- mmap fallback in simple_malloc when brk fails -- support for %m and %s with null pointers in wide printf variants -- call frame information in i386 asm for improved debugger support - -bugs fixed: -- spurious errors from pwd/grp functions when nscd backend is absent -- possible invalid access on calloc with simple_malloc -- null pointer dereferences after calling uselocale((locale_t)0) -- erroneous support for cancellation in stdio caused data loss -- inconsistent handling of atexit called from atexit handler -- missing locking in error paths for ungetwc -- btowc mishandling of out-of-range non-EOF inputs -- negated return value of ns_skiprr, failure in related functions -- incorrect void return type for syncfs, missing error status -- possible failure of tempnam due to missing null termination -- negated tm_gmtoff field in struct tm -- off-by-one error in getsubopt leaving equals sign in value result - -arch-specific bugs fixed: -- soft deadlocks on i386/x86_64 due to missing barrier in internal locks -- regression in arm pre-v7 support for kernels with kuser helper removed -- runaway PC on mips detached thread exit (due to kernel regression) -- mismatched ABI for local-dynamic model TLS on mips and powerpc -- incorrect value of some SO_* constants on mips -- broken 64-bit syscall argument passing on aarch64 - - - -1.1.12 release notes - -new features: -- fdpic abi on sh2 for shareable text segment without mmu -- general fdpic elf support in dynamic linker -- CFI generation for x86_64 asm source files -- protection against silently building a libc.so with missing symbols - -compatibility: -- nl_langinfo(CODESET) now returns "ASCII" in byte-based C locale -- fixed build regression due to buggy .SECONDARY in some GNU make versions -- additional arm eabi functions needed by llvm arm backend -- added format argument attributes to gettext function prototypes -- static PIE no longer requires linking with -E/-rdynamic -- eliminated spurious protected-data warnings linking against libc.so -- avoided spurious fpu asm errors with some armhf toolchains - -bugs fixed: -- fclose of stdin/stdout caused deadlock at exit -- missing memory barrier in pthread_join -- open_[w]memstream produced no buffer when no writes took place -- uninitialized scopeid in address lookups from hosts file and ip literals -- ip literals for mismatching family (v4 vs v6) were queried as hostnames -- possible crash on OOM in regcomp -- incorrect contents in localeconv structure (-1 instead of CHAR_MAX) -- strftime mishandling of out-of-range struct tm members -- wrongful attribute((const)) on pthread_self and errno location function - -arch-specific bugs fixed: -- arm crt1 entry point failed to align stack pointer in some cases -- mips fesetround failed to actually set rounding mode -- i386 asm source CFI generation had multiple bugs - - - -1.1.13 release notes - -new features: -- out-of-tree builds -- search domains in resolv.conf -- sh arch supports j-core (j2) cas.l atomics -- dynamic linker includes arch/abi in output when run as a command -- header support for new kernel features through linux 4.4 -- mips vdso clock_gettime support -- regex BRE extensions: \|, \+, \? - -performance: -- improved atomics performance on all archs with ll/sc model -- atomic instructions are now inlined on armv6 -- use fpu sqrt for arm softfp abi on targets with vfp - -compatibility: -- getnameinfo now accepts sockaddr sizes larger than needed -- new default CFLAGS/LDFLAGS avoid entire classes of toolchain bugs -- explicit use of float_t/double_t avoids compiler float spill bugs -- i386 max_align_t definition now works with g++ 4.7's pseudo-c++11 -- all known protocols are added to protoent functions -- stub utmpname, utmpxname functions -- linker support for -Bsymbolic-functions is no longer mandatory -- regex parsing size limits increased -- malloc_usable_size now accepts null pointer input - -bugs fixed: -- potential single-byte heap overflow in getdelim -- mishandling of transient failure opening hosts, services, resolv.conf -- mremap was sometimes able to allocate objects larger than PTRDIFF_MAX -- nl_langinfo wrongly returned NULL instead of "" for invalid items -- out-of-bounds dynamic tls allocation due to pointer/index scaling error -- getifaddrs misreported point-to-point interface addresses -- tdelete left tsearch trees misbalanced -- tsearch crashed on allocation failure -- tsearch, tfind, and tdelete failed to handle null pointer input -- passing signal number 0 to sigaction resulted in a crash -- getdelim updated caller's size wrongly when realloc failed -- getdelim realloc strategy was wasteful -- if_nametoindex returned wrong value on failure -- missing ssp-suppression for some source files called from early-init -- various minor resolv.conf parsing bugs -- fwrite wrongly reported success on write errors in line-buffered flush -- fwrite and fread wrongly returned nmemb (not 0) when size was 0 - -nommu-specific bugs fix: -- failure to zero bss in FDPIC shared library loader -- unsafe writes to read-only file mapping in non-FDPIC library loader - -arch-specific bugs fixed: -- sh[eb]-nofpu-fdpic was using fpu-dependent setjmp/longjmp variants -- dynamic linker path file name was wrong for arm "softfp" targets -- mips siginfo_t and related macros were defined incorrectly -- possibly misaligned pointer globals on arm (from an asm source file) -- mips dynamic linker failed to provide info needed by debugger -- mips cancellation asm wrongly assumed validity of $gp register value - - - -1.1.14 release notes - -regressions fixed: -- treatment of empty string argument as error by puts and fputs -- make clean and distclean failure in unconfigured trees -- sh/fdpic dynamic linker entry point hang due to wrong code -- armhf (and arm softfp model) build failure with clang - -other bugs fixed: -- wrongly clamping (rather than failing) excessive rounds in crypt-sha* - - - -1.1.15 release notes - -new features: -- mips64 (full 64-bit and n32) port -- mips r6 isa support (subarch for mips, mips64, and mipsn32 archs) -- powerpc64 port -- powerpc (32-bit) soft-float ABI support (subarch) -- pthread_tryjoin_np and pthread_timedjoin_np (nonstandard extensions) -- header-level support for linux 4.5 and 4.6 features -- sched_getcpu (nonstandard extension) support, including vdso version -- __STDC_ISO_10646__, __STDC_IEC_559__ macros predefined via stdc-predef.h -- support for new elf/arch features in elf.h - -compatibility: -- configure now correctly chooses cross-prefix based on build/host/target -- abort now successfully terminates pid 1 in a container (or top-level) - -bugs fixed: -- memmem read past end of haystack, possible false positives or crashes -- buffer underflow (reverse-overflow) in ungetwc -- double-free under certain usage of putenv -- incorrect treatment by regcomp of * at start of BRE subexpression -- gethostbyname[2][_r] produced ip addresses in misaligned buffers -- looking up some invalid hostnames caused malformed dns queries -- lookups from hosts file were inconsistent with non-matching family -- missing h_length value in gethostbyaddr results -- a64l function produced wrong-signed results on 64-bit archs -- broken padding of string formats to width in wide printf variants -- wrong results for expf(-NAN) and exp2f(-NAN) -- wrong value for RUSAGE_CHILDREN prevented it from working -- abort failed to provide abnormal termination with SIGABRT blocked - -arch-specific bugs fixed: -- broken posix_fadvise on arm and powerpc (32-bit) -- thread structure/dtv corruption on powerpc at thread startup -- various wrong mips and powerpc ioctl and termios constant values - - - -1.1.16 release notes - -new features: -- s390x (64-bit S/390) port -- pthread_setname_np extension function -- limited pthread_setattr_default_np function to set stack size defaults -- header-level support for linux 4.7, 4.8, and 4.9 features -- confstr _CS_V6_ENV and _CS_V7_ENV items - -compatibility: -- public prototypes for abi-compat *_unlocked symbols, etc. -- fflush_unlocked(NULL) now works -- resolv.h __RES version macro now matches supported APIs -- workaround for gdb bugs backtracing across signals on x86_64 -- anchors ^ and $ are now accepted in BRE subexpressions -- building for thumb2-only arm isa levels is now possible - -bugs fixed: -- integer overflows in regexec buffer allocation (CVE-2016-8859) -- failure of regexec to report matches at offsets past INT_MAX -- static-pie executables with initialized thread-local storage crashed -- printf failed to catch EOVERFLOW in some cases, wrongly produced it in others -- printf produced wrong output, result for float with precision near INT_MAX -- printf produced wrong results with alt-form octal, zero flag, & field width -- printf float rounding was wrong for some midpoint cases -- swprintf printed junk after internal (256-byte) buffer filled up -- strtod family rounded incorrectly in several corner cases -- getmntent failed to handle long records -- getopt_long_only wrongly treated "--" as an option -- asctime output wrongly varied by locale -- strftime %y specifier produced wrong output for negative tm_year -- time zone names quoted with <> were misparsed -- corner case integer overflow in tm_year for some date conversions -- failure to load shared libs whose names were prefixes of standard lib names -- wrong error codes for several failure cases in various functions -- various asymptomatic undefined behavior -- various minor namespace issues in headers - -arch-specific bugs fixed: -- tcsetattr regression on mips (completely non-working) -- wrong pread/pwrite syscall calling convention on sh -- wrong preadv2/pwritev2 syscall numbers on x32 -- mrand48/jrand48 produced wrong-signedness results on 64-bit archs - - -1.1.17 release notes - -new features: -- RTLD_LAZY deferred symbol binding, functionally equivalent to lazy binding -- safeguard against dlopen of multiple libc versions/instances -- new posix_spawn flag POSIX_SPAWN_SETSID -- posix_spawnattr_setflags now reports unknown flags as error -- ldso option --argv0 to set argv[0] -- added _NL_LOCALE_NAME extension to nl_langinfo - -compatibility: -- dlopen local-to-global promotion no longer changes existing symbols -- gettext now searches locale name variants for translation files -- increased locale name length limit from 15 to 23 bytes -- setlocale(LC_ALL, 0) returns single name if all categories are same -- realloc no longer fails when mremap doesn't work -- getservby* no longer treat numeric port strings as service records -- mmap now works around incorrect EPERM error codes from kernel -- impact of REG_* namespace pollution in x86[_64] signal.h is reduced -- arm atomic asm now assembles correctly with new binutils -- PAGE_SIZE on arm is no longer constant (quiet upstream ABI relaxation) -- lsearch/lfind now pass args to compare callback in canonical order -- STB_WEAK and STB_GNU_UNIQUE symbols now behave same as STB_GLOBAL -- better clang CFLAGS checks in configure -- global vis.h hack, which made lld refuse to link to libc.so, is disabled - -performance: -- single-instruction optimized math functions for aarch64, s390x, powerpc64 -- fast path for ASCII in towupper/towlower -- new mostly-integer-math fma function - -semantic bugs fixed: -- POSIX-format TZ dst time transitions were wrong for southern hemisphere -- regex REG_NEWLINE semantics were wrong with negated brackets -- various bugs in strptime %j, %p, %C formats -- iconv mapped some characters to legacy 8bit encodings incorrectly -- glob failed to match "/" -- UTF-8 decoder accepted invalid f4 9x xx xx code sequences -- scanf %% conversion failed to consume whitespace -- glob with GLOB_PERIOD wrongly descended into . and .. -- nftw gave incorrect base name offset when pathname ends in "/" -- functional regression in resolv.conf attempts option -- scalbn could produce wrong result due to double rounding in subnormal range -- strftime %y format wrong with negative years -- mbsnrtowcs and wcsnrtombs mishandled input limits -- minor issues with error codes for various functions - -safety/consistency bugs fixed: -- stack-based buffer overflow in dns response processing -- invalid free in regexec on certain error paths -- invalid free in globfree after failed glob -- one-byte buffer overflow in legacy getpass function -- failed dlopen corrupted thread-local storage module list -- race in pthread_create with priority attributes could leave signals masked -- multithreaded set*id() functions could induce spurious EINTRs -- dl_iterate_phdr reported wrong base address in static PIE -- fd leak and wrong cancellation state after dns socket failure -- memory leaks and other issues in environment-modification functions -- read-after-free race in pthread_detach -- memmem performed single-byte over-read in short-needle code paths -- read via uninitialized pointer in gettext core -- bindtextdomain broke bindings for all other domains -- various silent undefined behavior -- getopt clobbered optopt on success - -arch-specific bugs fixed: -- x32 dynamic TLS accesses crashed -- s390x was missing dlsym entry point (needed for RTLD_NEXT) -- powerpc64 ldso startup could crash depending on link order -- powerpc64 setjmp/longjmp didn't properly save/restore TOC pointer -- thumb2 setjmp/longjmp silently broke at ld-time with text not aligned -- fchown was broken on archs without SYS_fchown syscall -- fstatat was broken on mips64 -- various incorrect constants in powerpc64 and mips headers - - -1.1.18 release notes - -regression fixes: -- glob failed to match literal . and .. path components -- build for armv4t ISA level was broken - -other bug fixes: -- stack overflow in posix_spawnp with large PATH variable in environment - - -1.1.19 release notes - -new features: -- iconv framework for processing stateful encodings -- iconv support for iso-2022-jp -- iconv support for converting to legacy JIS-based Japanese encodings -- iconv support for UTF-16/32 with BOM-determined endianness -- iconv ibm1047 (ebcdic latin1-equivalent) support -- iconv cp866 (dos cyrillic) support -- character data tables & case mappings updated to Unicode 10.0 -- fopencookie stdio extension -- strftime padding character extensions -- header-level support for new linux features through 4.13 - -compatibility: -- UTC timezone is now called UTC instead of GMT -- _DIRENT_HAVE_D_* macros in dirent.h -- dladdr dli_fbase definition now matches other implementations -- pthread_getattr_np now reports guard size -- strftime '+' modifier better matches apparent intent of POSIX -- getopt_long handles long option names containing '=' -- better compatibility with linux uapi headers -- workaround linux bug where getcwd can return non-absolute pathname -- configure logic for finding compiler_rt with clang -- execvp path search now continues after ENOTDIR components - -bugs fixed: -- fgetwc failed when character crossed buffer boundary -- memory corruption after failing to dlopen a second libc -- sysconf reported infinite rlimits incorrectly -- getopt_long --opt=arg did not work with partial matches -- printf was wrong for alt-form octal with value 0, no explicit precision -- endian errors in arpa/nameser.h and netinet/icmp6.h (missing endian.h) -- atfork handler could clobber fork's errno -- iconv could wrongly output surrogate pairs in ucs2 -- fmemopen buffer underallocation with extreme size argument -- getaddrinfo AI_NUMERICSERV wrong error code -- data race in at_quick_exit -- ldd failed to honor rpath $ORIGIN for program in . without "./" prefix - -arch-specfic bugs fixed: -- x32 unistd.h wrongly reported LP64 instead of ILP32 -- aarch64 signal.h had wrong type for ucontext_t uc_link member - - -1.1.20 release notes - -new features: -- m68k port -- replacement of malloc is now allowed/supported -- setvbuf now accepts caller-provided buffers for stdio streams -- getrandom syscall wrapper, getentropy function -- mlock2 syscall wrapper -- memfd_create syscall wrapper -- explicit_bzero function -- header-level support for new linux features through 4.17 -- wcsftime now supports padding specifier extensions -- dynamic linker's reclaim_gaps now works on fdpic archs -- getaddrinfo now honors AI_ADDRCONFIG -- pthread_attr_init now honors pthread_setattr_default_np defaults - -hardening: -- prevent bypass of guarantee that suids start with fd 0/1/2 open -- dlopen now rejects libraries with initial-exec refs to dynamic TLS - -compatibility: -- elf.h: new flags, aux vector entry types, etc. -- minor namespace issues in several headers -- intNN_t types used in bitfields now safe against -funsigned-bitfields -- complex arc trig/hyperbolic functions were badly broken -- nice function returned wrong value -- stdio locks no longer depend on read-after-free not faulting -- avoid excessive stack usage in getcwd -- inet_ntop no longer compresses single zeros in IPv6 (RFC 5952) -- resolver routability probe for sorting results works on no-IPv6 systems -- added missing ST_RELATIME definition to statvfs.h -- uchar.h now works with old C++ profiles -- added missing and arch-specific commands to ptrace.h -- musl-gcc wrapper now works with default-pie host toolchains - -bugs fixed: -- getopt wrongly treating colons in optstring as valid option chars -- nl_langinfo_l(CODESET, loc) reported wrong locale's value -- out-of-tree build produced broken crt files with stack protector enabled -- fmaf produced wrong result for some corner cases -- out of bounds write for zero length buffer passed to gethostname -- getopt_long_only wrongly prefix-matched long-options over short ones -- pthread_kill wrongly returned ESRCH for exited by valid pthread_t's -- iconv buffer overflow converting to legacy JIS-based encodings -- iconv conversion to "UTF-32" (no explicit endianness) failed (regression) -- iconv mishandled big5-hkscs characters that map to two unicode chars -- dynamic linker didn't map/clear bss for libraries with single LOAD segment -- resolver wrongly duplicated trailing dot from query into canonical name -- some futex waits omitted timeout arg to syscall, thereby spun on EFAULT -- dladdr mishandled addresses not matching symbols -- alignment of dirent structures from readdir was broken (regression) -- strftime %z output wrong sign for offsets <1 hour west of UTC -- limits.h, pathconf erroneously defined SYMLINK_MAX -- FP_ILOGB0 and FP_ILOGBNAN definitions were not valid for use in #if -- getopt failed to update optarg and optind correctly on missing argument -- EMULTIHOP error lacked strerror text -- mktime malfunctioned with tm_isdst>0 but no-DST POSIX-format time zone -- async thread self-cancellation produced a deadlock condition -- pthread_barrierattr_setpshared failed to produce EINVAL for bad argument -- fileno failed to produce EBADF for non-fd-associated FILEs -- fmemopen's w+ mode failed to truncate buffer at open -- open_[w]memstream did not bind stream orientation at open time -- system wrongly returned 0x7f00 instead of -1 on error -- wide printf functions ignored field width for %c formats -- fprintf failed to set stream orientation for unbuffered stream or no output -- psignal, psiginfo, and perror wrongly set stream orientation for stderr -- psignal, psiginfo potentially clobbered errno on success - -arch-specfic bugs fixed: -- on arm/aarch64/sh, local-exec TLS layout mismatched ABI with large align -- on arm/microblaze/sh, struct ipc_perm mismatched (buggy) kernel ABI -- SO_PEERSEC definition was wrong on mips -- on mips, return from start function passed to clone crashed (runaway exec) -- printf %a precision specifier malfunctioned except on ld80 archs -- async thread cancellation crashed on powerpc64 and sh-fdpic - - -1.1.21 release notes - -new features: -- setting default thread stack size via PT_GNU_STACK program header -- arm vfork implementation -- arm tlsdesc/gnu2 tls dialect support -- name_to_handle_at and name_to_handle_at syscall wrappers -- header-level support for new linux features through 4.18 - -optimizations: -- glob rewrite with much better performance and stack usage properties -- single-threaded and already-locked fast paths for getc/putc variants -- single-instruction fma implementations for arm, s390x, powerpc, & x86_64 -- single-instruction fabs and sqrt implementations for powerpc -- size and performance from making all internal-only functions/data hidden -- made &errno and pthread_self results cachable again (attribute((const))) -- significant speedup in strtod with short inputs -- new tsearch AVL tree implementation, smaller and faster -- special-cased nop calls to wmemmove -- fixed erroneously suboptimal skip conditions in strstr and memmem - -hardening: -- default thread stack guard size increased from 4k to 8k - -compatibility: -- default thread stack size increased from 80k to 128k -- building for arm as thumb2 with clang internal assembler now works -- aio threads could overflow stack on kernels that break MINSIGSTKSZ ABI -- aio threads no longer call malloc (problematic with malloc replacement) -- pthread_sigmask/sigprocmask now ignore an invalid how when not changing mask - -bugs fixed: -- soft deadlock regression in stdio FILE locks with >2 threads contending -- deadlock and buffered data loss race in fclose -- race condition leading to possible crash in dcngettext plural forms -- glob failed to see past searchable-but-unreadable path components -- getdelim wrongly realloc'd buffer that was already exactly right size -- getdelim failed to set stream orientation on early error -- ttyname[_r] reported wrong error when given bad fd -- pthread_key_delete left old tsd values exposed if slot was reused -- freeaddrinfo failed to support freeing sublists -- access to optopt was broken by copy relocations -- memccpy returned wrong result if first byte past buffer end matched -- wordexp read past end of input string ending in backslash -- sem_wait and sem_timedwait were wrongly not interruptible by signals -- getspnam[_r] wrongly treated not-found as an error - -arch-specfic bugs fixed: -- soft deadlocks (missing futex wake) on powerpc locking -- dlsym returned wrong address for thread-local symbols on ppc/mips/m68k - - -1.1.22 release notes - -new features: -- priority-inheritance mutexes -- membarrier syscall, pre-registration to use it, fallback emulation -- header-level support for new linux features in 4.19, 4.20, 5.0 - -major internal changes: -- complete, async-safe view of all existent threads as global list -- robust __synccall based on new thread list -- new dynamic TLS is installed synchronously at dlopen -- TLSDESC resolver functions no longer make bad ABI assumptions to call C -- resolved shared library dependencies are now recorded - -compatibility & conformance: -- dependency-order shared library constructor execution -- sigaltstack no longer rejects SS_AUTODISARM, future flags -- FILE is now a complete (dummy) type in pre-C11 feature profiles -- setvbuf reports failure on invalid arguments -- TSVTX is exposed unconditionally in tar.h -- multithreaded set*id() no longer depends on /proc -- key slot reuse after pthread_key_delete no longer depends on /proc - -bugs fixed: -- failures in multithreaded set*id() with concurrent thread creation/exit -- interposed free was called from invalid/inconsistent contexts -- freeaddrinfo performed invalid free of some partial results lists -- dlsym dependency order search had false negatives and false positives -- dn_skipname gave wrong results for labels with 8-bit content -- dcngettext clobbered errno, often breaking printing of error messages -- sscanf read past end of buffer under certain conditions (1.1.21 regression) -- pthread_key_create spuriously failed under race condition (1.1.21 regression) -- fdopendir wrongly succeeded with O_PATH file descriptors -- gets behaved incorrectly in presence of null bytes -- namespace violations in c11 tsd and mutex function dependencies -- incorrect prototype for makecontext (unimplemented) - -arch-specfic bugs fixed: -- s390x had wrong values for POSIX_FADV_DONTNEED/_NOREUSE - - - -1.1.23 release notes - -new features: -- riscv64 port -- configure now allows customizing AR and RANLIB vars -- header-level support for new linux features in 5.1 - -major internal changes: -- removed extern __syscall; syscall header code is now fully self-contained - -performance: -- new math library implementation for log/exp/pow -- aarch64 dynamic tlsdesc function is streamlined - -compatibility & conformance: -- O_TTY_INIT is now defined -- sys/types.h no longer pollutes namespace with sys/sysmacros.h in any profile -- powerpc asm is now compatible with clang internal assembler - -changes for new POSIX interpretations: -- fgetwc now sets stream error indicator on encoding errors -- fmemopen no longer rejects 0 size - -bugs fixed: -- static TLS for shared libraries was allocated wrong on "Variant I" archs -- crash in dladdr reading through uninitialized pointer on non-match -- sigaltstack wrongly errored out on invalid ss_size when doing SS_DISABLE -- getdents function misbehaved with buffer length larger than INT_MAX -- set*id could deadlock after fork from multithreaded process - -arch-specfic bugs fixed: -- s390x SO_PEERSEC definition was wrong -- passing of 64-bit syscall arguments was broken on microblaze -- posix_fadvise was broken on mips due to missing 7-arg syscall support -- vrregset_t layout and member naming was wrong on powerpc64 - - - -1.1.24 release notes - -new features: -- GLOB_TILDE extension to glob -- non-stub catgets localization API, using netbsd binary catalog format -- posix_spawn file actions for [f]chdir (extension, pending future standard) -- secure_getenv function (extension) -- copy_file_range syscall wrapper (Linux extension) -- header-level support for new linux features in 5.2 - -performance: -- new fast path for lrint (generic C version) on 32-bit archs - -major internal changes: -- functions involving time are overhauled to be time64-ready in 32-bit archs -- x32 uses the new time64 code paths to replace nasty hacks in syscall glue - -compatibility & conformance: -- support for powerpc[64] unaligned relocation types -- powerpc[64] and sh sys/user.h no longer clash with kernel asm/ptrace.h -- select no longer modifies timeout on failure (or at all) -- mips64 stat results are no longer limited to 32-bit time range -- optreset (BSD extension) now has a public declaration -- support for clang inconsistencies in wchar_t type vs some 32-bit archs -- mips r6 syscall asm no longer has invalid lo/hi register clobbers -- vestigial asm declarations of __tls_get_new are removed (broke some tooling) -- riscv64 mcontext_t mismatch glibc's member naming is corrected - -bugs fixed: -- glob failed to match broken symlinks consistently -- invalid use of interposed calloc to allocate initial TLS -- various dlsym symbol resolution logic errors -- semctl with SEM_STAT_ANY didn't work -- pthread_create with explicit scheduling was subject to priority inversion -- pthread_create failure path had data race for thread count -- timer_create with SIGEV_THREAD notification had data race getting timer id -- wide printf family failed to support l modifier for float formats - -arch-specific bugs fixed: -- x87 floating point stack imbalance in math asm (i386-only CVE-2019-14697) -- x32 clock_adjtime, getrusage, wait3, wait4 produced junk (struct mismatches) -- lseek broken on x32 and mipsn32 with large file offsets -- riscv64 atomics weren't compiler barriers -- riscv64 atomics had broken asm constraints (missing earlyclobber flag) -- arm clone() was broken when compiled as thumb if start function returned -- mipsr6 setjmp/longjmp did not preserve fpu register state correctly - - - -1.2.0 release notes - -new features: -- time_t is now 64-bit on all archs (not just 64-bit archs) -- character type & case mapping data updated to Unicode 12.1.0 -- header-level support for new linux features in 5.3 and 5.4 - -performance: -- new O(1) wchar_t case mapping implementation -- i386 now uses C math code for exp, faster than old asm -- mips math asm - -compatibility & conformance: -- endian.h now aims to conform to future POSIX definition -- support older compilers that don't accept powerpc math asm constraints -- fdpic code in ldso was incompatible with valid optimizations in gcc 9+ -- RLIMIT_RTTIME was missing from sys/resource.h - -bugs fixed: -- wcwidth wrongly returned 0 for most of planes 4 and up -- missing case mapping between U+03F3 and U+037F -- wrong cacosh results for arguments with negative imaginary part -- wrong catanf/catanl results for various classes of arguments -- wrong return value for ungetc with argument outside [0,UCHAR_MAX] -- posix_openpt with no ptys available produced wrong errno - -arch-specific bugs fixed: -- sigcontext/regset definition mistakes & omissions on m68k, powerpc64 -- fesetenv(FE_DFL_ENV) crashed on riscv64 -- sh2 dynamic linker was broken since 1.1.21 (crash in stage 2b) -- arm dynamic linker chose wrong tls/atomic variants since 1.1.21 -- some math library functions returned excess precision on i386 -- unconfirmed regression in fchmodat AT_SYMLINK_NOFOLLOW on mips* - - - -1.2.1 release notes - -major changes: -- new malloc implementation (mallocng & overhauled bump allocator) - -new features: -- DNS queries via res_* now set AD flag, report zone signedness (DNSSEC) -- PTHREAD_NULL macro (POSIX-future) - -performance: -- optimized memcpy and memset for aarch64 -- optimized memcpy for arm now supports big endian -- optimized x86_64 remquol -- improved strerror without linear search - -bugs fixed: -- lock-skipping for processes that returned to single-threaded was wrong -- AF_UNSPEC dns lookups mishandled single failure in paired A+AAAA -- res_send and res_query returned wrong value on errors from nameserver -- corrupted sysvipc timestamps on 32-bit archs with old kernels -- incorrect parsing of timezone offsets after overly-long zone name -- clock_adjtime was broken on 32-bit archs (time64) -- pthread_kill as not async-signal-safe -- pthread_cancel was not async-cancel-safe -- large-ulp errors in various math functions in non-default rounding modes - -arch-specific bugs fixed: -- arm clock_gettime was broken on some hw due to bad time64 vdso -- m68k sqrtl lacked long double precision -- mips* syscall mechanism regressions on older kernels -- mips* had negated error codes for some syscalls (kernel bug) -- mips* SIGEMT was wrongly called SIGSTKFLT -- sh fesetround didn't work correctly on sh - - - -1.2.2 release notes - -major changes: -- child restrictions lifted after fork of multithreaded parent - -new features: -- _Fork function (POSIX-future) -- reallocarray function (extension from OpenBSD, now widespread) -- gettid function (kernel tid as supported concept) -- SIGEV_THREAD_ID sigevent API (Linux extension) -- tcgetwinsize and tcsetwinsize functions (POSIX-future) - -performance: -- faster software sqrt on archs without native sqrt instruction - -compatibility: -- realpath no longer depends on procfs availability & accuracy -- time zone parser now always prefers 64-bit tables if present -- crypt_blowfish now supports $2b$ prefix -- res_query now reports errors via h_errno -- set*id and setrlimit are now safe in vforked/cloned child -- setgroups now applies to all threads -- dlopen debugger notification is improved, should work with lldb -- setrlimit no longer needs __synccall broadcast on linux 2.6.36+ -- faccessat with AT_EACCESS no longer needs child process on linux 5.8+ - -bugs fixed: -- buffer overflow and infinite loop errors in wcsnrtombs (CVE-2020-28928) -- sem_close unmapped still-referenced semaphores -- fork of process with active aio could deadlock or crash paren -- pthread_cond_wait was broken with priority-inheritance mutex -- getgrouplist wrongly failed when nscd reported an empty list -- abort could leak modified SIGABRT disposition to fork or posix_spawn child -- regression with mallocng: malloc_usable_size(0) crashed -- readlink wrongly gave EINVAL on zero length dest buffer -- sqrtl was severely inaccurate (not correctly rounded) on ldquad archs -- assert failure wrongly flushed stdio (possible deadlock) -- MUSL_LOCPATH search was broken with multiple components -- missing newline in herror output -- possible deadlock in pthread_exit with pshared mutex or barrier usage -- pthread_mutexattr_getprotocol didn't read back protocol -- v4l2 ioctl translation for pre-time64 kernels didn't work - -arch-specific bugs fixed: -- x86_64 longjmp failed to handle 0 argument reliably -- i386 __set_thread_area fallback for pre-2.6 kernels didn't work -- missing O_LARGEFILE macro value on x86_64, x32, mips64 -- unpredictable s390x breakage from failure to preserve call-saved registers - - - -1.2.3 release notes - -new features: -- qsort_r function (POSIX-future) -- pthread_getname_np extension function -- hard float on SPE FPU for powerpc-sf -- SEEK_DATA and SEEK_HOLE exposed in unistd.h (Linux extensions) - -compatibility: -- free now preserves errno (POSIX-future requirement) -- setjmp is declared explicitly with returns_twice for non-GCC compilers -- macro version of isascii is no longer defined for C++ -- dynamic linker now tolerates zero-length LOAD segments -- epoll_[p]wait is now a cancellation point -- pwd/grp functions no longer fail on systems without AF_UNIX support -- POSIX TZ parsing is stricter to allow more names to fallback to files -- NULL is now defined as nullptr when used in C++11 or later -- gettext now accepts null pointer as argument - -bugs fixed: -- old regression in wcwidth of Hangul combining (vowel/final) letters -- duplocale used wrong malloc when malloc was replaced (1.2.2 regression) -- fmaf rounded wrong on archs without FE_TOWARDZERO (all softfloat archs) -- popen didn't honor requirement not to leak other popen pipe fds to child -- aligned_alloc and variants crashed on allocation failure -- dl_iterate_phdr reported incorrect module TLS pointers -- mishandling of some inputs in acoshf and expm1f and functions using them -- potentially wrong-sign zero in cproj functions at infinity -- multiple bugs in legacy function cuserid -- minor posix_spawn file actions API conformance issues -- pthread_setname_np fd leak -- out-of-bound read in zoneinfo handling with distant-past times -- out-of-tree builds lacked generated debug cfi for x86 asm - -arch-specific bugs fixed: -- powerpc (32-bit) struct shmid_ds layout was wrong for some fields -- time64 struct layout was wrong in sound ioctl fallback (32-bit archs) - - - -1.2.4 release notes - -new features: -- large dns record lookups via tcp fallback -- new getaddrinfo EAI_NODATA result to distinguish NODATA/NxDomain -- support for new RELR compressed format for relative relocations -- sysconf keys for querying signal stack size requirements -- real vfork on riscv64 - -performance: -- mallocng no longer uses MADV_FREE (high performance cost, little gain) -- vdso clock_gettime is supported once again on 32-bit arm - -compatibility: -- gethostbyname family now distinguishes NO_DATA from HOST_NOT_FOUND -- res_send now works with caller-provided edns0 queries -- arpa/nameser.h RR types list is now up-to-date -- previously-missing POSIX confstr keys have been added -- mntent interfaces now accept missing fields -- alt signal stack, if any, is now used for internal signals -- the LFS64 macros are no longer exposed without _LARGEFILE64_SOURCE -- memmem (POSIX-future) is now exposed in default feature profile -- pthread_atfork now admits calls from an application-provided malloc -- debugger tracking of shared libraries now works on MIPS PIE binaries -- sendmsg now supports up to SCM_MAX_FD fds in SCM_RIGHTS messages - -bugs fixed: -- gethostbyname[2]_r wrongly returned nonzero (error) on negative result -- parallel v4/v6 address queries could fail on query id collisions -- spurious getaddrinfo/AI_ADDRCONFIG failures due to errno clobbering -- dns search domains ending in dot (including lone dot) broke lookups -- ipv6 servers in resolv.conf broke lookups on systems with v6 disabled -- systems with bindv6only failed to query both v4 and v6 nameservers -- res_mkquery mishandled consecutive final dots in name -- res_send could malfunction for very small answer buffer sizes -- resolver dns backend accepted answers with wrong (A vs AAAA) RR type -- getservbyport_r returned junk or ENOENT (vs ERANGE) on buffer size errors -- dns result parsing of malformed responses could process uninitialized data -- freopen didn't reset stream orientation (byte/wide) & encoding rule -- fwprintf didn't print most fields on open_wmemstream FILEs -- wide printf %lc ignored field width -- wide printf erroneously processed %n after encoding errors -- use of wide printf %9$ argument slot overflowed undersized buffer -- swprintf malfunctioned on nul character in output -- strverscmp ordered digit sequences vs nondigits incorrectly -- timer_create/SIGEV_THREAD failure leaked the thread -- semaphores were subject to missed-wake under certain usage patterns -- several possible rare deadlocks with lock handling at thread exit -- several possible rare deadlocks with aio and multithreaded fork -- dynamic linker relro processing was broken on archs w/variable pagesize -- async cancellation could run cancellation handlers in invalid context -- pthread_detach was wrongly a cancellation point in rare race code path -- use-after-close/double-close errors in mq_notify error paths -- mq_notify event thread wrongly ran with signals unmasked -- wcs{,n}cmp, wmemcmp returned wrong results when difference overflowed -- accept4, pipe2, and dup3 handled unknown flags wrong in fallback cases -- CPU_SETSIZE macro had wrong unit -- select fallback for pre-time64 kernels truncated timeout (vs clamping) - -arch-specific bugs fixed: -- x32 new socketcalls took fallback path due to pointer sign extension -- x32 wait4 didn't fill rusage structure (time64 regression) -- x32 semtimedop mismatched timespec ABI with kernel (time64 regression) -- sigaction signal mask was bogus on or1k, microblaze, mips, and riscv -- powerpc-sf longjmp asm clobbered value argument -- or1k poll function passed timeout to syscall in wrong form |
