Граф коммитов

23 Коммитов

Автор SHA1 Сообщение Дата
Matthew Parkinson c77076983d
Add documentation for the combining lock (#683)
This adds some documentation to make the combining lock easier to understand.
This is working towards documenting the changes for the 0.7 release.
2024-10-05 07:31:00 +01:00
Julien Maffre e3f636544f
Update BUILDING.md (#611) 2023-04-19 17:06:55 +01:00
Axel PASCON 7f368bd6da
Fix broken link in PORTING.md (#610) 2023-04-07 20:08:37 +01:00
Matthew Parkinson 1077be0e50
Update GuardedMemcpy.md 2023-03-27 10:51:34 +01:00
Matthew Parkinson ccca98a709
Factor checks under separate feature flags. (#587)
All the checks and mitigations have been placed under feature flags.
These can be controlled by defining

  SNMALLOC_CHECK_CLIENT_MITIGATIONS

This can take a term that represents the mitigations that should be enabled.
E.g.
  -DSNMALLOC_CHECK_CLIENT_MITIGATIONS=nochecks+random_pagemap

The CMake uses this to build numerous versions of the LD_PRELOAD library and
tests to allow individual features to be benchmarked.

Co-authored-by: Nathaniel Wesley Filardo <nfilardo@microsoft.com>
2023-03-23 13:41:02 +00:00
Saar Amar 959531b6e3
Update GuardedMemcpy.md (#602)
Fix the signature of `memcpy`.
2023-03-07 10:32:40 +00:00
Matthew Parkinson a19ad550e7
Update BUILDING.md (#549) 2022-08-23 11:08:51 +01:00
Nathaniel Wesley Filardo b2c75dffb7 NFC: rename ConceptBound to IsBound 2022-07-07 16:57:47 +01:00
Nathaniel Wesley Filardo 3fce61eafb docs: Update StrictProvenance 2022-06-09 01:05:04 +01:00
Matthew Parkinson 03c9da6aa4
Refactor interface between backend and frontend (#530)
* Rename to use Config, rather than StateHandle/Globals/Backend
* Make Backend a type on Config that contains the address space management implementation
* Make Ranges part of the Backend configuration, so we can reuse code for different ways of managing memory
* Pull the common chains of range definitions into separate files for reuse.
* Move PagemapEntry to CommonConfig
* Expose Pagemap through backend, so frontend doesn't see Pagemap directly
* Remove global Pal and use DefaultPal, where one is not pass explicitly.

Co-authored-by: David Chisnall <davidchisnall@users.noreply.github.com>
Co-authored-by: Nathaniel Filardo <105816689+nwf-msr@users.noreply.github.com>
2022-05-31 10:45:04 +01:00
Jakub Panek c4f31bb279
Fix markdown (#522)
* Fix markdown link to ./docs/AddressSpace

* Fix footnotes in docs/StrictProvenance.md
2022-05-10 15:51:59 +01:00
Matthew Parkinson d5c732f3c1
Preparation for 0.6.0 (#517)
Co-authored-by: David Chisnall <davidchisnall@users.noreply.github.com>
Co-authored-by: Robert Norton <1412774+rmn30@users.noreply.github.com>
Co-authored-by: Nathaniel Wesley Filardo <nfilardo@microsoft.com>
Co-authored-by: Istvan Haller <31476121+ihaller@users.noreply.github.com>
2022-05-09 13:38:12 +01:00
Nathaniel Wesley Filardo a0377f62eb Add docs/AddressSpace.md 2022-03-21 23:21:24 +00:00
Nathaniel Wesley Filardo 9b60e8256d CHERI: update StrictProvenance.md for new world order 2021-12-16 19:25:09 +00:00
David CARLIER 360efa2123
export netbsd's reallocarr proposal. (#433)
* export netbsd's reallocarr proposal.

acts subtly differently from reallocarray, returns an error code
and first argument as receiver.

* not export by default

* ci tests

* apply suggestions

* doc addition

* Apply suggestions from code review

Co-authored-by: Matthew Parkinson <mjp41@users.noreply.github.com>
2021-12-02 14:49:32 +00:00
Matthew Parkinson 55a7ad2d58 Introduce PalEnforceAccess
The various Pals were given different meanings in CHECK_CLIENT and
non-CHECK_CLIENT builds.  This was because it is essential
that in the CHECK_CLIENT builds access is prevented, when not requested.

This PR separates the CHECK_CLIENT concept from how the Pal should be
implemented.
2021-09-28 09:23:52 +01:00
Matthew Parkinson b4efc40aa6 Expose notify_using_readonly
This exposes a readonly notify using, so that the underlying platform
can map the range of pages readonly into the application.  This improves
performance of external pointer on platforms that support lazy commit
of pages as it can access anything in the range.
2021-09-28 09:23:52 +01:00
Matthew Parkinson 5d0ae71423 Remove at_least
The Pal was providing policy for overallocating a block of memory to
achieve alignment make that part of the backend.
The backend should be responsible for layout policy.
2021-07-21 09:36:06 +01:00
Matthew Parkinson 8b1ffbc166 Expose reserve_at_least in all Pals 2021-07-21 09:36:06 +01:00
Matthew Parkinson f0e2ab702a
Major refactor of snmalloc (#343)
# Pagemap
 
The Pagemap now stores all the meta-data for the object allocation. The meta-data in the pagemap is effectively a triple of the sizeclass, the remote allocator, and a pointer to a 64 byte block of meta-data for this chunk of memory. By storing the pointer to a block, it allows the pagemap to handle multiple slab sizes without branching on the fast path. There is one entry in the pagemap per 16KiB of address space, but by using the same entry in the pagemap for 4 adjacent entries, then we can treat a 64KiB range can be treated as a single slab of allocations.

This change also means there is almost no capability amplification required by the implementation on CHERI for finding meta-data. The only amplification is required, when we change the way a chunk is used to a size of object allocation.


# Backend

There is a second major aspect of the refactor that there is now a narrow API that abstracts the Pagemap, PAL and address space management. This should better enable the compartmentalisation and makes it easier to produce alternative backends for various research directions. This is a template parameter that can be used to specialised by the front-end in different ways.

# Thread local state

The thread local state has been refactored into two components, one (called 'localalloc') that is stored directly in the TLS and is constant initialised, and one that is allocated in the address space (called 'coreallloc') which is lazily created and pooled.

# Difference

This removes Superslabs/Medium slabs as there meta-data is now part of the pagemap.
2021-07-12 15:53:36 +01:00
Nathaniel Filardo c6036f3808 Add StrictProvenance (SP) design document 2021-04-09 12:39:29 +01:00
Matthew Parkinson d56a99a747 Remove USE_MEASURE
The initial performance monitoring for snmalloc used timing of small
operations to guide the design. This feature has not been maintained or
used for several years.

This commit removes the feature.
2021-03-21 19:00:54 +00:00
David Chisnall 2385eb2bc1
Separate out building and porting docs. (#260)
Fix omissions in the porting doc (`page_size` and C++20 concepts).
2020-11-10 13:33:45 +00:00