WHATSNEW 94 KB

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