10.5.0 - initial release 2 3 4 50.5.9 - signal ABI bugfix, various cleanup and fixes: 6 7sigset_t was wrongly defined as 1024 bytes instead of 1024 bits, 8breaking the intended ABI compatibility with the LSB/glibc sigaction 9structure. users should upgrade immediately and rebuild any libraries 10or object files that might be using the incorrect definitions. 11 12improved security against DoS with tcb shadow passwords by checking 13that the file opened was really an ordinary file. 14 15fixed a bug in the implementation of atomic ops that could have 16allowed the compiler to incorrectly reorder them (in practice, gcc 17with the default settings on i386 was not reordering them). 18 19greatly improved conformance to the C and POSIX standards regarding 20what the standard header files make visible. _POSIX_C_SOURCE is now 21needed to get POSIX functions in standard C headers, and _XOPEN_SOURCE 22or _GNU_SOURCE are required to get XSI interfaces or GNU extensions, 23respectively. 24 25many internal improvements have been made to the syscall-related code 26in preparation for porting to x86_64 and other archs. 27 28 29 300.6.0 - x86_64 port, various important bugs fixed 31 32new x86_64 (amd64) architecture port, contributed by Nicholas J. Kain, 33along with PORTING guide. source tree layout and build system have 34been improved to accommodate further ports. 35 36various bugs that were introduced while making the headers respect C 37and POSIX namespace standards have been fixed. conformance to the 38standards has been improved. 39 40fixed an inefficiency in qsort that triggered a bug (occasionaly 41internal compiler error) in some versions of gcc. 42 43fixed a major bug in the printf %n specifier that prevented it from 44working and caused memory corruption. 45 46 47 480.7.0 - major improvements to posix conformance and completeness 49 50implemented posix shared memory and semaphore interfaces. 51 52implemented all remaining required pthread and clock interfaces. 53 54major fixes to signal semantics. 55 56greatly improved temporary file name generation for safety against 57denial of service due to intentional name collisions. 58 59added syscall wrappers for the linux inotify interface. 60 61malloc(0) now returns a non-null pointer. 62 63fixed printf %n specifier (again), pthread_once (it was always 64hanging), and non-default-type mutex behavior. 65 66added ucontext/sigcontext support in headers to facilitate building 67libgcc with dwarf2 unwind support, and possibly other low-level tools. 68 69improved musl-gcc compiler wrapper. 70 71implemented many small missing functions here and there, minor header 72fixes, etc. 73 74 75 760.7.1 - improvements to completeness, bug fixes 77 78implemented flockfile, wprintf, and robust mutex functions. 79 80fixed stack corruption bug in times(), minor header bugs, and some 81error return value bugs in thread interfaces. 82 83 84 850.7.5 - new features, major optimization, and robustness 86 87implemented POSIX timers. 88 89optimized and simplified many thread-related functions. 90 91eliminated resource leak races in thread cancellation. (almost all 92existing implementations, including glibc, have these leaks.) 93 94overhauled stdio implementation to take advantage of readv/writev for 95reduced syscall load, and improved stdio's handling of error status. 96 97added syscall header and interface for applications to use and 98greatly simplified internal system for making syscalls. 99 100strangthened tmpnam/tempnam/tmpfile filename generation and made the 101straight C functions not depend on POSIX symbols. 102 103fixed pthread cancellation ABI on i386 to match the LSB/glibc ABI 104 105better double-free handling in malloc 106 107various minor bug fixes 108 109 110 1110.7.6 - major bug fixes 112 113fixed rare but serious under-allocation bug in malloc. 114 115fixed signedness bug in strchr that prevented finding high bytes. 116 117fixed serious parsing bugs in strtold. 118 119fixed statvfs syscall (it was always failing with EINVAL). 120 121fixed race condition in set*id() functions with threads (possible 122deadlock). further audit still needed though. 123 124fseek no longer sets the stream error flag on failed seeks (this was 125wrong and broke some programs, notably GNU m4). 126 127nl_langinfo is no longer a dummy function. (the functionality was 128previously implemented but accidentally left unused). 129 130various small fixes have been made to the implementations and 131prototypes for nonstandard and obsolete functions 132 133 134 1350.7.7 - more bug fixes and program-compatibility improvements 136 137fixed floating point formatting and rounding bugs in printf. 138 139fixed broken %N$ positional argument specifiers in printf. 140 141fixed misaligned read/overread bug in strchr which could lead to 142crashes scanning tiny strings at the end of a page when the next page 143is not readable, or on archs (not yet supported) that forbid 144misaligned reads. 145 146fixed breakage of statvfs on x86_64 147 148fixed crash in getmntent_r 149 150fixed bug in POSIX timers created with NULL sigevent argument 151 152improved semaphore performance, and sem_wait is now interruptable by 153signals, as required by POSIX. 154 155added many compatibility and system-level interfaces, increasing the 156proportion of busybox that works with musl. 157 158 159 1600.7.8 - more bug fixes and compatibility improvements 161 162fixed problems with ipv6 dns and address printing code that made ipv6 163support practically unusable, and some other getaddrinfo bugs. 164 165fixed broken sendmsg/recvmsg functions on x86_64 (caused by incorrect 166msghdr structure). 167 168fixed broken sigsetjmp asm on x86_64. 169 170worked around a problem with input buffering on terminals reblocking 171after getting a blank line, due to a bug in the linux readv syscall. 172 173various improvements to the "rsyscall" system used to implement 174threaded setuid, setgid, etc. 175 176exiting/cancelling the a timer handler thread no longer kills the 177timer. 178 179fixed incorrect trailing zeros on some %g conversions in printf. 180 181fixed buggy byte-swapping functions and moved them to inlines in 182byteswap.h. 183 184many small improvements to header/application compatibility, support 185for nonstandard macros, etc. 186 187 188 1890.7.9 release notes 190 191new pthread cancellation implementation: 192- safe against resource-leak/side-effect-leak race conditions 193- safe against interruption by signal handlers 194- reduced bloat in all cancellable functions 195- reduced bloat for blocking cancellation 196 197new interfaces implemented: 198- realpath (limited functionality) 199- wordexp (limited functionality) 200- flock (nonstandard) 201- forkpty (nonstandard) 202- posix_fadvise 203- posix_fallocate 204 205general bug fixes: 206- syslog function failure to communicate with syslogd 207- bug in siginfo_t definition if wait.h was included before signal.h 208- incorrect struct definitions for most of sysv ipc 209- pthread_exit/cancel on timer handler wrongly destroying the timer 210- linux dup2 ebusy workaround 211- obscure issues in non-threaded programs using some pthread functions 212- getopt_long allowed mismatch in last char of option name 213- incorrect parsing of obscure ip address forms 214- initgroups not working reliably (uninitialized var) 215- shadow pass treating empty expiry field as pass-expired-in-1970 216- bogus longjmp if pthread_exit was called from cancellation handlers 217 218x86_64-specific bug fixes: 219- fcntl file locking 220- thread stack alignment 221- broken select timeouts due to incorrect timeval definition 222 223 224 2250.7.10 release notes 226 227new features: 228- ipv6 numeric string parsing 229- eventfd syscall wrappers 230 231optimizations: 232- new qsort implementation using the smoothsort algorithm 233- much smaller/faster sigset_t handling functions 234- lowered spin count before futex wait in synchronization functions 235 236general bug fixes: 237- incorrect floating point round-to-even behavior in printf 238- major bugs in pthread barrier implementation 239- off-by-one error in scanf %n results 240- scanf failure to report EOF when scanning for literal text 241- minor missing/incorrect prototype issues 242- dependency on undefined call order in fclose 243 244compiler issue workarounds: 245- incorrect inlining of variadic functions on recent gcc versions 246- pcc preprocessor bug with recursive macro expansion 247 248 249 2500.7.11 release notes 251 252new features: 253- integrated dynamic linker 254- dynamic loading (dlopen/dlsym) (for dynamic-linked programs only) 255- XSI search.h API 256- POSIX message queues 257- POSIX spawn interfaces 258- BSD pseudo-random number generator API (random/srandom/initstate/etc.) 259- floating point environment (limited usefulness due to gcc bugs) 260 261general bug fixes: 262- possible crashes with wordexp due to uninitialized variable 263- race condition in pthread_kill (also present and unfixed in glibc/nptl) 264- pthread exit destructors called too late 265- dangerous unbounded vla in glob 266- brk/sbrk legacy functions mismatching legacy semantics 267- wcsncpy dest buffer overflow 268- strncat and wcsncat possible overflows due to double-termination 269 270 271 2720.7.12 release notes 273 274new features: 275- support for textrels in shared objects 276- rpath support in dynamic linker 277- stdio_ext.h functions (for better gnu software compatibility) 278 279bug fixes: 280- some compilers miscompiling dlopen due to misuse of longjmp 281- safe handling of invalid long-double bit patterns (affects printf) 282- workaround for bugs in linux mprotect syscall 283- thread-safety for random() functions 284- various minor issues 285 286 287 2880.8.0 release notes 289 290new features: 291- chinese and japanese legacy charset support in iconv 292- zero-syscall clock_gettime support (dynamic-linked x86_64 only) 293- futex-based locking for stdio (previously used spinlocks) 294- LD_PRELOAD and RTLD_NEXT support in dynamic linker 295- strptime (mostly working but incomplete) 296- posix aio (mostly working but not entirely conformant) 297- memory streams (fmemopen, open_memstream, ...) 298- stub/dummy implementations for various useless legacy functions 299- if_nameindex 300 301security hardening: 302- setuid, etc. should not longer be able to "partially fail" with threads 303- ensure suid programs start with fd 0,1,2 open 304- improved openpty/forkpty failure checks 305 306threads/synchronization bug fixes: 307- dangerous spurious wakeup in pthread_join lead to early return 308- race condition enabling async cancellation (delayed/lost cancellation) 309- destruction/unmapping race conditions in semaphores, mutexes, rwlocks 310- recursive rwlock_rdlock deadlock when a writer is waiting 311- race condition in sigqueue with fork 312- timer expiration thread exit wasn't running dtors 313- timer threads weren't blocking signals 314- close was wrongly cancellable after succeeding on some devices 315- robust mutex list was not reset on fork 316 317general bug fixes: 318- incorrect logic in fread (spurious blocking; crash on write-only files) 319- many corner cases and overflow cases for strtol-family functions 320- various printf integer formatting issues with flags/width/precision 321- incorrect iconv return value on failure 322- broken FD_* macros on 64-bit targets 323- clock function returning wrong value (real time not cpu time) 324- siglongjmp signal mask clobbering (off-by-one pointer error) 325- dynamic linker weak symbol resolution issues 326- fdopendir failure to set errno 327- various minor header fixes 328 329 330 3310.8.1 release notes 332 333bug fixes: 334- mismatching prototypes caused build failure on 64-bit 335- other minor prototype errors in the headers have been fixed 336- various other small omissions fixed 337 338 339 3400.8.2 release notes 341 342new features: 343- ptrace syscall support 344 345bug fixes: 346- const error (only a warning with many compilers) in lio_listio 347- minor portability fixes aimed at supporting new arch targets 348 349 350 3510.8.3 release notes 352 353new features: 354- arm port (experimental) 355- better musl-gcc wrapper script for building against musl 356- added clone system call 357 358bug fixes: 359- numerous header file typos, copy/paste errors, omissions 360- statfs and statvfs ABI are now LSB-conformant (and actually work) 361 362 363 3640.8.4 release notes 365 366new features: 367- arm dynamic linker support 368- process-shared pthread barriers now work 369- efficient futex-requeue-based cond var broadcast 370- more optional cancellation points are now cancellable 371- printf accepts null pointers with %s, prints as "(null)" 372- recursive mutexes are now fully reentrant 373- __cxa_atexit support 374- real vfork 375- dynamic linker now gold-compatible 376- prlimit syscall 377- support for large limits with setrlimit/getrlimit (even on 32-bit) 378- glob now supports GLOB_PERIOD option (GNU extension) 379 380bug fixes: 381- many serious issues in condition variables 382- rwlock failure-to-wake deadlock issues 383- various small header files bugs/omissions 384- wrong failure return for pthread_create 385- path handling issues on execvp 386- lock count corruption with robust recursive mutexes on owner death 387- integer overflows in atoi, etc. reading most-negative value 388- spurious mremaps on every realloc of large memory chunks 389- pthread cancellation failure in single-threaded programs 390 391security: 392- avoid fd_set overflow in dns lookups 393 394 395 3960.8.5 release notes 397 398new features: 399- stdio operations are now cancellable (only when low-level io happens) 400- global ctor/dtor support in main program start code and shared libs 401- dynamic linker support for PIE executables (but missing startup code) 402- vfork support on x86_64 403- complete set of locale_t functions (all ignore the locale argument) 404- provide define float_t and double_t in math.h 405- lighter/faster cancellation cleanup handler register/unregister 406 407bug fixes: 408- gcc wrapper now supports -shared, -nostdlib, -nostartfiles 409- removed one wrongly-classified character from iswspace set (zwsp) 410- fixed crashes in dns lookup on some errors, e.g. resolv.conf missing 411- "make install" no longer tries to build shared libc if disabled 412- ptrace argument handling bugs fixed 413- work around visibility-hidden bugs in gcc 3.x 414- fix thread-pointer-loss issue when it's initialized in signal handlers 415- various minor typo/misc fixes in headers 416 417compatibility: 418- glob behaves more like traditional implementations w.r.t. GLOB_MARK 419- added legacy futimes, lutimes functions 420- more compatibility macros in sys/param.h (nonstandard header) 421- setfs[ug]id syscall wrappers (linux specific) 422- fgetpwent function (nonstandard) 423- utmp.h matches traditional version more closely 424- caddr_t now matches glibc type (void * instead of long) 425- dummy (always-fail) dlopen and dlsym functions for static linked programs 426- [efg]cvt functions (previously posix, removed from standard) 427- get_current_dir_name function (nonstandard) 428 429 430 4310.8.6 release notes 432 433bug fixes: 434- fix crash in dns lookups for all static-linked, non-threaded programs 435 436 437 4380.8.7 release notes 439 440new features: 441- c++ support with g++'s libstdc++ 442- c99 math library (float, long double, complex, etc.) 443- numerous wchar_t functions 444- a64l, l64a functions 445- getdate function 446 447compatibility: 448- c89 compatibility in math.h 449- syscall.h alias for sys/syscall.h 450- memory.h alias for string.h 451- getcwd supports null buffer argument (auto-allocation) 452 453bug fixes: 454- major fenv (floating point environment) fixes and optimizations 455- strptime mishandling of day/month names 456- strtoull wrongly rejecting the highest 16 possible values as overflow 457- math.h constant expression fixes for INFINITY/NAN/etc. 458- scanf mishandling of "0" with "%x" 459 460 461 4620.8.8 release notes 463 464new feature: 465- major math correctness and performance improvements 466- many math functions implemented in asm for i386 467- some math functions (mostly long double) in asm for x86_64 468- new floating point parser/converter with correct rounding 469- implement wcstod, wcstof, and wcstold 470- new scanf implementation - cleaner, faster, more correct 471- minimal/incomplete strfmon implementation 472 473compatibility: 474- header fixes for c++ 475- regex code resync with TRE; support common regex extensions 476- support for compiling apps with gcc's -funsigned-char 477- sysconf now returns dynamic limits for open files, processes 478- give dlerror proper error status stickiness 479- make alloca work even with -fno-builtin 480 481critical security fixes: 482- stack-based buffer overflow in fprintf on unbuffered files 483 484other bug fixes: 485- rare gcc register allocation (miscompilation) bug in syscall wrappers 486- printf was rejecting the valid (but redundant) %lf format specifier 487- fixed big data bloat (missing const) in math functions 488- many math fixes related to floating point exceptions and rounding 489- corrected DECIMAL_DIG definitions 490- tgammal was wrongly setting global signgam 491- crash in wordfree with uninitialized we_offs 492- fix wordexp not null-initializing the we_offs initial slots 493 494 495 4960.8.9 release notes 497 498bug fixes: 499- major breakage in strtol and family: failure to accept leading spaces 500- incorrect name for MATH_ERREXCEPT in math.h 501 502compatibility: 503- prototypes for a few additional nonstandard functions 504 505 506 5070.8.10 release notes 508 509new features: 510- correct over/underflow detection (ERANGE setting) for strtod 511- new musl-gcc wrapper, specfile based, faster and more robust 512- meaningful return strings for dlerror 513- new iswalpha, iswpunct, and wcwidth; sync'd to Unicode 6.1 514- towupper/towlower sync'd with Unicode 6.1 515- new futex-based libc-internal locks instead of spinlocks 516- experimental stack protector support (minimal; no random canary) 517- experimental gdb shared library tracking support 518 519compatibility: 520- getusershell family functions 521- getresuid and getresgid syscall wrappers 522- byte swapping macros in endian.h 523- getdtablesize was wrongly declared in unistd.h for _XOPEN_SOURCE 524 525bug fixes: 526- iconv_open wrongly rejecting most dest charsets (broken in 0.8.0) 527- sysconf failure when correct value is -1 (broken in 0.8.8) 528- scanf and strtod family functions overreading past NAN (4 bytes vs 3) 529- scanf and strtod wrongly treating "0.00000000001", etc. as 0 530- many bugs in towupper/towlower (never seriously tested before) 531- int8_t definition was wrong when gcc -funsigned-char was used 532 533 534 5350.9.0 release notes 536 537license change: MIT 538 539new features: 540- configure script, improved build system 541- full stack protector support 542- PIE support on x86 and x86_64 543- new O(1) space, O(nm) time implementation of fnmatch 544- improved support for sse2 floating point mode on x86 545 546compatibility: 547- added linux unshare syscall 548- exp10/pow10 function 549- sqrtl support on arm (previously missing) 550- removed minimal linux/*.h headers that could conflict with real ones 551- support for _LARGEFILE64_SOURCE (mapped to standard fcns with #define) 552- better c89 compatibility in headers 553- stub versions of sched_* functions (previously missing) 554- pthread stacks no longer executable (compat with hardened kernels) 555- new ar.h and lastlog.h (legacy junk) 556- various other header improvements 557 558optimization: 559- additional x86_64 math asm 560- better formula for acos use in i386 asm 561 562bug fixes: 563- large (up to a few %) errors in strtod for certain values due to bug 564- mbsnrtowcs and wcsnrtombs were completely broken (bad exit logic) 565- wide printf %.0s could fail due to uninitialized variable 566- missing dlerror strings for dlsym in some cases 567 568 569 5700.9.1 release notes 571 572new features: 573- dynamic linker can be used as a program to explicitly load/run executables 574- ldd command, usable by making a symlink to the dynamic linker named ldd 575 576bug fixes: 577- major bugs in POSIX BRE parsing inherited from TRE regex code 578- character matching bug in regex on ARM: WCHAR_MAX was assumed to be signed 579- various obscure fixes related to signals and pthread cancellation 580- remquot subnormal remainder bug 581- buggy macros in (nonstandard) sys/param.h 582- major bug in pthread barriers on x86_64 (out of bounds write) 583- utimes (legacy) function was making wrong syscall (utime instead of utimes) 584- avoid using "old" syscalls that don't exist on arm eabi linux 585- broken strrchr(str, 0) 586- broken mbsinit(0) 587- broken wcsncmp 588- syntax error in nextafter macro in tgmath.h 589- missing support for -pie in musl-gcc wrapper 590- abort could wrongly fail to terminate the program in some cases 591 592compatibility: 593- increase default thread stack size to 80k 594- support _BSD_SOURCE feature test macro 595- support _LARGEFILE64_SOURCE feature test macro (merely exposes alt names) 596- lots of legacy-compatibility improvements in headers 597- various minor GNU extension functions 598- sysconf reporting number of available CPUs/cores 599- various LSB/glibc ABI interfaces aimed at compatibility with some binaries 600- use fistpll asm mnemonic instead of fistpq for compat with clang 601 602 603 6040.9.2 release notes 605 606bug fixes: 607- pointer overflow in printf (crash on 32bit userspace, 64bit kernel) 608- printf %ls over-read bug 609- strtod failure to read -0x as negative zero 610- flush stdio after dtors, not before 611- wrong file position for buffered input streams on exit 612- popen was broken when stdin/out were already closed 613- broken wcwidth tables (missing many characters) 614- fwrite: wrong return value of partial/failed write 615- broken utf-16 conversions 616- bad buffer length check in getlogin_r 617- bad perror("") behavior; did not match perror(0) 618- broken sysinfo syscall/structure 619- stdint.h const macro signedness bugs 620- broken include guards in some headers 621- bogus localeconv values 622- cancellation-safety for popen and pclose 623- fma corner cases wrong on i386 624- fcntl F_GETOWN errno missing on failure. 625- char signedness bug in dynamic linker broke dlopen on arm 626- mprotect failure in dynamic linker caused crash instead of error 627 628build system: 629- configure check to work around hacked-up gcc versions 630- test for old binutils that can't support musl dynamic linker 631 632compatibility: 633- make _GNU_SOURCE imply _LARGEFILE64_SOURCE 634- syscall wrapper for lots of nonstandard and/or legacy linux syscalls 635- versionsort stub 636- timegm function (inverse of gmtime) 637- various minor header tweaks 638- make __freading/__fwriting semantics match traditional ones 639- added gnulib-compatibility stdio interfaces 640- added pthread_attr_setstack interface 641- make strerror_r return partial string when buffer is too small 642- duplocale should accept LC_GLOBAL_LOCALE 643- align ptsname_r to upcoming posix requirements 644- support invalid ld80 bit patterns as extra nans. 645 646 647 6480.9.3 release notes 649 650new features: 651- mips (32-bit, o32 abi) port, currently static-linked only 652- newly overhauled crypt implementation 653- improved library pathname info for debugger from the dynamic linker 654- getaddrinfo (and getservbyname) now support /etc/services lookups 655- pipe2 syscall wrapper 656- splice and vmsplice syscall wrappers 657- syscall wrappers for extended attribute interfaces 658- ioperm/iopl syscall wrappers on archs that support these operations 659 660bug fixes: 661- dlsym RTLD_NEXT library search order was wrong 662- multiple dlopen pathname and library name handling errors 663- potential race condition in detached thread exit 664- broken internal-lock-handling code not updated for futex-based __lock 665- sem_trywait spurious EAGAIN errors arising from CAS failures 666- workaround kernel bug in cmsghdr size_t vs socklen_t issue (64-bit) 667- getservby* crash on null protocol argument 668- logic error skipping failed interfaces in if_nameindex 669- various minor header/declaration related issues 670 671arm-specific bug fixes: 672- broken crti/crtn startup code when gcc crtbegin/end files are linked 673- sigsetjmp tail call optimization failure broke the function 674- incorrect little-endian assumptions in atomic.h functions 675- use of blx instruction in asm (not supported on pre-v5 arm) 676 677build system: 678- only use expensive -ffloat-store cflag on archs/compilers that need it 679- make musl-gcc wrapper support -lgcc (mainly for self-hosting) 680 681 682 6830.9.4 release notes 684 685new features: 686- blowfish crypt 687- dynamic linking on mips 688- arm hard float support 689- BSD fgetln function in stdio 690- minor header improvements for compatibility 691- support for CROSS_COMPILE variable to configure 692- legacy significand function 693- better support for SUSv3-targeted programs 694 695performance: 696- assembly (string ops based) memcpy for i386 and x86_64 697- reduce printf overhead 698 699bug fixes: 700- failure of strtod, etc. to process extremely long strings correctly 701- read overrun in wcsstr for short needles 702- various major mips issues that prevented most software from working 703- erroneous floating point exception behavior in i386/x86_64 exp asm 704- crashes on null arguments to legacy err.h functions 705- various header file/type issues 706- extremely rare/obscure race condition with robust mutexes 707- crypt now never returns null (most programs don't check, then crash) 708- missing xattr remove functions 709 710 711 7120.9.5 release notes 713 714compatibility and headers: 715- POSIX+XSI+BSD features enabled by default with no macros defined 716- most programs can now be built without adding -D_GNU_SOURCE 717- added C99 restrict keyword where required in all prototypes 718- greater C89 compatibility 719- cleaner, more-compatible public syscall.h 720- many other header fixes 721- support for compiling musl with clang/llvm 722 723new features: 724- sha 256/512 password hash functions in crypt 725- GNU hash support in dynamic linker 726- partial C11 coverage 727- dladdr function added 728- dynamic linker reports all errors instead of exiting on first error 729- syscall wrappers added for most remaining linux syscalls 730- provide POSIX O_SEARCH open mode using linux O_PATH 731 732bug fixes: 733- most atexit functions were being skipped when exiting 734- some BSD functions were not being exposed under _BSD_SOURCE 735- issues loading ssp-protected DSO into non-ssp program with dlopen 736 737debloating: 738- eliminate .eh_frame (10-15% loaded size bloat) 739- optimal inline syscall asm for ARM and MIPS 740- no longer force -O3 for shared libs 741 742 743 7440.9.6 release notes 745 746bug fixes: 747- serious breakage in definition of O_ACCMODE mask (missing a bit) 748 749new features: 750- O_EXEC open mode 751- md5 crypt hash function 752 753 754 7550.9.7 release notes 756 757new features: 758- thread-local storage (__thread/_Thread_local) 759- microblaze port 760- getopt option parsing reset support 761- vsyscall (sysenter, etc.) support on i386 (faster syscalls) 762- memmem function (GNU extension) 763- mips fenv support 764- accept "nan(n-char-sequence)" in strtod/scanf family functions 765- configure now supports compiling with pcc 766 767quality and correctness improvements: 768- close-on-exec flag for all library-internal file descriptors 769- cancellation-safety and corner-case overhaul in shm_open/sem_open 770- close EINTR vs EINPROGRESS issue 771- mark binaries as not requiring executable stack 772- better gdb compatibility in dynamic linker 773- support recursive dlopen (dlopen called from constructors) 774- posix_spawn/system/popen no longer momentarily double commit charge 775- all stdio functions wait for locks 776 777bug fixes: 778- broken sysvipc *ctl functions on 64-bit archs 779- broken shmdt on some archs 780- getaddrinfo failure with port "0" 781- dirname handling of trailing slash 782- vfork race in posix_spawn 783 784 785 7860.9.8 release notes 787 788new features: 789- powerpc port 790- dl_iterate_phdr interface 791- added mips-specific syscalls 792- thread priority scheduling 793- C11 CMPLX macro in complex.h 794- x86 port io functions in sys/io.h 795 796compatibility: 797- improved headers for trace/debugging/machine-access 798- stub functions for unsupported thread-related functionality 799 800bug fixes: 801- numerous math bugs (mostly exception flags and excess-precision issues) 802- register clobber error in i386 vsyscall asm (did not affect most callers) 803- various incorrect definitions in mips headers 804- broken dlsym asm on mips 805- empty prefix handling in configure script (--prefix="") 806- ldso search path logic issues 807- lock handling for stdio memory streams at exit time 808- invalid SO_REUSEPORT definition in socket.h (not supported by Linux) 809- broken redirection attempt to /dev/null in configure script 810 811 812 8130.9.9 release notes 814 815new features: 816- tgamma implementation (no longer lgamma wrapper with low precision) 817- various gnu extensions: sigandset, sigorset, etc. 818- futimesat function (obsolete) 819- various linux syscalls: arch_prctl, personality, etc. 820 821optimizations: 822- hyperbolic, inverse hyperbolic, and inverse trig, bessel functions 823- is* comparison macros in math.h now expand inline properly 824 825library bugs fixed: 826- calling getenv from shared library ctors was broken 827- invalid read in mmap-serviced aligned_alloc/memalign (possible crash) 828- wrong errno result in fallback path of pipe2 829- various math functions raising spurious exceptions 830- mmap errno value on invalid offsets 831- backwards alignment logic in strlcpy 832- integer overflows in bessel functions 833- large (up to 60ulp) error in erfcf 834- dlsym/dlclose crashing on invalid library handles 835- failure to handle arch variations for cloexec/nonblock flags 836- lio_listio wrong return value for LIO_WAIT mode 837- dladdr failure to resolve PLT addresses 838- time_t/struct tm conversion off-by-one-day in december 839- malloc corruption on nonstandard kernels with non-page-aligned brk 840 841arch-specific bugs fixed: 842- arm ctors/dtors were not working with recent gcc versions 843- arm and mips setjmp/longjmp wrongly saved/restored fenv state 844- loss of precision in i386/x86_64 expl 845 846header bugs fixed: 847- incorrect PRI/SCN macros in inttypes.h for some types 848- arm sys/user.h regressions 849- failure of offsetof() to be an integer constant expression 850- tgmath return value type problems 851 852header compatibility improvements: 853- _GNU_SOURCE now enables everything; _ALL_SOURCE also works 854- scsi/scsi.h and scsi/sg.h are now provided 855- additional MAP_* flags for mmap 856- additional F_* commands and flags for fcntl 857- additional socket option, IPPROTO_* values, and multicase macros 858- thread-related waitpid flags 859- EHWPOISON added to errno.h 860- additional macros for mount, swap, and reboot operations 861- expose additional link.h structures 862- always ensure sizeof(NULL)==sizeof(void *), even in c++ 863- additional flags for poll, epoll, inotify, timerfd, timex, dlfcn 864- register names in signal.h/ucontext.h for x86 865- ipc.h ipc_perm nonstandard struct field name compatibility improve 866 867 868 8690.9.10 release notes 870 871new features: 872- getifaddrs 873- pthread_getattr_np (widely used by garbage collectors) 874- mkostemps, mkostemp, mkstemps functions (mkostemp is future-POSIX) 875- strcasestr and strverscmp (previously stubs) 876 877improvements: 878- major performance improvements in mbtowc 879- avoid filling caller-provided thread stacks with large TLS 880- debloat unnecessary static buffers 881- robust posix_spawn based on CLONE_VM instead of vfork 882- new system() and popen() based on posix_spawn 883- better strerror strings 884- further emulation of atomic close-on-exec/nonblock options for old kernels 885- provide macro constants for new-ish kernel features 886 887compatibility: 888- several nonstandard but widely-available pwd/grp/shadow functions 889- program_invocation_[short_]name 890- re-added useconds_t type used by some programs 891- some legacy arpa headers 892- dn_skipname function (legacy resolver API) 893- additional ABI aliases for supporting glibc-linked libraries/binaries 894 895general bugs fixed: 896- stale locks and bogus munmap call when pthread_create fails 897- uninitialized argument to munmap when dynlink load_library fails 898- incorrect error returns in gethostby*_r 899- memory leak in gethostbyname family 900- blank ai_canonname in getaddrinfo for non-CNAME records 901- undefined HZ macro in scsi/sg.h 902- wrong return value for wmemmove on forward-copy 903- namespace conformance in strings.h 904- various utmp.h bugs 905- unnecessary DT_SONAME in libc.so caused problems on some systems 906- multiple bugs in syslog, some possibly dangerous 907- non-functional setpriority function 908- slight mishandling of 0xf5 byte in UTF-8 decoder 909- misaligned memory accesses in mbsrtowcs 910 911arch-specific bugs fixed: 912- crash in shared library loading on arm 913- missing __aeabi_atexit needed by arm eabi 914- wrong float_t definition on x86_64 915- various low-impact type size/alignment mismatches in some headers 916- epoll struct alignment wrong on non-x86[_64] archs 917- broken pipe2 fallback code on mips with old kernels 918 919 920 9210.9.11 release notes 922 923new features: 924- %m allocation modifier for scanf 925- week number and ISO week-based-year functionality in strftime 926- per-process and per-thread cputime clocks 927- ethernet address conversion interfaces 928- legacy classful ipv4 network address interfaces 929- minimal dlinfo function (nonstandard) 930 931other improvements: 932- dynamic linker path file can now use newlines to separate paths 933- math optimizations for archs with extended precision (i386) 934- musl-gcc wrapper now exposes gcc's intrinsic headers 935- quality of rand and rand_r pseudo-random sequences 936- support for large device minor numbers (greater than 8 bits) 937- various header conformance and compatibility fixes 938 939directly user-visible bugs fixed: 940- scanf losing characters on unbuffered streams and fmemopen streams 941- failure of mbsrtowcs to record stop position when dest is full 942- failure of iconv to convert to legacy codepages 943- non-working pthread_[sg]etschedparam functions (wrong syscall arguments) 944 945other potentially-serious bugs fixed: 946- resource leaks in sem_open 947- various bugs in thread exit synchronization 948- invalid access in aio notification after aiocb free/reuse 949- synchronization in dynamic linker when new thread dlopens during ctors 950- lack of error handling for failure to read dynamic linker path file 951- creation by mmap or shmget of objects larger than PTRDIFF_MAX 952 953minor conformance bugs fixed: 954- overflow handling for the clock function 955- workaround for incorrect exceptions in fma due to compiler bugs 956- workaround wrong kernel type for sem_nsems field in struct semid_ds 957 958arch-specific bugs fixed: 959- x86_64 sigsetjmp clobbered the signal mask rather than saving it 960- misaligned stack when calling ctors/dtors (crashing on x86_64) 961 962 963 9640.9.12 release notes 965 966new features: 967- zoneinfo time zone support 968- PIE support on all supported archs 969- named sub-archs for endian and float ABI variants 970- improved support for non-root installs of the dynamic linker 971- ability to selectively build only performance-critical modules with -O3 972- simple buffer overflow detection in free/realloc 973- inet_ntop now presents v4-mapped addresses in ::ffff:a.b.c.d form 974- ldd now reports libc and the dynamic linker in its output 975 976compatibility: 977- support for new init/fini array (needed for ctors/dtors on newer gcc) 978- C++ ABI fully matches glibc/LSB, at least on x86 979- many added ABI compatibility symbols for using glibc-linked libs 980- support for STB_GNU_UNIQUE symbol bindings (found in some C++ libs) 981- macros/types for new Linux kernel features in headers 982 983bugs fixed: 984- crashes in scanf on literal mismatches (regression from adding %m) 985- dl_iterate_phdr was passing invalid phdr pointers to its callback 986- getaddrinfo with null host and AF_UNSPEC was failing to report IPv6 987- integer overflows in date/time conversion code 988- misinterpretation of pre-1930s dates as post-2038 on 32-bit archs 989- make install failed to install bits headers if make was not run first 990- shm_open was wrongly cancellable 991- low- or no-impact heap corruption in memalign 992- explicitly running the dynamic linker on PIE programs did not work 993- missing macros and sysconf for some supported POSIX option groups 994- missing close-on-exec flags for several internal fd uses 995 996arch-specific bugs: 997- wrong SIG_ATOMIC_MIN/MAX macros on x86_64 998- erfcl was missing on archs where long double is same as double 999- broken dynamic-model TLS in static-linked arm/mips/powerpc programs 1000 1001 1002 10030.9.13 release notes 1004 1005new features: 1006- iconv support for EUC-KR and Big5 (including HKSCS) encodings 1007- field widths (POSIX 2008 feature) in strftime 1008- recursive rpath and $ORIGIN support in dynamic linker 1009- cpu affinity interfaces 1010- support for armhf (hardfloat) floating point environment (fenv) 1011- support for SSE fenv on i386 (for apps using -mfpmath=sse -msse2) 1012- strftime %s format (seconds since the epoch, future POSIX requirement) 1013- configure script now saves its command line as a comment in config.mak 1014- legacy functions valloc and euidaccess 1015 1016performance: 1017- optimized asm memcpy for arm 1018- optimized asm memset for i386 and x86_64 1019- optimized C versions of memcpy and memset for all archs 1020- eliminated major spurious syscalls from posix_spawn 1021- some math asm for armhf (hardfloat) 1022 1023workarounds for: 1024- qemu-user's rt_sigaction syscall does not allow old to alias new 1025- qemu-user's madvise always succeeds (broke pthread_getattr_np) 1026- passing PT_INTERP to dlopen attempted to double-load libc 1027- gcc 4.8.x generating self-referential (infinite recursion) memcpy/memset 1028- linux's lack of support for fchdir, fchmod, fchown, fstat on O_PATH fds 1029 1030bugs fixed: 1031- failure to honor flags for fchmodat and faccessat (linux syscall api flaws) 1032- SIGEV_THREAD timer id corruption and race condition issues 1033- timer thread TLS incorrectly keeping values from previous expiry run 1034- ecvt/fcvt decimal position off-by-one 1035- in symbol-versioned libs, symbol resolved to oldest instead of newest 1036- posix_spawn not correctly reporting errno from exec failure 1037- "make install" was not atomic (overwrote files rather than replacing) 1038- integer overflows in strftime 1039- unset/empty TZ variable was mishandled 1040- strftime could crash if the struct tm did not have valid tm_zone field 1041- failure of fenv functions to handle invalid arguments (required by ISO C) 1042- failure of some math functions (C and i386 asm) to raise underflow flag 1043- broken dn_expand function (previously not used internally) 1044- race conditions with signals during fork 1045- incorrect access check in mktemp (obsolete function) 1046- unnecessary arbitrary limits on size of program headers in dynamic loader 1047- text formatting bugs in output of err.h functions 1048 1049arch-specific bugs: 1050- fesetenv(FE_DFL_ENV) crashed on i386 1051- breakage of arm crt code when libc is compiled as thumb 1052- arm/armhf (hardfloat) misidentified by configure 1053- ambiguity of wait (exit status) macros on mips with signal number 127 1054- wrong value of _NSIG and SIGRTMAX on mips 1055 1056 1057 10580.9.14 release notes 1059 1060bugs fixed: 1061- failure to properly install dynamic linker with DESTDIR set (symlink wrong) 1062- rare deadlock in libc-internal locking routines 1063- dynamic linker used fallback paths wrongly on (possibly transient) errors 1064- popen broken when stdin or stdout was already closed in parent 1065- deadlock/memory-corruption in multithreaded set*id and setrlimit functions 1066- realpath failed when file was not readable 1067- readpath mistakenly had cancellation points in it 1068- crashes in scanf with invalid %m conversion specifiers 1069- misclassificiation of some invalid ld80 float representation in fpclassify 1070- various overflow and underflow flag issues in math functions 1071- domain handling errors for acoshf and acoshl 1072- wrong values for some sysconf properties 1073- lack of proper memory barriers on arm 1074 1075mips-specific bugs: 1076- broken sysv ipc structures 1077- multiple stack-related bugs in clone, leading to crashes in parent or child 1078- overflow writing sigset_t in multithreaded set*id and setrlimit functions 1079 1080other improvements: 1081- size and performance improvements to various math functions 1082- wait.h as a compatibility alias for sys/wait.h 1083- various header improvements 1084- support for runtime-variable page size on archs that need it (mainly mips) 1085 1086 1087 10880.9.15 release notes 1089 1090new features: 1091- support for mixing IPv4 and v6 nameserver addresses in resolv.conf 1092- RFC 3678 multicast structures/macros in netinet/in.h 1093- putspent and fgetspent functions (shadow password API) 1094- timef function (obsolete, removed in POSIX 2008) 1095- fanotify syscalls (Linux-specific feature) 1096- semtimedop syscall (Linux-specific sysvipc extension) 1097- quotactl syscall and header (filesystem quotas support) 1098- drem and finite functions (obsolete BSD functions) 1099- getloadavg function (non-standard) 1100- herror function (non-standard and obsolete) 1101- libc.so now stores and prints its version information 1102- expose constants for new Linux features including O_TMPFILE 1103- implement FNM_LEADING_DIR option to fnmatch (GNU extension) 1104- posix_close function (accepted for inclusion in next POSIX issue) 1105 1106bugs fixed: 1107- buffer overflow in mbsrtowcs 1108- clobbering of gr_name in getgrnam_r and getgrgid_r 1109- execle ignoring the environment argument 1110- setenv crash on malloc failure 1111- out-of-bounds access in fnmatch with FNM_PATHNAME and certain patterns 1112- failure of malloc to set errno when failing to extend heap 1113- incorrect errno value from getcwd with zero size 1114- spurious failure in faccessat with AT_EACCESS flag with suid/sgid programs 1115- several fd leaks due to missing close-on-exec flag 1116- misspellings/typos in macro names in several headers 1117- incorrect failure return value in inet_pton 1118- various numeric ip address parsing and validation fixes 1119- namespace conformance issues in several headers 1120- minor header issues 1121- zombie processes left by faccessat with AT_EACCESS 1122- timezone file parser failing/crashing on 64-bit archs 1123- hang in localtime with near-overflowing time_t values on 64-bit archs 1124- timezone path search was only trying first path 1125- incorrect handling of excessive-length TZ environment strings 1126- timezone file loading was wrongly enforcing O_NOFOLLOW/rejecting symlinks 1127- iswspace was wrongly returning true for the null character 1128- various bugs in wordexp 1129- putgrent could write corrupt lines after write failures 1130- dn_expand misinterpreted in-packet offsets greater than 255 1131- spurious strftime/wcsftime failure on len+1==bufsize case 1132- incorrect underflow flag in fma corner cases 1133- log*(0) wrongly returned +inf in downward-rounding mode 1134- failure of fchmod, fstat, fchdir, and fchown to produce EBADF 1135 1136arch-specific bugs fixed: 1137- i386: failure of fesetround to set sse rounding mode 1138- i386: floating point limit constants misinterpreted due to excess precision 1139- powerpc: broken thread pointer access when compiled with clang 1140- microblaze: dynamic linker entry point code possibly clobbering argv 1141 1142strict conformance issues: 1143- NULL definition re-aligned with POSIX (requires (void *) cast) 1144- alignment of math.h is* comparison functions with C11 annex F requirements 1145 1146 1147 11481.0.0 release notes 1149 1150new features: 1151- support for mips softfloat ABI variant 1152- legacy setkey and encrypt API for DES 1153- support for BSD version of struct tcphdr in addition to GNU version 1154- added ipv6 and icmpv6 protocol lookups to getprotoent-family functions 1155 1156new experimental ports: 1157- sh (SuperH) 1158- x32 (ILP32 ABI for x86_64) 1159 1160compatibility: 1161- improved c89 compiler support in math.h 1162- eliminate some compiler warnings in public headers 1163- added some missing things for LFS64 APIs 1164- added fallback emulation of accept4 for older kernels 1165 1166bugs fixed: 1167- buffer overflow in printf when printing smallest denormal exactly 1168- rounding errors in printf in some just-over-halfway cases 1169- posix_spawn did not accept null pid pointer (crashed) 1170- ftello gave incorrect result for unflushed append-mode streams 1171- mishandling of n=0 case in wcsxfrm (wild buffer overrun) 1172- possible system breakage during libc upgrade due to install.sh bugs 1173- nftw FTW_MOUNT flag prevented walking any directories at all 1174- ptsname/ptsname_r returned negated error codes 1175- getprotoent function returned junk after listing valid protocols 1176- wrong error code from readdir when the directory has been deleted 1177- various prototype/argument-type fixes, mostly to legacy functions 1178- various header namespace violations 1179 1180arch-specific bugs fixed: 1181- fesetenv(FE_DFL_ENV) was broken on i386 and x86_64 1182- strerror(EDQUOT) did not work on mips 1183- recvmsg/sendmsg were broken on powerpc 1184- sysv ipc was broken on powerpc and mips 1185- statfs/statvfs were broken on mips 1186- sigaltstack was broken on mips 1187 1188 1189 11901.1.0 release notes 1191 1192new features: 1193- relro memory protection in dynamic linker 1194- malloc can now extend heap with mmap if brk fails 1195- vdso clock_gettime/gettimeofday/time acceleration on x86_64 1196- thread/library-safe versions of search.h functions (nonstandard) 1197- getauxval function (nonstandard) 1198- sysconf extensions to query physical memory size 1199 1200bugs fixed: 1201- floating point printf output corruption from carry into uninitialized slot 1202- possible runaway carry overflow in printf floating point 1203- printf %g failure to strip trailing zeros in some cases 1204- search past end of haystack in memmem 1205- off-by-one error in confstr return value 1206- crashes in some near-empty static programs that use stack protector 1207- deadlock race in pthread_once 1208- non-working clock_gettime fallback for old kernels 1209 1210arch-specific bugs fixed: 1211- crash from missing syscall asm register clobbers on real microblaze kernel 1212- crash in all nontrivial dynamic linker use on microblaze 1213- incorrect rlimit constants on mips 1214- broken, possibly dangerous, use of getrlimit syscall on x32 in sysconf 1215 1216 1217 12181.1.1 release notes 1219 1220new features: 1221- new options --preload and --library-path to dynamic linker 1222- public execvpe function (nonstandard extension) 1223- iconv support for cp437 and cp850 1224 1225bugs fixed: 1226- false negatives with some periodic needles in strstr, wcsstr, and memmem 1227- crash on invalid zoneinfo files 1228- incorrect zero-padding of some outputs for strftime %s specifier 1229- misreporting of errors in configure script when $CC does not work at all 1230- treating not-yet-implemented strptime specifiers as errors 1231 1232compatibility: 1233- configure now detects serious constant-folding bug in gcc 4.9.0 1234- removed __yield symbol (unused) that clashed with some compilers 1235- improvements to sysconf's handling of unsupported/invalid arguments 1236 1237arch-specific bugs fixed: 1238- misdetection of superh ABI variant by configure on gcc 3.x 1239- missing SO_RCVBUFFORCE and SO_SNDBUFFORCE in mips socket.h 1240- build regression on armv6 and later with -mthumb 1241 1242 1243 12441.1.2 release notes 1245 1246new features: 1247- multi-protocol matches (tcp and udp) in getaddrinfo 1248- support for AI_V4MAPPED and AI_ALL flags to getaddrinfo 1249- reverse name lookups from /etc/hosts 1250- reverse service lookups from /etc/services 1251- support for service aliases in /etc/services 1252- ipsec and tunneling protocols to getprotoent-family functions 1253- res_send, res_mkquery, res_querydomain, and dn_comp functions 1254- ipv6 scope id handling for link-local scope addresses 1255- previously-unimplemented %C and %y in strptime now work 1256- vdso clock_gettime acceleration on i386 (new kernel feature) 1257- better O_CLOEXEC/SOCK_CLOEXEC fallbacks for old kernels 1258 1259bugs fixed: 1260- buffer overflow in dns response parsing (CVE-2014-3484) 1261- possible infinite loop in dns response parsing 1262- sendfile off_t 32/64-bit size mismatch 1263- incorrect end pointer in some cases when wcsrtombs stops early 1264- incorrect if_nametoindex return value when interface does not exist 1265- dummy "ent" function aliases that possibly shadowed real ones 1266- tmpfile fd leak on memory exhaustion 1267- getaddrinfo returning EAI_NONAME for some transient failures 1268 1269arch-specific bugs fixed: 1270- broken kernel side RLIM_INFINITY on mips 1271- incorrect syscall argument 6/7 types for pselect on x32 1272 1273 1274 12751.1.3 release notes 1276 1277new features: 1278- address sorting in getaddrinfo, etc. modeled on rfc 3484/6724 1279- default timezone taken from /etc/localtime when $TZ is unset 1280- getopt double-colon extension for optional arguments 1281- support for TLSDESC-based (gnu2) TLS dialect on i386 and x86_64 1282- sendmmsg/recvmmsg (linux-specific) 1283- fmtmsg (last mandatory XSI function that was missing) 1284 1285compatibility: 1286- treat dns rcode=2 as temporary failure, not negative result 1287- working thread-pointer for pre-2.6 kernels on i386 1288- further ABI-compat symbols: __xmknod[at], __sysv_signal 1289 1290bugs fixed: 1291- memmem false positives/false negatives/crashes from invalid logic 1292- gethostby*_r not setting result pointer to null on failure 1293- aliasing violations in syscall.h SYSLOG_NAMES feature 1294- fanotify_mark syscall arguments wrong 1295 1296arch-specific bugs fixed: 1297- various subtle relocation bugs in powerpc and sh dynamic linker 1298 1299 1300 13011.1.4 release notes 1302 1303new features: 1304- experimental locale support for LC_MESSAGES and LC_TIME 1305- non-stub gettext family functions for message translation 1306- or1k (OpenRISC 1000) port 1307- syslog options LOG_CONS and LOG_PERROR 1308- issetugid function (from OpenBSD) 1309- improved if_nameindex and getifaddrs functions 1310 1311compatibility: 1312- work around bug #61144 in gcc 4.9.0 and 4.9.1 1313- support getauxval(AT_SECURE) even on kernels without AT_SECURE 1314 1315bugs fixed: 1316- empty dynamic linker error messages (regression in 1.1.3) 1317- if_nameindex omitted unconfigured and ipv6-only interfaces 1318- incorrect return value for fwide function 1319- failure of wide printf/scanf functions to set wide orientation 1320- multiple issues in legacy function getpass 1321- dynamic linker did not accept colon as a separator for LD_PRELOAD 1322- errno clobber in syslog caused wrong output for %m specifier 1323- crash in regexec for nonzero nmatch argument with REG_NOSUB 1324- minor bugs in rarely-used nl_langinfo item lookups 1325 1326arch-specific bugs fixed: 1327- broken relocations in mips dynamic linker (regression in 1.1.3) 1328- register state corruption in setjmp asm for microblaze 1329- broken struct stat st_ino field on microblaze 1330- broken struct stat st_dev field on big endian mips 1331- broken asm register constraints in atomics on powerpc 1332- missing barriers in atomics on mips, powerpc, microblaze, and sh 1333 1334 1335 13361.1.5 release notes 1337 1338new features: 1339- full C11 coverage (threads, UTF-16/32 API, timespec_get, etc.) 1340- malloc_usable_size function (nonstandard) 1341- support for new F_OFD_* fcntl operations (linux 3.15, POSIX-future) 1342- new _DEFAULT_SOURCE feature test macro to request default profile 1343 1344performance: 1345- private-futex support 1346- redesigned cond var implementation with major performance improvement 1347- tweaked spinning in userspace before performing futex waits 1348 1349bugs fixed: 1350- failure of dn_expand to null-terminate name for crafted DNS packets 1351- corruption of cond var mutex state when switching mutexes 1352- use of uninitialized memory with application-provided thread stacks 1353- false ownership of orphaned mutexes due to tid reuse 1354- possible failure-to-wake for robust mutexes on owner death 1355- subtle errors in robust mutex unrecoverable status handling 1356- missing memory/compiler barrier spinning to obtain locks 1357- wrong behavior in various zero-length stdio operations 1358- buffer overflow in swab with odd argument 1359- incorrect sequence generation in the rand48 family of prng functions 1360- missing cancellation check in non-wait paths of sem_wait, pthread_join 1361- missing barrier in pthread_once fast path 1362- memory leak in regexec when input contains illegal sequence 1363- various parser bugs in regcomp 1364- wrong return value on overflow in some strtoul-family functions 1365- broken CPU_EQUAL macro in sched.h 1366- dlerror not working in static-linked programs 1367- mishandling of negative non-whole-hour TZ offsets 1368- incorrect case mappings for U+00DF 1369- namespace pollution via accidentally-non-static function named "dummy" 1370- missing __fpclassifyl and __signbitl definitions for ld64 archs 1371 1372 1373 13741.1.6 release notes 1375 1376new features: 1377- getopt '-' flag for processing non-option arguments 1378- getopt_long argument permutation extension 1379- getopt_long abbreviated options 1380- ns_parserr and related DNS-packet-parsing functions 1381- fnmatch FNM_CASEFOLD extension 1382- support for translation of getopt error messages 1383- login_tty function (legacy) 1384 1385performance: 1386- efficient atomics on armv7+ targets 1387- pthread_once shrink-wrapping of fast path 1388 1389compatibility: 1390- baseline arm binaries now work on new cpus/kernels without kuser_helper 1391- dynamic linker now honors DT_RUNPATH without DT_RPATH (new binutils) 1392- arm asm is now compatible with clang's internal assembler 1393- suppress macro implementations of functions when headers are used in C++ 1394- increased message length limit for syslog 1395 1396bugs fixed: 1397- open ignored file creation mode argument for O_TMPFILE 1398- wrong printf formatting for %#.0o with value zero 1399- missing private state for uchar.h functions (null ps pointer) 1400- sched_getaffinity left uninitialized data in output bit array 1401- wrong return values for pthread_getaffinity_np and pthread_setaffinity_np 1402- buggy handling of multibyte option chars with arguments in getopt 1403- printf failed to report or stop on write errors 1404- printf failed to honor '+' modifier when printing NANs 1405- wcsnrtombs returned the wrong value in one code path 1406- syslog failed to check for connect error 1407- multi-threaded set*id() had spurious failures from ugly workaround code 1408- various minor header conformance bugs (signedness, constant expressions, ...) 1409 1410arch-specific bugs fixed: 1411- on or1k, some syscalls with 64-bit arguments were broken (misaligned) 1412- usage of sahf instruction on x86_64 crashed on some early cpu models 1413 1414 1415 14161.1.7 release notes 1417 1418new features: 1419- alternate passwd/group backend support via nscd protocol 1420- masked cancellation mode extension (experimental) 1421- aio cancellation 1422- aarch64 port (experimental) 1423 1424performance: 1425- significant memset asm optimizations on i386 and x86_64 1426 1427compatibility: 1428- suppress EINTR in semaphores for old kernels where futex restart is broken 1429- always set optarg in getopt_long 1430- support SOCK_RAW socket type in getaddrinfo 1431- report success instead of EINPROGRESS when close is interrupted 1432 1433bugs fixed: 1434- multithreaded set*id() was not async-signal safe, had various race bugs 1435- getspnam_r returned results for partial username matches 1436- wordexp bad character checker mis-counted parentheses 1437- close on fd with pending aio could lead to file corruption 1438- old aio implementation had numerous conformance bugs 1439- malloc init code could deadlock due to race condition 1440- pthread_exit did not disable cancellation 1441- pthread_cond_wait could wrongly consume signal on cancellation 1442- execvp wrongly stopped path search on EACCESS 1443- fsync, fdatasync, and msync were not honored as cancellation points 1444- fchmodat was subject to fd leak race (missing O_CLOEXEC) 1445- fchmodat failed to report EOPNOTSUPP in race path 1446- passwd/group lookup functions had various minor error-reporting bugs 1447- isatty had false-positives/device-state-corruption for OSS sound devices 1448- configure script failed to detect gcc with translated messages 1449- FLT_ROUNDS macro failed to reflect rounding mode changes in fenv 1450 1451arch-specific bugs fixed: 1452- mips fesetenv did not handle FE_DFL_ENV 1453- mips POLLWRNORM and POLLWRBAND macros had wrong values 1454- x32 pthread synchronization object type definitions were wrong 1455- powerpc minimum signal stack size was insufficient 1456 1457 1458 14591.1.8 release notes 1460 1461bugs fixed: 1462- stack-based buffer overflow in inet_pton (CVE-2015-1817) 1463- regcomp crash/mem-corruption with illegal bytes after backslash 1464- regcomp wrongly allowed backrefs in ER 1465- regcomp miscompiled character class brace-repetitions 1466- regcomp wrongly processed \0 as an unmatchable backref 1467- new FLT_ROUNDS definition failed to work in C++ code 1468 1469arch-specific bugs fixed: 1470- aarch64 was missing max_align_t definition 1471 1472 1473 14741.1.9 release notes 1475 1476new features: 1477- ability to protect libc code itself with stack protector 1478- sigsetjmp now restores signal mask after restoring context, not before 1479- thread-local dlerror status/messages 1480- dlerror messages are no longer truncated 1481- diagnostics for constraint violations with ctype.h macros 1482 1483optimizations: 1484- reduce cost of PIC on archs where PLT calls need a fixed GOT register 1485- spin locks no longer constantly invalidate cache lines while spinning 1486- code size reduction in static-linked TLS init 1487 1488bugs fixed: 1489- failure to process robust mutexes on detached-thread exit 1490- possible memory corruption due to robust mutex list on detached-thread exit 1491- crash on memory exhaustion in getgr* internals 1492- misaligned memory accesses in static binaries with low-alignment TLS blocks 1493- multiple cases of wrongful path search continuation after transient failure 1494- small memory leak on failure of dlopen with RPATH $ORIGIN 1495- several small math bugs related to exception flags with non-finite args 1496- mmap leak in sem_open failure path for link call 1497- duplocale clobbered new locale struct with memcpy of old 1498- futimes crashed with null timeval argument 1499 1500arch-specific bugs fixed: 1501- stack protector spuriously aborted after forking on x32 1502- stack protector spuriously aborted with flockfile on powerpc 1503- theoretically-possible clobbering of syscall return value on mips 1504- random thread-pointer setup failure on sh (uninitialized return value) 1505- possible crash in dlsym on sh due to incorrectly-computed branch target 1506- broken fesetenv(FE_DFL_ENV) on mips 1507- dynamic linker name for sh ignored fpu/nofpu and endianness 1508- various minor aarch64 bugs 1509- dangling pointers in x32 syscall timespec fixup code 1510 1511 1512 15131.1.10 release notes 1514 1515new features: 1516- fail-safe (allocation-free) C locale for newlocale to return 1517- all locale categories track requested locale name 1518- rcrt1.o start file for static PIE 1519 1520optimizations: 1521- inline atomics for sh4a 1522- removed heavy atomics from locale-related code paths 1523- removed global data accesses from CURRENT_LOCALE macro & callers 1524- dynamic linker stage 1 size reduction 1525 1526compatibility: 1527- better configure detection of unsupported compiler options 1528- support for more relocation types in libc.so, not currently used 1529- iconv_open accepts "" and "CHAR" as aliases for native (UTF-8) 1530- additional LFS64 macros in sys/resource.h 1531 1532regressions fixed: 1533- dynamic linker crash on NONE-type relocations (only mips affected) 1534- inability to build as thumb2 on arm 1535- failure to run under qemu-i386 user-level emulation 1536- inability to access globals from libc on powerpc 1537- PIE link errors in Scrt1.o under unusual usage on some archs 1538 1539other bugs fixed: 1540- failure of ungetc/ungetwc to work on FILE streams in EOF state 1541- possible null pointer dereference in gettext 1542- possible initial stack misalignment on mips with PIE 1543 1544 1545 15461.1.11 release notes 1547 1548new features: 1549- byte-based C locale 1550- vdso clock_gettime on arm 1551- musl-clang wrapper 1552- sh2 nommu target support 1553 1554performance: 1555- major speed-up for dynamic linker symbol lookups with GNU hash 1556 1557compatibility: 1558- strverscmp now matches GNU behavior in corner cases 1559- empty TZ environment variable gives GMT rather than system default 1560- reconnection on syslog server socket loss (syslogd restart) 1561- mmap fallback in simple_malloc when brk fails 1562- support for %m and %s with null pointers in wide printf variants 1563- call frame information in i386 asm for improved debugger support 1564 1565bugs fixed: 1566- spurious errors from pwd/grp functions when nscd backend is absent 1567- possible invalid access on calloc with simple_malloc 1568- null pointer dereferences after calling uselocale((locale_t)0) 1569- erroneous support for cancellation in stdio caused data loss 1570- inconsistent handling of atexit called from atexit handler 1571- missing locking in error paths for ungetwc 1572- btowc mishandling of out-of-range non-EOF inputs 1573- negated return value of ns_skiprr, failure in related functions 1574- incorrect void return type for syncfs, missing error status 1575- possible failure of tempnam due to missing null termination 1576- negated tm_gmtoff field in struct tm 1577- off-by-one error in getsubopt leaving equals sign in value result 1578 1579arch-specific bugs fixed: 1580- soft deadlocks on i386/x86_64 due to missing barrier in internal locks 1581- regression in arm pre-v7 support for kernels with kuser helper removed 1582- runaway PC on mips detached thread exit (due to kernel regression) 1583- mismatched ABI for local-dynamic model TLS on mips and powerpc 1584- incorrect value of some SO_* constants on mips 1585- broken 64-bit syscall argument passing on aarch64 1586 1587 1588 15891.1.12 release notes 1590 1591new features: 1592- fdpic abi on sh2 for shareable text segment without mmu 1593- general fdpic elf support in dynamic linker 1594- CFI generation for x86_64 asm source files 1595- protection against silently building a libc.so with missing symbols 1596 1597compatibility: 1598- nl_langinfo(CODESET) now returns "ASCII" in byte-based C locale 1599- fixed build regression due to buggy .SECONDARY in some GNU make versions 1600- additional arm eabi functions needed by llvm arm backend 1601- added format argument attributes to gettext function prototypes 1602- static PIE no longer requires linking with -E/-rdynamic 1603- eliminated spurious protected-data warnings linking against libc.so 1604- avoided spurious fpu asm errors with some armhf toolchains 1605 1606bugs fixed: 1607- fclose of stdin/stdout caused deadlock at exit 1608- missing memory barrier in pthread_join 1609- open_[w]memstream produced no buffer when no writes took place 1610- uninitialized scopeid in address lookups from hosts file and ip literals 1611- ip literals for mismatching family (v4 vs v6) were queried as hostnames 1612- possible crash on OOM in regcomp 1613- incorrect contents in localeconv structure (-1 instead of CHAR_MAX) 1614- strftime mishandling of out-of-range struct tm members 1615- wrongful attribute((const)) on pthread_self and errno location function 1616 1617arch-specific bugs fixed: 1618- arm crt1 entry point failed to align stack pointer in some cases 1619- mips fesetround failed to actually set rounding mode 1620- i386 asm source CFI generation had multiple bugs 1621 1622 1623 16241.1.13 release notes 1625 1626new features: 1627- out-of-tree builds 1628- search domains in resolv.conf 1629- sh arch supports j-core (j2) cas.l atomics 1630- dynamic linker includes arch/abi in output when run as a command 1631- header support for new kernel features through linux 4.4 1632- mips vdso clock_gettime support 1633- regex BRE extensions: \|, \+, \? 1634 1635performance: 1636- improved atomics performance on all archs with ll/sc model 1637- atomic instructions are now inlined on armv6 1638- use fpu sqrt for arm softfp abi on targets with vfp 1639 1640compatibility: 1641- getnameinfo now accepts sockaddr sizes larger than needed 1642- new default CFLAGS/LDFLAGS avoid entire classes of toolchain bugs 1643- explicit use of float_t/double_t avoids compiler float spill bugs 1644- i386 max_align_t definition now works with g++ 4.7's pseudo-c++11 1645- all known protocols are added to protoent functions 1646- stub utmpname, utmpxname functions 1647- linker support for -Bsymbolic-functions is no longer mandatory 1648- regex parsing size limits increased 1649- malloc_usable_size now accepts null pointer input 1650 1651bugs fixed: 1652- potential single-byte heap overflow in getdelim 1653- mishandling of transient failure opening hosts, services, resolv.conf 1654- mremap was sometimes able to allocate objects larger than PTRDIFF_MAX 1655- nl_langinfo wrongly returned NULL instead of "" for invalid items 1656- out-of-bounds dynamic tls allocation due to pointer/index scaling error 1657- getifaddrs misreported point-to-point interface addresses 1658- tdelete left tsearch trees misbalanced 1659- tsearch crashed on allocation failure 1660- tsearch, tfind, and tdelete failed to handle null pointer input 1661- passing signal number 0 to sigaction resulted in a crash 1662- getdelim updated caller's size wrongly when realloc failed 1663- getdelim realloc strategy was wasteful 1664- if_nametoindex returned wrong value on failure 1665- missing ssp-suppression for some source files called from early-init 1666- various minor resolv.conf parsing bugs 1667- fwrite wrongly reported success on write errors in line-buffered flush 1668- fwrite and fread wrongly returned nmemb (not 0) when size was 0 1669 1670nommu-specific bugs fix: 1671- failure to zero bss in FDPIC shared library loader 1672- unsafe writes to read-only file mapping in non-FDPIC library loader 1673 1674arch-specific bugs fixed: 1675- sh[eb]-nofpu-fdpic was using fpu-dependent setjmp/longjmp variants 1676- dynamic linker path file name was wrong for arm "softfp" targets 1677- mips siginfo_t and related macros were defined incorrectly 1678- possibly misaligned pointer globals on arm (from an asm source file) 1679- mips dynamic linker failed to provide info needed by debugger 1680- mips cancellation asm wrongly assumed validity of $gp register value 1681 1682 1683 16841.1.14 release notes 1685 1686regressions fixed: 1687- treatment of empty string argument as error by puts and fputs 1688- make clean and distclean failure in unconfigured trees 1689- sh/fdpic dynamic linker entry point hang due to wrong code 1690- armhf (and arm softfp model) build failure with clang 1691 1692other bugs fixed: 1693- wrongly clamping (rather than failing) excessive rounds in crypt-sha* 1694 1695 1696 16971.1.15 release notes 1698 1699new features: 1700- mips64 (full 64-bit and n32) port 1701- mips r6 isa support (subarch for mips, mips64, and mipsn32 archs) 1702- powerpc64 port 1703- powerpc (32-bit) soft-float ABI support (subarch) 1704- pthread_tryjoin_np and pthread_timedjoin_np (nonstandard extensions) 1705- header-level support for linux 4.5 and 4.6 features 1706- sched_getcpu (nonstandard extension) support, including vdso version 1707- __STDC_ISO_10646__, __STDC_IEC_559__ macros predefined via stdc-predef.h 1708- support for new elf/arch features in elf.h 1709 1710compatibility: 1711- configure now correctly chooses cross-prefix based on build/host/target 1712- abort now successfully terminates pid 1 in a container (or top-level) 1713 1714bugs fixed: 1715- memmem read past end of haystack, possible false positives or crashes 1716- buffer underflow (reverse-overflow) in ungetwc 1717- double-free under certain usage of putenv 1718- incorrect treatment by regcomp of * at start of BRE subexpression 1719- gethostbyname[2][_r] produced ip addresses in misaligned buffers 1720- looking up some invalid hostnames caused malformed dns queries 1721- lookups from hosts file were inconsistent with non-matching family 1722- missing h_length value in gethostbyaddr results 1723- a64l function produced wrong-signed results on 64-bit archs 1724- broken padding of string formats to width in wide printf variants 1725- wrong results for expf(-NAN) and exp2f(-NAN) 1726- wrong value for RUSAGE_CHILDREN prevented it from working 1727- abort failed to provide abnormal termination with SIGABRT blocked 1728 1729arch-specific bugs fixed: 1730- broken posix_fadvise on arm and powerpc (32-bit) 1731- thread structure/dtv corruption on powerpc at thread startup 1732- various wrong mips and powerpc ioctl and termios constant values 1733 1734 1735 17361.1.16 release notes 1737 1738new features: 1739- s390x (64-bit S/390) port 1740- pthread_setname_np extension function 1741- limited pthread_setattr_default_np function to set stack size defaults 1742- header-level support for linux 4.7, 4.8, and 4.9 features 1743- confstr _CS_V6_ENV and _CS_V7_ENV items 1744 1745compatibility: 1746- public prototypes for abi-compat *_unlocked symbols, etc. 1747- fflush_unlocked(NULL) now works 1748- resolv.h __RES version macro now matches supported APIs 1749- workaround for gdb bugs backtracing across signals on x86_64 1750- anchors ^ and $ are now accepted in BRE subexpressions 1751- building for thumb2-only arm isa levels is now possible 1752 1753bugs fixed: 1754- integer overflows in regexec buffer allocation (CVE-2016-8859) 1755- failure of regexec to report matches at offsets past INT_MAX 1756- static-pie executables with initialized thread-local storage crashed 1757- printf failed to catch EOVERFLOW in some cases, wrongly produced it in others 1758- printf produced wrong output, result for float with precision near INT_MAX 1759- printf produced wrong results with alt-form octal, zero flag, & field width 1760- printf float rounding was wrong for some midpoint cases 1761- swprintf printed junk after internal (256-byte) buffer filled up 1762- strtod family rounded incorrectly in several corner cases 1763- getmntent failed to handle long records 1764- getopt_long_only wrongly treated "--" as an option 1765- asctime output wrongly varied by locale 1766- strftime %y specifier produced wrong output for negative tm_year 1767- time zone names quoted with <> were misparsed 1768- corner case integer overflow in tm_year for some date conversions 1769- failure to load shared libs whose names were prefixes of standard lib names 1770- wrong error codes for several failure cases in various functions 1771- various asymptomatic undefined behavior 1772- various minor namespace issues in headers 1773 1774arch-specific bugs fixed: 1775- tcsetattr regression on mips (completely non-working) 1776- wrong pread/pwrite syscall calling convention on sh 1777- wrong preadv2/pwritev2 syscall numbers on x32 1778- mrand48/jrand48 produced wrong-signedness results on 64-bit archs 1779 1780 17811.1.17 release notes 1782 1783new features: 1784- RTLD_LAZY deferred symbol binding, functionally equivalent to lazy binding 1785- safeguard against dlopen of multiple libc versions/instances 1786- new posix_spawn flag POSIX_SPAWN_SETSID 1787- posix_spawnattr_setflags now reports unknown flags as error 1788- ldso option --argv0 to set argv[0] 1789- added _NL_LOCALE_NAME extension to nl_langinfo 1790 1791compatibility: 1792- dlopen local-to-global promotion no longer changes existing symbols 1793- gettext now searches locale name variants for translation files 1794- increased locale name length limit from 15 to 23 bytes 1795- setlocale(LC_ALL, 0) returns single name if all categories are same 1796- realloc no longer fails when mremap doesn't work 1797- getservby* no longer treat numeric port strings as service records 1798- mmap now works around incorrect EPERM error codes from kernel 1799- impact of REG_* namespace pollution in x86[_64] signal.h is reduced 1800- arm atomic asm now assembles correctly with new binutils 1801- PAGE_SIZE on arm is no longer constant (quiet upstream ABI relaxation) 1802- lsearch/lfind now pass args to compare callback in canonical order 1803- STB_WEAK and STB_GNU_UNIQUE symbols now behave same as STB_GLOBAL 1804- better clang CFLAGS checks in configure 1805- global vis.h hack, which made lld refuse to link to libc.so, is disabled 1806 1807performance: 1808- single-instruction optimized math functions for aarch64, s390x, powerpc64 1809- fast path for ASCII in towupper/towlower 1810- new mostly-integer-math fma function 1811 1812semantic bugs fixed: 1813- POSIX-format TZ dst time transitions were wrong for southern hemisphere 1814- regex REG_NEWLINE semantics were wrong with negated brackets 1815- various bugs in strptime %j, %p, %C formats 1816- iconv mapped some characters to legacy 8bit encodings incorrectly 1817- glob failed to match "/" 1818- UTF-8 decoder accepted invalid f4 9x xx xx code sequences 1819- scanf %% conversion failed to consume whitespace 1820- glob with GLOB_PERIOD wrongly descended into . and .. 1821- nftw gave incorrect base name offset when pathname ends in "/" 1822- functional regression in resolv.conf attempts option 1823- scalbn could produce wrong result due to double rounding in subnormal range 1824- strftime %y format wrong with negative years 1825- mbsnrtowcs and wcsnrtombs mishandled input limits 1826- minor issues with error codes for various functions 1827 1828safety/consistency bugs fixed: 1829- stack-based buffer overflow in dns response processing 1830- invalid free in regexec on certain error paths 1831- invalid free in globfree after failed glob 1832- one-byte buffer overflow in legacy getpass function 1833- failed dlopen corrupted thread-local storage module list 1834- race in pthread_create with priority attributes could leave signals masked 1835- multithreaded set*id() functions could induce spurious EINTRs 1836- dl_iterate_phdr reported wrong base address in static PIE 1837- fd leak and wrong cancellation state after dns socket failure 1838- memory leaks and other issues in environment-modification functions 1839- read-after-free race in pthread_detach 1840- memmem performed single-byte over-read in short-needle code paths 1841- read via uninitialized pointer in gettext core 1842- bindtextdomain broke bindings for all other domains 1843- various silent undefined behavior 1844- getopt clobbered optopt on success 1845 1846arch-specific bugs fixed: 1847- x32 dynamic TLS accesses crashed 1848- s390x was missing dlsym entry point (needed for RTLD_NEXT) 1849- powerpc64 ldso startup could crash depending on link order 1850- powerpc64 setjmp/longjmp didn't properly save/restore TOC pointer 1851- thumb2 setjmp/longjmp silently broke at ld-time with text not aligned 1852- fchown was broken on archs without SYS_fchown syscall 1853- fstatat was broken on mips64 1854- various incorrect constants in powerpc64 and mips headers 1855 1856 18571.1.18 release notes 1858 1859regression fixes: 1860- glob failed to match literal . and .. path components 1861- build for armv4t ISA level was broken 1862 1863other bug fixes: 1864- stack overflow in posix_spawnp with large PATH variable in environment 1865 1866 18671.1.19 release notes 1868 1869new features: 1870- iconv framework for processing stateful encodings 1871- iconv support for iso-2022-jp 1872- iconv support for converting to legacy JIS-based Japanese encodings 1873- iconv support for UTF-16/32 with BOM-determined endianness 1874- iconv ibm1047 (ebcdic latin1-equivalent) support 1875- iconv cp866 (dos cyrillic) support 1876- character data tables & case mappings updated to Unicode 10.0 1877- fopencookie stdio extension 1878- strftime padding character extensions 1879- header-level support for new linux features through 4.13 1880 1881compatibility: 1882- UTC timezone is now called UTC instead of GMT 1883- _DIRENT_HAVE_D_* macros in dirent.h 1884- dladdr dli_fbase definition now matches other implementations 1885- pthread_getattr_np now reports guard size 1886- strftime '+' modifier better matches apparent intent of POSIX 1887- getopt_long handles long option names containing '=' 1888- better compatibility with linux uapi headers 1889- workaround linux bug where getcwd can return non-absolute pathname 1890- configure logic for finding compiler_rt with clang 1891- execvp path search now continues after ENOTDIR components 1892 1893bugs fixed: 1894- fgetwc failed when character crossed buffer boundary 1895- memory corruption after failing to dlopen a second libc 1896- sysconf reported infinite rlimits incorrectly 1897- getopt_long --opt=arg did not work with partial matches 1898- printf was wrong for alt-form octal with value 0, no explicit precision 1899- endian errors in arpa/nameser.h and netinet/icmp6.h (missing endian.h) 1900- atfork handler could clobber fork's errno 1901- iconv could wrongly output surrogate pairs in ucs2 1902- fmemopen buffer underallocation with extreme size argument 1903- getaddrinfo AI_NUMERICSERV wrong error code 1904- data race in at_quick_exit 1905- ldd failed to honor rpath $ORIGIN for program in . without "./" prefix 1906 1907arch-specfic bugs fixed: 1908- x32 unistd.h wrongly reported LP64 instead of ILP32 1909- aarch64 signal.h had wrong type for ucontext_t uc_link member 1910 1911 19121.1.20 release notes 1913 1914new features: 1915- m68k port 1916- replacement of malloc is now allowed/supported 1917- setvbuf now accepts caller-provided buffers for stdio streams 1918- getrandom syscall wrapper, getentropy function 1919- mlock2 syscall wrapper 1920- memfd_create syscall wrapper 1921- explicit_bzero function 1922- header-level support for new linux features through 4.17 1923- wcsftime now supports padding specifier extensions 1924- dynamic linker's reclaim_gaps now works on fdpic archs 1925- getaddrinfo now honors AI_ADDRCONFIG 1926- pthread_attr_init now honors pthread_setattr_default_np defaults 1927 1928hardening: 1929- prevent bypass of guarantee that suids start with fd 0/1/2 open 1930- dlopen now rejects libraries with initial-exec refs to dynamic TLS 1931 1932compatibility: 1933- elf.h: new flags, aux vector entry types, etc. 1934- minor namespace issues in several headers 1935- intNN_t types used in bitfields now safe against -funsigned-bitfields 1936- complex arc trig/hyperbolic functions were badly broken 1937- nice function returned wrong value 1938- stdio locks no longer depend on read-after-free not faulting 1939- avoid excessive stack usage in getcwd 1940- inet_ntop no longer compresses single zeros in IPv6 (RFC 5952) 1941- resolver routability probe for sorting results works on no-IPv6 systems 1942- added missing ST_RELATIME definition to statvfs.h 1943- uchar.h now works with old C++ profiles 1944- added missing and arch-specific commands to ptrace.h 1945- musl-gcc wrapper now works with default-pie host toolchains 1946 1947bugs fixed: 1948- getopt wrongly treating colons in optstring as valid option chars 1949- nl_langinfo_l(CODESET, loc) reported wrong locale's value 1950- out-of-tree build produced broken crt files with stack protector enabled 1951- fmaf produced wrong result for some corner cases 1952- out of bounds write for zero length buffer passed to gethostname 1953- getopt_long_only wrongly prefix-matched long-options over short ones 1954- pthread_kill wrongly returned ESRCH for exited by valid pthread_t's 1955- iconv buffer overflow converting to legacy JIS-based encodings 1956- iconv conversion to "UTF-32" (no explicit endianness) failed (regression) 1957- iconv mishandled big5-hkscs characters that map to two unicode chars 1958- dynamic linker didn't map/clear bss for libraries with single LOAD segment 1959- resolver wrongly duplicated trailing dot from query into canonical name 1960- some futex waits omitted timeout arg to syscall, thereby spun on EFAULT 1961- dladdr mishandled addresses not matching symbols 1962- alignment of dirent structures from readdir was broken (regression) 1963- strftime %z output wrong sign for offsets <1 hour west of UTC 1964- limits.h, pathconf erroneously defined SYMLINK_MAX 1965- FP_ILOGB0 and FP_ILOGBNAN definitions were not valid for use in #if 1966- getopt failed to update optarg and optind correctly on missing argument 1967- EMULTIHOP error lacked strerror text 1968- mktime malfunctioned with tm_isdst>0 but no-DST POSIX-format time zone 1969- async thread self-cancellation produced a deadlock condition 1970- pthread_barrierattr_setpshared failed to produce EINVAL for bad argument 1971- fileno failed to produce EBADF for non-fd-associated FILEs 1972- fmemopen's w+ mode failed to truncate buffer at open 1973- open_[w]memstream did not bind stream orientation at open time 1974- system wrongly returned 0x7f00 instead of -1 on error 1975- wide printf functions ignored field width for %c formats 1976- fprintf failed to set stream orientation for unbuffered stream or no output 1977- psignal, psiginfo, and perror wrongly set stream orientation for stderr 1978- psignal, psiginfo potentially clobbered errno on success 1979 1980arch-specfic bugs fixed: 1981- on arm/aarch64/sh, local-exec TLS layout mismatched ABI with large align 1982- on arm/microblaze/sh, struct ipc_perm mismatched (buggy) kernel ABI 1983- SO_PEERSEC definition was wrong on mips 1984- on mips, return from start function passed to clone crashed (runaway exec) 1985- printf %a precision specifier malfunctioned except on ld80 archs 1986- async thread cancellation crashed on powerpc64 and sh-fdpic 1987 1988 19891.1.21 release notes 1990 1991new features: 1992- setting default thread stack size via PT_GNU_STACK program header 1993- arm vfork implementation 1994- arm tlsdesc/gnu2 tls dialect support 1995- name_to_handle_at and name_to_handle_at syscall wrappers 1996- header-level support for new linux features through 4.18 1997 1998optimizations: 1999- glob rewrite with much better performance and stack usage properties 2000- single-threaded and already-locked fast paths for getc/putc variants 2001- single-instruction fma implementations for arm, s390x, powerpc, & x86_64 2002- single-instruction fabs and sqrt implementations for powerpc 2003- size and performance from making all internal-only functions/data hidden 2004- made &errno and pthread_self results cachable again (attribute((const))) 2005- significant speedup in strtod with short inputs 2006- new tsearch AVL tree implementation, smaller and faster 2007- special-cased nop calls to wmemmove 2008- fixed erroneously suboptimal skip conditions in strstr and memmem 2009 2010hardening: 2011- default thread stack guard size increased from 4k to 8k 2012 2013compatibility: 2014- default thread stack size increased from 80k to 128k 2015- building for arm as thumb2 with clang internal assembler now works 2016- aio threads could overflow stack on kernels that break MINSIGSTKSZ ABI 2017- aio threads no longer call malloc (problematic with malloc replacement) 2018- pthread_sigmask/sigprocmask now ignore an invalid how when not changing mask 2019 2020bugs fixed: 2021- soft deadlock regression in stdio FILE locks with >2 threads contending 2022- deadlock and buffered data loss race in fclose 2023- race condition leading to possible crash in dcngettext plural forms 2024- glob failed to see past searchable-but-unreadable path components 2025- getdelim wrongly realloc'd buffer that was already exactly right size 2026- getdelim failed to set stream orientation on early error 2027- ttyname[_r] reported wrong error when given bad fd 2028- pthread_key_delete left old tsd values exposed if slot was reused 2029- freeaddrinfo failed to support freeing sublists 2030- access to optopt was broken by copy relocations 2031- memccpy returned wrong result if first byte past buffer end matched 2032- wordexp read past end of input string ending in backslash 2033- sem_wait and sem_timedwait were wrongly not interruptible by signals 2034- getspnam[_r] wrongly treated not-found as an error 2035 2036arch-specfic bugs fixed: 2037- soft deadlocks (missing futex wake) on powerpc locking 2038- dlsym returned wrong address for thread-local symbols on ppc/mips/m68k 2039 2040 20411.1.22 release notes 2042 2043new features: 2044- priority-inheritance mutexes 2045- membarrier syscall, pre-registration to use it, fallback emulation 2046- header-level support for new linux features in 4.19, 4.20, 5.0 2047 2048major internal changes: 2049- complete, async-safe view of all existent threads as global list 2050- robust __synccall based on new thread list 2051- new dynamic TLS is installed synchronously at dlopen 2052- TLSDESC resolver functions no longer make bad ABI assumptions to call C 2053- resolved shared library dependencies are now recorded 2054 2055compatibility & conformance: 2056- dependency-order shared library constructor execution 2057- sigaltstack no longer rejects SS_AUTODISARM, future flags 2058- FILE is now a complete (dummy) type in pre-C11 feature profiles 2059- setvbuf reports failure on invalid arguments 2060- TSVTX is exposed unconditionally in tar.h 2061- multithreaded set*id() no longer depends on /proc 2062- key slot reuse after pthread_key_delete no longer depends on /proc 2063 2064bugs fixed: 2065- failures in multithreaded set*id() with concurrent thread creation/exit 2066- interposed free was called from invalid/inconsistent contexts 2067- freeaddrinfo performed invalid free of some partial results lists 2068- dlsym dependency order search had false negatives and false positives 2069- dn_skipname gave wrong results for labels with 8-bit content 2070- dcngettext clobbered errno, often breaking printing of error messages 2071- sscanf read past end of buffer under certain conditions (1.1.21 regression) 2072- pthread_key_create spuriously failed under race condition (1.1.21 regression) 2073- fdopendir wrongly succeeded with O_PATH file descriptors 2074- gets behaved incorrectly in presence of null bytes 2075- namespace violations in c11 tsd and mutex function dependencies 2076- incorrect prototype for makecontext (unimplemented) 2077 2078arch-specfic bugs fixed: 2079- s390x had wrong values for POSIX_FADV_DONTNEED/_NOREUSE 2080 2081 2082 20831.1.23 release notes 2084 2085new features: 2086- riscv64 port 2087- configure now allows customizing AR and RANLIB vars 2088- header-level support for new linux features in 5.1 2089 2090major internal changes: 2091- removed extern __syscall; syscall header code is now fully self-contained 2092 2093performance: 2094- new math library implementation for log/exp/pow 2095- aarch64 dynamic tlsdesc function is streamlined 2096 2097compatibility & conformance: 2098- O_TTY_INIT is now defined 2099- sys/types.h no longer pollutes namespace with sys/sysmacros.h in any profile 2100- powerpc asm is now compatible with clang internal assembler 2101 2102changes for new POSIX interpretations: 2103- fgetwc now sets stream error indicator on encoding errors 2104- fmemopen no longer rejects 0 size 2105 2106bugs fixed: 2107- static TLS for shared libraries was allocated wrong on "Variant I" archs 2108- crash in dladdr reading through uninitialized pointer on non-match 2109- sigaltstack wrongly errored out on invalid ss_size when doing SS_DISABLE 2110- getdents function misbehaved with buffer length larger than INT_MAX 2111- set*id could deadlock after fork from multithreaded process 2112 2113arch-specfic bugs fixed: 2114- s390x SO_PEERSEC definition was wrong 2115- passing of 64-bit syscall arguments was broken on microblaze 2116- posix_fadvise was broken on mips due to missing 7-arg syscall support 2117- vrregset_t layout and member naming was wrong on powerpc64 2118 2119 2120 21211.1.24 release notes 2122 2123new features: 2124- GLOB_TILDE extension to glob 2125- non-stub catgets localization API, using netbsd binary catalog format 2126- posix_spawn file actions for [f]chdir (extension, pending future standard) 2127- secure_getenv function (extension) 2128- copy_file_range syscall wrapper (Linux extension) 2129- header-level support for new linux features in 5.2 2130 2131performance: 2132- new fast path for lrint (generic C version) on 32-bit archs 2133 2134major internal changes: 2135- functions involving time are overhauled to be time64-ready in 32-bit archs 2136- x32 uses the new time64 code paths to replace nasty hacks in syscall glue 2137 2138compatibility & conformance: 2139- support for powerpc[64] unaligned relocation types 2140- powerpc[64] and sh sys/user.h no longer clash with kernel asm/ptrace.h 2141- select no longer modifies timeout on failure (or at all) 2142- mips64 stat results are no longer limited to 32-bit time range 2143- optreset (BSD extension) now has a public declaration 2144- support for clang inconsistencies in wchar_t type vs some 32-bit archs 2145- mips r6 syscall asm no longer has invalid lo/hi register clobbers 2146- vestigial asm declarations of __tls_get_new are removed (broke some tooling) 2147- riscv64 mcontext_t mismatch glibc's member naming is corrected 2148 2149bugs fixed: 2150- glob failed to match broken symlinks consistently 2151- invalid use of interposed calloc to allocate initial TLS 2152- various dlsym symbol resolution logic errors 2153- semctl with SEM_STAT_ANY didn't work 2154- pthread_create with explicit scheduling was subject to priority inversion 2155- pthread_create failure path had data race for thread count 2156- timer_create with SIGEV_THREAD notification had data race getting timer id 2157- wide printf family failed to support l modifier for float formats 2158 2159arch-specific bugs fixed: 2160- x87 floating point stack imbalance in math asm (i386-only CVE-2019-14697) 2161- x32 clock_adjtime, getrusage, wait3, wait4 produced junk (struct mismatches) 2162- lseek broken on x32 and mipsn32 with large file offsets 2163- riscv64 atomics weren't compiler barriers 2164- riscv64 atomics had broken asm constraints (missing earlyclobber flag) 2165- arm clone() was broken when compiled as thumb if start function returned 2166- mipsr6 setjmp/longjmp did not preserve fpu register state correctly 2167 2168 2169 21701.2.0 release notes 2171 2172new features: 2173- time_t is now 64-bit on all archs (not just 64-bit archs) 2174- character type & case mapping data updated to Unicode 12.1.0 2175- header-level support for new linux features in 5.3 and 5.4 2176 2177performance: 2178- new O(1) wchar_t case mapping implementation 2179- i386 now uses C math code for exp, faster than old asm 2180- mips math asm 2181 2182compatibility & conformance: 2183- endian.h now aims to conform to future POSIX definition 2184- support older compilers that don't accept powerpc math asm constraints 2185- fdpic code in ldso was incompatible with valid optimizations in gcc 9+ 2186- RLIMIT_RTTIME was missing from sys/resource.h 2187 2188bugs fixed: 2189- wcwidth wrongly returned 0 for most of planes 4 and up 2190- missing case mapping between U+03F3 and U+037F 2191- wrong cacosh results for arguments with negative imaginary part 2192- wrong catanf/catanl results for various classes of arguments 2193- wrong return value for ungetc with argument outside [0,UCHAR_MAX] 2194- posix_openpt with no ptys available produced wrong errno 2195 2196arch-specific bugs fixed: 2197- sigcontext/regset definition mistakes & omissions on m68k, powerpc64 2198- fesetenv(FE_DFL_ENV) crashed on riscv64 2199- sh2 dynamic linker was broken since 1.1.21 (crash in stage 2b) 2200- arm dynamic linker chose wrong tls/atomic variants since 1.1.21 2201- some math library functions returned excess precision on i386 2202- unconfirmed regression in fchmodat AT_SYMLINK_NOFOLLOW on mips* 2203