WHATSNEW 13.8 KB
Newer Older
1 2
0.5.0 - initial release

R
Rich Felker 已提交
3 4


5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
0.5.9 - signal ABI bugfix, various cleanup and fixes:

sigset_t was wrongly defined as 1024 bytes instead of 1024 bits,
breaking the intended ABI compatibility with the LSB/glibc sigaction
structure. users should upgrade immediately and rebuild any libraries
or object files that might be using the incorrect definitions.

improved security against DoS with tcb shadow passwords by checking
that the file opened was really an ordinary file.

fixed a bug in the implementation of atomic ops that could have
allowed the compiler to incorrectly reorder them (in practice, gcc
with the default settings on i386 was not reordering them).

greatly improved conformance to the C and POSIX standards regarding
what the standard header files make visible. _POSIX_C_SOURCE is now
needed to get POSIX functions in standard C headers, and _XOPEN_SOURCE
or _GNU_SOURCE are required to get XSI interfaces or GNU extensions,
respectively.

many internal improvements have been made to the syscall-related code
in preparation for porting to x86_64 and other archs.

R
Rich Felker 已提交
28 29


R
Rich Felker 已提交
30
0.6.0 - x86_64 port, various important bugs fixed
R
Rich Felker 已提交
31 32 33 34 35 36

new x86_64 (amd64) architecture port, contributed by Nicholas J. Kain,
along with PORTING guide. source tree layout and build system have
been improved to accommodate further ports.

various bugs that were introduced while making the headers respect C
37 38 39 40 41 42 43 44
and POSIX namespace standards have been fixed. conformance to the
standards has been improved.

fixed an inefficiency in qsort that triggered a bug (occasionaly
internal compiler error) in some versions of gcc.

fixed a major bug in the printf %n specifier that prevented it from
working and caused memory corruption.
45

R
Rich Felker 已提交
46 47


48
0.7.0 - major improvements to posix conformance and completeness
49 50 51 52 53 54 55 56 57 58 59 60

implemented posix shared memory and semaphore interfaces.

implemented all remaining required pthread and clock interfaces.

major fixes to signal semantics.

greatly improved temporary file name generation for safety against
denial of service due to intentional name collisions.

added syscall wrappers for the linux inotify interface.

61
malloc(0) now returns a non-null pointer.
62

63 64
fixed printf %n specifier (again), pthread_once (it was always
hanging), and non-default-type mutex behavior.
65 66 67 68

added ucontext/sigcontext support in headers to facilitate building
libgcc with dwarf2 unwind support, and possibly other low-level tools.

69 70
improved musl-gcc compiler wrapper.

71 72
implemented many small missing functions here and there, minor header
fixes, etc.
R
Rich Felker 已提交
73 74 75 76 77 78 79 80 81



0.7.1 - improvements to completeness, bug fixes

implemented flockfile, wprintf, and robust mutex functions.

fixed stack corruption bug in times(), minor header bugs, and some
error return value bugs in thread interfaces.
82 83 84 85 86 87 88 89 90



0.7.5 - new features, major optimization, and robustness

implemented POSIX timers.

optimized and simplified many thread-related functions.

R
Rich Felker 已提交
91 92
eliminated resource leak races in thread cancellation. (almost all
existing implementations, including glibc, have these leaks.)
93 94 95 96 97 98 99 100 101

overhauled stdio implementation to take advantage of readv/writev for
reduced syscall load, and improved stdio's handling of error status.

added syscall header and interface for applications to use and
greatly simplified internal system for making syscalls.

strangthened tmpnam/tempnam/tmpfile filename generation and made the
straight C functions not depend on POSIX symbols.
R
Rich Felker 已提交
102 103 104 105 106 107

fixed pthread cancellation ABI on i386 to match the LSB/glibc ABI

better double-free handling in malloc

various minor bug fixes
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131



0.7.6 - major bug fixes

fixed rare but serious under-allocation bug in malloc.

fixed signedness bug in strchr that prevented finding high bytes.

fixed serious parsing bugs in strtold.

fixed statvfs syscall (it was always failing with EINVAL).

fixed race condition in set*id() functions with threads (possible
deadlock). further audit still needed though.

fseek no longer sets the stream error flag on failed seeks (this was
wrong and broke some programs, notably GNU m4).

nl_langinfo is no longer a dummy function. (the functionality was
previously implemented but accidentally left unused).

various small fixes have been made to the implementations and
prototypes for nonstandard and obsolete functions
132 133 134



R
Rich Felker 已提交
135
0.7.7 - more bug fixes and program-compatibility improvements
136 137 138 139 140 141 142 143 144 145

fixed floating point formatting and rounding bugs in printf.

fixed broken %N$ positional argument specifiers in printf.

fixed misaligned read/overread bug in strchr which could lead to
crashes scanning tiny strings at the end of a page when the next page
is not readable, or on archs (not yet supported) that forbid
misaligned reads.

R
Rich Felker 已提交
146 147 148 149 150 151 152 153 154
fixed breakage of statvfs on x86_64

fixed crash in getmntent_r

fixed bug in POSIX timers created with NULL sigevent argument

improved semaphore performance, and sem_wait is now interruptable by
signals, as required by POSIX.

R
Rich Felker 已提交
155 156
added many compatibility and system-level interfaces, increasing the
proportion of busybox that works with musl.
R
Rich Felker 已提交
157 158 159



160
0.7.8 - more bug fixes and compatibility improvements
R
Rich Felker 已提交
161 162 163 164 165 166 167 168 169 170 171 172 173 174

fixed problems with ipv6 dns and address printing code that made ipv6
support practically unusable, and some other getaddrinfo bugs.

fixed broken sendmsg/recvmsg functions on x86_64 (caused by incorrect
msghdr structure).

fixed broken sigsetjmp asm on x86_64.

worked around a problem with input buffering on terminals reblocking
after getting a blank line, due to a bug in the linux readv syscall.

various improvements to the "rsyscall" system used to implement
threaded setuid, setgid, etc.
R
Rich Felker 已提交
175 176 177 178 179 180 181 182 183 184 185

exiting/cancelling the a timer handler thread no longer kills the
timer.

fixed incorrect trailing zeros on some %g conversions in printf.

fixed buggy byte-swapping functions and moved them to inlines in
byteswap.h.

many small improvements to header/application compatibility, support
for nonstandard macros, etc.
186 187 188



189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
0.7.9 release notes

new pthread cancellation implementation:
- safe against resource-leak/side-effect-leak race conditions
- safe against interruption by signal handlers
- reduced bloat in all cancellable functions
- reduced bloat for blocking cancellation

new interfaces implemented:
- realpath (limited functionality)
- wordexp (limited functionality)
- flock (nonstandard)
- forkpty (nonstandard)
- posix_fadvise
- posix_fallocate

general bug fixes:
- syslog function failure to communicate with syslogd
- bug in siginfo_t definition if wait.h was included before signal.h
- incorrect struct definitions for most of sysv ipc
- pthread_exit/cancel on timer handler wrongly destroying the timer
- linux dup2 ebusy workaround
- obscure issues in non-threaded programs using some pthread functions
- getopt_long allowed mismatch in last char of option name
- incorrect parsing of obscure ip address forms
- initgroups not working reliably (uninitialized var)
- shadow pass treating empty expiry field as pass-expired-in-1970
- bogus longjmp if pthread_exit was called from cancellation handlers

x86_64-specific bug fixes:
- fcntl file locking
- thread stack alignment
- broken select timeouts due to incorrect timeval definition
R
Rich Felker 已提交
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246



0.7.10 release notes

new features:
- ipv6 numeric string parsing
- eventfd syscall wrappers

optimizations:
- new qsort implementation using the smoothsort algorithm
- much smaller/faster sigset_t handling functions
- lowered spin count before futex wait in synchronization functions

general bug fixes:
- incorrect floating point round-to-even behavior in printf
- major bugs in pthread barrier implementation
- off-by-one error in scanf %n results
- scanf failure to report EOF when scanning for literal text
- minor missing/incorrect prototype issues
- dependency on undefined call order in fclose

compiler issue workarounds:
- incorrect inlining of variadic functions on recent gcc versions
- pcc preprocessor bug with recursive macro expansion
R
Rich Felker 已提交
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268



0.7.11 release notes

new features:
- integrated dynamic linker
- dynamic loading (dlopen/dlsym) (for dynamic-linked programs only)
- XSI search.h API
- POSIX message queues
- POSIX spawn interfaces
- BSD pseudo-random number generator API (random/srandom/initstate/etc.)
- floating point environment (limited usefulness due to gcc bugs)

general bug fixes:
- possible crashes with wordexp due to uninitialized variable
- race condition in pthread_kill (also present and unfixed in glibc/nptl)
- pthread exit destructors called too late
- dangerous unbounded vla in glob
- brk/sbrk legacy functions mismatching legacy semantics
- wcsncpy dest buffer overflow
- strncat and wcsncat possible overflows due to double-termination
R
Rich Felker 已提交
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284



0.7.12 release notes

new features:
- support for textrels in shared objects
- rpath support in dynamic linker
- stdio_ext.h functions (for better gnu software compatibility)

bug fixes:
- some compilers miscompiling dlopen due to misuse of longjmp
- safe handling of invalid long-double bit patterns (affects printf)
- workaround for bugs in linux mprotect syscall
- thread-safety for random() functions
- various minor issues
R
Rich Felker 已提交
285 286 287



R
Rich Felker 已提交
288
0.8.0 release notes
R
Rich Felker 已提交
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327

new features:
- chinese and japanese legacy charset support in iconv
- zero-syscall clock_gettime support (dynamic-linked x86_64 only)
- futex-based locking for stdio (previously used spinlocks)
- LD_PRELOAD and RTLD_NEXT support in dynamic linker
- strptime (mostly working but incomplete)
- posix aio (mostly working but not entirely conformant)
- memory streams (fmemopen, open_memstream, ...)
- stub/dummy implementations for various useless legacy functions
- if_nameindex

security hardening:
- setuid, etc. should not longer be able to "partially fail" with threads
- ensure suid programs start with fd 0,1,2 open
- improved openpty/forkpty failure checks

threads/synchronization bug fixes:
- dangerous spurious wakeup in pthread_join lead to early return
- race condition enabling async cancellation (delayed/lost cancellation)
- destruction/unmapping race conditions in semaphores, mutexes, rwlocks
- recursive rwlock_rdlock deadlock when a writer is waiting
- race condition in sigqueue with fork
- timer expiration thread exit wasn't running dtors
- timer threads weren't blocking signals
- close was wrongly cancellable after succeeding on some devices
- robust mutex list was not reset on fork

general bug fixes:
- incorrect logic in fread (spurious blocking; crash on write-only files)
- many corner cases and overflow cases for strtol-family functions
- various printf integer formatting issues with flags/width/precision
- incorrect iconv return value on failure
- broken FD_* macros on 64-bit targets
- clock function returning wrong value (real time not cpu time)
- siglongjmp signal mask clobbering (off-by-one pointer error)
- dynamic linker weak symbol resolution issues
- fdopendir failure to set errno
- various minor header fixes
R
Rich Felker 已提交
328 329 330 331 332 333 334 335 336



0.8.1 release notes

bug fixes:
- mismatching prototypes caused build failure on 64-bit
- other minor prototype errors in the headers have been fixed
- various other small omissions fixed
R
Rich Felker 已提交
337 338 339 340 341 342 343 344 345 346 347



0.8.2 release notes

new features:
- ptrace syscall support

bug fixes:
- const error (only a warning with many compilers) in lio_listio
- minor portability fixes aimed at supporting new arch targets
R
Rich Felker 已提交
348 349 350 351 352 353 354 355 356 357 358 359 360



0.8.3 release notes

new features:
- arm port (experimental)
- better musl-gcc wrapper script for building against musl
- added clone system call

bug fixes:
- numerous header file typos, copy/paste errors, omissions
- statfs and statvfs ABI are now LSB-conformant (and actually work)
361 362 363



R
Rich Felker 已提交
364
0.8.4 release notes
365 366 367 368

new features: 
- arm dynamic linker support
- process-shared pthread barriers now work
R
Rich Felker 已提交
369
- efficient futex-requeue-based cond var broadcast
370 371 372 373 374 375 376 377
- more optional cancellation points are now cancellable
- printf accepts null pointers with %s, prints as "(null)"
- recursive mutexes are now fully reentrant
- __cxa_atexit support
- real vfork
- dynamic linker now gold-compatible
- prlimit syscall
- support for large limits with setrlimit/getrlimit (even on 32-bit)
R
Rich Felker 已提交
378
- glob now supports GLOB_PERIOD option (GNU extension)
379 380 381 382 383 384 385

bug fixes:
- many serious issues in condition variables
- rwlock failure-to-wake deadlock issues
- various small header files bugs/omissions
- wrong failure return for pthread_create
- path handling issues on execvp
R
Rich Felker 已提交
386
- lock count corruption with robust recursive mutexes on owner death
387 388
- integer overflows in atoi, etc. reading most-negative value
- spurious mremaps on every realloc of large memory chunks
R
Rich Felker 已提交
389
- pthread cancellation failure in single-threaded programs
390 391 392

security:
- avoid fd_set overflow in dns lookups
R
Rich Felker 已提交
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427



0.8.5 release notes

new features:
- stdio operations are now cancellable (only when low-level io happens)
- global ctor/dtor support in main program start code and shared libs
- dynamic linker support for PIE executables (but missing startup code)
- vfork support on x86_64
- complete set of locale_t functions (all ignore the locale argument)
- provide define float_t and double_t in math.h
- lighter/faster cancellation cleanup handler register/unregister

bug fixes:
- gcc wrapper now supports -shared, -nostdlib, -nostartfiles
- removed one wrongly-classified character from iswspace set (zwsp)
- fixed crashes in dns lookup on some errors, e.g. resolv.conf missing
- "make install" no longer tries to build shared libc if disabled
- ptrace argument handling bugs fixed
- work around visibility-hidden bugs in gcc 3.x
- fix thread-pointer-loss issue when it's initialized in signal handlers
- various minor typo/misc fixes in headers

compatibility:
- glob behaves more like traditional implementations w.r.t. GLOB_MARK
- added legacy futimes, lutimes functions
- more compatibility macros in sys/param.h (nonstandard header)
- setfs[ug]id syscall wrappers (linux specific)
- fgetpwent function (nonstandard)
- utmp.h matches traditional version more closely
- caddr_t now matches glibc type (void * instead of long)
- dummy (always-fail) dlopen and dlsym functions for static linked programs
- [efg]cvt functions (previously posix, removed from standard)
- get_current_dir_name function (nonstandard)
R
Rich Felker 已提交
428 429 430 431 432 433 434



0.8.6 release notes

bug fixes:
- fix crash in dns lookups for all static-linked, non-threaded programs