1
0

WHATSNEW 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  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