musl is a C standard library to power a new generation
of Linux-based devices. It is lightweight, fast, simple,
free, and strives to be correct in the sense of standards
conformance and safety.
#### What's new for 1.2.2 The release adds the `_Fork` function from the
upcoming edition of POSIX and takes advantage of the interpretation dropping the
async-signal-safety requirement from `fork` to provide a consistent execution
environment (not restricted to calling only async-signal-safe functions) after a
multithreaded parent forks. This solves deadlocks which would otherwise be
effectively unfixable in some language runtimes that expose `fork` as part of
their contract with applications, as well as various library and application
software that could and should be fixed, but hasn't been. A number of related
issues in synchronization between `fork`, `abort`, async IO, `posix_spawn`,
`pthread_exit`, and other components have been fixed as part of this change.
The `realpath` function has been rewritten to do its own path traversal, rather
than depending on procfs magic symlink contents for `O_PATH` file descriptors.
This makes it work prior to mount of `/proc` and in container or chroot
environments where `/proc` contents may not accurately reflect the pathname as
visible to the calling process. The C versions of the square root functions,
used on archs without a native FPU instruction for square root, have also been
rewritten with significant improvements to performance, especially on archs that
lack FPU entirely. This rewrite also fixes the lack of accurate `sqrtl` on archs
with quad-precision `long double`. New functions added include the
aforementioned `_Fork`, `reallocarray` from OpenBSD, `gettid` along with
`SIGEV_THREAD_ID` timer notification support, and `tcgetwinsize`/`tcsetwinsize`
from POSIX-future. A buffer overflow (CVE-2020-28928) in `wcsnrtombs` has been
fixed with the function essentially rewritten. This function is not widely used
and the bug is not relevant to software that does not use it directly (it's not
used by other libc components), but it may be serious for software that does. An
assortment of lesser bugs have also been fixed.