improve/debloat mutex unlock error checking in pthread_cond_wait
[musl] / WHATSNEW
1 0.5.0 - initial release
2
3
4
5 0.5.9 - signal ABI bugfix, various cleanup and fixes:
6
7 sigset_t was wrongly defined as 1024 bytes instead of 1024 bits,
8 breaking the intended ABI compatibility with the LSB/glibc sigaction
9 structure. users should upgrade immediately and rebuild any libraries
10 or object files that might be using the incorrect definitions.
11
12 improved security against DoS with tcb shadow passwords by checking
13 that the file opened was really an ordinary file.
14
15 fixed a bug in the implementation of atomic ops that could have
16 allowed the compiler to incorrectly reorder them (in practice, gcc
17 with the default settings on i386 was not reordering them).
18
19 greatly improved conformance to the C and POSIX standards regarding
20 what the standard header files make visible. _POSIX_C_SOURCE is now
21 needed to get POSIX functions in standard C headers, and _XOPEN_SOURCE
22 or _GNU_SOURCE are required to get XSI interfaces or GNU extensions,
23 respectively.
24
25 many internal improvements have been made to the syscall-related code
26 in preparation for porting to x86_64 and other archs.
27
28
29
30 0.6.0 - x86_64 port, various important bugs fixed
31
32 new x86_64 (amd64) architecture port, contributed by Nicholas J. Kain,
33 along with PORTING guide. source tree layout and build system have
34 been improved to accommodate further ports.
35
36 various bugs that were introduced while making the headers respect C
37 and POSIX namespace standards have been fixed. conformance to the
38 standards has been improved.
39
40 fixed an inefficiency in qsort that triggered a bug (occasionaly
41 internal compiler error) in some versions of gcc.
42
43 fixed a major bug in the printf %n specifier that prevented it from
44 working and caused memory corruption.
45
46
47
48 0.7.0 - major improvements to posix conformance and completeness
49
50 implemented posix shared memory and semaphore interfaces.
51
52 implemented all remaining required pthread and clock interfaces.
53
54 major fixes to signal semantics.
55
56 greatly improved temporary file name generation for safety against
57 denial of service due to intentional name collisions.
58
59 added syscall wrappers for the linux inotify interface.
60
61 malloc(0) now returns a non-null pointer.
62
63 fixed printf %n specifier (again), pthread_once (it was always
64 hanging), and non-default-type mutex behavior.
65
66 added ucontext/sigcontext support in headers to facilitate building
67 libgcc with dwarf2 unwind support, and possibly other low-level tools.
68
69 improved musl-gcc compiler wrapper.
70
71 implemented many small missing functions here and there, minor header
72 fixes, etc.
73
74
75
76 0.7.1 - improvements to completeness, bug fixes
77
78 implemented flockfile, wprintf, and robust mutex functions.
79
80 fixed stack corruption bug in times(), minor header bugs, and some
81 error return value bugs in thread interfaces.
82
83
84
85 0.7.5 - new features, major optimization, and robustness
86
87 implemented POSIX timers.
88
89 optimized and simplified many thread-related functions.
90
91 eliminated resource leak races in thread cancellation. (almost all
92 existing implementations, including glibc, have these leaks.)
93
94 overhauled stdio implementation to take advantage of readv/writev for
95 reduced syscall load, and improved stdio's handling of error status.
96
97 added syscall header and interface for applications to use and
98 greatly simplified internal system for making syscalls.
99
100 strangthened tmpnam/tempnam/tmpfile filename generation and made the
101 straight C functions not depend on POSIX symbols.
102
103 fixed pthread cancellation ABI on i386 to match the LSB/glibc ABI
104
105 better double-free handling in malloc
106
107 various minor bug fixes
108
109
110
111 0.7.6 - major bug fixes
112
113 fixed rare but serious under-allocation bug in malloc.
114
115 fixed signedness bug in strchr that prevented finding high bytes.
116
117 fixed serious parsing bugs in strtold.
118
119 fixed statvfs syscall (it was always failing with EINVAL).
120
121 fixed race condition in set*id() functions with threads (possible
122 deadlock). further audit still needed though.
123
124 fseek no longer sets the stream error flag on failed seeks (this was
125 wrong and broke some programs, notably GNU m4).
126
127 nl_langinfo is no longer a dummy function. (the functionality was
128 previously implemented but accidentally left unused).
129
130 various small fixes have been made to the implementations and
131 prototypes for nonstandard and obsolete functions
132
133
134
135 0.7.7 - more bug fixes and program-compatibility improvements
136
137 fixed floating point formatting and rounding bugs in printf.
138
139 fixed broken %N$ positional argument specifiers in printf.
140
141 fixed misaligned read/overread bug in strchr which could lead to
142 crashes scanning tiny strings at the end of a page when the next page
143 is not readable, or on archs (not yet supported) that forbid
144 misaligned reads.
145
146 fixed breakage of statvfs on x86_64
147
148 fixed crash in getmntent_r
149
150 fixed bug in POSIX timers created with NULL sigevent argument
151
152 improved semaphore performance, and sem_wait is now interruptable by
153 signals, as required by POSIX.
154
155 added many compatibility and system-level interfaces, increasing the
156 proportion of busybox that works with musl.
157
158
159
160 0.7.8 - more bug fixes and compatibility improvements
161
162 fixed problems with ipv6 dns and address printing code that made ipv6
163 support practically unusable, and some other getaddrinfo bugs.
164
165 fixed broken sendmsg/recvmsg functions on x86_64 (caused by incorrect
166 msghdr structure).
167
168 fixed broken sigsetjmp asm on x86_64.
169
170 worked around a problem with input buffering on terminals reblocking
171 after getting a blank line, due to a bug in the linux readv syscall.
172
173 various improvements to the "rsyscall" system used to implement
174 threaded setuid, setgid, etc.
175
176 exiting/cancelling the a timer handler thread no longer kills the
177 timer.
178
179 fixed incorrect trailing zeros on some %g conversions in printf.
180
181 fixed buggy byte-swapping functions and moved them to inlines in
182 byteswap.h.
183
184 many small improvements to header/application compatibility, support
185 for nonstandard macros, etc.
186
187
188
189 0.7.9 release notes
190
191 new pthread cancellation implementation:
192 - safe against resource-leak/side-effect-leak race conditions
193 - safe against interruption by signal handlers
194 - reduced bloat in all cancellable functions
195 - reduced bloat for blocking cancellation
196
197 new interfaces implemented:
198 - realpath (limited functionality)
199 - wordexp (limited functionality)
200 - flock (nonstandard)
201 - forkpty (nonstandard)
202 - posix_fadvise
203 - posix_fallocate
204
205 general bug fixes:
206 - syslog function failure to communicate with syslogd
207 - bug in siginfo_t definition if wait.h was included before signal.h
208 - incorrect struct definitions for most of sysv ipc
209 - pthread_exit/cancel on timer handler wrongly destroying the timer
210 - linux dup2 ebusy workaround
211 - obscure issues in non-threaded programs using some pthread functions
212 - getopt_long allowed mismatch in last char of option name
213 - incorrect parsing of obscure ip address forms
214 - initgroups not working reliably (uninitialized var)
215 - shadow pass treating empty expiry field as pass-expired-in-1970
216 - bogus longjmp if pthread_exit was called from cancellation handlers
217
218 x86_64-specific bug fixes:
219 - fcntl file locking
220 - thread stack alignment
221 - broken select timeouts due to incorrect timeval definition
222
223
224
225 0.7.10 release notes
226
227 new features:
228 - ipv6 numeric string parsing
229 - eventfd syscall wrappers
230
231 optimizations:
232 - new qsort implementation using the smoothsort algorithm
233 - much smaller/faster sigset_t handling functions
234 - lowered spin count before futex wait in synchronization functions
235
236 general bug fixes:
237 - incorrect floating point round-to-even behavior in printf
238 - major bugs in pthread barrier implementation
239 - off-by-one error in scanf %n results
240 - scanf failure to report EOF when scanning for literal text
241 - minor missing/incorrect prototype issues
242 - dependency on undefined call order in fclose
243
244 compiler issue workarounds:
245 - incorrect inlining of variadic functions on recent gcc versions
246 - pcc preprocessor bug with recursive macro expansion
247
248
249
250 0.7.11 release notes
251
252 new features:
253 - integrated dynamic linker
254 - dynamic loading (dlopen/dlsym) (for dynamic-linked programs only)
255 - XSI search.h API
256 - POSIX message queues
257 - POSIX spawn interfaces
258 - BSD pseudo-random number generator API (random/srandom/initstate/etc.)
259 - floating point environment (limited usefulness due to gcc bugs)
260
261 general bug fixes:
262 - possible crashes with wordexp due to uninitialized variable
263 - race condition in pthread_kill (also present and unfixed in glibc/nptl)
264 - pthread exit destructors called too late
265 - dangerous unbounded vla in glob
266 - brk/sbrk legacy functions mismatching legacy semantics
267 - wcsncpy dest buffer overflow
268 - strncat and wcsncat possible overflows due to double-termination
269
270
271
272 0.7.12 release notes
273
274 new features:
275 - support for textrels in shared objects
276 - rpath support in dynamic linker
277 - stdio_ext.h functions (for better gnu software compatibility)
278
279 bug fixes:
280 - some compilers miscompiling dlopen due to misuse of longjmp
281 - safe handling of invalid long-double bit patterns (affects printf)
282 - workaround for bugs in linux mprotect syscall
283 - thread-safety for random() functions
284 - various minor issues
285
286
287
288 0.8.0 release notes
289
290 new features:
291 - chinese and japanese legacy charset support in iconv
292 - zero-syscall clock_gettime support (dynamic-linked x86_64 only)
293 - futex-based locking for stdio (previously used spinlocks)
294 - LD_PRELOAD and RTLD_NEXT support in dynamic linker
295 - strptime (mostly working but incomplete)
296 - posix aio (mostly working but not entirely conformant)
297 - memory streams (fmemopen, open_memstream, ...)
298 - stub/dummy implementations for various useless legacy functions
299 - if_nameindex
300
301 security hardening:
302 - setuid, etc. should not longer be able to "partially fail" with threads
303 - ensure suid programs start with fd 0,1,2 open
304 - improved openpty/forkpty failure checks
305
306 threads/synchronization bug fixes:
307 - dangerous spurious wakeup in pthread_join lead to early return
308 - race condition enabling async cancellation (delayed/lost cancellation)
309 - destruction/unmapping race conditions in semaphores, mutexes, rwlocks
310 - recursive rwlock_rdlock deadlock when a writer is waiting
311 - race condition in sigqueue with fork
312 - timer expiration thread exit wasn't running dtors
313 - timer threads weren't blocking signals
314 - close was wrongly cancellable after succeeding on some devices
315 - robust mutex list was not reset on fork
316
317 general bug fixes:
318 - incorrect logic in fread (spurious blocking; crash on write-only files)
319 - many corner cases and overflow cases for strtol-family functions
320 - various printf integer formatting issues with flags/width/precision
321 - incorrect iconv return value on failure
322 - broken FD_* macros on 64-bit targets
323 - clock function returning wrong value (real time not cpu time)
324 - siglongjmp signal mask clobbering (off-by-one pointer error)
325 - dynamic linker weak symbol resolution issues
326 - fdopendir failure to set errno
327 - various minor header fixes
328
329
330
331 0.8.1 release notes
332
333 bug fixes:
334 - mismatching prototypes caused build failure on 64-bit
335 - other minor prototype errors in the headers have been fixed
336 - various other small omissions fixed
337
338
339
340 0.8.2 release notes
341
342 new features:
343 - ptrace syscall support
344
345 bug fixes:
346 - const error (only a warning with many compilers) in lio_listio
347 - minor portability fixes aimed at supporting new arch targets
348
349
350
351 0.8.3 release notes
352
353 new features:
354 - arm port (experimental)
355 - better musl-gcc wrapper script for building against musl
356 - added clone system call
357
358 bug fixes:
359 - numerous header file typos, copy/paste errors, omissions
360 - statfs and statvfs ABI are now LSB-conformant (and actually work)