Hardened Malloc Versions Save

Hardened allocator designed for modern systems. It has integration into Android's Bionic libc and can be used externally with musl and glibc as a dynamic library for use on other Linux-based platforms. It will gain more portability / integration over time.

12

7 months ago

Changes in version 12:

  • raise class region size to 32GB for arm64 Android (requires kernel providing 48-bit address space via 4 level page tables)
  • add configuration for disabling self-init
  • enable Intel CET support
  • drop support for legacy compilers and libc versions
  • merge fprintf/fputs calls in malloc_info
  • preserve error for free calls (future POSIX requirement)
  • support versioned Clang
  • when arenas are enabled, properly handle threads making their first allocation by resizing a slab allocation from another thread to another slab allocation size class with realloc instead of triggering a crash by trying to lock a field in the internal allocator state that's not a lock
  • minor implementation and code style improvements

A full list of changes from the previous release (version 11) is available through the Git commit log between the releases.


See the README for this release for an overview of the project and many details about the design goals and implementation. versions These integer tags are the standalone releases, while date style tags such as 2023091800 and 2023091800-felix are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

11

2 years ago

Full list of changes from the previous release (version 10). Notable changes:

  • improved test suite portability
  • various minor optimizations
  • code readability improvements

See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the SQ1A.211205.008.2021122018 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

10

2 years ago

Full list of changes from the previous release (version 9). Notable changes:

  • improved memory corruption mitigation test suite
  • remove canary value field from slab metadata when the slab canary feature is disabled
  • add appropriate attributes to the public API defined in the hardened_malloc header
  • add configuration variant system with two standard recommended configurations: default for an aggressive security-focused configuration and light for a more balanced configuration disabling a subset of the optional security features for better performance (comparable to glibc malloc without the thread cache) and much lower memory usage while still providing most of the security properties (details in README)
  • switch from C11 to C17

See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the SQ1A.211205.008.2021122018 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

9

2 years ago

Full list of changes from the previous release (version 8).


See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the SQ1A.211205.008.2021122018 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

8

3 years ago

Full list of changes from the previous release (version 7).


See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the RQ1A.210105.003.2021.01.05.03 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

7

3 years ago

Full list of changes from the previous release (version 6).


See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the RQ1A.210105.003.2021.01.05.03 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

6

3 years ago

Full list of changes from the previous release (version 5).


See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the RQ1A.210105.003.2021.01.05.03 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

5

3 years ago

Full list of changes from the previous release (version 4).


See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the RQ1A.210105.003.2021.01.05.03 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

4

3 years ago

Full list of changes from the previous release (version 3).


See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the RP1A.201105.002.2020.11.07.00 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.

3

3 years ago

Full list of changes from the previous release (version 2).


See the README for this release for an overview of the project and many details about the design goals and implementation.

These integer numbered tags are the standalone releases, while the QQ3A.200805.001.2020.09.11.14 style tags are part of GrapheneOS releases and may contain GrapheneOS-specific changes such as workarounds for latent memory corruption bugs encountered in the wild while waiting for an upstream or downstream fix.