1272 Commits

Author SHA1 Message Date
Matthew Parkinson
627653afdb Remove class nesting (#585)
Nesting the class inside a function generates bad code in Debug (#584).
Unnesting seems to fix this.
2023-02-03 14:24:02 +00:00
David CARLIER
6be63b1ea8 aal::aal_arm implements tick for apple 64 bits. (#564) 2023-01-31 10:17:00 +00:00
David CARLIER
6c27b59e13 adding few more c++17 operators override. (#581) 2023-01-31 09:22:50 +00:00
David CARLIER
e5d2ac95da PAL netbsd, the 10th release finally supports getrandom syscall. (#583) 2023-01-16 16:47:44 +00:00
David CARLIER
f032e3feb0 fix those particular gcc analyzer warning (#582) 2023-01-03 11:22:17 +00:00
Matthew Parkinson
4e88b42621 Towards heap walk (#569)
* Implement tracking full slabs and large allocations

This adds an additional SeqSet that is used to track all the fully
used slabs and large allocations.  This gives more chances to
detect memory leaks, and additionally catch some more UAF failures
where the object is not recycled.

* Make slabmeta track a slab interior pointer

Use the head of the free list builder to track an interior pointer to
the slab. This is unused unless the list contains something.
Hence, we can use this to represent an interior pointer to the slab and
report more accurate leaks.

* clangformat

* clangtidy

* clangtidy

* Clang tidy again.

* Fixing provenance.

* Clangformat

* Clang tidy.

* Add assert for sanity

* Make reinterpret_cast more descriptive.

Add an operation to get a tag free pointer from an address_t, and use it

* Clangformat

* CR

* Fix calculation of number of allocations.

* Fix calculation of number of allocations.

* Fix test
2022-12-20 13:36:10 +00:00
Nathaniel Wesley Filardo
704843d5ff Add BUILD_TESTING cmake option
As with CTest, but without the full machinery thereof.  This facilitates
package builders to use the usual build targets (all, install) without
needing to build the test programs if they're just going to get dropped
on the floor.
2022-12-16 16:43:47 +00:00
Nathaniel Wesley Filardo
74becb8374 StrictProvenance: deorbit metadata mixins 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
1b825b71a6 StrictProvenance: switch to Authmap amplification 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
0cd36f4eb2 StrictProvenance: plumb Authmaps through backends
No use of them, yet, though.
2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
ca69fe0dd3 StrictProvenance: Add "authority map" implementations 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
e7a3130f79 StrictProvenance: re-introduce capptr_rebound 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
90ac1ba8d3 BSD StrictProvenance minimum allocation size 16M
This will serve as the granularity with which we store authority
pointers in the (forthcoming) authmap, so 4K is almost surely too small.
16M is, admittedly, chosen out of a hat.
2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
7f3b59eaf9 PagemapRegisterRange: don't presume Pagemap entry type
To date, we've had exactly one kind of Pagemap and it held exactly one
type of thing, a descendant of class MetaEntryBase.

PagemapRegisterRange tacitly assumed that the Pagemap (adapter) it
interacted would therefore store entries that could have .set_boundary()
called on them.  But in general there's no requirement that this be
true; Pagemaps are generic data structures.

To enable reuse of the PagemapRegisterRange machinery more generally,
change the type of Pagemap::register_range() to take a pointer (rather
than an address) and move the MetaEntryBase-specific functionality to
the backend_helpers/pagemap adapter.
2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
06873ac366 pagemap: don't depend on SNMALLOC_CHECK_CLIENT
Instead, take a template parameter for the no-args init() method, so
that randomization can be disabled on StrictProvenance architectures
(CHERI), where we don't expect it to be useful, even when snmalloc is
being built to be otherwise paranoid.

Catch callsites up.
2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
30da31d245 pagemap: assert that entry types match
More directly ensure that a "basic" pagemap's type matches its
"concrete" pagemap parameter's entry type.  Absent this check, getting
this wrong won't be detected until even further along in template code
generation (when considering a method that sees the mismatch).
2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
2936467736 ds/pagemap: expose granularity information 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
48340faa09 NFC: ds/pagemap: tweak commentary 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
a42c4303e0 NFC: Move FlatPagemap to ds
Separate out the pagemap datastructure (ds/pagemap.h) from the backend
adapter shim (backend_helpers/pagemap.h).
2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
7c35c42eae NFC: move get_entropy64 from mem to ds
These functions depend only on the PAL and so can live lower down the
stack.
2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
20c9e57668 NFC: standard_range: update commentary 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
8f4cc1b4da NFC: lockrange: add note about ancestor() 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
6ca39403bf backend_concept: fix typo in IsWritablePagemapWithRegister 2022-12-14 17:46:53 +00:00
Nathaniel Wesley Filardo
c084157cc9 CI: parallelize cross-run tests 2022-12-14 14:10:17 +00:00
Nathaniel Wesley Filardo
9207f3d8a0 CI: bring non-power qemu cross CI to ubuntu-latest 2022-12-14 14:10:17 +00:00
Nathaniel Wesley Filardo
a396c2d4de CI: workaround qemu's dense memory map 2022-12-14 14:10:17 +00:00
Nathaniel Wesley Filardo
c39861f806 CI: fix crossbuild matrix
Sorry, failed to notice that I broke this in the last PR. :(
2022-12-14 14:10:17 +00:00
Nathaniel Wesley Filardo
455cdd8c6d CI: Further fallout from ubuntu 22.04
- Copy and shift our clang-10-specific variant tests onto the latest

- Additionally add 20.04 as a test point, along-side 18.04
2022-12-13 13:56:04 +00:00
Nathaniel Wesley Filardo
939a7f7eae Move std::atomic_flag to std::atomic<bool>
C++20 accidentally deprecated ATOMIC_FLAG_INIT, but in C++17 this is the
only way to reliably initialize an atomic_flag to a known value.
See https://en.cppreference.com/w/cpp/atomic/ATOMIC_FLAG_INIT
2022-12-13 13:56:04 +00:00
Nathaniel Wesley Filardo
524579eea1 CI: push ppc64 cross-run to ubuntu-20.04 host
Work around https://github.com/microsoft/snmalloc/issues/576
2022-12-13 13:56:04 +00:00
Nathaniel Wesley Filardo
f23cba0abf CI: move clang-10 tests to ubuntu-20.04
ubuntu-latest no longer has clang-10 available as of
https://github.blog/changelog/2022-11-09-github-actions-ubuntu-latest-workflows-will-use-ubuntu-22-04/

FIXES https://github.com/microsoft/snmalloc/issues/575
2022-12-13 13:56:04 +00:00
David CARLIER
5bb5701b45 LTO support proposal. (#573)
* LTO support proposal.

* giving choice
2022-12-09 20:30:56 +00:00
David CARLIER
dd3f4a9037 fatal error making less C for C++20. (#574) 2022-12-09 20:29:00 +00:00
Matthew Parkinson
0a5eb403ad Change representation of the SeqSet (#568)
This changes the representation of SeqSet to be doubly linked.  This is
required to enable tracking fully used slabs.
2022-10-28 13:13:56 +01:00
Matthew Parkinson
ddc5703cc8 Expose pool sort. (#565) 2022-10-10 17:13:10 +01:00
David CARLIER
a060462ff6 annotate alloc on unixes. (#548)
* annotate `alloc` on unixes.

* changes from feedback
2022-09-25 07:26:59 +01:00
Matthew Parkinson
591dc4c77f Add indirect range (#562)
* Add indirect range

The ranges currently either completely own the parent range, or it is
a static and thus completely shared.

The indirect range allows sharing without it being global.

Co-authored-by: Nathaniel Filardo <nfilardo@microsoft.com>
2022-09-21 11:15:44 +01:00
Matthew Parkinson
fb85216386 Add assertion for initialisation to the pagemap (#560) 2022-09-21 11:14:41 +01:00
Matthew Parkinson
38d4483b27 [NFC] Simplify static constexpr inline (#563)
* [NFC] Simplify static constexpr inline

  `constexpr` => `inline`
and when not in a class scope
  `constexpr` => `static`

This PR removes the redundant use of `inline` and `static`.  It also
prefers
  `static constexpr`
over
  `constexpr static`
2022-09-21 11:14:14 +01:00
Matthew Parkinson
2f8f376db8 Pagemap Rounding (#558)
* Extend pagemap test

Check for possible overlap between heap and pagemap, but writing and
reading the heap.

* Return unalign memory from the pagemap

This commit allows the pagemap to return unaligned range of memory. This
means that bump allocation of multiple pagemaps doesn't
waste as much space.
2022-09-17 14:30:13 +01:00
Matthew Parkinson
15e5a842f5 Update Mac Version. (#559)
* Update Mac Version.

* Update Mac Version.
2022-09-16 20:14:36 +01:00
Matthew Parkinson
11c18082d6 Make smallbuddy handle larger requests correctly (#556)
* Fail more abruptly if the bounds are not exact.

* Move bounding from Pool into Backend.

This commit makes the rounding and the bounding occur in the same
function.

* Enable smallbuddyrange to handle larger requests

The smallbuddy can now pass the larger requests up the range chain if
it cannot satisfy it itself.

* Test larger requests for meta-data.
2022-09-14 12:12:06 +01:00
Nathaniel Wesley Filardo
0ea12d9725 test/func/cheri: verify representability of sizeclasses 2022-09-14 10:10:14 +01:00
Nathaniel Wesley Filardo
50c7500536 AAL: introduce capptr_size_round, use w/ metadata 2022-09-14 10:10:14 +01:00
Matthew Parkinson
2ee522cd22 TSAN CI changes (#555)
* Drop TSAN debug build

* Require TSAN to pass
2022-09-08 11:00:39 +01:00
Matthew Parkinson
a118c9b7d8 Separate locking from static range (#540)
Pull a part the locking from the static range. This enables
locking to be added to a range directly, and does not require
it to be made static.  This is useful in cases where the source
of memory is shared between threads, but not static.  I.e. there
are multiple instances of the same type.
2022-09-08 10:40:04 +01:00
Matthew Parkinson
8f8dbd83b5 Missing pragma once. (#554) 2022-09-08 09:54:53 +01:00
Nathaniel Wesley Filardo
ad9967b5a4 test/perf/memcpy: also emit snmalloc-checked times 2022-09-07 13:05:49 +01:00
Nathaniel Wesley Filardo
c4311b4a41 func/cheri: probe memcpy correctness
Fling some misaligned cases at our memcpy and check the results
2022-09-07 13:05:49 +01:00
Nathaniel Wesley Filardo
2b3897e767 memcpy vs. StrictProvenance
StrictProvenance architectures are likely to impose additional alignment
requirements on their pointer-sized loads and stores.  On the other
hand, we must use pointer-sized loads and stores wherever possible to
ensure achieve copy.  Add a StrictProvenance-aware memcpy architecture
implementation.

Thanks to Matt for suggesting the trick of avoiding even thinking about
capability operations in the too-misaligned 16-31 byte cases as well as
other helpful suggestions.

Co-authored-by: Matthew Parkinson <mattpark@microsoft.com>
2022-09-07 13:05:49 +01:00