GrapheneOS

grapheneos.org
GrapheneOS

GrapheneOS is an open source privacy and security focused mobile OS with Android app compatibility. Developed by Daniel Micay. GrapheneOS is a young project, and currently only supports Pixel devices, partially due to their strong hardware security.

Open Source

GrapheneOS Source Code

Author

GrapheneOS

Description

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.

#grapheneos#hardening#malloc#malloc-library#memory#memory-allocation#memory-allocator#quarantine#security#slab-allocator

Homepage

https://grapheneos.org/

Repository

  • LicenseMIT
  • Created23 Aug 18
  • Primary languageC
  • Size1,242 KB
  • Stars2,020
  • Forks165
  • Watchers2,020

Language Usage

Language Usage

Project Health

Recent Commits

  • jvoisin(01 Oct 26)

    Remove the todo item about cyclic MTE pattern See https://dustri.org/b/probabilistic-analysis-of-mte-tagging-schemes.html for analysis.

  • Thomas(25 Sept 26)

    fix 0 size allocations with >PAGE_SIZE alignment for !CONFIG_LARGE_SIZE_CLASSES

  • Daniel Micay(25 Sept 26)

    raise bound for slab quarantine get_random_u16 optimization This was 1 lower than it needed to be due to the get_random_uniform API not including the upper bound.

  • Daniel Micay(25 Sept 26)

    optimize slab quarantine indexing via power-of-two length

  • Daniel Micay(25 Sept 26)

    require power-of-two slab quarantine length multipliers The base quarantine size for each size class is a power of two so this results in the overall length always being a power of two. This will be useful to optimize indexing for both types of slab quarantine. The quarantines for each size class scale the multipliers by a power of two so this results in the overall length always being a power of two.

  • Daniel Micay(25 Sept 26)

    reorder size_class struct layout

  • Daniel Micay(20 Sept 26)

    add missing "cc" to clobber list for MTE assembly

  • jvoisin(05 Aug 26)

    test: add coverage for untested allocator behavior Add small self-contained test cases and wire them into the Makefile and test_smc.py harness: - invalid_free_aligned_sized_small: free_aligned_sized() with a non-power-of-two alignment, covering the "invalid sized deallocation alignment (small)" fatal path. - invalid_malloc_object_size_small_canary: malloc_object_size() queried at an offset past the usable region, covering the "invalid malloc_object_size (canary)" fatal path. - pvalloc: regression test for pvalloc(0) returning a valid allocation. - reallocarray_overflow: reallocarray() returns NULL/ENOMEM on overflow. - posix_memalign_einval: posix_memalign() returns EINVAL for an invalid alignment and leaves the output pointer untouched. - aligned_alloc_einval: aligned_alloc() returns NULL/EINVAL for a non-power-of-two alignment.

  • jvoisin(05 Aug 26)

    Compute aligned size class arithmetically get_size_info_align previously scanned the size class table linearly from the class matching the requested size until it found one whose size was a multiple of the alignment, costing up to ~28 iterations (e.g. a small allocation with page-sized alignment). Rounding the size up to a multiple of the (power of 2) alignment and then to a size class always lands on the smallest class whose size is a multiple of the alignment, since get_size_info rounds up to a power-of-2 spacing which preserves divisibility by the alignment. This makes the lookup constant time, which should improve memory-aligned (de)llocations. Verified equivalent to the previous scan for every size and alignment in both the default and extended size class configurations.

  • Daniel Micay(06 Sept 26)

    update libdivide to 5.4.0

  • Daniel Micay(02 Sept 26)

    resolve out-of-memory edge cases with MAP_FIXED MAP_FIXED can unmap the destination without creating a new mapping in out-of-memory conditions.

  • Daniel Micay(04 Sept 26)

    limit size of purging for in-place shrink path It falls back to memset on out-of-memory which would crash for the old guard region.

  • Daniel Micay(04 Sept 26)

    always set VMA name for quarantined large allocation

  • Daniel Micay(04 Sept 26)

    enforce success for MADV_DONTNEED_LOCKED This should not return ENOMEM.

  • Daniel Micay(04 Sept 26)

    replace MADV_DONTNEED with MADV_DONTNEED_LOCKED This works on locked memory instead of returning EINVAL which improves compatibility with mlockall(...) usage.

  • Daniel Micay(03 Sept 26)

    remove unnecessary page_align call Large allocation sizes are always page aligned via get_large_size_class in the allocation code paths.

  • Daniel Micay(08 Aug 26)

    use pinned commit hashes for GitHub actions

  • rdevshp(10 Jul 26)

    Update README.md to properly use CONFIG_N_ARENA for make invocations

  • rdevshp(06 Jul 26)

    Fix handling of pvalloc(0)

  • rdevshp(07 Jul 26)

    Update test/.gitignore to include additional test binaries

  • rdevshp(05 Jul 26)

    Fix C++ exception throwing behavior for the new operator when the new handler throws an exception with a type derived from std::bad_alloc

  • Daniel Micay(01 Jul 26)

    replace aligned attribute with alignas

  • rdevshp(27 Jun 26)

    github CI: add arm64 tests

  • rdevshp(26 Jun 26)

    fix typos and grammar errors in memtag_test.cc/README.md

  • rdevshp(26 Jun 26)

    Fix stale mallinfo link in README.md

  • rdevshp(26 Jun 26)

    Use __clang__ preprocessor macro to determine the compiler specified by CC Fixes a bug in Makefile where CC=/usr/bin/clang make does not work because it does not start with clang

  • Daniel Micay(21 Jun 26)

    clang-tidy: disable bugprone-casting-through-void lint This lint triggers for a void cast used to silence a cast-align warning for write_after_free_check. We aren't violating strict aliasing because the memory was always zeroed with memset prior to reading it as u64 and we don't write to another way.

  • Daniel Micay(21 Jun 26)

    clang-tidy: disable useless readability lints The implicit bool conversion lint only works properly for C++ and isn't the code style we want. The math missing parentheses lint expects to use parentheses for basic math operations such as `a - b * c` which isn't the code style we want.

  • Daniel Micay(21 Jun 26)

    use #ifdef for non-compound checks

  • Daniel Micay(21 Jun 26)

    clang-tidy: filter third_party/ header warnings

GrapheneOS Security

5.7/10

Repo Security Summary

Updated 24 Aug 26

  • Maintained10/10
  • Dangerous-Workflow10/10
  • PackagingN/A
  • Token-Permissions0/10
  • Code-Review6/10
  • Binary-Artifacts10/10
  • Pinned-Dependencies10/10
  • CII-Best-Practices0/10
  • Fuzzing0/10
  • License10/10
  • Signed-ReleasesN/A
  • Branch-Protection0/10
  • Security-Policy9/10
  • SAST0/10

GrapheneOS Website

Website

GrapheneOS: the private and secure mobile OS

GrapheneOS is a security and privacy focused mobile OS with Android app compatibility.

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address172.96.172.37
  • Hostnamemia.grapheneos.org
  • LocationMiami,Florida,United States of America,NA
  • ISPReliablesite.net LLC
  • ASNAS23470

Associated Countries

  • CACA
  • USUS

Safety Score

Website marked as safe

100%

Trackers

No known trackers found

Blacklist Check

grapheneos.org was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

GrapheneOS Reviews

More Mobile Operating Systems

  • An open source, de-Googled Android OS focused on privacy and security, with optional microG, a built-in firewall and encrypted backups. Runs on select Google Pixel, Fairphone and Motorola devices, and is developed by the non-profit Calyx Institute.

  • A free and open-source operating system for various devices, based on the Android mobile platform - Lineage is light-weight, well maintained, supports a wide range of devices, and comes bundled with Privacy Guard.

About the Data: GrapheneOS

Change History

Edit GrapheneOS Data

You can edit GrapheneOS's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external sources, a list of these can be found data documentation.

Origin Data

Modify Data

API

You can access GrapheneOS's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/grapheneos

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share GrapheneOS

Help your friends compare Mobile Operating Systems, and pick privacy-respecting software and services.
Share GrapheneOS and Awesome Privacy with your network!