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 by CVE-2015-1817 and should not be used without applying the patch.

Mainline 1.1 series

musl-1.1.11.tar.gz (sig) - 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 characters.

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.

musl-1.1.10.tar.gz (sig) - 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 been fixed.

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:

musl-1.1.9.tar.gz (sig) - May 12, 2015

This release features significant overhauls in dynamic linking that now make it possible to build 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.

musl-1.1.8.tar.gz (sig) - 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:
musl-1.1.7.tar.gz (sig) - 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.

0.9 series

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 to report the version installed.
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 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 improved.
musl-0.9.7.tar.gz - 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.
musl-0.9.6.tar.gz - 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.
musl-0.9.5.tar.gz - 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.
musl-0.9.4.tar.gz - 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.
musl-0.9.3.tar.gz - 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 fixes.
musl-0.9.1.tar.gz - 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.
musl-0.9.0.tar.gz - 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 functions.

Beta series

musl-0.8.10.tar.gz - 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.
musl-0.8.9.tar.gz - 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 fixed too.
musl-0.8.8.tar.gz - 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.
musl-0.8.7.tar.gz - 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.
musl-0.8.6.tar.gz - 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.
musl-0.8.5.tar.gz - 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.
musl-0.8.4.tar.gz - 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.
musl-0.8.3.tar.gz - 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 errors.
musl-0.8.2.tar.gz - 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 ports.
musl-0.8.1.tar.gz - 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.
musl-0.8.0.tar.gz - 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.

Alpha series

musl-0.7.12.tar.gz - 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.
musl-0.7.11.tar.gz - 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.
musl-0.7.10.tar.gz - 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.
musl-0.7.9.tar.gz - 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.
musl-0.7.8.tar.gz - 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.
musl-0.7.7.tar.gz - 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.
musl-0.7.6.tar.gz - 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 smaller issues.
musl-0.7.5.tar.gz - 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.
musl-0.7.1.tar.gz - 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.
musl-0.7.0.tar.gz - 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.