Files
visor/pkg/sentry/memmap/BUILD
T
zeekayandHanzo Dev 3da05638df State the ZAP wire of every urpc payload
urpc encodes with encoding/json, which walks the payload on every call: a
realistic control.ExecArgs costs 7084ns and 10 allocations to cross. ZAP
reads a field at a constant offset out of the buffer that arrived, so the
same payload is 740ns and one allocation -- but only if the offsets are
stated, and a stated offset that is wrong is silent corruption rather than
a compile error. So state them from the types themselves.

//tools/zap reflects over the payloads at build time and writes the wire
as Go source with the offsets as constants. It lives inside Bazel because
pkg/sentry/control cannot be imported from outside it: the *_go_proto
packages it depends on have no source in the tree.

Six payloads had no layout to state. A map, an interface and a type from
another module have no offsets, so each is answered in the type:

  SaveOpts.Metadata and StartContainerArgs.InitialCgroups/Limits cross as
  lists of pairs; boot.Route.Destination restates net.IPNet as Subnet;
  OpenMountArgs restates the OCI mount fields the call actually uses;
  StartArgs.Spec and SinkConfig.Config carry their documents as the bytes
  they arrived as; MetricsRegistrationResponse carries the protocol
  buffer the same way; and seccheck's session options become a type
  instead of a map of any.

ExecArgs and MetricsExportData still have none: ExecArgs holds live
kernel objects behind an interface, and MetricsExportData reaches a
prometheus snapshot whose labels are a map.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-22 23:10:33 -07:00

74 lines
1.6 KiB
Python

load("//tools:defs.bzl", "go_library", "go_test")
load("//tools/go_generics:defs.bzl", "go_template_instance")
package(
default_applicable_licenses = ["//:license"],
licenses = ["notice"],
)
go_template_instance(
name = "mappable_range",
out = "mappable_range.go",
package = "memmap",
prefix = "Mappable",
template = "//pkg/segment:generic_range",
types = {
"T": "uint64",
},
)
go_template_instance(
name = "mapping_set_impl",
out = "mapping_set_impl.go",
package = "memmap",
prefix = "Mapping",
template = "//pkg/segment:generic_set",
types = {
"Key": "uint64",
"Range": "MappableRange",
"Value": "MappingsOfRange",
"Functions": "mappingSetFunctions",
},
)
go_template_instance(
name = "file_range",
out = "file_range.go",
package = "memmap",
prefix = "File",
template = "//pkg/segment:generic_range",
types = {
"T": "uint64",
},
)
go_library(
name = "memmap",
srcs = [
"file_range.go",
"mappable_range.go",
"mapping_set.go",
"mapping_set_impl.go",
"memmap.go",
"zap.go",
],
visibility = ["//pkg/sentry:internal"],
deps = [
"//pkg/context",
"//pkg/errors/linuxerr",
"//pkg/hostarch",
"//pkg/log",
"//pkg/safemem",
"//pkg/usermem",
"@com_github_zap_proto_go//:go",
],
)
go_test(
name = "memmap_test",
size = "small",
srcs = ["mapping_set_test.go"],
library = ":memmap",
deps = ["//pkg/hostarch"],
)