Skip to content

Releases: microsoft/snmalloc

0.7.3

23 Oct 10:30
92ca918

Choose a tag to compare

What's Changed

This release primarily improves for CMake for downstream uses of snmalloc.

Build

  • CMAKE: Libs should not require headers by @mjp41 in #797
  • Remove interface linking for PRIVATE linkage by @maxtropets in #799

CI

  • Benchmarking automatically by @mjp41 in #795
  • Removing benchmarking from PR triggers by @mjp41 in #800

New Contributors

Full Changelog: 0.7.2...0.7.3

0.7.2

05 Aug 10:30
3385660

Choose a tag to compare

What's Changed

Secondary Allocator

Thanks to @SchrodingerZhu for allowing snmalloc to support a secondary allocator, such as GWP-Asan.
This feature allows snmalloc to pass some allocation and their corresponding deallocation to another allocator.
This can be used for a GWP-Asan integration, and will be used to enable detours on Windows to override the default allocator.

The next major release will build more on this feature.

Platforms

Windows support

Thanks to @NeilMonday for the Windows support improvements in particular the ability to unload snmalloc without leaking the memory associated with snmalloc.

  • Windows: Remove exception handler for pagemap on unloading by @NeilMonday in #746
  • Release all reservations at the very end of the program or DLL by @NeilMonday in #773

Rust

  • [Rust] add support for optionally compiling libc functions by @wpbrown in #763

Libc support

  • Protection against fork by @mjp41 in #735
  • Update realloc(p,0) semantics. by @mjp41 in #753
  • Prevent internal errno setting escaping to the client. by @mjp41 in #754

C++ support

  • Add exception handling for new operator by @mjp41 in #791

CI and build

Bazel

Thanks to @jayakasadev for adding Bazel support to snmallocs build.

Refactor and minor bugs fixes

  • Refactor: Remove unused features and functions, and move most allocator operations to a global namespace. by @mjp41 in #750
  • Bug fixes by @mjp41 in #752
  • Fixed pagemap reservations for a fixed-region use-case using the default PAL by @Trithek in #757
  • Refactor check_bounds by @mjp41 in #756
  • Refactor representation of thread local state. by @mjp41 in #751
  • Fix bug in pool sort by @mjp41 in #765
  • Reentrancy init by @mjp41 in #767
  • Fix CI by @mjp41 in #776
  • Remove tests for experimental jemalloc ABIs by @markjdb in #770
  • Adjust func-memory test to be shorter. by @mjp41 in #780
  • Improve sizeclass calculation by @mjp41 in #777
  • Pass continuations for success and failure cases by @mjp41 in #788
  • Fallible notify using by @mjp41 in #790
  • Code Quality - inlining and reduce PreventFork usage by @mjp41 in #792

New Contributors

Full Changelog: 0.7.1...0.7.2

0.7.1

04 Feb 18:57
32495fd

Choose a tag to compare

What's Changed

If you are using 0.7.0, it is highly recommended you update to 0.7.1 to fix a bug in the wake on address implementation.

Bug Fixes

  • Multiple PALs could return spuriously from wake on address by @mjp41 and @wareya #739

Optimisations

Platform support

  • Improve Windows memcpy protection using an exception handler in the PAL to lazily commit the pagemap by @mjp41 in #727 & #730
  • OpenBSD add support for WaitOnAddress by @devnexen in #716
  • Solaris add support for OS level Aligned Allocation by @devnexen in #723
  • MinGW fixed missing <errno.h> for ENOMEM by @jcelerier in #733
  • MSVC fix signature of _msize function by @NeilMonday in #708
  • OpenBSD: memcpy test fix build warning. by @devnexen in #714

Docs

Build

CI

  • Updates to handle newer Ubuntu images by @mjp41 in #726
  • Update MacOS machines, and add Tracing Target by @mjp41 in #706

Code Refactoring

New Contributors

Full Changelog: 0.7.0...0.7.1

0.7.0

28 Nov 14:44
564c88b

Choose a tag to compare

What's Changed

See https://github.com/microsoft/snmalloc/blob/main/docs/release/0.7/README.md for an introduction to the 0.7 release.

Optimisation

Startup time

Produce Consumer workloads (BatchIt)

Security Features

Platforms and Bindings

Libc

  • Factor out libc code into a header. by @mjp41 in #624
  • Remove unnecessary assertion from aligned_alloc by @mjp41 in #658
  • aligned_alloc: Permit alignment values smaller than sizeof(uintptr_t) by @bsdjhb in #671
  • aligned_alloc requirements update. by @devnexen in #681

Rust

  • export snmalloc::alloc_size to rust wrappers. by @devnexen in #676

Windows

Haiku

NetBSD

Minor changes and refactorings

  • Add a default constructor to seqset nodes. by @davidchisnall in #636
  • Template construction of Pool elements by @mjp41 in #641
  • NFC: sizeclass: differentiate minimum step size and minimum allocation sizes by @nwf-msr in #651
  • Refactor new/delete overrides by @mjp41 in #660
  • Remove the SNMALLOC_USE_CXX17 C preprocessor symbol by @nwf-msr in #667
  • 0-length arrays in Buddy ranges by @nwf-msr in #672
  • gcc UAF warning in test/perf/singlethread -malloc by @nwf in #679
  • Remove some unneeded headers by @mjp41 in #680
  • Remove unneeded template. by @mjp41 in #687

Build and CI

New Contributors

Full Changelog: 0.6.2...0.7.0

0.6.2

28 Jun 10:44
dc12688

Choose a tag to compare

Minor release primarily improving support on CHERI and Open Enclave

Thanks to @devnexen, @saaramar, @brvtalcake, @jumaffre and @EAirPeter for your contributions to this release.

0.6.1

02 Sep 16:10
88a2740

Choose a tag to compare

Minor release. Largest change is bringing online Morello CHERI support.

Thanks to the external contributors @panekj, @devnexen and @mfelsche.

0.6.0

09 May 12:40
d5c732f

Choose a tag to compare

This is a major revision of the snmalloc design. The redesign has been primarily focused on adding new security features. The redesign affects all aspects of snmalloc. A more comprehensive explanation of the new features can be found in the docs

  • Uses Buddy Allocators for large allocations: In 0.5.3, we never reconsolidate large allocations, so if you ask for several 1MiB allocations, return them, and then ask for several 2MiB allocations it won't be able to use the space from the 1MiB allocations.  This is not a problem in 0.6 as we have a proper buddy allocator at that level so we recombine the big bits of memory properly
  • Variable sized slabs and out of band meta-data - Previously, snmalloc used fixed sized super slabs with metadata at the head. By using variable sized slabs and out of band meta-data, the slabs don't have to be grouped into superslabs which reduces the minimum memory requirement. (https://github.com/microsoft/snmalloc/blob/main/docs/security/VariableSizedChunks.md)
  • Improved per thread caching - #511 - This enables very small per thread usage initially that can grow to the level required. This means that low foot print scenarios on OpenEnclave can be supported with exactly the same code paths as high footprint scenarios. This brings the per thread costs down to approximately 16k per thread of metadata + 16k per thread per sizeclass used. This will grow in powers of 2 (upto 2MiB) to cover the required amount.

0.5.3

29 Jan 15:16
a3660c4

Choose a tag to compare

All minor changes

  • Fix performance regression for Debug builds (#274)
  • Refactoring towards sandbox support (#221, #268, #269)
  • Refactoring towards CHERI support (#266)
  • Bug fixes for Power (#265), SPARC (#264), ARM 32bit (#263) Solaris (#262),

0.5.2

10 Nov 10:24

Choose a tag to compare

Bug fixes

  • Fixes issue where unused memory is zeroed by the OS, then superslab data can become corrupt. Only affected the 16MiB chunk size configuration. The bug did not affect the Linux implementation. #259
  • Typo that meant 16MiB configuration was ignored in some cases. #254

Platform Support

  • Improve Haiku support #255
  • Added DragonFly BSD support #252

Thanks especially to @devnexen for finding and fixing many issues in this release, and for the contributions to many previous releases in expanding snmallocs platform support.

0.5.1

22 Sep 13:38

Choose a tag to compare

The main change in this release is a new mechanism for tracking very coarse-grained memory usage statistics (#241). The interface is only exposed in malloc-extensions.h. We recommend static linking this API, as we may refine this in future releases.

Other changes:

  • PALs now fully static (#245)

Bug fixes:

  • Haiku Debug build fixed (#247)
  • Windows Clang CTZ was not defined on correct size for size_t (#242)
  • Fix to unit tests (#239)
  • FlatPageMap calculated too large size if payload was not a byte size (#236)