musl - obsolete versions
This page contains links to obsolete versions of musl which are
mostly of historical interest. Current versions and latest git links
can be found on the main download page.
WARNING: Versions 0.9.15 through 1.0.4 and 1.1.0
through 1.1.7 are affected
and should not be used without applying the patch.
Mainline 1.1 series
- Aug 30, 2015
This release introduces a new C locale aligned with future POSIX
requirements, allowing it to be used for applying regex and other
character-based operations to data which is not necessarily valid
UTF-8. The C locale is only used when explicitly requested via
environment variables or the application; default behavior is still
governed by the C.UTF-8 locale, which operates on whole multibyte
Support for musl's first NOMMU target, SH-2, is also added in this
release, along with groundwork for future NOMMU targets. A new
musl-clang compiler wrapper is provided to reuse a non-musl-targeted
host clang for building programs against musl, as was already possible
with gcc. Major performance enhancements have been made to the dynamic
linker. On ARM systems that support it, the vdso is now used to
accelerate clock_gettime. And debugger backtraces on i386 are improved
by a newly-added script to auto-generate call frame information for
asm source files.
The uselocale regression that slipped into the 1.1.10 release, as
well as many non-critical bugs, have been fixed. Most of these only
affected rarely-used interfaces or unusual usage cases. One
significant x86[_64] bug that could lead to soft-deadlock in
libc-internal locking, and multiple MIPS-, PowerPC-, ARM-, and
AArch64-specific bugs, were also fixed.
- June 4, 2015
This release fixes regressions introduced as part of the dynamic
linker bootstrap overhaul in musl 1.1.9, and adds several new features
and improvements. Internal cleanup and optimizations have been made to
the locale system. A fail-safe/allocation-free locale_t object for the
C locale is now available via newlocale(), and the iconv_open function
now supports "" and "CHAR" as aliases for the native (UTF-8) encoding.
A new crt start file, rcrt1.o, is provided for producing static-linked
position independent executables (PIE). Minor PIE-related
arch-specific bugs, and a bug in the ungetc and ungetwc stdio
functions which caused them to fail on files in EOF status, have also
A new regression in uselocale made it into this release. To avoid
breaking programs that call uselocale, all users of musl 1.1.10 should
apply the following patch:
- May 12, 2015
This release features significant overhauls in dynamic linking that
now make it possible to build libc.so itself with stack protector
hardening. Runtime dynamic linker error messages (dlerror) are now
thread-local, and long path and symbol names in messages are no longer
truncated. The sigsetjmp/siglongjmp functions have been redesigned to
restore signal mask after restoring the context, rather than before,
to prevent the possibility of unbounded stack growth when using
siglongjmp to return from a signal handler while under heavy signal
load. Global code size and performance improvements have been made for
toolchains supporting protected visibility.
Various bugs have been fixed, including issues when detached
threads exit with robust mutexes held, static TLS alignment errors,
wrongful continuation of several path search operations after
transient failures, two memory leaks, a crash on OOM, and significant
malfunction of the duplocale function. Many arch-specific fixes were
also made, including broken stack protector on powerpc and x32 and
several issues on mips, sh, aarch64, and x32.
- Mar 29, 2015
- This release is a high-priority bug fix release correcting a
stack-based buffer overflow in IPv6 literal parsing (CVE-2015-1817)
affecting inet_pton and getaddrinfo and several other
potentially-serious bugs in regular expression parsing. The omission
of the max_align_t type for the new AArch64 port and a regression in
the definition of FLT_ROUNDS have also been fixed. All users should
upgrade or apply at least the following patches:
- Mar 18, 2015
- This release features support for alternate user/group database
backends via the nscd protocol, an experimental AArch64 (64-bit ARM)
port, overhauled POSIX AIO functionality that is cancellable and safe
against close, and significant memset performance improvements on
x86[_64]. The set*id() family of functions are now safer (including
async-signal safety and safety against partial privilege-retention
issues) in multi-threaded programs. Application compatibility
improvements in getaddrinfo, getopt_long, and other functions have
been made, and various additional low-impact bugs have been fixed.
- musl-1.1.6.tar.gz -
Jan 13, 2015
- This release features a major overhaul in the handling of atomic
operations on ARM targets, improving efficiency when built for recent
(v7+) cpu models and ensuring (via runtime detection) that baseline
ARM binaries, which traditionally depended on the kernel's
kuser_helper page for atomic support, work even on newer cpu/kernel
combinations where it might be disabled for hardening purposes.
Extensions to the getopt, getopt_long, and fnmatch functions have been
added for greater compatibility with applications, and various
low-impact bugs have been fixed.
- musl-1.1.5.tar.gz -
Oct 14, 2014
- This release adds full library-level support for C11, including the
C11 threads API, and features major performance and correctness
improvements to the implementations of thread synchronization
primitives, especially condition variables. Several serious bugs have
been fixed, including a failure to null-terminate certain unexpected
DNS replies, use of uninitialized memory in caller-provided thread
stacks, writes past the end of of the buffer when swab() is called
with an odd length, and missing memory barriers in several places.
Many other minor bugs have also been fixed.
- musl-1.1.4.tar.gz -
Jul 31, 2014
- This release features a new port to the OpenRISC 1000 (or1k)
architecture, experimental support for locale in the LC_MESSAGES and
LC_TIME categories, and a built-in implementation of the gettext
system for message translations. Numerous bugs have also been fixed,
including a regression in the dynamic linker that prevented it from
showing error messages, incorrect memory synchronization/barriers on
microblaze, mips, powerpc, and sh, problems with the struct stat
layout on microblaze and big-endian mips, a serious setjmp register
state corruption bug on microblaze, a dynamic linker regression on
mips, and various minor issues. In addition, a workaround is provided
for gcc bug 61144 which prevented building musl with gcc 4.9.x.
- musl-1.1.3.tar.gz -
Jun 25, 2014
- This release adds many features including result sorting in the
DNS/hosts resolver modeled on RFC 3484, default timezone from
/etc/localtime, gnu2 TLS dialect (TLSDESC) on i386 and x86_64,
sendmmsg/recvmmsg functions (Linux extensions), fmtmsg function (XSI),
and optional arguments in getopt (GNU extension). Handling of
poorly-behaved nameservers (rcode=2 ServFail result) is also improved,
and setting of the %gs thread register is now supported on pre-2.6
i386 kernels. Several bugs are fixed including a potentially-important
issue in memmem.
- musl-1.1.2.tar.gz -
Jun 6, 2014
- This release fixes a stack-based buffer overflow in DNS response
parsing (CVE-2014-3484) found during an overhaul of the resolver
internals. A number of new features in the forward and reverse name
lookup functions have been added, particularly in the area of IPv6
support. VDSO acceleration of clock_gettime and related functions on
i386 is now available with recent kernels. Support for the %C and %y
specifiers to strptime has been added. Various low to medium severity
bugs have also been fixed.
- musl-1.1.1.tar.gz -
May 20, 2014
- This release fixes a bug in musl's implementation of the two-way
algorithm whereby strstr, wcsstr, and memmem fail to match certain
periodic search strings. Several other minor issues are also fixed.
New dynamic linker command line features and iconv charsets cp473 and
cp850 are now available. Several improvements to the configure script
are also made, including detection of an optimizer bug in GCC 4.9.0
which produces a broken libc.
- musl-1.1.0.tar.gz -
April 16, 2014
- New features include support for RELRO protection in dynamic
linker, VDSO acceleration for clock functions on x86_64, and
improvements to malloc that avoid early allocation failures specific
to PIE binaries. Several important bugs have been fixed, including
searches past the end of the buffer in memmem and multiple bugs in
printf floating point formatting, one of which may be able to trigger
a buffer overflow under certain conditions. Some bugs specific to the
mips, microblaze, and x32 ports have also been fixed.
Semi-LTS 1.0 series
- musl-1.0.4.tar.gz -
Aug 1, 2014
- This maintenance release brings the 1.0 branch up to date with all
important bug fixes that have been applied to mainline as of 1.1.4.
These include a major logic bug in memmem which yielded both false
negatives and false positives, numerous issues that were specific to
mips, powerpc, and microblaze, and various other lower-severity bugs.
- musl-1.0.3.tar.gz -
Jun 6, 2014
- This maintenance release for the 1.0 branch fixes a stack-based
buffer overflow in DNS response parsing (CVE-2014-3484) and various
other low to medium severity bugs.
- musl-1.0.2.tar.gz -
May 20, 2014
- This maintenance release for the 1.0 branch fixes a bug in musl's
implementation of the two-way algorithm whereby strstr, wcsstr, and
memmem fail to match certain periodic search strings. Several other
minor issues are also fixed. Several improvements to the configure
script are also made, including detection of an optimizer bug in GCC
4.9.0 which produces a broken libc.
- musl-1.0.1.tar.gz -
April 16, 2014
- This is the first maintenance release in the 1.0 series and fixes
several important bugs including searches past the end of the buffer
in memmem and multiple bugs in printf floating point formatting, one
of which may be able to trigger a buffer overflow under certain
conditions. Some bugs specific to the mips and microblaze ports have
also been fixed.
- musl-1.0.0.tar.gz -
March 20, 2014
- This release adds support for a soft-float ABI variant on MIPS as
well as new experimental ports to SuperH and x32 (the new 32-bit ABI
for x86_64). Two floating point printf bugs have been fixed including
a rounding error and off-by-one buffer overflow that could occur only
when printing certain denormal values with thousands of places of
precision. A second overflow issue was fixed in wcsxfrm where a buffer
length of zero was misinterpreted. Several other minor bug fixes and
compatibility improvements have also been made.
- musl-0.9.15.tar.gz -
January 3, 2014
- Major bug fixes include a buffer overflow in mbsrtowcs, various
group file handling errors, failure of execle to pass on the new
environment, and timezone-parsing crashes on 64-bit systems. Also
fixed are several file descriptor leak (close-on-exec) issues,
handling of invalid IP address strings, several fnmatch corner cases
possibly leading to out-of-bound access, and failure of faccessat with
the AT_EACCESS flag. This release also adds support for mixing IPv4
and v6 nameservers in resolv.conf, expanded shadow password API, IPv6
multicast structures, and the ability for libc.so to report the
- musl-0.9.14.tar.gz -
September 23, 2013
- The result of major bug-hunting. Fixes a regression in
installation of the dynamic linker symlink when DESTDIR is used, rare
deadlock in libc-internal locking, incorrect dynamic linker fallback
to built-in search paths in certain error cases, popen failures when
the caller has closed stdin or stdout, deadlock and memory-corruption
issues in multi-threaded set*id and setrlimit operations, and multiple
low-impact bugs in math functions and other components.
- musl-0.9.13.tar.gz -
August 30, 2013
- Dynamic linker now supports $ORIGIN and recursive rpath
resolution. Field widths and the %s format have been added to
strftime. iconv now supports all major non-stateful CJK encodings,
including EUC-KR and Big5(+HKSCS) which are new in this release. CPU
affinity interfaces have been added. Many floating point improvements
have been made, including fenv support on ARM hardfloat targets. Major
optimizations have been made to memset and memcpy (all archs).
Numerous low- to medium-impact bugs have been fixed.
- musl-0.9.12.tar.gz -
July 29, 2013
- Notable new features include zoneinfo timezone support, PIE
support on all supported targets, simple heap-based buffer overflow
detection in free/realloc, and mildly improved IPv6 support. Various
dynamic linker improvements have been made for arch variants and
non-root installations. The C++ ABI is now stabilized and compatible
with glibc's C++ ABI. Several major bugs have been fixed including a
potentially-dangerous regression in scanf introduced in 0.9.11 that
could pass invalid pointers to free, a flaw in dl_iterate_phdr's
reporting of library headers that could crash C++ exception-handling,
and longstanding integer overflows in time conversion code that
produced incorrect results for certain pre-1935 dates. Other minor
bugs have also been fixed.
- musl-0.9.11.tar.gz -
June 29, 2013
- This release adds the support for the scanf %m allocation
modifier, week-number-related strftime formats, and various legacy
network-related functions. Major improvements have been made to
dynamic linker path handling and pseudo-random number generators.
Major visible bugs/regressions in scanf and mbsrtowcs have been fixed,
as well as several potentially-serious synchronization and
resource-leak bugs and x86_64-specific bugs that resulted in crashes
at startup in some C++ programs or unpredictable signal behavior.
- musl-0.9.10.tar.gz -
April 14, 2013
- Further significant compatibility improvements, especially with
garbage collectors. UTF-8 decoding performance had greatly increased,
and misaligned memory access bugs affecting UTF-8 decoding on some
archs have been fixed. Improved handling of caller-provided thread
stacks. Many bugs fixed, including potentially dangerous bugs in
syslog and in the failure path of pthread_create, and a regression in
the ARM crt code that caused shared libraries other than libc.so to
crash on loading.
- musl-0.9.9.tar.gz -
February 1, 2013
- Major compatibility improvements, including Linux-specific
features, GNU extension functions, grsec kernel quirks compatibility,
and workarounds for subtle but dangerous portability errors in some
programs. Size, performance, and correctness improvements to the math
library. Numerous low-impact bugs fixed.
- musl-0.9.8.tar.gz -
November 26, 2012
- New PowerPC port and major bug fixes and improvements for the MIPS
port. Coverage for more optional parts of POSIX including the thread
priority scheduling option and stubs for unsupported functionality.
Dynamic linker dl_iterate_phdr support. Various minor bugs and strict
conformance issues have also been fixed and application compatibility
- October 28, 2012
- Major new features include support for thread-local storage
(__thread/_Thread_local keyword) and a port to Microblaze. Notable
quality and conformance improvements have been made in the areas of
setting the close-on-exec flag for library-internal file descriptors
to avoid fd leaks, using vfork in posix_spawn, system, and popen to
make these functions work well even in very large programs, support
for recursive calls to dlopen (from constructors), and avoiding
executable stacks. Various low-impact bugs have also been fixed.
- September 16, 2012
- Bugfix release for subtle but serious breakage that crept in to
the previous release with the addition of O_SEARCH: the O_ACCMODE
mask was incorrectly redefined with one bit missing. Support for md5
crypt hashes and the O_EXEC open mode have also been added.
- September 15, 2012
Default-features mode now makes visible POSIX, X/Open, and BSD
interfaces when no specific standards-conformance options are
requested, making it possible to compile most packages without
special CFLAGS. Major header compatibility improvements. Building
musl with clang/LLVM is now supported. SHA password hash functions
have been added. New dynamic linker features including dladdr and GNU
hash support. Various other minor features and bug fixes.
- August 18, 2012
Major improvements to MIPS port, including support for dynamic
linking. Password hashing (crypt) now supports blowfish hash
algorithm. Further application compatibility improvements especially
for BSD and SUSv3-targeted software. Performance improvements in
printf and memcpy. Various bugfixes: strtod family, wcsstr, err.h
functions, and many MIPS-specific bugs.
- August 2, 2012
New experimental MIPS port (32-bit, o32 ABI, static-linked-only at
this point). Various dynamic linker/loader bugs fixed. Network service
name lookup support from /etc/services. Wrappers for more non-POSIX
Linux syscalls. Overhauled crypt() with drastic reductions in memory
usage and run time. Fixes for several important thread bugs including
internal lock corruption, spurious sem_trywait failure, and race
conditions on detached-thread exit, as well as various minor bug
- June 3, 2012
Ability to invoke the dynamic linker explicitly to run programs or
display the resolution of their dependencies when invoked as ldd.
Significant legacy-compat improvements in header files, including
_BSD_SOURCE support, and additional interfaces towards basic
LSB/glibc-linked binary compatibility. Fixed major POSIX BRE regex
parsing bugs that affected building ncurses with a sed using libc
regex engine, numerous low-impact bugs, and a few ARM-specific bugs
that kept many programs from working at all on ARM.
- May 6, 2012
Milestone release covering all interfaces in ISO C99 and POSIX 2008
base. Relicensed under standard MIT license. New configure script for
easy build setup. Full stack protector and PIE support on i386 and
x86_64 targets. Major floating-point math improvements and fixes,
application compatibility improvements (mostly legacy header details),
and additional bug fixes in dlerror and several wide character
- April 25, 2012
Character classification functions updated to Unicode 6.1 and greatly
improved. Over/underflow detection and bugs fixed in strtod/scanf
float support. Minimal stack protector support. Better debugging
support for shared libraries. Recent breakage in iconv and sysconf
fixed. Improved musl-gcc wrapper script.
- April 19, 2012
Bug-fix release for a serious breakage in strtol and related functions
that made it into the previous release and prevents them from handling
numbers with initial spaces. A couple other small issues have been
- April 18, 2012
Fix for critical buffer overflow vulnerability in fprintf with
unbuffered files. Major math library correctness and performance
improvements, including x86 assembly. New floating point
parser/converter with correct rounding, new scanf that corrects many
corner-case errors, and new wcstod/f/ld (previously missing). Various
compatibility improvements and small bug fixes.
- March 17, 2012
C++ support with g++/libstdc++ (requires minor fixes for glibc
dependencies in libstdc++). New C99 math library (float, long double,
complex, etc.) based on FreeBSD and OpenBSD code. Working floating
point environment on i386 and x86_64. Many bugfixes and compatibility
improvements for builting slightly-nonportable programs against musl.
- February 28, 2012
Bug fix release for a serious bug that slipped into the previous
release: All static linked programs that performed DNS lookups but did
not use pthreads were crashing due to a logic error in the weak
linking of pthread cancellation cleanup functions.
- February 27, 2012
Numerous additions of small legacy interfaces and previously-omitted
standard functions that were determined to be important for building
real-world programs. Global constructor/destructor support in main
program and shared libraries/dynamic loader. Thread cancellation
requests are now able to cancel blocked stdio operations. A bug in GCC
3 that prevented building shared libc has been worked around. GCC
wrapper now supports generating shared libraries. Various obscure bugs
have also been fixed.
- January 23, 2012
Better arm support, including dynamic linking. Many improvements and
fixes in pthread cond vars, barriers, and rwlocks. Assorted small
compatibility improvements and bug fixes all around.
- September 21, 2011
New experimental ARM port (armv4l+ w/EABI). Improved musl-gcc wrapper
now works with pre-4.4 gcc versions (including 3.x) and behaves more
transparently. The clone syscall is now exported. statfs/statvfs ABI
issues have been fixed, along with a number of small header file
- September 17, 2011
Support for the ptrace syscall (process tracing/debugging) has been
added, and an error in pointer const-correctness (fortunately treated
as just a warning by most compilers) has been fixed. Some other small
portability fixes/improvements have been made in preparation for new
- September 14, 2011
This release is purely bug fixes. It addresses a build failure on
64-bit systems, minor header file prototype errors and
inconsistencies, and a small omission related to posix_spawn.
- September 13, 2011
First post-alpha release. Major improvements to dynamic linker/loader,
iconv, stdio, integer formatting/parsing, threads/synchronization, and
hardening for poorly-written suid programs. New implementations of
previously-missing functionality including memory streams, time
parsing, and POSIX AIO. Many unlock/destroy-type race condition bugs
have been fixed in pthread locks; such races are nearly impossible to
trigger but persist in other implementations such as glibc/NPTL. A
number of other bugs have also been fixed, including bugs in stdio,
clock, iconv, siglongjmp, and various header files.
- July 3, 2011
New improvements to the dynamic linker (TEXTREL and RPATH support)
increase compatibility with applications, particularly those which
don't follow best practices for building and installing libraries.
A bug in dlopen which affected only certain compiler versions (misuse
of local variables with longjmp) has been fixed. Support has been
added for the stdio_ext.h family of interfaces, to reduce the effort
needed to compile buggy gnulib programs that try to poke at stdio FILE
internals, the random() function has been made thread-safe, mprotect
now works around a bug in the Linux syscall, and uninitialized long
double values are now handled safely in printf.
- June 28, 2011
Shared libraries and dynamic loading (dlopen/dlsym) are now supported
through an integrated dynamic linker with near-zero overhead. Other
new features include POSIX message queues, posix_spawn, the search.h
interfaces, the random() PRNG, and floating point environment
manipulation. Moderately severe bugs in several string and wide string
interfaces and glob(), as well as various minor bugs, have been fixed.
- May 17, 2011
Support for numeric IPv6 address parsing has been added. Compiling
musl with PCC should now succeed and result in a working library. The
heap sort implementation of qsort has been replaced by smooth sort,
yielding nearly-linear run time on arrays which are already
mostly-sorted. Various bugs including printf floating point rounding
and scanf EOF handling have been fixed, as well as minor prototype
issues in the public headers and an issue where variadic functions
were incorrectly inlined on i386 with recent gcc versions.
- April 23, 2011
This release features the second wave of major changes to pthread
cancellation, believed to resolve all possible issues with resource
leaks, premature cancellation, and late/missed cancellation
opportunities, all while simplifying and reducing the code size and
eliminating the cost in applications which do not use cancellation.
Several major x86_64-specific bugs related to select(), fcntl locking,
and alignment-related crashes, and many minor bugs affecting all
platforms, have also been fixed.
- April 13, 2011
Multiple bugs in IPv6 support, x86_64 socket and setjmp handling, byte
swapping functions, and floating point printf formatting have been
fixed, and a workaround has been included for a bug in Linux readv()
with tty devices which caused stdio to block after reading a blank
line from the terminal. Significant additions have been made to some
header files for better compatibility with legacy applications.
- April 6, 2011
More bugs have been fixed, including printf floating point formatting
and rounding, printf positional argument specifiers, a misaligned read
bug in strchr which could lead to crashes, general failure of
getmntent_r, broken statvfs on x86_64, and various minor issues. More
nonstandard and system-level interfaces have also been added,
increasing application compatibility.
- April 4, 2011
Major bugs have been fixed, including a rare but serious bug in malloc
for large allocations of particular sizes, failure of strchr when
searching for high bytes, parsing errors in strtold, and numerous
- April 2, 2011
Support for POSIX timers (signal- and thread-based delivery) has been
added. The stdio buffering implementation now uses readv/writev
scatter-gather IO to operate on caller-provided and internal FILE
buffers together in a single syscall, improving performance. Thread
cancellation has been greatly improved to guarantee no resource leaks
when a cancellation request is received at a resource-allocating
syscall (such as open()), giving musl a major robustness advantage
over other libraries, including glibc. The syscall() interface is now
available to applications, and various other small improvements have
been made and bugs fixed.
- March 18, 2011
The previously-missing wide character printf-family functions, and
manual stdio locking functions (flockfile) have been implemented.
Robust mutexes are also now supported. Various bugs have been fixed,
including unconditional, potentially-dangerous stack corruption by the
times() function and several minor bugs.
- March 11, 2011
This release fills in a number of previously-missing interfaces,
including POSIX shared memory, semaphores, and all remaining basic
pthread and POSIX clock functions. In addition, many corrections have
been made in the semantics of signals, threads, and various other
interfaces. Significant bugs in the printf %n specifier and
pthread_once function have been fixed. As of 0.7.0, musl is believed
to pass all tests in the Open POSIX Test Suite except those that rely
on not-yet-implemented features or that invoke undefined behavior.
- musl-0.6.0.tar.gz -
February 17, 2011
This is the first release of musl to support building native x86_64
applications, and it features a source/build framework for additional
ports. Some public header errors introduced in the previous release
have been fixed, as well as a major bug in the %n specifier for printf
and several minor bugs.
- musl-0.5.9.tar.gz -
February 14, 2011
This release fixes a major bug in the intended long-term ABI for
sigset_t/sigaction. Anyone using musl to build libraries should
upgrade immediately (and rebuild any libraries which might use
signals) to avoid running into ABI breakage issues at a later time.
The public header files have also undergone review and correction for
conformance to ISO C and POSIX requirements for what they are allowed
to make visible. Various other minor bugs have been fixed, and
internal improvements have been made to facilitate upcoming ports to
x86_64 and possibly ARM.
- musl-0.5.0.tar.gz -
February 11, 2011
Initial public release.