commit | b4f5024731f2f61b0f5b377fe9bcbb4934a5e83b | [log] [tgz] |
---|---|---|
author | Lorenz Brun <lorenz@monogon.tech> | Tue Nov 14 21:51:07 2023 +0100 |
committer | Lorenz Brun <lorenz@monogon.tech> | Wed Nov 15 13:10:19 2023 +0000 |
tree | d71e84a77c0e77849390bacbde7554bc02fa48b6 | |
parent | 62f1d3680947e1d78bacf2a7277fb4b2007ebacb [diff] |
treewide: use Pinner to resolve safety issues Prior to Go 1.21 the only way to pass Go-managed pointers to the kernel was to convert them to a uintptr inside the syscall argument expression. This pattern was special-cased in the compiler to prevent the referenced memory from being moved by an eventual moving GC in Go while the syscall is running (thus corrupting the Go heap). But this was very restrictive as there are syscalls which take inputs containing further pointers. According to the official rules this could not be implemented safely. In practice you could just do it anyways as the current Go GC does in general not move objects, but it was always kind of a hack. With Go 1.21 there is a new Pinner API which can be used to pin the memory which is going to be referenced in these structures, allowing them to be constructed and used over multiple calls. runtime.KeepAlive is still required to prevent finalizers from running prematurely. Use this new API and remove the relevant comments. Change-Id: I26bce06e1c20a5fe0c41f9ae736a895f533674c1 Reviewed-on: https://review.monogon.dev/c/monogon/+/2316 Tested-by: Jenkins CI Reviewed-by: Serge Bazanski <serge@monogon.tech>
This is the main repository containing the source code for the Monogon Platform.
This is pre-release software - take a look, and check back later!
Our build environment is self-contained and requires only minimal host dependencies:
/dev/kvm
(if you want to run tests).Our docs assume that Bazelisk is available as bazel
on your PATH.
Refer to SETUP.md for detailed instructions.
Build CLI and node image:
bazel build //metropolis/cli/dbg //:launch --config dbg
Launch an ephemeral test node:
bazel test //:launch --config dbg --test_output=streamed
Run a kubectl command while the test is running:
bazel-bin/metropolis/cli/dbg/dbg_/dbg kubectl describe node
Run full test suite:
bazel test --config dbg //...