From 245fa7caf5b4d769a10403d938fdac94a8a5b824 Mon Sep 17 00:00:00 2001 From: Megan Wright Date: Thu, 16 Jun 2022 10:56:51 +0100 Subject: [PATCH] vendor: Revert containerd version Switch containerd to confidential containers fork Signed-off-by: Megan Wright --- src/runtime/go.mod | 15 +- .../Microsoft/hcsshim/internal/hcs/system.go | 188 +- .../hcsshim/internal/hns/hnspolicy.go | 9 +- .../hcsshim/internal/jobobject/iocp.go | 111 -- .../hcsshim/internal/jobobject/jobobject.go | 499 ------ .../hcsshim/internal/jobobject/limits.go | 315 ---- .../Microsoft/hcsshim/internal/queue/mq.go | 111 -- .../Microsoft/hcsshim/internal/winapi/iocp.go | 3 + .../hcsshim/internal/winapi/jobobject.go | 9 +- .../hcsshim/internal/winapi/process.go | 57 - .../hcsshim/internal/winapi/winapi.go | 2 +- .../internal/winapi/zsyscall_windows.go | 22 +- .../vendor/github.com/cilium/ebpf/.gitignore | 1 - .../github.com/cilium/ebpf/.golangci.yaml | 1 + .../github.com/cilium/ebpf/ARCHITECTURE.md | 4 +- .../github.com/cilium/ebpf/CONTRIBUTING.md | 4 +- .../vendor/github.com/cilium/ebpf/Makefile | 5 +- .../vendor/github.com/cilium/ebpf/README.md | 64 +- .../vendor/github.com/cilium/ebpf/asm/func.go | 6 - .../github.com/cilium/ebpf/asm/func_string.go | 10 +- .../github.com/cilium/ebpf/asm/instruction.go | 5 - .../cilium/ebpf/attachtype_string.go | 65 - .../github.com/cilium/ebpf/collection.go | 538 +++--- .../github.com/cilium/ebpf/elf_reader.go | 180 +- .../github.com/cilium/ebpf/elf_reader_fuzz.go | 1 - .../vendor/github.com/cilium/ebpf/go.mod | 4 +- .../vendor/github.com/cilium/ebpf/go.sum | 4 +- .../vendor/github.com/cilium/ebpf/info.go | 36 +- .../github.com/cilium/ebpf/internal/align.go | 6 - .../cilium/ebpf/internal/btf/btf.go | 313 ++-- .../cilium/ebpf/internal/btf/btf_types.go | 11 +- .../cilium/ebpf/internal/btf/core.go | 33 +- .../cilium/ebpf/internal/btf/ext_info.go | 15 +- .../cilium/ebpf/internal/btf/fuzz.go | 1 - .../cilium/ebpf/internal/btf/info.go | 48 - .../cilium/ebpf/internal/btf/strings.go | 8 +- .../cilium/ebpf/internal/btf/syscalls.go | 31 - .../cilium/ebpf/internal/btf/types.go | 190 +- .../github.com/cilium/ebpf/internal/cpu.go | 4 +- .../cilium/ebpf/internal/ptr_32_be.go | 1 - .../cilium/ebpf/internal/ptr_32_le.go | 1 - .../github.com/cilium/ebpf/internal/ptr_64.go | 4 +- .../cilium/ebpf/internal/syscall.go | 59 - .../cilium/ebpf/internal/unix/types_linux.go | 16 +- .../cilium/ebpf/internal/unix/types_other.go | 14 +- .../cilium/ebpf/internal/version.go | 4 +- .../github.com/cilium/ebpf/link/freplace.go | 88 - .../github.com/cilium/ebpf/link/kprobe.go | 38 +- .../github.com/cilium/ebpf/link/link.go | 14 +- .../github.com/cilium/ebpf/link/perf_event.go | 7 +- .../github.com/cilium/ebpf/link/syscalls.go | 9 +- .../github.com/cilium/ebpf/link/tracepoint.go | 8 +- .../github.com/cilium/ebpf/link/uprobe.go | 133 +- .../vendor/github.com/cilium/ebpf/linker.go | 23 +- .../vendor/github.com/cilium/ebpf/map.go | 95 +- .../github.com/cilium/ebpf/marshalers.go | 63 +- .../vendor/github.com/cilium/ebpf/prog.go | 123 +- .../github.com/cilium/ebpf/run-tests.sh | 22 +- .../vendor/github.com/cilium/ebpf/syscalls.go | 94 +- .../vendor/github.com/cilium/ebpf/types.go | 36 +- .../github.com/cilium/ebpf/types_string.go | 69 +- .../containerd/runtime/v2/shim/shim.go | 12 +- .../containernetworking/cni/pkg/skel/skel.go | 6 +- .../cni/pkg/version/plugin.go | 4 +- .../plugins/pkg/ns/ns_linux.go | 4 +- .../plugins/pkg/testutils/netns_linux.go | 2 +- .../dbus/v5/{README.md => README.markdown} | 12 +- .../vendor/github.com/godbus/dbus/v5/auth.go | 15 +- .../vendor/github.com/godbus/dbus/v5/conn.go | 36 +- .../github.com/godbus/dbus/v5/decoder.go | 16 +- .../github.com/godbus/dbus/v5/encoder.go | 61 +- .../github.com/godbus/dbus/v5/export.go | 37 +- .../github.com/godbus/dbus/v5/message.go | 73 +- .../vendor/github.com/godbus/dbus/v5/sig.go | 66 +- .../godbus/dbus/v5/transport_generic.go | 10 +- .../godbus/dbus/v5/transport_unix.go | 24 +- .../dbus/v5/transport_unixcred_netbsd.go | 14 - .../selinux/go-selinux/rchcon.go | 2 +- .../selinux/go-selinux/rchcon_go115.go | 2 +- .../golang.org/x/sys/unix/asm_linux_loong64.s | 54 - .../golang.org/x/sys/unix/ioctl_linux.go | 23 - .../vendor/golang.org/x/sys/unix/mkerrors.sh | 7 - .../golang.org/x/sys/unix/syscall_aix.go | 16 +- .../golang.org/x/sys/unix/syscall_bsd.go | 35 +- .../golang.org/x/sys/unix/syscall_darwin.go | 45 +- .../x/sys/unix/syscall_dragonfly.go | 9 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 9 +- .../golang.org/x/sys/unix/syscall_linux.go | 92 +- .../x/sys/unix/syscall_linux_386.go | 12 +- .../x/sys/unix/syscall_linux_alarm.go | 14 - .../x/sys/unix/syscall_linux_amd64.go | 6 +- .../x/sys/unix/syscall_linux_arm.go | 5 +- .../x/sys/unix/syscall_linux_arm64.go | 6 +- .../x/sys/unix/syscall_linux_mips64x.go | 5 +- .../x/sys/unix/syscall_linux_mipsx.go | 5 +- .../x/sys/unix/syscall_linux_ppc.go | 5 +- .../x/sys/unix/syscall_linux_ppc64x.go | 5 +- .../x/sys/unix/syscall_linux_riscv64.go | 5 +- .../x/sys/unix/syscall_linux_s390x.go | 13 +- .../x/sys/unix/syscall_linux_sparc64.go | 5 +- .../golang.org/x/sys/unix/syscall_netbsd.go | 9 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 9 +- .../golang.org/x/sys/unix/syscall_solaris.go | 148 +- .../golang.org/x/sys/unix/syscall_unix.go | 51 - .../golang.org/x/sys/unix/zerrors_linux.go | 49 +- .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 4 +- .../x/sys/unix/zsyscall_aix_ppc64.go | 4 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 17 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 8 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 17 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 8 +- .../x/sys/unix/zsyscall_freebsd_386.go | 4 +- .../x/sys/unix/zsyscall_freebsd_amd64.go | 4 +- .../x/sys/unix/zsyscall_freebsd_arm.go | 4 +- .../x/sys/unix/zsyscall_freebsd_arm64.go | 4 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 119 -- .../x/sys/unix/zsyscall_linux_386.go | 17 +- .../x/sys/unix/zsyscall_linux_amd64.go | 39 +- .../x/sys/unix/zsyscall_linux_arm.go | 15 +- .../x/sys/unix/zsyscall_linux_arm64.go | 26 +- .../x/sys/unix/zsyscall_linux_mips.go | 28 +- .../x/sys/unix/zsyscall_linux_mips64.go | 28 +- .../x/sys/unix/zsyscall_linux_mips64le.go | 15 +- .../x/sys/unix/zsyscall_linux_mipsle.go | 28 +- .../x/sys/unix/zsyscall_linux_ppc.go | 28 +- .../x/sys/unix/zsyscall_linux_ppc64.go | 28 +- .../x/sys/unix/zsyscall_linux_ppc64le.go | 28 +- .../x/sys/unix/zsyscall_linux_riscv64.go | 15 +- .../x/sys/unix/zsyscall_linux_s390x.go | 17 +- .../x/sys/unix/zsyscall_linux_sparc64.go | 28 +- .../x/sys/unix/zsyscall_netbsd_386.go | 4 +- .../x/sys/unix/zsyscall_netbsd_amd64.go | 4 +- .../x/sys/unix/zsyscall_netbsd_arm.go | 4 +- .../x/sys/unix/zsyscall_netbsd_arm64.go | 4 +- .../x/sys/unix/zsyscall_openbsd_386.go | 4 +- .../x/sys/unix/zsyscall_openbsd_amd64.go | 4 +- .../x/sys/unix/zsyscall_openbsd_arm.go | 4 +- .../x/sys/unix/zsyscall_openbsd_arm64.go | 4 +- .../x/sys/unix/zsyscall_openbsd_mips64.go | 4 +- .../x/sys/unix/zsyscall_solaris_amd64.go | 16 +- .../x/sys/unix/zsysnum_linux_386.go | 1 - .../x/sys/unix/zsysnum_linux_amd64.go | 1 - .../x/sys/unix/zsysnum_linux_arm.go | 1 - .../x/sys/unix/zsysnum_linux_arm64.go | 1 - .../x/sys/unix/zsysnum_linux_mips.go | 1 - .../x/sys/unix/zsysnum_linux_mips64.go | 1 - .../x/sys/unix/zsysnum_linux_mips64le.go | 1 - .../x/sys/unix/zsysnum_linux_mipsle.go | 1 - .../x/sys/unix/zsysnum_linux_ppc.go | 1 - .../x/sys/unix/zsysnum_linux_ppc64.go | 1 - .../x/sys/unix/zsysnum_linux_ppc64le.go | 1 - .../x/sys/unix/zsysnum_linux_riscv64.go | 1 - .../x/sys/unix/zsysnum_linux_s390x.go | 1 - .../x/sys/unix/zsysnum_linux_sparc64.go | 1 - .../golang.org/x/sys/unix/ztypes_linux.go | 1525 +---------------- .../golang.org/x/sys/unix/ztypes_linux_386.go | 13 - .../x/sys/unix/ztypes_linux_amd64.go | 14 - .../golang.org/x/sys/unix/ztypes_linux_arm.go | 13 - .../x/sys/unix/ztypes_linux_arm64.go | 14 - .../x/sys/unix/ztypes_linux_mips.go | 13 - .../x/sys/unix/ztypes_linux_mips64.go | 14 - .../x/sys/unix/ztypes_linux_mips64le.go | 14 - .../x/sys/unix/ztypes_linux_mipsle.go | 13 - .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 13 - .../x/sys/unix/ztypes_linux_ppc64.go | 14 - .../x/sys/unix/ztypes_linux_ppc64le.go | 14 - .../x/sys/unix/ztypes_linux_riscv64.go | 14 - .../x/sys/unix/ztypes_linux_s390x.go | 18 +- .../x/sys/unix/ztypes_linux_sparc64.go | 14 - .../x/sys/windows/syscall_windows.go | 42 +- .../x/sys/windows/zsyscall_windows.go | 4 +- 171 files changed, 1528 insertions(+), 5725 deletions(-) delete mode 100644 src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go delete mode 100644 src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go delete mode 100644 src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go delete mode 100644 src/runtime/vendor/github.com/Microsoft/hcsshim/internal/queue/mq.go create mode 100644 src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/iocp.go delete mode 100644 src/runtime/vendor/github.com/cilium/ebpf/attachtype_string.go delete mode 100644 src/runtime/vendor/github.com/cilium/ebpf/internal/align.go delete mode 100644 src/runtime/vendor/github.com/cilium/ebpf/internal/btf/info.go delete mode 100644 src/runtime/vendor/github.com/cilium/ebpf/internal/btf/syscalls.go delete mode 100644 src/runtime/vendor/github.com/cilium/ebpf/link/freplace.go rename src/runtime/vendor/github.com/godbus/dbus/v5/{README.md => README.markdown} (81%) delete mode 100644 src/runtime/vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go delete mode 100644 src/runtime/vendor/golang.org/x/sys/unix/asm_linux_loong64.s delete mode 100644 src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go diff --git a/src/runtime/go.mod b/src/runtime/go.mod index c835d2e5d..4ed29943a 100644 --- a/src/runtime/go.mod +++ b/src/runtime/go.mod @@ -9,12 +9,12 @@ require ( github.com/blang/semver/v4 v4.0.0 github.com/containerd/cgroups v1.0.3 github.com/containerd/console v1.0.3 - github.com/containerd/containerd v1.6.6 + github.com/containerd/containerd v1.6.1 github.com/containerd/cri-containerd v1.11.1-0.20190125013620-4dd6735020f5 github.com/containerd/fifo v1.0.0 github.com/containerd/ttrpc v1.1.0 github.com/containerd/typeurl v1.0.2 - github.com/containernetworking/plugins v1.1.1 + github.com/containernetworking/plugins v1.0.1 github.com/coreos/go-systemd/v22 v22.3.2 github.com/cri-o/cri-o v1.0.0-rc2.0.20170928185954-3394b3b2d6af github.com/docker/go-units v0.4.0 @@ -25,16 +25,17 @@ require ( github.com/go-openapi/strfmt v0.18.0 github.com/go-openapi/swag v0.19.14 github.com/go-openapi/validate v0.18.0 - github.com/godbus/dbus/v5 v5.0.6 + github.com/godbus/dbus/v5 v5.0.4 github.com/gogo/protobuf v1.3.2 github.com/hashicorp/go-multierror v1.1.1 github.com/intel-go/cpuid v0.0.0-20210602155658-5747e5cec0d9 github.com/mdlayher/vsock v1.1.0 - github.com/opencontainers/runc v1.1.2 + github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/opencontainers/runc v1.1.0 github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 - github.com/opencontainers/selinux v1.10.1 + github.com/opencontainers/selinux v1.10.0 github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.11.1 + github.com/prometheus/client_golang v1.11.0 github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.30.0 github.com/prometheus/procfs v0.7.3 @@ -50,7 +51,7 @@ require ( go.opentelemetry.io/otel/trace v1.3.0 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f - golang.org/x/sys v0.0.0-20220412211240-33da011f77ad + golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a google.golang.org/grpc v1.43.0 k8s.io/apimachinery v0.22.5 k8s.io/cri-api v0.23.1 diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go index 1d45a703b..75499c967 100644 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go +++ b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go @@ -4,22 +4,17 @@ import ( "context" "encoding/json" "errors" - "fmt" "strings" "sync" "syscall" - "time" "github.com/Microsoft/hcsshim/internal/cow" "github.com/Microsoft/hcsshim/internal/hcs/schema1" hcsschema "github.com/Microsoft/hcsshim/internal/hcs/schema2" - "github.com/Microsoft/hcsshim/internal/jobobject" "github.com/Microsoft/hcsshim/internal/log" - "github.com/Microsoft/hcsshim/internal/logfields" "github.com/Microsoft/hcsshim/internal/oc" "github.com/Microsoft/hcsshim/internal/timeout" "github.com/Microsoft/hcsshim/internal/vmcompute" - "github.com/sirupsen/logrus" "go.opencensus.io/trace" ) @@ -33,8 +28,7 @@ type System struct { waitBlock chan struct{} waitError error exitError error - os, typ, owner string - startTime time.Time + os, typ string } func newSystem(id string) *System { @@ -44,11 +38,6 @@ func newSystem(id string) *System { } } -// Implementation detail for silo naming, this should NOT be relied upon very heavily. -func siloNameFmt(containerID string) string { - return fmt.Sprintf(`\Container_%s`, containerID) -} - // CreateComputeSystem creates a new compute system with the given configuration but does not start it. func CreateComputeSystem(ctx context.Context, id string, hcsDocumentInterface interface{}) (_ *System, err error) { operation := "hcs::CreateComputeSystem" @@ -138,7 +127,6 @@ func (computeSystem *System) getCachedProperties(ctx context.Context) error { } computeSystem.typ = strings.ToLower(props.SystemType) computeSystem.os = strings.ToLower(props.RuntimeOSType) - computeSystem.owner = strings.ToLower(props.Owner) if computeSystem.os == "" && computeSystem.typ == "container" { // Pre-RS5 HCS did not return the OS, but it only supported containers // that ran Windows. @@ -207,7 +195,7 @@ func (computeSystem *System) Start(ctx context.Context) (err error) { if err != nil { return makeSystemError(computeSystem, operation, err, events) } - computeSystem.startTime = time.Now() + return nil } @@ -336,115 +324,11 @@ func (computeSystem *System) Properties(ctx context.Context, types ...schema1.Pr return properties, nil } -// queryInProc handles querying for container properties without reaching out to HCS. `props` -// will be updated to contain any data returned from the queries present in `types`. If any properties -// failed to be queried they will be tallied up and returned in as the first return value. Failures on -// query are NOT considered errors; the only failure case for this method is if the containers job object -// cannot be opened. -func (computeSystem *System) queryInProc(ctx context.Context, props *hcsschema.Properties, types []hcsschema.PropertyType) ([]hcsschema.PropertyType, error) { - // In the future we can make use of some new functionality in the HCS that allows you - // to pass a job object for HCS to use for the container. Currently, the only way we'll - // be able to open the job/silo is if we're running as SYSTEM. - jobOptions := &jobobject.Options{ - UseNTVariant: true, - Name: siloNameFmt(computeSystem.id), - } - job, err := jobobject.Open(ctx, jobOptions) - if err != nil { - return nil, err - } - defer job.Close() +// PropertiesV2 returns the requested container properties targeting a V2 schema container. +func (computeSystem *System) PropertiesV2(ctx context.Context, types ...hcsschema.PropertyType) (*hcsschema.Properties, error) { + computeSystem.handleLock.RLock() + defer computeSystem.handleLock.RUnlock() - var fallbackQueryTypes []hcsschema.PropertyType - for _, propType := range types { - switch propType { - case hcsschema.PTStatistics: - // Handle a bad caller asking for the same type twice. No use in re-querying if this is - // filled in already. - if props.Statistics == nil { - props.Statistics, err = computeSystem.statisticsInProc(job) - if err != nil { - log.G(ctx).WithError(err).Warn("failed to get statistics in-proc") - - fallbackQueryTypes = append(fallbackQueryTypes, propType) - } - } - default: - fallbackQueryTypes = append(fallbackQueryTypes, propType) - } - } - - return fallbackQueryTypes, nil -} - -// statisticsInProc emulates what HCS does to grab statistics for a given container with a small -// change to make grabbing the private working set total much more efficient. -func (computeSystem *System) statisticsInProc(job *jobobject.JobObject) (*hcsschema.Statistics, error) { - // Start timestamp for these stats before we grab them to match HCS - timestamp := time.Now() - - memInfo, err := job.QueryMemoryStats() - if err != nil { - return nil, err - } - - processorInfo, err := job.QueryProcessorStats() - if err != nil { - return nil, err - } - - storageInfo, err := job.QueryStorageStats() - if err != nil { - return nil, err - } - - // This calculates the private working set more efficiently than HCS does. HCS calls NtQuerySystemInformation - // with the class SystemProcessInformation which returns an array containing system information for *every* - // process running on the machine. They then grab the pids that are running in the container and filter down - // the entries in the array to only what's running in that silo and start tallying up the total. This doesn't - // work well as performance should get worse if more processess are running on the machine in general and not - // just in the container. All of the additional information besides the WorkingSetPrivateSize field is ignored - // as well which isn't great and is wasted work to fetch. - // - // HCS only let's you grab statistics in an all or nothing fashion, so we can't just grab the private - // working set ourselves and ask for everything else seperately. The optimization we can make here is - // to open the silo ourselves and do the same queries for the rest of the info, as well as calculating - // the private working set in a more efficient manner by: - // - // 1. Find the pids running in the silo - // 2. Get a process handle for every process (only need PROCESS_QUERY_LIMITED_INFORMATION access) - // 3. Call NtQueryInformationProcess on each process with the class ProcessVmCounters - // 4. Tally up the total using the field PrivateWorkingSetSize in VM_COUNTERS_EX2. - privateWorkingSet, err := job.QueryPrivateWorkingSet() - if err != nil { - return nil, err - } - - return &hcsschema.Statistics{ - Timestamp: timestamp, - ContainerStartTime: computeSystem.startTime, - Uptime100ns: uint64(time.Since(computeSystem.startTime).Nanoseconds()) / 100, - Memory: &hcsschema.MemoryStats{ - MemoryUsageCommitBytes: memInfo.JobMemory, - MemoryUsageCommitPeakBytes: memInfo.PeakJobMemoryUsed, - MemoryUsagePrivateWorkingSetBytes: privateWorkingSet, - }, - Processor: &hcsschema.ProcessorStats{ - RuntimeKernel100ns: uint64(processorInfo.TotalKernelTime), - RuntimeUser100ns: uint64(processorInfo.TotalUserTime), - TotalRuntime100ns: uint64(processorInfo.TotalKernelTime + processorInfo.TotalUserTime), - }, - Storage: &hcsschema.StorageStats{ - ReadCountNormalized: uint64(storageInfo.ReadStats.IoCount), - ReadSizeBytes: storageInfo.ReadStats.TotalSize, - WriteCountNormalized: uint64(storageInfo.WriteStats.IoCount), - WriteSizeBytes: storageInfo.WriteStats.TotalSize, - }, - }, nil -} - -// hcsPropertiesV2Query is a helper to make a HcsGetComputeSystemProperties call using the V2 schema property types. -func (computeSystem *System) hcsPropertiesV2Query(ctx context.Context, types []hcsschema.PropertyType) (*hcsschema.Properties, error) { operation := "hcs::System::PropertiesV2" queryBytes, err := json.Marshal(hcsschema.PropertyQuery{PropertyTypes: types}) @@ -461,66 +345,12 @@ func (computeSystem *System) hcsPropertiesV2Query(ctx context.Context, types []h if propertiesJSON == "" { return nil, ErrUnexpectedValue } - props := &hcsschema.Properties{} - if err := json.Unmarshal([]byte(propertiesJSON), props); err != nil { + properties := &hcsschema.Properties{} + if err := json.Unmarshal([]byte(propertiesJSON), properties); err != nil { return nil, makeSystemError(computeSystem, operation, err, nil) } - return props, nil -} - -// PropertiesV2 returns the requested compute systems properties targeting a V2 schema compute system. -func (computeSystem *System) PropertiesV2(ctx context.Context, types ...hcsschema.PropertyType) (_ *hcsschema.Properties, err error) { - computeSystem.handleLock.RLock() - defer computeSystem.handleLock.RUnlock() - - // Let HCS tally up the total for VM based queries instead of querying ourselves. - if computeSystem.typ != "container" { - return computeSystem.hcsPropertiesV2Query(ctx, types) - } - - // Define a starter Properties struct with the default fields returned from every - // query. Owner is only returned from Statistics but it's harmless to include. - properties := &hcsschema.Properties{ - Id: computeSystem.id, - SystemType: computeSystem.typ, - RuntimeOsType: computeSystem.os, - Owner: computeSystem.owner, - } - - logEntry := log.G(ctx) - // First lets try and query ourselves without reaching to HCS. If any of the queries fail - // we'll take note and fallback to querying HCS for any of the failed types. - fallbackTypes, err := computeSystem.queryInProc(ctx, properties, types) - if err == nil && len(fallbackTypes) == 0 { - return properties, nil - } else if err != nil { - logEntry.WithError(fmt.Errorf("failed to query compute system properties in-proc: %w", err)) - fallbackTypes = types - } - - logEntry.WithFields(logrus.Fields{ - logfields.ContainerID: computeSystem.id, - "propertyTypes": fallbackTypes, - }).Info("falling back to HCS for property type queries") - - hcsProperties, err := computeSystem.hcsPropertiesV2Query(ctx, fallbackTypes) - if err != nil { - return nil, err - } - - // Now add in anything that we might have successfully queried in process. - if properties.Statistics != nil { - hcsProperties.Statistics = properties.Statistics - hcsProperties.Owner = properties.Owner - } - - // For future support for querying processlist in-proc as well. - if properties.ProcessList != nil { - hcsProperties.ProcessList = properties.ProcessList - } - - return hcsProperties, nil + return properties, nil } // Pause pauses the execution of the computeSystem. This feature is not enabled in TP5. diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go index 84b368218..591a2631e 100644 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go +++ b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go @@ -21,11 +21,10 @@ const ( ) type NatPolicy struct { - Type PolicyType `json:"Type"` - Protocol string `json:",omitempty"` - InternalPort uint16 `json:",omitempty"` - ExternalPort uint16 `json:",omitempty"` - ExternalPortReserved bool `json:",omitempty"` + Type PolicyType `json:"Type"` + Protocol string `json:",omitempty"` + InternalPort uint16 `json:",omitempty"` + ExternalPort uint16 `json:",omitempty"` } type QosPolicy struct { diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go deleted file mode 100644 index 3d640ac7b..000000000 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go +++ /dev/null @@ -1,111 +0,0 @@ -package jobobject - -import ( - "context" - "fmt" - "sync" - "unsafe" - - "github.com/Microsoft/hcsshim/internal/log" - "github.com/Microsoft/hcsshim/internal/queue" - "github.com/Microsoft/hcsshim/internal/winapi" - "github.com/sirupsen/logrus" - "golang.org/x/sys/windows" -) - -var ( - ioInitOnce sync.Once - initIOErr error - // Global iocp handle that will be re-used for every job object - ioCompletionPort windows.Handle - // Mapping of job handle to queue to place notifications in. - jobMap sync.Map -) - -// MsgAllProcessesExited is a type representing a message that every process in a job has exited. -type MsgAllProcessesExited struct{} - -// MsgUnimplemented represents a message that we are aware of, but that isn't implemented currently. -// This should not be treated as an error. -type MsgUnimplemented struct{} - -// pollIOCP polls the io completion port forever. -func pollIOCP(ctx context.Context, iocpHandle windows.Handle) { - var ( - overlapped uintptr - code uint32 - key uintptr - ) - - for { - err := windows.GetQueuedCompletionStatus(iocpHandle, &code, &key, (**windows.Overlapped)(unsafe.Pointer(&overlapped)), windows.INFINITE) - if err != nil { - log.G(ctx).WithError(err).Error("failed to poll for job object message") - continue - } - if val, ok := jobMap.Load(key); ok { - msq, ok := val.(*queue.MessageQueue) - if !ok { - log.G(ctx).WithField("value", msq).Warn("encountered non queue type in job map") - continue - } - notification, err := parseMessage(code, overlapped) - if err != nil { - log.G(ctx).WithFields(logrus.Fields{ - "code": code, - "overlapped": overlapped, - }).Warn("failed to parse job object message") - continue - } - if err := msq.Write(notification); err == queue.ErrQueueClosed { - // Write will only return an error when the queue is closed. - // The only time a queue would ever be closed is when we call `Close` on - // the job it belongs to which also removes it from the jobMap, so something - // went wrong here. We can't return as this is reading messages for all jobs - // so just log it and move on. - log.G(ctx).WithFields(logrus.Fields{ - "code": code, - "overlapped": overlapped, - }).Warn("tried to write to a closed queue") - continue - } - } else { - log.G(ctx).Warn("received a message for a job not present in the mapping") - } - } -} - -func parseMessage(code uint32, overlapped uintptr) (interface{}, error) { - // Check code and parse out relevant information related to that notification - // that we care about. For now all we handle is the message that all processes - // in the job have exited. - switch code { - case winapi.JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO: - return MsgAllProcessesExited{}, nil - // Other messages for completeness and a check to make sure that if we fall - // into the default case that this is a code we don't know how to handle. - case winapi.JOB_OBJECT_MSG_END_OF_JOB_TIME: - case winapi.JOB_OBJECT_MSG_END_OF_PROCESS_TIME: - case winapi.JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT: - case winapi.JOB_OBJECT_MSG_NEW_PROCESS: - case winapi.JOB_OBJECT_MSG_EXIT_PROCESS: - case winapi.JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS: - case winapi.JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT: - case winapi.JOB_OBJECT_MSG_JOB_MEMORY_LIMIT: - case winapi.JOB_OBJECT_MSG_NOTIFICATION_LIMIT: - default: - return nil, fmt.Errorf("unknown job notification type: %d", code) - } - return MsgUnimplemented{}, nil -} - -// Assigns an IO completion port to get notified of events for the registered job -// object. -func attachIOCP(job windows.Handle, iocp windows.Handle) error { - info := winapi.JOBOBJECT_ASSOCIATE_COMPLETION_PORT{ - CompletionKey: job, - CompletionPort: iocp, - } - _, err := windows.SetInformationJobObject(job, windows.JobObjectAssociateCompletionPortInformation, uintptr(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info))) - return err -} diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go deleted file mode 100644 index 9c2726416..000000000 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go +++ /dev/null @@ -1,499 +0,0 @@ -package jobobject - -import ( - "context" - "errors" - "fmt" - "sync" - "unsafe" - - "github.com/Microsoft/hcsshim/internal/queue" - "github.com/Microsoft/hcsshim/internal/winapi" - "golang.org/x/sys/windows" -) - -// This file provides higher level constructs for the win32 job object API. -// Most of the core creation and management functions are already present in "golang.org/x/sys/windows" -// (CreateJobObject, AssignProcessToJobObject, etc.) as well as most of the limit information -// structs and associated limit flags. Whatever is not present from the job object API -// in golang.org/x/sys/windows is located in /internal/winapi. -// -// https://docs.microsoft.com/en-us/windows/win32/procthread/job-objects - -// JobObject is a high level wrapper around a Windows job object. Holds a handle to -// the job, a queue to receive iocp notifications about the lifecycle -// of the job and a mutex for synchronized handle access. -type JobObject struct { - handle windows.Handle - mq *queue.MessageQueue - handleLock sync.RWMutex -} - -// JobLimits represents the resource constraints that can be applied to a job object. -type JobLimits struct { - CPULimit uint32 - CPUWeight uint32 - MemoryLimitInBytes uint64 - MaxIOPS int64 - MaxBandwidth int64 -} - -type CPURateControlType uint32 - -const ( - WeightBased CPURateControlType = iota - RateBased -) - -// Processor resource controls -const ( - cpuLimitMin = 1 - cpuLimitMax = 10000 - cpuWeightMin = 1 - cpuWeightMax = 9 -) - -var ( - ErrAlreadyClosed = errors.New("the handle has already been closed") - ErrNotRegistered = errors.New("job is not registered to receive notifications") -) - -// Options represents the set of configurable options when making or opening a job object. -type Options struct { - // `Name` specifies the name of the job object if a named job object is desired. - Name string - // `Notifications` specifies if the job will be registered to receive notifications. - // Defaults to false. - Notifications bool - // `UseNTVariant` specifies if we should use the `Nt` variant of Open/CreateJobObject. - // Defaults to false. - UseNTVariant bool -} - -// Create creates a job object. -// -// If options.Name is an empty string, the job will not be assigned a name. -// -// If options.Notifications are not enabled `PollNotifications` will return immediately with error `errNotRegistered`. -// -// If `options` is nil, use default option values. -// -// Returns a JobObject structure and an error if there is one. -func Create(ctx context.Context, options *Options) (_ *JobObject, err error) { - if options == nil { - options = &Options{} - } - - var jobName *winapi.UnicodeString - if options.Name != "" { - jobName, err = winapi.NewUnicodeString(options.Name) - if err != nil { - return nil, err - } - } - - var jobHandle windows.Handle - if options.UseNTVariant { - oa := winapi.ObjectAttributes{ - Length: unsafe.Sizeof(winapi.ObjectAttributes{}), - ObjectName: jobName, - Attributes: 0, - } - status := winapi.NtCreateJobObject(&jobHandle, winapi.JOB_OBJECT_ALL_ACCESS, &oa) - if status != 0 { - return nil, winapi.RtlNtStatusToDosError(status) - } - } else { - var jobNameBuf *uint16 - if jobName != nil && jobName.Buffer != nil { - jobNameBuf = jobName.Buffer - } - jobHandle, err = windows.CreateJobObject(nil, jobNameBuf) - if err != nil { - return nil, err - } - } - - defer func() { - if err != nil { - windows.Close(jobHandle) - } - }() - - job := &JobObject{ - handle: jobHandle, - } - - // If the IOCP we'll be using to receive messages for all jobs hasn't been - // created, create it and start polling. - if options.Notifications { - mq, err := setupNotifications(ctx, job) - if err != nil { - return nil, err - } - job.mq = mq - } - - return job, nil -} - -// Open opens an existing job object with name provided in `options`. If no name is provided -// return an error since we need to know what job object to open. -// -// If options.Notifications is false `PollNotifications` will return immediately with error `errNotRegistered`. -// -// Returns a JobObject structure and an error if there is one. -func Open(ctx context.Context, options *Options) (_ *JobObject, err error) { - if options == nil || (options != nil && options.Name == "") { - return nil, errors.New("no job object name specified to open") - } - - unicodeJobName, err := winapi.NewUnicodeString(options.Name) - if err != nil { - return nil, err - } - - var jobHandle windows.Handle - if options != nil && options.UseNTVariant { - oa := winapi.ObjectAttributes{ - Length: unsafe.Sizeof(winapi.ObjectAttributes{}), - ObjectName: unicodeJobName, - Attributes: 0, - } - status := winapi.NtOpenJobObject(&jobHandle, winapi.JOB_OBJECT_ALL_ACCESS, &oa) - if status != 0 { - return nil, winapi.RtlNtStatusToDosError(status) - } - } else { - jobHandle, err = winapi.OpenJobObject(winapi.JOB_OBJECT_ALL_ACCESS, false, unicodeJobName.Buffer) - if err != nil { - return nil, err - } - } - - defer func() { - if err != nil { - windows.Close(jobHandle) - } - }() - - job := &JobObject{ - handle: jobHandle, - } - - // If the IOCP we'll be using to receive messages for all jobs hasn't been - // created, create it and start polling. - if options != nil && options.Notifications { - mq, err := setupNotifications(ctx, job) - if err != nil { - return nil, err - } - job.mq = mq - } - - return job, nil -} - -// helper function to setup notifications for creating/opening a job object -func setupNotifications(ctx context.Context, job *JobObject) (*queue.MessageQueue, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - ioInitOnce.Do(func() { - h, err := windows.CreateIoCompletionPort(windows.InvalidHandle, 0, 0, 0xffffffff) - if err != nil { - initIOErr = err - return - } - ioCompletionPort = h - go pollIOCP(ctx, h) - }) - - if initIOErr != nil { - return nil, initIOErr - } - - mq := queue.NewMessageQueue() - jobMap.Store(uintptr(job.handle), mq) - if err := attachIOCP(job.handle, ioCompletionPort); err != nil { - jobMap.Delete(uintptr(job.handle)) - return nil, fmt.Errorf("failed to attach job to IO completion port: %w", err) - } - return mq, nil -} - -// PollNotification will poll for a job object notification. This call should only be called once -// per job (ideally in a goroutine loop) and will block if there is not a notification ready. -// This call will return immediately with error `ErrNotRegistered` if the job was not registered -// to receive notifications during `Create`. Internally, messages will be queued and there -// is no worry of messages being dropped. -func (job *JobObject) PollNotification() (interface{}, error) { - if job.mq == nil { - return nil, ErrNotRegistered - } - return job.mq.ReadOrWait() -} - -// UpdateProcThreadAttribute updates the passed in ProcThreadAttributeList to contain what is necessary to -// launch a process in a job at creation time. This can be used to avoid having to call Assign() after a process -// has already started running. -func (job *JobObject) UpdateProcThreadAttribute(attrList *windows.ProcThreadAttributeListContainer) error { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return ErrAlreadyClosed - } - - if err := attrList.Update( - winapi.PROC_THREAD_ATTRIBUTE_JOB_LIST, - unsafe.Pointer(&job.handle), - unsafe.Sizeof(job.handle), - ); err != nil { - return fmt.Errorf("failed to update proc thread attributes for job object: %w", err) - } - - return nil -} - -// Close closes the job object handle. -func (job *JobObject) Close() error { - job.handleLock.Lock() - defer job.handleLock.Unlock() - - if job.handle == 0 { - return ErrAlreadyClosed - } - - if err := windows.Close(job.handle); err != nil { - return err - } - - if job.mq != nil { - job.mq.Close() - } - // Handles now invalid so if the map entry to receive notifications for this job still - // exists remove it so we can stop receiving notifications. - if _, ok := jobMap.Load(uintptr(job.handle)); ok { - jobMap.Delete(uintptr(job.handle)) - } - - job.handle = 0 - return nil -} - -// Assign assigns a process to the job object. -func (job *JobObject) Assign(pid uint32) error { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return ErrAlreadyClosed - } - - if pid == 0 { - return errors.New("invalid pid: 0") - } - hProc, err := windows.OpenProcess(winapi.PROCESS_ALL_ACCESS, true, pid) - if err != nil { - return err - } - defer windows.Close(hProc) - return windows.AssignProcessToJobObject(job.handle, hProc) -} - -// Terminate terminates the job, essentially calls TerminateProcess on every process in the -// job. -func (job *JobObject) Terminate(exitCode uint32) error { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - if job.handle == 0 { - return ErrAlreadyClosed - } - return windows.TerminateJobObject(job.handle, exitCode) -} - -// Pids returns all of the process IDs in the job object. -func (job *JobObject) Pids() ([]uint32, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - info := winapi.JOBOBJECT_BASIC_PROCESS_ID_LIST{} - err := winapi.QueryInformationJobObject( - job.handle, - winapi.JobObjectBasicProcessIdList, - uintptr(unsafe.Pointer(&info)), - uint32(unsafe.Sizeof(info)), - nil, - ) - - // This is either the case where there is only one process or no processes in - // the job. Any other case will result in ERROR_MORE_DATA. Check if info.NumberOfProcessIdsInList - // is 1 and just return this, otherwise return an empty slice. - if err == nil { - if info.NumberOfProcessIdsInList == 1 { - return []uint32{uint32(info.ProcessIdList[0])}, nil - } - // Return empty slice instead of nil to play well with the caller of this. - // Do not return an error if no processes are running inside the job - return []uint32{}, nil - } - - if err != winapi.ERROR_MORE_DATA { - return nil, fmt.Errorf("failed initial query for PIDs in job object: %w", err) - } - - jobBasicProcessIDListSize := unsafe.Sizeof(info) + (unsafe.Sizeof(info.ProcessIdList[0]) * uintptr(info.NumberOfAssignedProcesses-1)) - buf := make([]byte, jobBasicProcessIDListSize) - if err = winapi.QueryInformationJobObject( - job.handle, - winapi.JobObjectBasicProcessIdList, - uintptr(unsafe.Pointer(&buf[0])), - uint32(len(buf)), - nil, - ); err != nil { - return nil, fmt.Errorf("failed to query for PIDs in job object: %w", err) - } - - bufInfo := (*winapi.JOBOBJECT_BASIC_PROCESS_ID_LIST)(unsafe.Pointer(&buf[0])) - pids := make([]uint32, bufInfo.NumberOfProcessIdsInList) - for i, bufPid := range bufInfo.AllPids() { - pids[i] = uint32(bufPid) - } - return pids, nil -} - -// QueryMemoryStats gets the memory stats for the job object. -func (job *JobObject) QueryMemoryStats() (*winapi.JOBOBJECT_MEMORY_USAGE_INFORMATION, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - info := winapi.JOBOBJECT_MEMORY_USAGE_INFORMATION{} - if err := winapi.QueryInformationJobObject( - job.handle, - winapi.JobObjectMemoryUsageInformation, - uintptr(unsafe.Pointer(&info)), - uint32(unsafe.Sizeof(info)), - nil, - ); err != nil { - return nil, fmt.Errorf("failed to query for job object memory stats: %w", err) - } - return &info, nil -} - -// QueryProcessorStats gets the processor stats for the job object. -func (job *JobObject) QueryProcessorStats() (*winapi.JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - info := winapi.JOBOBJECT_BASIC_ACCOUNTING_INFORMATION{} - if err := winapi.QueryInformationJobObject( - job.handle, - winapi.JobObjectBasicAccountingInformation, - uintptr(unsafe.Pointer(&info)), - uint32(unsafe.Sizeof(info)), - nil, - ); err != nil { - return nil, fmt.Errorf("failed to query for job object process stats: %w", err) - } - return &info, nil -} - -// QueryStorageStats gets the storage (I/O) stats for the job object. -func (job *JobObject) QueryStorageStats() (*winapi.JOBOBJECT_IO_ATTRIBUTION_INFORMATION, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - info := winapi.JOBOBJECT_IO_ATTRIBUTION_INFORMATION{ - ControlFlags: winapi.JOBOBJECT_IO_ATTRIBUTION_CONTROL_ENABLE, - } - if err := winapi.QueryInformationJobObject( - job.handle, - winapi.JobObjectIoAttribution, - uintptr(unsafe.Pointer(&info)), - uint32(unsafe.Sizeof(info)), - nil, - ); err != nil { - return nil, fmt.Errorf("failed to query for job object storage stats: %w", err) - } - return &info, nil -} - -// QueryPrivateWorkingSet returns the private working set size for the job. This is calculated by adding up the -// private working set for every process running in the job. -func (job *JobObject) QueryPrivateWorkingSet() (uint64, error) { - pids, err := job.Pids() - if err != nil { - return 0, err - } - - openAndQueryWorkingSet := func(pid uint32) (uint64, error) { - h, err := windows.OpenProcess(windows.PROCESS_QUERY_LIMITED_INFORMATION, false, pid) - if err != nil { - // Continue to the next if OpenProcess doesn't return a valid handle (fails). Handles a - // case where one of the pids in the job exited before we open. - return 0, nil - } - defer func() { - _ = windows.Close(h) - }() - // Check if the process is actually running in the job still. There's a small chance - // that the process could have exited and had its pid re-used between grabbing the pids - // in the job and opening the handle to it above. - var inJob int32 - if err := winapi.IsProcessInJob(h, job.handle, &inJob); err != nil { - // This shouldn't fail unless we have incorrect access rights which we control - // here so probably best to error out if this failed. - return 0, err - } - // Don't report stats for this process as it's not running in the job. This shouldn't be - // an error condition though. - if inJob == 0 { - return 0, nil - } - - var vmCounters winapi.VM_COUNTERS_EX2 - status := winapi.NtQueryInformationProcess( - h, - winapi.ProcessVmCounters, - uintptr(unsafe.Pointer(&vmCounters)), - uint32(unsafe.Sizeof(vmCounters)), - nil, - ) - if !winapi.NTSuccess(status) { - return 0, fmt.Errorf("failed to query information for process: %w", winapi.RtlNtStatusToDosError(status)) - } - return uint64(vmCounters.PrivateWorkingSetSize), nil - } - - var jobWorkingSetSize uint64 - for _, pid := range pids { - workingSet, err := openAndQueryWorkingSet(pid) - if err != nil { - return 0, err - } - jobWorkingSetSize += workingSet - } - - return jobWorkingSetSize, nil -} diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go deleted file mode 100644 index 4be297788..000000000 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go +++ /dev/null @@ -1,315 +0,0 @@ -package jobobject - -import ( - "errors" - "fmt" - "unsafe" - - "github.com/Microsoft/hcsshim/internal/winapi" - "golang.org/x/sys/windows" -) - -const ( - memoryLimitMax uint64 = 0xffffffffffffffff -) - -func isFlagSet(flag, controlFlags uint32) bool { - return (flag & controlFlags) == flag -} - -// SetResourceLimits sets resource limits on the job object (cpu, memory, storage). -func (job *JobObject) SetResourceLimits(limits *JobLimits) error { - // Go through and check what limits were specified and apply them to the job. - if limits.MemoryLimitInBytes != 0 { - if err := job.SetMemoryLimit(limits.MemoryLimitInBytes); err != nil { - return fmt.Errorf("failed to set job object memory limit: %w", err) - } - } - - if limits.CPULimit != 0 { - if err := job.SetCPULimit(RateBased, limits.CPULimit); err != nil { - return fmt.Errorf("failed to set job object cpu limit: %w", err) - } - } else if limits.CPUWeight != 0 { - if err := job.SetCPULimit(WeightBased, limits.CPUWeight); err != nil { - return fmt.Errorf("failed to set job object cpu limit: %w", err) - } - } - - if limits.MaxBandwidth != 0 || limits.MaxIOPS != 0 { - if err := job.SetIOLimit(limits.MaxBandwidth, limits.MaxIOPS); err != nil { - return fmt.Errorf("failed to set io limit on job object: %w", err) - } - } - return nil -} - -// SetTerminateOnLastHandleClose sets the job object flag that specifies that the job should terminate -// all processes in the job on the last open handle being closed. -func (job *JobObject) SetTerminateOnLastHandleClose() error { - info, err := job.getExtendedInformation() - if err != nil { - return err - } - info.BasicLimitInformation.LimitFlags |= windows.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE - return job.setExtendedInformation(info) -} - -// SetMemoryLimit sets the memory limit of the job object based on the given `memoryLimitInBytes`. -func (job *JobObject) SetMemoryLimit(memoryLimitInBytes uint64) error { - if memoryLimitInBytes >= memoryLimitMax { - return errors.New("memory limit specified exceeds the max size") - } - - info, err := job.getExtendedInformation() - if err != nil { - return err - } - - info.JobMemoryLimit = uintptr(memoryLimitInBytes) - info.BasicLimitInformation.LimitFlags |= windows.JOB_OBJECT_LIMIT_JOB_MEMORY - return job.setExtendedInformation(info) -} - -// GetMemoryLimit gets the memory limit in bytes of the job object. -func (job *JobObject) GetMemoryLimit() (uint64, error) { - info, err := job.getExtendedInformation() - if err != nil { - return 0, err - } - return uint64(info.JobMemoryLimit), nil -} - -// SetCPULimit sets the CPU limit depending on the specified `CPURateControlType` to -// `rateControlValue` for the job object. -func (job *JobObject) SetCPULimit(rateControlType CPURateControlType, rateControlValue uint32) error { - cpuInfo, err := job.getCPURateControlInformation() - if err != nil { - return err - } - switch rateControlType { - case WeightBased: - if rateControlValue < cpuWeightMin || rateControlValue > cpuWeightMax { - return fmt.Errorf("processor weight value of `%d` is invalid", rateControlValue) - } - cpuInfo.ControlFlags |= winapi.JOB_OBJECT_CPU_RATE_CONTROL_ENABLE | winapi.JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED - cpuInfo.Value = rateControlValue - case RateBased: - if rateControlValue < cpuLimitMin || rateControlValue > cpuLimitMax { - return fmt.Errorf("processor rate of `%d` is invalid", rateControlValue) - } - cpuInfo.ControlFlags |= winapi.JOB_OBJECT_CPU_RATE_CONTROL_ENABLE | winapi.JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP - cpuInfo.Value = rateControlValue - default: - return errors.New("invalid job object cpu rate control type") - } - return job.setCPURateControlInfo(cpuInfo) -} - -// GetCPULimit gets the cpu limits for the job object. -// `rateControlType` is used to indicate what type of cpu limit to query for. -func (job *JobObject) GetCPULimit(rateControlType CPURateControlType) (uint32, error) { - info, err := job.getCPURateControlInformation() - if err != nil { - return 0, err - } - - if !isFlagSet(winapi.JOB_OBJECT_CPU_RATE_CONTROL_ENABLE, info.ControlFlags) { - return 0, errors.New("the job does not have cpu rate control enabled") - } - - switch rateControlType { - case WeightBased: - if !isFlagSet(winapi.JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED, info.ControlFlags) { - return 0, errors.New("cannot get cpu weight for job object without cpu weight option set") - } - case RateBased: - if !isFlagSet(winapi.JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP, info.ControlFlags) { - return 0, errors.New("cannot get cpu rate hard cap for job object without cpu rate hard cap option set") - } - default: - return 0, errors.New("invalid job object cpu rate control type") - } - return info.Value, nil -} - -// SetCPUAffinity sets the processor affinity for the job object. -// The affinity is passed in as a bitmask. -func (job *JobObject) SetCPUAffinity(affinityBitMask uint64) error { - info, err := job.getExtendedInformation() - if err != nil { - return err - } - info.BasicLimitInformation.LimitFlags |= uint32(windows.JOB_OBJECT_LIMIT_AFFINITY) - info.BasicLimitInformation.Affinity = uintptr(affinityBitMask) - return job.setExtendedInformation(info) -} - -// GetCPUAffinity gets the processor affinity for the job object. -// The returned affinity is a bitmask. -func (job *JobObject) GetCPUAffinity() (uint64, error) { - info, err := job.getExtendedInformation() - if err != nil { - return 0, err - } - return uint64(info.BasicLimitInformation.Affinity), nil -} - -// SetIOLimit sets the IO limits specified on the job object. -func (job *JobObject) SetIOLimit(maxBandwidth, maxIOPS int64) error { - ioInfo, err := job.getIOLimit() - if err != nil { - return err - } - ioInfo.ControlFlags |= winapi.JOB_OBJECT_IO_RATE_CONTROL_ENABLE - if maxBandwidth != 0 { - ioInfo.MaxBandwidth = maxBandwidth - } - if maxIOPS != 0 { - ioInfo.MaxIops = maxIOPS - } - return job.setIORateControlInfo(ioInfo) -} - -// GetIOMaxBandwidthLimit gets the max bandwidth for the job object. -func (job *JobObject) GetIOMaxBandwidthLimit() (int64, error) { - info, err := job.getIOLimit() - if err != nil { - return 0, err - } - return info.MaxBandwidth, nil -} - -// GetIOMaxIopsLimit gets the max iops for the job object. -func (job *JobObject) GetIOMaxIopsLimit() (int64, error) { - info, err := job.getIOLimit() - if err != nil { - return 0, err - } - return info.MaxIops, nil -} - -// Helper function for getting a job object's extended information. -func (job *JobObject) getExtendedInformation() (*windows.JOBOBJECT_EXTENDED_LIMIT_INFORMATION, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - info := windows.JOBOBJECT_EXTENDED_LIMIT_INFORMATION{} - if err := winapi.QueryInformationJobObject( - job.handle, - windows.JobObjectExtendedLimitInformation, - uintptr(unsafe.Pointer(&info)), - uint32(unsafe.Sizeof(info)), - nil, - ); err != nil { - return nil, fmt.Errorf("query %v returned error: %w", info, err) - } - return &info, nil -} - -// Helper function for getting a job object's CPU rate control information. -func (job *JobObject) getCPURateControlInformation() (*winapi.JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - info := winapi.JOBOBJECT_CPU_RATE_CONTROL_INFORMATION{} - if err := winapi.QueryInformationJobObject( - job.handle, - windows.JobObjectCpuRateControlInformation, - uintptr(unsafe.Pointer(&info)), - uint32(unsafe.Sizeof(info)), - nil, - ); err != nil { - return nil, fmt.Errorf("query %v returned error: %w", info, err) - } - return &info, nil -} - -// Helper function for setting a job object's extended information. -func (job *JobObject) setExtendedInformation(info *windows.JOBOBJECT_EXTENDED_LIMIT_INFORMATION) error { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return ErrAlreadyClosed - } - - if _, err := windows.SetInformationJobObject( - job.handle, - windows.JobObjectExtendedLimitInformation, - uintptr(unsafe.Pointer(info)), - uint32(unsafe.Sizeof(*info)), - ); err != nil { - return fmt.Errorf("failed to set Extended info %v on job object: %w", info, err) - } - return nil -} - -// Helper function for querying job handle for IO limit information. -func (job *JobObject) getIOLimit() (*winapi.JOBOBJECT_IO_RATE_CONTROL_INFORMATION, error) { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return nil, ErrAlreadyClosed - } - - ioInfo := &winapi.JOBOBJECT_IO_RATE_CONTROL_INFORMATION{} - var blockCount uint32 = 1 - - if _, err := winapi.QueryIoRateControlInformationJobObject( - job.handle, - nil, - &ioInfo, - &blockCount, - ); err != nil { - return nil, fmt.Errorf("query %v returned error: %w", ioInfo, err) - } - - if !isFlagSet(winapi.JOB_OBJECT_IO_RATE_CONTROL_ENABLE, ioInfo.ControlFlags) { - return nil, fmt.Errorf("query %v cannot get IO limits for job object without IO rate control option set", ioInfo) - } - return ioInfo, nil -} - -// Helper function for setting a job object's IO rate control information. -func (job *JobObject) setIORateControlInfo(ioInfo *winapi.JOBOBJECT_IO_RATE_CONTROL_INFORMATION) error { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return ErrAlreadyClosed - } - - if _, err := winapi.SetIoRateControlInformationJobObject(job.handle, ioInfo); err != nil { - return fmt.Errorf("failed to set IO limit info %v on job object: %w", ioInfo, err) - } - return nil -} - -// Helper function for setting a job object's CPU rate control information. -func (job *JobObject) setCPURateControlInfo(cpuInfo *winapi.JOBOBJECT_CPU_RATE_CONTROL_INFORMATION) error { - job.handleLock.RLock() - defer job.handleLock.RUnlock() - - if job.handle == 0 { - return ErrAlreadyClosed - } - if _, err := windows.SetInformationJobObject( - job.handle, - windows.JobObjectCpuRateControlInformation, - uintptr(unsafe.Pointer(cpuInfo)), - uint32(unsafe.Sizeof(cpuInfo)), - ); err != nil { - return fmt.Errorf("failed to set cpu limit info %v on job object: %w", cpuInfo, err) - } - return nil -} diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/queue/mq.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/queue/mq.go deleted file mode 100644 index e177c9a62..000000000 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/queue/mq.go +++ /dev/null @@ -1,111 +0,0 @@ -package queue - -import ( - "errors" - "sync" -) - -var ( - ErrQueueClosed = errors.New("the queue is closed for reading and writing") - ErrQueueEmpty = errors.New("the queue is empty") -) - -// MessageQueue represents a threadsafe message queue to be used to retrieve or -// write messages to. -type MessageQueue struct { - m *sync.RWMutex - c *sync.Cond - messages []interface{} - closed bool -} - -// NewMessageQueue returns a new MessageQueue. -func NewMessageQueue() *MessageQueue { - m := &sync.RWMutex{} - return &MessageQueue{ - m: m, - c: sync.NewCond(m), - messages: []interface{}{}, - } -} - -// Write writes `msg` to the queue. -func (mq *MessageQueue) Write(msg interface{}) error { - mq.m.Lock() - defer mq.m.Unlock() - - if mq.closed { - return ErrQueueClosed - } - mq.messages = append(mq.messages, msg) - // Signal a waiter that there is now a value available in the queue. - mq.c.Signal() - return nil -} - -// Read will read a value from the queue if available, otherwise return an error. -func (mq *MessageQueue) Read() (interface{}, error) { - mq.m.Lock() - defer mq.m.Unlock() - if mq.closed { - return nil, ErrQueueClosed - } - if mq.isEmpty() { - return nil, ErrQueueEmpty - } - val := mq.messages[0] - mq.messages[0] = nil - mq.messages = mq.messages[1:] - return val, nil -} - -// ReadOrWait will read a value from the queue if available, else it will wait for a -// value to become available. This will block forever if nothing gets written or until -// the queue gets closed. -func (mq *MessageQueue) ReadOrWait() (interface{}, error) { - mq.m.Lock() - if mq.closed { - mq.m.Unlock() - return nil, ErrQueueClosed - } - if mq.isEmpty() { - for !mq.closed && mq.isEmpty() { - mq.c.Wait() - } - mq.m.Unlock() - return mq.Read() - } - val := mq.messages[0] - mq.messages[0] = nil - mq.messages = mq.messages[1:] - mq.m.Unlock() - return val, nil -} - -// IsEmpty returns if the queue is empty -func (mq *MessageQueue) IsEmpty() bool { - mq.m.RLock() - defer mq.m.RUnlock() - return len(mq.messages) == 0 -} - -// Nonexported empty check that doesn't lock so we can call this in Read and Write. -func (mq *MessageQueue) isEmpty() bool { - return len(mq.messages) == 0 -} - -// Close closes the queue for future writes or reads. Any attempts to read or write from the -// queue after close will return ErrQueueClosed. This is safe to call multiple times. -func (mq *MessageQueue) Close() { - mq.m.Lock() - defer mq.m.Unlock() - // Already closed - if mq.closed { - return - } - mq.messages = nil - mq.closed = true - // If there's anybody currently waiting on a value from ReadOrWait, we need to - // broadcast so the read(s) can return ErrQueueClosed. - mq.c.Broadcast() -} diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/iocp.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/iocp.go new file mode 100644 index 000000000..4e609cbf1 --- /dev/null +++ b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/iocp.go @@ -0,0 +1,3 @@ +package winapi + +//sys GetQueuedCompletionStatus(cphandle windows.Handle, qty *uint32, key *uintptr, overlapped **windows.Overlapped, timeout uint32) (err error) diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/jobobject.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/jobobject.go index 479649db3..ba12b1ad9 100644 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/jobobject.go +++ b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/jobobject.go @@ -24,10 +24,7 @@ const ( // Access rights for creating or opening job objects. // // https://docs.microsoft.com/en-us/windows/win32/procthread/job-object-security-and-access-rights -const ( - JOB_OBJECT_QUERY = 0x0004 - JOB_OBJECT_ALL_ACCESS = 0x1F001F -) +const JOB_OBJECT_ALL_ACCESS = 0x1F001F // IO limit flags // @@ -96,7 +93,7 @@ type JOBOBJECT_BASIC_PROCESS_ID_LIST struct { // AllPids returns all the process Ids in the job object. func (p *JOBOBJECT_BASIC_PROCESS_ID_LIST) AllPids() []uintptr { - return (*[(1 << 27) - 1]uintptr)(unsafe.Pointer(&p.ProcessIdList[0]))[:p.NumberOfProcessIdsInList:p.NumberOfProcessIdsInList] + return (*[(1 << 27) - 1]uintptr)(unsafe.Pointer(&p.ProcessIdList[0]))[:p.NumberOfProcessIdsInList] } // https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_accounting_information @@ -165,7 +162,7 @@ type JOBOBJECT_ASSOCIATE_COMPLETION_PORT struct { // PBOOL Result // ); // -//sys IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) = kernel32.IsProcessInJob +//sys IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *bool) (err error) = kernel32.IsProcessInJob // BOOL QueryInformationJobObject( // HANDLE hJob, diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/process.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/process.go index 5f9e03fd2..37839435b 100644 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/process.go +++ b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/process.go @@ -6,60 +6,3 @@ const ( PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = 0x20016 PROC_THREAD_ATTRIBUTE_JOB_LIST = 0x2000D ) - -// ProcessVmCounters corresponds to the _VM_COUNTERS_EX and _VM_COUNTERS_EX2 structures. -const ProcessVmCounters = 3 - -// __kernel_entry NTSTATUS NtQueryInformationProcess( -// [in] HANDLE ProcessHandle, -// [in] PROCESSINFOCLASS ProcessInformationClass, -// [out] PVOID ProcessInformation, -// [in] ULONG ProcessInformationLength, -// [out, optional] PULONG ReturnLength -// ); -// -//sys NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo uintptr, processInfoLength uint32, returnLength *uint32) (status uint32) = ntdll.NtQueryInformationProcess - -// typedef struct _VM_COUNTERS_EX -// { -// SIZE_T PeakVirtualSize; -// SIZE_T VirtualSize; -// ULONG PageFaultCount; -// SIZE_T PeakWorkingSetSize; -// SIZE_T WorkingSetSize; -// SIZE_T QuotaPeakPagedPoolUsage; -// SIZE_T QuotaPagedPoolUsage; -// SIZE_T QuotaPeakNonPagedPoolUsage; -// SIZE_T QuotaNonPagedPoolUsage; -// SIZE_T PagefileUsage; -// SIZE_T PeakPagefileUsage; -// SIZE_T PrivateUsage; -// } VM_COUNTERS_EX, *PVM_COUNTERS_EX; -// -type VM_COUNTERS_EX struct { - PeakVirtualSize uintptr - VirtualSize uintptr - PageFaultCount uint32 - PeakWorkingSetSize uintptr - WorkingSetSize uintptr - QuotaPeakPagedPoolUsage uintptr - QuotaPagedPoolUsage uintptr - QuotaPeakNonPagedPoolUsage uintptr - QuotaNonPagedPoolUsage uintptr - PagefileUsage uintptr - PeakPagefileUsage uintptr - PrivateUsage uintptr -} - -// typedef struct _VM_COUNTERS_EX2 -// { -// VM_COUNTERS_EX CountersEx; -// SIZE_T PrivateWorkingSetSize; -// SIZE_T SharedCommitUsage; -// } VM_COUNTERS_EX2, *PVM_COUNTERS_EX2; -// -type VM_COUNTERS_EX2 struct { - CountersEx VM_COUNTERS_EX - PrivateWorkingSetSize uintptr - SharedCommitUsage uintptr -} diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/winapi.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/winapi.go index d2cc9d9fb..1d4ba3c4f 100644 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/winapi.go +++ b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/winapi.go @@ -2,4 +2,4 @@ // be thought of as an extension to golang.org/x/sys/windows. package winapi -//go:generate go run ..\..\mksyscall_windows.go -output zsyscall_windows.go user.go console.go system.go net.go path.go thread.go jobobject.go logon.go memory.go process.go processor.go devices.go filesystem.go errors.go +//go:generate go run ..\..\mksyscall_windows.go -output zsyscall_windows.go console.go system.go net.go path.go thread.go iocp.go jobobject.go logon.go memory.go process.go processor.go devices.go filesystem.go errors.go diff --git a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go index 39fb3e1ad..4eb64b4c0 100644 --- a/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go +++ b/src/runtime/vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go @@ -50,6 +50,7 @@ var ( procSetJobCompartmentId = modiphlpapi.NewProc("SetJobCompartmentId") procSearchPathW = modkernel32.NewProc("SearchPathW") procCreateRemoteThread = modkernel32.NewProc("CreateRemoteThread") + procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") procIsProcessInJob = modkernel32.NewProc("IsProcessInJob") procQueryInformationJobObject = modkernel32.NewProc("QueryInformationJobObject") procOpenJobObjectW = modkernel32.NewProc("OpenJobObjectW") @@ -60,7 +61,6 @@ var ( procLogonUserW = modadvapi32.NewProc("LogonUserW") procLocalAlloc = modkernel32.NewProc("LocalAlloc") procLocalFree = modkernel32.NewProc("LocalFree") - procNtQueryInformationProcess = modntdll.NewProc("NtQueryInformationProcess") procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount") procCM_Get_Device_ID_List_SizeA = modcfgmgr32.NewProc("CM_Get_Device_ID_List_SizeA") procCM_Get_Device_ID_ListA = modcfgmgr32.NewProc("CM_Get_Device_ID_ListA") @@ -140,7 +140,19 @@ func CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes, return } -func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) { +func GetQueuedCompletionStatus(cphandle windows.Handle, qty *uint32, key *uintptr, overlapped **windows.Overlapped, timeout uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *bool) (err error) { r1, _, e1 := syscall.Syscall(procIsProcessInJob.Addr(), 3, uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result))) if r1 == 0 { if e1 != 0 { @@ -244,12 +256,6 @@ func LocalFree(ptr uintptr) { return } -func NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo uintptr, processInfoLength uint32, returnLength *uint32) (status uint32) { - r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(processHandle), uintptr(processInfoClass), uintptr(processInfo), uintptr(processInfoLength), uintptr(unsafe.Pointer(returnLength)), 0) - status = uint32(r0) - return -} - func GetActiveProcessorCount(groupNumber uint16) (amount uint32) { r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) amount = uint32(r0) diff --git a/src/runtime/vendor/github.com/cilium/ebpf/.gitignore b/src/runtime/vendor/github.com/cilium/ebpf/.gitignore index b46162b8e..38b15653c 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/.gitignore +++ b/src/runtime/vendor/github.com/cilium/ebpf/.gitignore @@ -5,7 +5,6 @@ *.so *.dylib *.o -!*_bpf*.o # Test binary, build with `go test -c` *.test diff --git a/src/runtime/vendor/github.com/cilium/ebpf/.golangci.yaml b/src/runtime/vendor/github.com/cilium/ebpf/.golangci.yaml index dc62dd6d0..a88374197 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/.golangci.yaml +++ b/src/runtime/vendor/github.com/cilium/ebpf/.golangci.yaml @@ -24,5 +24,6 @@ linters: # Could be enabled later: # - gocyclo + # - prealloc # - maligned # - gosec diff --git a/src/runtime/vendor/github.com/cilium/ebpf/ARCHITECTURE.md b/src/runtime/vendor/github.com/cilium/ebpf/ARCHITECTURE.md index 6cbb31b64..aee9c0a0d 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/ARCHITECTURE.md +++ b/src/runtime/vendor/github.com/cilium/ebpf/ARCHITECTURE.md @@ -57,7 +57,7 @@ Objects loading a spec will fail because the kernel is too old, or a feature is not enabled. There are multiple ways the library deals with that: -* Fallback: older kernels don't allow naming programs and maps. The library +* Fallback: older kernels don't allowing naming programs and maps. The library automatically detects support for names, and omits them during load if necessary. This works since name is primarily a debug aid. @@ -68,7 +68,7 @@ enabled. There are multiple ways the library deals with that: Once program and map objects are loaded they expose the kernel's low-level API, e.g. `NextKey`. Often this API is awkward to use in Go, so there are safer wrappers on top of the low-level API, like `MapIterator`. The low-level API is -useful when our higher-level API doesn't support a particular use case. +useful as an out when our higher-level API doesn't support a particular use case. Links --- diff --git a/src/runtime/vendor/github.com/cilium/ebpf/CONTRIBUTING.md b/src/runtime/vendor/github.com/cilium/ebpf/CONTRIBUTING.md index 0d29eae81..72ceb4378 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/CONTRIBUTING.md +++ b/src/runtime/vendor/github.com/cilium/ebpf/CONTRIBUTING.md @@ -6,8 +6,8 @@ are welcome. Please take a look at [the architecture](ARCHITECTURE.md) to get a better understanding for the high-level goals. New features must be accompanied by tests. Before starting work on any large -feature, please [join](https://ebpf.io/slack) the -[#ebpf-go](https://cilium.slack.com/messages/ebpf-go) channel on Slack to +feature, please [join](https://cilium.herokuapp.com/) the +[#libbpf-go](https://cilium.slack.com/messages/libbpf-go) channel on Slack to discuss the design first. When submitting pull requests, consider writing details about what problem you diff --git a/src/runtime/vendor/github.com/cilium/ebpf/Makefile b/src/runtime/vendor/github.com/cilium/ebpf/Makefile index 0bc15c081..5dd342c5b 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/Makefile +++ b/src/runtime/vendor/github.com/cilium/ebpf/Makefile @@ -18,14 +18,11 @@ TARGETS := \ testdata/loader-clang-7 \ testdata/loader-clang-9 \ testdata/loader-$(CLANG) \ - testdata/btf_map_init \ testdata/invalid_map \ testdata/raw_tracepoint \ testdata/invalid_map_static \ - testdata/invalid_btf_map_init \ + testdata/initialized_btf_map \ testdata/strings \ - testdata/freplace \ - testdata/iproute2_map_compat \ internal/btf/testdata/relocs .PHONY: all clean docker-all docker-shell diff --git a/src/runtime/vendor/github.com/cilium/ebpf/README.md b/src/runtime/vendor/github.com/cilium/ebpf/README.md index 01e2fff92..76c3c303b 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/README.md +++ b/src/runtime/vendor/github.com/cilium/ebpf/README.md @@ -2,16 +2,28 @@ [![PkgGoDev](https://pkg.go.dev/badge/github.com/cilium/ebpf)](https://pkg.go.dev/github.com/cilium/ebpf) -![HoneyGopher](.github/images/cilium-ebpf.png) - eBPF is a pure Go library that provides utilities for loading, compiling, and debugging eBPF programs. It has minimal external dependencies and is intended to be used in long running processes. -The library is maintained by [Cloudflare](https://www.cloudflare.com) and -[Cilium](https://www.cilium.io). +* [asm](https://pkg.go.dev/github.com/cilium/ebpf/asm) contains a basic + assembler +* [link](https://pkg.go.dev/github.com/cilium/ebpf/link) allows attaching eBPF + to various hooks +* [perf](https://pkg.go.dev/github.com/cilium/ebpf/perf) allows reading from a + `PERF_EVENT_ARRAY` +* [cmd/bpf2go](https://pkg.go.dev/github.com/cilium/ebpf/cmd/bpf2go) allows + compiling and embedding eBPF programs in Go code -See [ebpf.io](https://ebpf.io) for other projects from the eBPF ecosystem. +The library is maintained by [Cloudflare](https://www.cloudflare.com) and +[Cilium](https://www.cilium.io). Feel free to +[join](https://cilium.herokuapp.com/) the +[#libbpf-go](https://cilium.slack.com/messages/libbpf-go) channel on Slack. + +## Current status + +The package is production ready, but **the API is explicitly unstable right +now**. Expect to update your code if you want to follow along. ## Getting Started @@ -21,37 +33,21 @@ your own tools can be found under [examples/](examples/). Contributions are highly encouraged, as they highlight certain use cases of eBPF and the library, and help shape the future of the project. -## Getting Help - -Please -[join](https://ebpf.io/slack) the -[#ebpf-go](https://cilium.slack.com/messages/ebpf-go) channel on Slack if you -have questions regarding the library. - -## Packages - -This library includes the following packages: - -* [asm](https://pkg.go.dev/github.com/cilium/ebpf/asm) contains a basic - assembler, allowing you to write eBPF assembly instructions directly - within your Go code. (You don't need to use this if you prefer to write your eBPF program in C.) -* [cmd/bpf2go](https://pkg.go.dev/github.com/cilium/ebpf/cmd/bpf2go) allows - compiling and embedding eBPF programs written in C within Go code. As well as - compiling the C code, it auto-generates Go code for loading and manipulating - the eBPF program and map objects. -* [link](https://pkg.go.dev/github.com/cilium/ebpf/link) allows attaching eBPF - to various hooks -* [perf](https://pkg.go.dev/github.com/cilium/ebpf/perf) allows reading from a - `PERF_EVENT_ARRAY` -* [ringbuf](https://pkg.go.dev/github.com/cilium/ebpf/ringbuf) allows reading from a - `BPF_MAP_TYPE_RINGBUF` map - - ## Requirements * A version of Go that is [supported by upstream](https://golang.org/doc/devel/release.html#policy) -* Linux >= 4.9. CI is run against LTS releases. +* Linux 4.9, 4.19 or 5.4 (versions in-between should work, but are not tested) + +## Useful resources + +* [eBPF.io](https://ebpf.io) (recommended) +* [Cilium eBPF documentation](https://docs.cilium.io/en/latest/bpf/#bpf-guide) + (recommended) +* [Linux documentation on + BPF](https://www.kernel.org/doc/html/latest/networking/filter.html) +* [eBPF features by Linux + version](https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md) ## Regenerating Testdata @@ -64,7 +60,3 @@ The toolchain image build files are kept in [testdata/docker/](testdata/docker/) ## License MIT - -### eBPF Gopher - -The eBPF honeygopher is based on the Go gopher designed by Renee French. diff --git a/src/runtime/vendor/github.com/cilium/ebpf/asm/func.go b/src/runtime/vendor/github.com/cilium/ebpf/asm/func.go index bfa5d59c9..aee2c7ac8 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/asm/func.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/asm/func.go @@ -184,12 +184,6 @@ const ( FnKtimeGetCoarseNs FnImaInodeHash FnSockFromFile - FnCheckMtu - FnForEachMapElem - FnSnprintf - FnSysBpf - FnBtfFindByNameKind - FnSysClose ) // Call emits a function call. diff --git a/src/runtime/vendor/github.com/cilium/ebpf/asm/func_string.go b/src/runtime/vendor/github.com/cilium/ebpf/asm/func_string.go index 5a0e33363..a712c5da8 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/asm/func_string.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/asm/func_string.go @@ -171,17 +171,11 @@ func _() { _ = x[FnKtimeGetCoarseNs-160] _ = x[FnImaInodeHash-161] _ = x[FnSockFromFile-162] - _ = x[FnCheckMtu-163] - _ = x[FnForEachMapElem-164] - _ = x[FnSnprintf-165] - _ = x[FnSysBpf-166] - _ = x[FnBtfFindByNameKind-167] - _ = x[FnSysClose-168] } -const _BuiltinFunc_name = "FnUnspecFnMapLookupElemFnMapUpdateElemFnMapDeleteElemFnProbeReadFnKtimeGetNsFnTracePrintkFnGetPrandomU32FnGetSmpProcessorIdFnSkbStoreBytesFnL3CsumReplaceFnL4CsumReplaceFnTailCallFnCloneRedirectFnGetCurrentPidTgidFnGetCurrentUidGidFnGetCurrentCommFnGetCgroupClassidFnSkbVlanPushFnSkbVlanPopFnSkbGetTunnelKeyFnSkbSetTunnelKeyFnPerfEventReadFnRedirectFnGetRouteRealmFnPerfEventOutputFnSkbLoadBytesFnGetStackidFnCsumDiffFnSkbGetTunnelOptFnSkbSetTunnelOptFnSkbChangeProtoFnSkbChangeTypeFnSkbUnderCgroupFnGetHashRecalcFnGetCurrentTaskFnProbeWriteUserFnCurrentTaskUnderCgroupFnSkbChangeTailFnSkbPullDataFnCsumUpdateFnSetHashInvalidFnGetNumaNodeIdFnSkbChangeHeadFnXdpAdjustHeadFnProbeReadStrFnGetSocketCookieFnGetSocketUidFnSetHashFnSetsockoptFnSkbAdjustRoomFnRedirectMapFnSkRedirectMapFnSockMapUpdateFnXdpAdjustMetaFnPerfEventReadValueFnPerfProgReadValueFnGetsockoptFnOverrideReturnFnSockOpsCbFlagsSetFnMsgRedirectMapFnMsgApplyBytesFnMsgCorkBytesFnMsgPullDataFnBindFnXdpAdjustTailFnSkbGetXfrmStateFnGetStackFnSkbLoadBytesRelativeFnFibLookupFnSockHashUpdateFnMsgRedirectHashFnSkRedirectHashFnLwtPushEncapFnLwtSeg6StoreBytesFnLwtSeg6AdjustSrhFnLwtSeg6ActionFnRcRepeatFnRcKeydownFnSkbCgroupIdFnGetCurrentCgroupIdFnGetLocalStorageFnSkSelectReuseportFnSkbAncestorCgroupIdFnSkLookupTcpFnSkLookupUdpFnSkReleaseFnMapPushElemFnMapPopElemFnMapPeekElemFnMsgPushDataFnMsgPopDataFnRcPointerRelFnSpinLockFnSpinUnlockFnSkFullsockFnTcpSockFnSkbEcnSetCeFnGetListenerSockFnSkcLookupTcpFnTcpCheckSyncookieFnSysctlGetNameFnSysctlGetCurrentValueFnSysctlGetNewValueFnSysctlSetNewValueFnStrtolFnStrtoulFnSkStorageGetFnSkStorageDeleteFnSendSignalFnTcpGenSyncookieFnSkbOutputFnProbeReadUserFnProbeReadKernelFnProbeReadUserStrFnProbeReadKernelStrFnTcpSendAckFnSendSignalThreadFnJiffies64FnReadBranchRecordsFnGetNsCurrentPidTgidFnXdpOutputFnGetNetnsCookieFnGetCurrentAncestorCgroupIdFnSkAssignFnKtimeGetBootNsFnSeqPrintfFnSeqWriteFnSkCgroupIdFnSkAncestorCgroupIdFnRingbufOutputFnRingbufReserveFnRingbufSubmitFnRingbufDiscardFnRingbufQueryFnCsumLevelFnSkcToTcp6SockFnSkcToTcpSockFnSkcToTcpTimewaitSockFnSkcToTcpRequestSockFnSkcToUdp6SockFnGetTaskStackFnLoadHdrOptFnStoreHdrOptFnReserveHdrOptFnInodeStorageGetFnInodeStorageDeleteFnDPathFnCopyFromUserFnSnprintfBtfFnSeqPrintfBtfFnSkbCgroupClassidFnRedirectNeighFnPerCpuPtrFnThisCpuPtrFnRedirectPeerFnTaskStorageGetFnTaskStorageDeleteFnGetCurrentTaskBtfFnBprmOptsSetFnKtimeGetCoarseNsFnImaInodeHashFnSockFromFileFnCheckMtuFnForEachMapElemFnSnprintfFnSysBpfFnBtfFindByNameKindFnSysClose" +const _BuiltinFunc_name = "FnUnspecFnMapLookupElemFnMapUpdateElemFnMapDeleteElemFnProbeReadFnKtimeGetNsFnTracePrintkFnGetPrandomU32FnGetSmpProcessorIdFnSkbStoreBytesFnL3CsumReplaceFnL4CsumReplaceFnTailCallFnCloneRedirectFnGetCurrentPidTgidFnGetCurrentUidGidFnGetCurrentCommFnGetCgroupClassidFnSkbVlanPushFnSkbVlanPopFnSkbGetTunnelKeyFnSkbSetTunnelKeyFnPerfEventReadFnRedirectFnGetRouteRealmFnPerfEventOutputFnSkbLoadBytesFnGetStackidFnCsumDiffFnSkbGetTunnelOptFnSkbSetTunnelOptFnSkbChangeProtoFnSkbChangeTypeFnSkbUnderCgroupFnGetHashRecalcFnGetCurrentTaskFnProbeWriteUserFnCurrentTaskUnderCgroupFnSkbChangeTailFnSkbPullDataFnCsumUpdateFnSetHashInvalidFnGetNumaNodeIdFnSkbChangeHeadFnXdpAdjustHeadFnProbeReadStrFnGetSocketCookieFnGetSocketUidFnSetHashFnSetsockoptFnSkbAdjustRoomFnRedirectMapFnSkRedirectMapFnSockMapUpdateFnXdpAdjustMetaFnPerfEventReadValueFnPerfProgReadValueFnGetsockoptFnOverrideReturnFnSockOpsCbFlagsSetFnMsgRedirectMapFnMsgApplyBytesFnMsgCorkBytesFnMsgPullDataFnBindFnXdpAdjustTailFnSkbGetXfrmStateFnGetStackFnSkbLoadBytesRelativeFnFibLookupFnSockHashUpdateFnMsgRedirectHashFnSkRedirectHashFnLwtPushEncapFnLwtSeg6StoreBytesFnLwtSeg6AdjustSrhFnLwtSeg6ActionFnRcRepeatFnRcKeydownFnSkbCgroupIdFnGetCurrentCgroupIdFnGetLocalStorageFnSkSelectReuseportFnSkbAncestorCgroupIdFnSkLookupTcpFnSkLookupUdpFnSkReleaseFnMapPushElemFnMapPopElemFnMapPeekElemFnMsgPushDataFnMsgPopDataFnRcPointerRelFnSpinLockFnSpinUnlockFnSkFullsockFnTcpSockFnSkbEcnSetCeFnGetListenerSockFnSkcLookupTcpFnTcpCheckSyncookieFnSysctlGetNameFnSysctlGetCurrentValueFnSysctlGetNewValueFnSysctlSetNewValueFnStrtolFnStrtoulFnSkStorageGetFnSkStorageDeleteFnSendSignalFnTcpGenSyncookieFnSkbOutputFnProbeReadUserFnProbeReadKernelFnProbeReadUserStrFnProbeReadKernelStrFnTcpSendAckFnSendSignalThreadFnJiffies64FnReadBranchRecordsFnGetNsCurrentPidTgidFnXdpOutputFnGetNetnsCookieFnGetCurrentAncestorCgroupIdFnSkAssignFnKtimeGetBootNsFnSeqPrintfFnSeqWriteFnSkCgroupIdFnSkAncestorCgroupIdFnRingbufOutputFnRingbufReserveFnRingbufSubmitFnRingbufDiscardFnRingbufQueryFnCsumLevelFnSkcToTcp6SockFnSkcToTcpSockFnSkcToTcpTimewaitSockFnSkcToTcpRequestSockFnSkcToUdp6SockFnGetTaskStackFnLoadHdrOptFnStoreHdrOptFnReserveHdrOptFnInodeStorageGetFnInodeStorageDeleteFnDPathFnCopyFromUserFnSnprintfBtfFnSeqPrintfBtfFnSkbCgroupClassidFnRedirectNeighFnPerCpuPtrFnThisCpuPtrFnRedirectPeerFnTaskStorageGetFnTaskStorageDeleteFnGetCurrentTaskBtfFnBprmOptsSetFnKtimeGetCoarseNsFnImaInodeHashFnSockFromFile" -var _BuiltinFunc_index = [...]uint16{0, 8, 23, 38, 53, 64, 76, 89, 104, 123, 138, 153, 168, 178, 193, 212, 230, 246, 264, 277, 289, 306, 323, 338, 348, 363, 380, 394, 406, 416, 433, 450, 466, 481, 497, 512, 528, 544, 568, 583, 596, 608, 624, 639, 654, 669, 683, 700, 714, 723, 735, 750, 763, 778, 793, 808, 828, 847, 859, 875, 894, 910, 925, 939, 952, 958, 973, 990, 1000, 1022, 1033, 1049, 1066, 1082, 1096, 1115, 1133, 1148, 1158, 1169, 1182, 1202, 1219, 1238, 1259, 1272, 1285, 1296, 1309, 1321, 1334, 1347, 1359, 1373, 1383, 1395, 1407, 1416, 1429, 1446, 1460, 1479, 1494, 1517, 1536, 1555, 1563, 1572, 1586, 1603, 1615, 1632, 1643, 1658, 1675, 1693, 1713, 1725, 1743, 1754, 1773, 1794, 1805, 1821, 1849, 1859, 1875, 1886, 1896, 1908, 1928, 1943, 1959, 1974, 1990, 2004, 2015, 2030, 2044, 2066, 2087, 2102, 2116, 2128, 2141, 2156, 2173, 2193, 2200, 2214, 2227, 2241, 2259, 2274, 2285, 2297, 2311, 2327, 2346, 2365, 2378, 2396, 2410, 2424, 2434, 2450, 2460, 2468, 2487, 2497} +var _BuiltinFunc_index = [...]uint16{0, 8, 23, 38, 53, 64, 76, 89, 104, 123, 138, 153, 168, 178, 193, 212, 230, 246, 264, 277, 289, 306, 323, 338, 348, 363, 380, 394, 406, 416, 433, 450, 466, 481, 497, 512, 528, 544, 568, 583, 596, 608, 624, 639, 654, 669, 683, 700, 714, 723, 735, 750, 763, 778, 793, 808, 828, 847, 859, 875, 894, 910, 925, 939, 952, 958, 973, 990, 1000, 1022, 1033, 1049, 1066, 1082, 1096, 1115, 1133, 1148, 1158, 1169, 1182, 1202, 1219, 1238, 1259, 1272, 1285, 1296, 1309, 1321, 1334, 1347, 1359, 1373, 1383, 1395, 1407, 1416, 1429, 1446, 1460, 1479, 1494, 1517, 1536, 1555, 1563, 1572, 1586, 1603, 1615, 1632, 1643, 1658, 1675, 1693, 1713, 1725, 1743, 1754, 1773, 1794, 1805, 1821, 1849, 1859, 1875, 1886, 1896, 1908, 1928, 1943, 1959, 1974, 1990, 2004, 2015, 2030, 2044, 2066, 2087, 2102, 2116, 2128, 2141, 2156, 2173, 2193, 2200, 2214, 2227, 2241, 2259, 2274, 2285, 2297, 2311, 2327, 2346, 2365, 2378, 2396, 2410, 2424} func (i BuiltinFunc) String() string { if i < 0 || i >= BuiltinFunc(len(_BuiltinFunc_index)-1) { diff --git a/src/runtime/vendor/github.com/cilium/ebpf/asm/instruction.go b/src/runtime/vendor/github.com/cilium/ebpf/asm/instruction.go index 64d717d15..e7ac0109e 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/asm/instruction.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/asm/instruction.go @@ -181,11 +181,6 @@ func (ins *Instruction) IsFunctionCall() bool { return ins.OpCode.JumpOp() == Call && ins.Src == PseudoCall } -// IsBuiltinCall returns true if the instruction is a built-in call, i.e. BPF helper call. -func (ins *Instruction) IsBuiltinCall() bool { - return ins.OpCode.JumpOp() == Call && ins.Src == R0 && ins.Dst == R0 -} - // IsConstantLoad returns true if the instruction loads a constant of the // given size. func (ins *Instruction) IsConstantLoad(size Size) bool { diff --git a/src/runtime/vendor/github.com/cilium/ebpf/attachtype_string.go b/src/runtime/vendor/github.com/cilium/ebpf/attachtype_string.go deleted file mode 100644 index de355ed90..000000000 --- a/src/runtime/vendor/github.com/cilium/ebpf/attachtype_string.go +++ /dev/null @@ -1,65 +0,0 @@ -// Code generated by "stringer -type AttachType -trimprefix Attach"; DO NOT EDIT. - -package ebpf - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[AttachNone-0] - _ = x[AttachCGroupInetIngress-0] - _ = x[AttachCGroupInetEgress-1] - _ = x[AttachCGroupInetSockCreate-2] - _ = x[AttachCGroupSockOps-3] - _ = x[AttachSkSKBStreamParser-4] - _ = x[AttachSkSKBStreamVerdict-5] - _ = x[AttachCGroupDevice-6] - _ = x[AttachSkMsgVerdict-7] - _ = x[AttachCGroupInet4Bind-8] - _ = x[AttachCGroupInet6Bind-9] - _ = x[AttachCGroupInet4Connect-10] - _ = x[AttachCGroupInet6Connect-11] - _ = x[AttachCGroupInet4PostBind-12] - _ = x[AttachCGroupInet6PostBind-13] - _ = x[AttachCGroupUDP4Sendmsg-14] - _ = x[AttachCGroupUDP6Sendmsg-15] - _ = x[AttachLircMode2-16] - _ = x[AttachFlowDissector-17] - _ = x[AttachCGroupSysctl-18] - _ = x[AttachCGroupUDP4Recvmsg-19] - _ = x[AttachCGroupUDP6Recvmsg-20] - _ = x[AttachCGroupGetsockopt-21] - _ = x[AttachCGroupSetsockopt-22] - _ = x[AttachTraceRawTp-23] - _ = x[AttachTraceFEntry-24] - _ = x[AttachTraceFExit-25] - _ = x[AttachModifyReturn-26] - _ = x[AttachLSMMac-27] - _ = x[AttachTraceIter-28] - _ = x[AttachCgroupInet4GetPeername-29] - _ = x[AttachCgroupInet6GetPeername-30] - _ = x[AttachCgroupInet4GetSockname-31] - _ = x[AttachCgroupInet6GetSockname-32] - _ = x[AttachXDPDevMap-33] - _ = x[AttachCgroupInetSockRelease-34] - _ = x[AttachXDPCPUMap-35] - _ = x[AttachSkLookup-36] - _ = x[AttachXDP-37] - _ = x[AttachSkSKBVerdict-38] - _ = x[AttachSkReuseportSelect-39] - _ = x[AttachSkReuseportSelectOrMigrate-40] - _ = x[AttachPerfEvent-41] -} - -const _AttachType_name = "NoneCGroupInetEgressCGroupInetSockCreateCGroupSockOpsSkSKBStreamParserSkSKBStreamVerdictCGroupDeviceSkMsgVerdictCGroupInet4BindCGroupInet6BindCGroupInet4ConnectCGroupInet6ConnectCGroupInet4PostBindCGroupInet6PostBindCGroupUDP4SendmsgCGroupUDP6SendmsgLircMode2FlowDissectorCGroupSysctlCGroupUDP4RecvmsgCGroupUDP6RecvmsgCGroupGetsockoptCGroupSetsockoptTraceRawTpTraceFEntryTraceFExitModifyReturnLSMMacTraceIterCgroupInet4GetPeernameCgroupInet6GetPeernameCgroupInet4GetSocknameCgroupInet6GetSocknameXDPDevMapCgroupInetSockReleaseXDPCPUMapSkLookupXDPSkSKBVerdictSkReuseportSelectSkReuseportSelectOrMigratePerfEvent" - -var _AttachType_index = [...]uint16{0, 4, 20, 40, 53, 70, 88, 100, 112, 127, 142, 160, 178, 197, 216, 233, 250, 259, 272, 284, 301, 318, 334, 350, 360, 371, 381, 393, 399, 408, 430, 452, 474, 496, 505, 526, 535, 543, 546, 558, 575, 601, 610} - -func (i AttachType) String() string { - if i >= AttachType(len(_AttachType_index)-1) { - return "AttachType(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _AttachType_name[_AttachType_index[i]:_AttachType_index[i+1]] -} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/collection.go b/src/runtime/vendor/github.com/cilium/ebpf/collection.go index 2ededc87a..17cc69492 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/collection.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/collection.go @@ -1,7 +1,6 @@ package ebpf import ( - "encoding/binary" "errors" "fmt" "io" @@ -26,10 +25,6 @@ type CollectionOptions struct { type CollectionSpec struct { Maps map[string]*MapSpec Programs map[string]*ProgramSpec - - // ByteOrder specifies whether the ELF was compiled for - // big-endian or little-endian architectures. - ByteOrder binary.ByteOrder } // Copy returns a recursive copy of the spec. @@ -39,9 +34,8 @@ func (cs *CollectionSpec) Copy() *CollectionSpec { } cpy := CollectionSpec{ - Maps: make(map[string]*MapSpec, len(cs.Maps)), - Programs: make(map[string]*ProgramSpec, len(cs.Programs)), - ByteOrder: cs.ByteOrder, + Maps: make(map[string]*MapSpec, len(cs.Maps)), + Programs: make(map[string]*ProgramSpec, len(cs.Programs)), } for name, spec := range cs.Maps { @@ -129,7 +123,7 @@ func (cs *CollectionSpec) RewriteConstants(consts map[string]interface{}) error buf := make([]byte, len(value)) copy(buf, value) - err := patchValue(buf, rodata.BTF.Value, consts) + err := patchValue(buf, btf.MapValue(rodata.BTF), consts) if err != nil { return err } @@ -140,15 +134,15 @@ func (cs *CollectionSpec) RewriteConstants(consts map[string]interface{}) error // Assign the contents of a CollectionSpec to a struct. // -// This function is a shortcut to manually checking the presence -// of maps and programs in a CollectionSpec. Consider using bpf2go -// if this sounds useful. +// This function is a short-cut to manually checking the presence +// of maps and programs in a collection spec. Consider using bpf2go if this +// sounds useful. // -// 'to' must be a pointer to a struct. A field of the +// The argument to must be a pointer to a struct. A field of the // struct is updated with values from Programs or Maps if it // has an `ebpf` tag and its type is *ProgramSpec or *MapSpec. -// The tag's value specifies the name of the program or map as -// found in the CollectionSpec. +// The tag gives the name of the program or map as found in +// the CollectionSpec. // // struct { // Foo *ebpf.ProgramSpec `ebpf:"xdp_foo"` @@ -156,47 +150,42 @@ func (cs *CollectionSpec) RewriteConstants(consts map[string]interface{}) error // Ignored int // } // -// Returns an error if any of the eBPF objects can't be found, or -// if the same MapSpec or ProgramSpec is assigned multiple times. +// Returns an error if any of the fields can't be found, or +// if the same map or program is assigned multiple times. func (cs *CollectionSpec) Assign(to interface{}) error { - // Assign() only supports assigning ProgramSpecs and MapSpecs, - // so doesn't load any resources into the kernel. - getValue := func(typ reflect.Type, name string) (interface{}, error) { + valueOf := func(typ reflect.Type, name string) (reflect.Value, error) { switch typ { - case reflect.TypeOf((*ProgramSpec)(nil)): - if p := cs.Programs[name]; p != nil { - return p, nil + p := cs.Programs[name] + if p == nil { + return reflect.Value{}, fmt.Errorf("missing program %q", name) } - return nil, fmt.Errorf("missing program %q", name) - + return reflect.ValueOf(p), nil case reflect.TypeOf((*MapSpec)(nil)): - if m := cs.Maps[name]; m != nil { - return m, nil + m := cs.Maps[name] + if m == nil { + return reflect.Value{}, fmt.Errorf("missing map %q", name) } - return nil, fmt.Errorf("missing map %q", name) - + return reflect.ValueOf(m), nil default: - return nil, fmt.Errorf("unsupported type %s", typ) + return reflect.Value{}, fmt.Errorf("unsupported type %s", typ) } } - return assignValues(to, getValue) + return assignValues(to, valueOf) } -// LoadAndAssign loads Maps and Programs into the kernel and assigns them -// to a struct. +// LoadAndAssign maps and programs into the kernel and assign them to a struct. // -// This function is a shortcut to manually checking the presence -// of maps and programs in a CollectionSpec. Consider using bpf2go -// if this sounds useful. +// This function is a short-cut to manually checking the presence +// of maps and programs in a collection spec. Consider using bpf2go if this +// sounds useful. // -// 'to' must be a pointer to a struct. A field of the struct is updated with -// a Program or Map if it has an `ebpf` tag and its type is *Program or *Map. -// The tag's value specifies the name of the program or map as found in the -// CollectionSpec. Before updating the struct, the requested objects and their -// dependent resources are loaded into the kernel and populated with values if -// specified. +// The argument to must be a pointer to a struct. A field of the +// struct is updated with values from Programs or Maps if it +// has an `ebpf` tag and its type is *Program or *Map. +// The tag gives the name of the program or map as found in +// the CollectionSpec. // // struct { // Foo *ebpf.Program `ebpf:"xdp_foo"` @@ -207,53 +196,39 @@ func (cs *CollectionSpec) Assign(to interface{}) error { // opts may be nil. // // Returns an error if any of the fields can't be found, or -// if the same Map or Program is assigned multiple times. +// if the same map or program is assigned multiple times. func (cs *CollectionSpec) LoadAndAssign(to interface{}, opts *CollectionOptions) error { - loader := newCollectionLoader(cs, opts) - defer loader.cleanup() + if opts == nil { + opts = &CollectionOptions{} + } - // Support assigning Programs and Maps, lazy-loading the required objects. - assignedMaps := make(map[string]bool) - getValue := func(typ reflect.Type, name string) (interface{}, error) { + loadMap, loadProgram, done, cleanup := lazyLoadCollection(cs, opts) + defer cleanup() + + valueOf := func(typ reflect.Type, name string) (reflect.Value, error) { switch typ { - case reflect.TypeOf((*Program)(nil)): - return loader.loadProgram(name) - - case reflect.TypeOf((*Map)(nil)): - assignedMaps[name] = true - return loader.loadMap(name) - - default: - return nil, fmt.Errorf("unsupported type %s", typ) - } - } - - // Load the Maps and Programs requested by the annotated struct. - if err := assignValues(to, getValue); err != nil { - return err - } - - // Populate the requested maps. Has a chance of lazy-loading other dependent maps. - if err := loader.populateMaps(); err != nil { - return err - } - - // Evaluate the loader's objects after all (lazy)loading has taken place. - for n, m := range loader.maps { - switch m.typ { - case ProgramArray: - // Require all lazy-loaded ProgramArrays to be assigned to the given object. - // Without any references, they will be closed on the first GC and all tail - // calls into them will miss. - if !assignedMaps[n] { - return fmt.Errorf("ProgramArray %s must be assigned to prevent missed tail calls", n) + p, err := loadProgram(name) + if err != nil { + return reflect.Value{}, err } + return reflect.ValueOf(p), nil + case reflect.TypeOf((*Map)(nil)): + m, err := loadMap(name) + if err != nil { + return reflect.Value{}, err + } + return reflect.ValueOf(m), nil + default: + return reflect.Value{}, fmt.Errorf("unsupported type %s", typ) } } - loader.finalize() + if err := assignValues(to, valueOf); err != nil { + return err + } + done() return nil } @@ -271,32 +246,24 @@ func NewCollection(spec *CollectionSpec) (*Collection, error) { // NewCollectionWithOptions creates a Collection from a specification. func NewCollectionWithOptions(spec *CollectionSpec, opts CollectionOptions) (*Collection, error) { - loader := newCollectionLoader(spec, &opts) - defer loader.cleanup() + loadMap, loadProgram, done, cleanup := lazyLoadCollection(spec, &opts) + defer cleanup() - // Create maps first, as their fds need to be linked into programs. for mapName := range spec.Maps { - if _, err := loader.loadMap(mapName); err != nil { + _, err := loadMap(mapName) + if err != nil { return nil, err } } for progName := range spec.Programs { - if _, err := loader.loadProgram(progName); err != nil { + _, err := loadProgram(progName) + if err != nil { return nil, err } } - // Maps can contain Program and Map stubs, so populate them after - // all Maps and Programs have been successfully loaded. - if err := loader.populateMaps(); err != nil { - return nil, err - } - - maps, progs := loader.maps, loader.programs - - loader.finalize() - + maps, progs := done() return &Collection{ progs, maps, @@ -347,154 +314,113 @@ func (hc handleCache) close() { for _, handle := range hc.btfHandles { handle.Close() } + hc.btfHandles = nil + hc.btfSpecs = nil } -type collectionLoader struct { - coll *CollectionSpec - opts *CollectionOptions - maps map[string]*Map - programs map[string]*Program - handles *handleCache -} +func lazyLoadCollection(coll *CollectionSpec, opts *CollectionOptions) ( + loadMap func(string) (*Map, error), + loadProgram func(string) (*Program, error), + done func() (map[string]*Map, map[string]*Program), + cleanup func(), +) { + var ( + maps = make(map[string]*Map) + progs = make(map[string]*Program) + handles = newHandleCache() + skipMapsAndProgs = false + ) -func newCollectionLoader(coll *CollectionSpec, opts *CollectionOptions) *collectionLoader { - if opts == nil { - opts = &CollectionOptions{} + cleanup = func() { + handles.close() + + if skipMapsAndProgs { + return + } + + for _, m := range maps { + m.Close() + } + + for _, p := range progs { + p.Close() + } } - return &collectionLoader{ - coll, - opts, - make(map[string]*Map), - make(map[string]*Program), - newHandleCache(), + done = func() (map[string]*Map, map[string]*Program) { + skipMapsAndProgs = true + return maps, progs } -} -// finalize should be called when all the collectionLoader's resources -// have been successfully loaded into the kernel and populated with values. -func (cl *collectionLoader) finalize() { - cl.maps, cl.programs = nil, nil -} + loadMap = func(mapName string) (*Map, error) { + if m := maps[mapName]; m != nil { + return m, nil + } -// cleanup cleans up all resources left over in the collectionLoader. -// Call finalize() when Map and Program creation/population is successful -// to prevent them from getting closed. -func (cl *collectionLoader) cleanup() { - cl.handles.close() - for _, m := range cl.maps { - m.Close() - } - for _, p := range cl.programs { - p.Close() - } -} + mapSpec := coll.Maps[mapName] + if mapSpec == nil { + return nil, fmt.Errorf("missing map %s", mapName) + } -func (cl *collectionLoader) loadMap(mapName string) (*Map, error) { - if m := cl.maps[mapName]; m != nil { + m, err := newMapWithOptions(mapSpec, opts.Maps, handles) + if err != nil { + return nil, fmt.Errorf("map %s: %w", mapName, err) + } + + maps[mapName] = m return m, nil } - mapSpec := cl.coll.Maps[mapName] - if mapSpec == nil { - return nil, fmt.Errorf("missing map %s", mapName) - } - - m, err := newMapWithOptions(mapSpec, cl.opts.Maps, cl.handles) - if err != nil { - return nil, fmt.Errorf("map %s: %w", mapName, err) - } - - cl.maps[mapName] = m - return m, nil -} - -func (cl *collectionLoader) loadProgram(progName string) (*Program, error) { - if prog := cl.programs[progName]; prog != nil { - return prog, nil - } - - progSpec := cl.coll.Programs[progName] - if progSpec == nil { - return nil, fmt.Errorf("unknown program %s", progName) - } - - progSpec = progSpec.Copy() - - // Rewrite any reference to a valid map. - for i := range progSpec.Instructions { - ins := &progSpec.Instructions[i] - - if !ins.IsLoadFromMap() || ins.Reference == "" { - continue + loadProgram = func(progName string) (*Program, error) { + if prog := progs[progName]; prog != nil { + return prog, nil } - if uint32(ins.Constant) != math.MaxUint32 { - // Don't overwrite maps already rewritten, users can - // rewrite programs in the spec themselves - continue + progSpec := coll.Programs[progName] + if progSpec == nil { + return nil, fmt.Errorf("unknown program %s", progName) } - m, err := cl.loadMap(ins.Reference) + progSpec = progSpec.Copy() + + // Rewrite any reference to a valid map. + for i := range progSpec.Instructions { + ins := &progSpec.Instructions[i] + + if !ins.IsLoadFromMap() || ins.Reference == "" { + continue + } + + if uint32(ins.Constant) != math.MaxUint32 { + // Don't overwrite maps already rewritten, users can + // rewrite programs in the spec themselves + continue + } + + m, err := loadMap(ins.Reference) + if err != nil { + return nil, fmt.Errorf("program %s: %w", progName, err) + } + + fd := m.FD() + if fd < 0 { + return nil, fmt.Errorf("map %s: %w", ins.Reference, internal.ErrClosedFd) + } + if err := ins.RewriteMapPtr(m.FD()); err != nil { + return nil, fmt.Errorf("progam %s: map %s: %w", progName, ins.Reference, err) + } + } + + prog, err := newProgramWithOptions(progSpec, opts.Programs, handles) if err != nil { return nil, fmt.Errorf("program %s: %w", progName, err) } - fd := m.FD() - if fd < 0 { - return nil, fmt.Errorf("map %s: %w", ins.Reference, internal.ErrClosedFd) - } - if err := ins.RewriteMapPtr(m.FD()); err != nil { - return nil, fmt.Errorf("program %s: map %s: %w", progName, ins.Reference, err) - } + progs[progName] = prog + return prog, nil } - prog, err := newProgramWithOptions(progSpec, cl.opts.Programs, cl.handles) - if err != nil { - return nil, fmt.Errorf("program %s: %w", progName, err) - } - - cl.programs[progName] = prog - return prog, nil -} - -func (cl *collectionLoader) populateMaps() error { - for mapName, m := range cl.maps { - mapSpec, ok := cl.coll.Maps[mapName] - if !ok { - return fmt.Errorf("missing map spec %s", mapName) - } - - mapSpec = mapSpec.Copy() - - // Replace any object stubs with loaded objects. - for i, kv := range mapSpec.Contents { - switch v := kv.Value.(type) { - case programStub: - // loadProgram is idempotent and could return an existing Program. - prog, err := cl.loadProgram(string(v)) - if err != nil { - return fmt.Errorf("loading program %s, for map %s: %w", v, mapName, err) - } - mapSpec.Contents[i] = MapKV{kv.Key, prog} - - case mapStub: - // loadMap is idempotent and could return an existing Map. - innerMap, err := cl.loadMap(string(v)) - if err != nil { - return fmt.Errorf("loading inner map %s, for map %s: %w", v, mapName, err) - } - mapSpec.Contents[i] = MapKV{kv.Key, innerMap} - } - } - - // Populate and freeze the map if specified. - if err := m.finalize(mapSpec); err != nil { - return fmt.Errorf("populating map %s: %w", mapName, err) - } - } - - return nil + return } // LoadCollection parses an object file and converts it to a collection. @@ -540,81 +466,108 @@ func (coll *Collection) DetachProgram(name string) *Program { return p } -// structField represents a struct field containing the ebpf struct tag. -type structField struct { - reflect.StructField - value reflect.Value +// Assign the contents of a collection to a struct. +// +// Deprecated: use CollectionSpec.Assign instead. It provides the same +// functionality but creates only the maps and programs requested. +func (coll *Collection) Assign(to interface{}) error { + assignedMaps := make(map[string]struct{}) + assignedPrograms := make(map[string]struct{}) + valueOf := func(typ reflect.Type, name string) (reflect.Value, error) { + switch typ { + case reflect.TypeOf((*Program)(nil)): + p := coll.Programs[name] + if p == nil { + return reflect.Value{}, fmt.Errorf("missing program %q", name) + } + assignedPrograms[name] = struct{}{} + return reflect.ValueOf(p), nil + case reflect.TypeOf((*Map)(nil)): + m := coll.Maps[name] + if m == nil { + return reflect.Value{}, fmt.Errorf("missing map %q", name) + } + assignedMaps[name] = struct{}{} + return reflect.ValueOf(m), nil + default: + return reflect.Value{}, fmt.Errorf("unsupported type %s", typ) + } + } + + if err := assignValues(to, valueOf); err != nil { + return err + } + + for name := range assignedPrograms { + coll.DetachProgram(name) + } + + for name := range assignedMaps { + coll.DetachMap(name) + } + + return nil } -// ebpfFields extracts field names tagged with 'ebpf' from a struct type. -// Keep track of visited types to avoid infinite recursion. -func ebpfFields(structVal reflect.Value, visited map[reflect.Type]bool) ([]structField, error) { - if visited == nil { - visited = make(map[reflect.Type]bool) +func assignValues(to interface{}, valueOf func(reflect.Type, string) (reflect.Value, error)) error { + type structField struct { + reflect.StructField + value reflect.Value } - structType := structVal.Type() - if structType.Kind() != reflect.Struct { - return nil, fmt.Errorf("%s is not a struct", structType) - } + var ( + fields []structField + visitedTypes = make(map[reflect.Type]bool) + flattenStruct func(reflect.Value) error + ) - if visited[structType] { - return nil, fmt.Errorf("recursion on type %s", structType) - } - - fields := make([]structField, 0, structType.NumField()) - for i := 0; i < structType.NumField(); i++ { - field := structField{structType.Field(i), structVal.Field(i)} - - // If the field is tagged, gather it and move on. - name := field.Tag.Get("ebpf") - if name != "" { - fields = append(fields, field) - continue + flattenStruct = func(structVal reflect.Value) error { + structType := structVal.Type() + if structType.Kind() != reflect.Struct { + return fmt.Errorf("%s is not a struct", structType) } - // If the field does not have an ebpf tag, but is a struct or a pointer - // to a struct, attempt to gather its fields as well. - var v reflect.Value - switch field.Type.Kind() { - case reflect.Ptr: - if field.Type.Elem().Kind() != reflect.Struct { + if visitedTypes[structType] { + return fmt.Errorf("recursion on type %s", structType) + } + + for i := 0; i < structType.NumField(); i++ { + field := structField{structType.Field(i), structVal.Field(i)} + + name := field.Tag.Get("ebpf") + if name != "" { + fields = append(fields, field) continue } - if field.value.IsNil() { - return nil, fmt.Errorf("nil pointer to %s", structType) + var err error + switch field.Type.Kind() { + case reflect.Ptr: + if field.Type.Elem().Kind() != reflect.Struct { + continue + } + + if field.value.IsNil() { + return fmt.Errorf("nil pointer to %s", structType) + } + + err = flattenStruct(field.value.Elem()) + + case reflect.Struct: + err = flattenStruct(field.value) + + default: + continue } - // Obtain the destination type of the pointer. - v = field.value.Elem() - - case reflect.Struct: - // Reference the value's type directly. - v = field.value - - default: - continue + if err != nil { + return fmt.Errorf("field %s: %w", field.Name, err) + } } - inner, err := ebpfFields(v, visited) - if err != nil { - return nil, fmt.Errorf("field %s: %w", field.Name, err) - } - - fields = append(fields, inner...) + return nil } - return fields, nil -} - -// assignValues attempts to populate all fields of 'to' tagged with 'ebpf'. -// -// getValue is called for every tagged field of 'to' and must return the value -// to be assigned to the field with the given typ and name. -func assignValues(to interface{}, - getValue func(typ reflect.Type, name string) (interface{}, error)) error { - toValue := reflect.ValueOf(to) if toValue.Type().Kind() != reflect.Ptr { return fmt.Errorf("%T is not a pointer to struct", to) @@ -624,8 +577,7 @@ func assignValues(to interface{}, return fmt.Errorf("nil pointer to %T", to) } - fields, err := ebpfFields(toValue.Elem(), nil) - if err != nil { + if err := flattenStruct(toValue.Elem()); err != nil { return err } @@ -635,23 +587,19 @@ func assignValues(to interface{}, name string } - assigned := make(map[elem]string) + assignedTo := make(map[elem]string) for _, field := range fields { - // Get string value the field is tagged with. - tag := field.Tag.Get("ebpf") - if strings.Contains(tag, ",") { + name := field.Tag.Get("ebpf") + if strings.Contains(name, ",") { return fmt.Errorf("field %s: ebpf tag contains a comma", field.Name) } - // Check if the eBPF object with the requested - // type and tag was already assigned elsewhere. - e := elem{field.Type, tag} - if af := assigned[e]; af != "" { - return fmt.Errorf("field %s: object %q was already assigned to %s", field.Name, tag, af) + e := elem{field.Type, name} + if assignedField := assignedTo[e]; assignedField != "" { + return fmt.Errorf("field %s: %q was already assigned to %s", field.Name, name, assignedField) } - // Get the eBPF object referred to by the tag. - value, err := getValue(field.Type, tag) + value, err := valueOf(field.Type, name) if err != nil { return fmt.Errorf("field %s: %w", field.Name, err) } @@ -659,9 +607,9 @@ func assignValues(to interface{}, if !field.value.CanSet() { return fmt.Errorf("field %s: can't set value", field.Name) } - field.value.Set(reflect.ValueOf(value)) - assigned[e] = field.Name + field.value.Set(value) + assignedTo[e] = field.Name } return nil diff --git a/src/runtime/vendor/github.com/cilium/ebpf/elf_reader.go b/src/runtime/vendor/github.com/cilium/ebpf/elf_reader.go index 42010f43e..c2afbc36a 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/elf_reader.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/elf_reader.go @@ -19,7 +19,7 @@ import ( ) // elfCode is a convenience to reduce the amount of arguments that have to -// be passed around explicitly. You should treat its contents as immutable. +// be passed around explicitly. You should treat it's contents as immutable. type elfCode struct { *internal.SafeELFFile sections map[elf.SectionIndex]*elfSection @@ -188,7 +188,7 @@ func LoadCollectionSpecFromReader(rd io.ReaderAt) (*CollectionSpec, error) { return nil, fmt.Errorf("load programs: %w", err) } - return &CollectionSpec{maps, progs, ec.ByteOrder}, nil + return &CollectionSpec{maps, progs}, nil } func loadLicense(sec *elf.Section) (string, error) { @@ -520,12 +520,8 @@ func (ec *elfCode) loadMaps(maps map[string]*MapSpec) error { return fmt.Errorf("map %s: missing flags", mapName) } - extra, err := io.ReadAll(lr) - if err != nil { - return fmt.Errorf("map %s: reading map tail: %w", mapName, err) - } - if len(extra) > 0 { - spec.Extra = *bytes.NewReader(extra) + if _, err := io.Copy(internal.DiscardZeroes{}, lr); err != nil { + return fmt.Errorf("map %s: unknown and non-zero fields in definition", mapName) } if err := spec.clampPerfEventArraySize(); err != nil { @@ -539,9 +535,6 @@ func (ec *elfCode) loadMaps(maps map[string]*MapSpec) error { return nil } -// loadBTFMaps iterates over all ELF sections marked as BTF map sections -// (like .maps) and parses them into MapSpecs. Dump the .maps section and -// any relocations with `readelf -x .maps -r `. func (ec *elfCode) loadBTFMaps(maps map[string]*MapSpec) error { for _, sec := range ec.sections { if sec.kind != btfMapSection { @@ -552,46 +545,33 @@ func (ec *elfCode) loadBTFMaps(maps map[string]*MapSpec) error { return fmt.Errorf("missing BTF") } - // Each section must appear as a DataSec in the ELF's BTF blob. - var ds *btf.Datasec + _, err := io.Copy(internal.DiscardZeroes{}, bufio.NewReader(sec.Open())) + if err != nil { + return fmt.Errorf("section %v: initializing BTF map definitions: %w", sec.Name, internal.ErrNotSupported) + } + + var ds btf.Datasec if err := ec.btf.FindType(sec.Name, &ds); err != nil { return fmt.Errorf("cannot find section '%s' in BTF: %w", sec.Name, err) } - // Open a Reader to the ELF's raw section bytes so we can assert that all - // of them are zero on a per-map (per-Var) basis. For now, the section's - // sole purpose is to receive relocations, so all must be zero. - rs := sec.Open() - for _, vs := range ds.Vars { - // BPF maps are declared as and assigned to global variables, - // so iterate over each Var in the DataSec and validate their types. v, ok := vs.Type.(*btf.Var) if !ok { return fmt.Errorf("section %v: unexpected type %s", sec.Name, vs.Type) } name := string(v.Name) - // The BTF metadata for each Var contains the full length of the map - // declaration, so read the corresponding amount of bytes from the ELF. - // This way, we can pinpoint which map declaration contains unexpected - // (and therefore unsupported) data. - _, err := io.Copy(internal.DiscardZeroes{}, io.LimitReader(rs, int64(vs.Size))) - if err != nil { - return fmt.Errorf("section %v: map %s: initializing BTF map definitions: %w", sec.Name, name, internal.ErrNotSupported) - } - if maps[name] != nil { return fmt.Errorf("section %v: map %s already exists", sec.Name, name) } - // Each Var representing a BTF map definition contains a Struct. mapStruct, ok := v.Type.(*btf.Struct) if !ok { return fmt.Errorf("expected struct, got %s", v.Type) } - mapSpec, err := mapSpecFromBTF(sec, &vs, mapStruct, ec.btf, name, false) + mapSpec, err := mapSpecFromBTF(name, mapStruct, false, ec.btf) if err != nil { return fmt.Errorf("map %v: %w", name, err) } @@ -602,52 +582,32 @@ func (ec *elfCode) loadBTFMaps(maps map[string]*MapSpec) error { maps[name] = mapSpec } - - // Drain the ELF section reader to make sure all bytes are accounted for - // with BTF metadata. - i, err := io.Copy(io.Discard, rs) - if err != nil { - return fmt.Errorf("section %v: unexpected error reading remainder of ELF section: %w", sec.Name, err) - } - if i > 0 { - return fmt.Errorf("section %v: %d unexpected remaining bytes in ELF section, invalid BTF?", sec.Name, i) - } } return nil } -// A programStub is a placeholder for a Program to be inserted at a certain map key. -// It needs to be resolved into a Program later on in the loader process. -type programStub string - -// A mapStub is a placeholder for a Map to be inserted at a certain map key. -// It needs to be resolved into a Map later on in the loader process. -type mapStub string - // mapSpecFromBTF produces a MapSpec based on a btf.Struct def representing // a BTF map definition. The name and spec arguments will be copied to the // resulting MapSpec, and inner must be true on any resursive invocations. -func mapSpecFromBTF(es *elfSection, vs *btf.VarSecinfo, def *btf.Struct, spec *btf.Spec, name string, inner bool) (*MapSpec, error) { +func mapSpecFromBTF(name string, def *btf.Struct, inner bool, spec *btf.Spec) (*MapSpec, error) { + var ( - key, value btf.Type - keySize, valueSize uint32 - mapType MapType - flags, maxEntries uint32 - pinType PinType - innerMapSpec *MapSpec - contents []MapKV - err error + key, value btf.Type + keySize, valueSize uint32 + mapType, flags, maxEntries uint32 + pinType PinType + innerMapSpec *MapSpec + err error ) for i, member := range def.Members { switch member.Name { case "type": - mt, err := uintFromBTF(member.Type) + mapType, err = uintFromBTF(member.Type) if err != nil { return nil, fmt.Errorf("can't get type: %w", err) } - mapType = MapType(mt) case "map_flags": flags, err = uintFromBTF(member.Type) @@ -757,7 +717,7 @@ func mapSpecFromBTF(es *elfSection, vs *btf.VarSecinfo, def *btf.Struct, spec *b case *btf.Struct: // The values member pointing to an array of structs means we're expecting // a map-in-map declaration. - if mapType != ArrayOfMaps && mapType != HashOfMaps { + if MapType(mapType) != ArrayOfMaps && MapType(mapType) != HashOfMaps { return nil, errors.New("outer map needs to be an array or a hash of maps") } if inner { @@ -771,38 +731,21 @@ func mapSpecFromBTF(es *elfSection, vs *btf.VarSecinfo, def *btf.Struct, spec *b // on kernels 5.2 and up) // Pass the BTF spec from the parent object, since both parent and // child must be created from the same BTF blob (on kernels that support BTF). - innerMapSpec, err = mapSpecFromBTF(es, vs, t, spec, name+"_inner", true) + innerMapSpec, err = mapSpecFromBTF(name+"_inner", t, true, spec) if err != nil { return nil, fmt.Errorf("can't parse BTF map definition of inner map: %w", err) } - case *btf.FuncProto: - // The values member contains an array of function pointers, meaning an - // autopopulated PROG_ARRAY. - if mapType != ProgramArray { - return nil, errors.New("map needs to be a program array") - } - default: return nil, fmt.Errorf("unsupported value type %q in 'values' field", t) } - contents, err = resolveBTFValuesContents(es, vs, member) - if err != nil { - return nil, fmt.Errorf("resolving values contents: %w", err) - } - default: return nil, fmt.Errorf("unrecognized field %s in BTF map definition", member.Name) } } - if key == nil { - key = &btf.Void{} - } - if value == nil { - value = &btf.Void{} - } + bm := btf.NewMap(spec, key, value) return &MapSpec{ Name: SanitizeName(name, -1), @@ -811,10 +754,9 @@ func mapSpecFromBTF(es *elfSection, vs *btf.VarSecinfo, def *btf.Struct, spec *b ValueSize: valueSize, MaxEntries: maxEntries, Flags: flags, - BTF: &btf.Map{Spec: spec, Key: key, Value: value}, + BTF: &bm, Pinning: pinType, InnerMap: innerMapSpec, - Contents: contents, }, nil } @@ -851,64 +793,6 @@ func resolveBTFArrayMacro(typ btf.Type) (btf.Type, error) { return ptr.Target, nil } -// resolveBTFValuesContents resolves relocations into ELF sections belonging -// to btf.VarSecinfo's. This can be used on the 'values' member in BTF map -// definitions to extract static declarations of map contents. -func resolveBTFValuesContents(es *elfSection, vs *btf.VarSecinfo, member btf.Member) ([]MapKV, error) { - // The elements of a .values pointer array are not encoded in BTF. - // Instead, relocations are generated into each array index. - // However, it's possible to leave certain array indices empty, so all - // indices' offsets need to be checked for emitted relocations. - - // The offset of the 'values' member within the _struct_ (in bits) - // is the starting point of the array. Convert to bytes. Add VarSecinfo - // offset to get the absolute position in the ELF blob. - start := (member.OffsetBits / 8) + vs.Offset - // 'values' is encoded in BTF as a zero (variable) length struct - // member, and its contents run until the end of the VarSecinfo. - // Add VarSecinfo offset to get the absolute position in the ELF blob. - end := vs.Size + vs.Offset - // The size of an address in this section. This determines the width of - // an index in the array. - align := uint32(es.SectionHeader.Addralign) - - // Check if variable-length section is aligned. - if (end-start)%align != 0 { - return nil, errors.New("unaligned static values section") - } - elems := (end - start) / align - - if elems == 0 { - return nil, nil - } - - contents := make([]MapKV, 0, elems) - - // k is the array index, off is its corresponding ELF section offset. - for k, off := uint32(0), start; k < elems; k, off = k+1, off+align { - r, ok := es.relocations[uint64(off)] - if !ok { - continue - } - - // Relocation exists for the current offset in the ELF section. - // Emit a value stub based on the type of relocation to be replaced by - // a real fd later in the pipeline before populating the map. - // Map keys are encoded in MapKV entries, so empty array indices are - // skipped here. - switch t := elf.ST_TYPE(r.Info); t { - case elf.STT_FUNC: - contents = append(contents, MapKV{uint32(k), programStub(r.Name)}) - case elf.STT_OBJECT: - contents = append(contents, MapKV{uint32(k), mapStub(r.Name)}) - default: - return nil, fmt.Errorf("unknown relocation type %v", t) - } - } - - return contents, nil -} - func (ec *elfCode) loadDataSections(maps map[string]*MapSpec) error { for _, sec := range ec.sections { if sec.kind != dataSection { @@ -925,9 +809,9 @@ func (ec *elfCode) loadDataSections(maps map[string]*MapSpec) error { return errors.New("data sections require BTF, make sure all consts are marked as static") } - var datasec *btf.Datasec - if err := ec.btf.FindType(sec.Name, &datasec); err != nil { - return fmt.Errorf("data section %s: can't get BTF: %w", sec.Name, err) + btfMap, err := ec.btf.Datasec(sec.Name) + if err != nil { + return err } data, err := sec.Data() @@ -946,7 +830,7 @@ func (ec *elfCode) loadDataSections(maps map[string]*MapSpec) error { ValueSize: uint32(len(data)), MaxEntries: 1, Contents: []MapKV{{uint32(0), data}}, - BTF: &btf.Map{Spec: ec.btf, Key: &btf.Void{}, Value: datasec}, + BTF: btfMap, } switch sec.Name { @@ -971,8 +855,6 @@ func getProgType(sectionName string) (ProgramType, AttachType, uint32, string) { }{ // From https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/lib/bpf/libbpf.c "socket": {SocketFilter, AttachNone, 0}, - "sk_reuseport/migrate": {SkReuseport, AttachSkReuseportSelectOrMigrate, 0}, - "sk_reuseport": {SkReuseport, AttachSkReuseportSelect, 0}, "seccomp": {SocketFilter, AttachNone, 0}, "kprobe/": {Kprobe, AttachNone, 0}, "uprobe/": {Kprobe, AttachNone, 0}, @@ -1002,7 +884,6 @@ func getProgType(sectionName string) (ProgramType, AttachType, uint32, string) { "fmod_ret.s/": {Tracing, AttachModifyReturn, unix.BPF_F_SLEEPABLE}, "fexit.s/": {Tracing, AttachTraceFExit, unix.BPF_F_SLEEPABLE}, "sk_lookup/": {SkLookup, AttachSkLookup, 0}, - "freplace/": {Extension, AttachNone, 0}, "lsm/": {LSM, AttachLSMMac, 0}, "lsm.s/": {LSM, AttachLSMMac, unix.BPF_F_SLEEPABLE}, @@ -1026,11 +907,6 @@ func getProgType(sectionName string) (ProgramType, AttachType, uint32, string) { "cgroup/setsockopt": {CGroupSockopt, AttachCGroupSetsockopt, 0}, "classifier": {SchedCLS, AttachNone, 0}, "action": {SchedACT, AttachNone, 0}, - - "cgroup/getsockname4": {CGroupSockAddr, AttachCgroupInet4GetSockname, 0}, - "cgroup/getsockname6": {CGroupSockAddr, AttachCgroupInet6GetSockname, 0}, - "cgroup/getpeername4": {CGroupSockAddr, AttachCgroupInet4GetPeername, 0}, - "cgroup/getpeername6": {CGroupSockAddr, AttachCgroupInet6GetPeername, 0}, } for prefix, t := range types { diff --git a/src/runtime/vendor/github.com/cilium/ebpf/elf_reader_fuzz.go b/src/runtime/vendor/github.com/cilium/ebpf/elf_reader_fuzz.go index 5f4e0a0ad..d46d135f2 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/elf_reader_fuzz.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/elf_reader_fuzz.go @@ -1,4 +1,3 @@ -//go:build gofuzz // +build gofuzz // Use with https://github.com/dvyukov/go-fuzz diff --git a/src/runtime/vendor/github.com/cilium/ebpf/go.mod b/src/runtime/vendor/github.com/cilium/ebpf/go.mod index f5edf690a..df8139621 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/go.mod +++ b/src/runtime/vendor/github.com/cilium/ebpf/go.mod @@ -1,9 +1,9 @@ module github.com/cilium/ebpf -go 1.16 +go 1.15 require ( github.com/frankban/quicktest v1.11.3 github.com/google/go-cmp v0.5.4 - golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 + golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c ) diff --git a/src/runtime/vendor/github.com/cilium/ebpf/go.sum b/src/runtime/vendor/github.com/cilium/ebpf/go.sum index 1ef5a4767..a5039262a 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/go.sum +++ b/src/runtime/vendor/github.com/cilium/ebpf/go.sum @@ -7,7 +7,7 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34 h1:GkvMjFtXUmahfDtashnc1mnrCtuBVcwse5QV2lUk/tI= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/src/runtime/vendor/github.com/cilium/ebpf/info.go b/src/runtime/vendor/github.com/cilium/ebpf/info.go index 65fa4d7d8..b95131ef5 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/info.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/info.go @@ -12,7 +12,6 @@ import ( "time" "github.com/cilium/ebpf/internal" - "github.com/cilium/ebpf/internal/btf" ) // MapInfo describes a map. @@ -88,16 +87,12 @@ type ProgramInfo struct { Tag string // Name as supplied by user space at load time. Name string - // BTF for the program. - btf btf.ID - // IDS map ids related to program. - ids []MapID stats *programStats } func newProgramInfoFromFd(fd *internal.FD) (*ProgramInfo, error) { - info, err := bpfGetProgInfoByFD(fd, nil) + info, err := bpfGetProgInfoByFD(fd) if errors.Is(err, syscall.EINVAL) { return newProgramInfoFromProc(fd) } @@ -105,15 +100,6 @@ func newProgramInfoFromFd(fd *internal.FD) (*ProgramInfo, error) { return nil, err } - var mapIDs []MapID - if info.nr_map_ids > 0 { - mapIDs = make([]MapID, info.nr_map_ids) - info, err = bpfGetProgInfoByFD(fd, mapIDs) - if err != nil { - return nil, err - } - } - return &ProgramInfo{ Type: ProgramType(info.prog_type), id: ProgramID(info.id), @@ -121,8 +107,6 @@ func newProgramInfoFromFd(fd *internal.FD) (*ProgramInfo, error) { Tag: hex.EncodeToString(info.tag[:]), // name is available from 4.15. Name: internal.CString(info.name[:]), - btf: btf.ID(info.btf_id), - ids: mapIDs, stats: &programStats{ runtime: time.Duration(info.run_time_ns), runCount: info.run_cnt, @@ -158,17 +142,6 @@ func (pi *ProgramInfo) ID() (ProgramID, bool) { return pi.id, pi.id > 0 } -// BTFID returns the BTF ID associated with the program. -// -// Available from 5.0. -// -// The bool return value indicates whether this optional field is available and -// populated. (The field may be available but not populated if the kernel -// supports the field but the program was loaded without BTF information.) -func (pi *ProgramInfo) BTFID() (btf.ID, bool) { - return pi.btf, pi.btf > 0 -} - // RunCount returns the total number of times the program was called. // // Can return 0 if the collection of statistics is not enabled. See EnableStats(). @@ -191,13 +164,6 @@ func (pi *ProgramInfo) Runtime() (time.Duration, bool) { return time.Duration(0), false } -// MapIDs returns the maps related to the program. -// -// The bool return value indicates whether this optional field is available. -func (pi *ProgramInfo) MapIDs() ([]MapID, bool) { - return pi.ids, pi.ids != nil -} - func scanFdInfo(fd *internal.FD, fields map[string]interface{}) error { raw, err := fd.Value() if err != nil { diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/align.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/align.go deleted file mode 100644 index 8b4f2658e..000000000 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/align.go +++ /dev/null @@ -1,6 +0,0 @@ -package internal - -// Align returns 'n' updated to 'alignment' boundary. -func Align(n, alignment int) int { - return (int(n) + alignment - 1) / alignment * alignment -} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf.go index 2b5f6d226..5da9e1192 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "io" + "io/ioutil" "math" "os" "reflect" @@ -26,15 +27,12 @@ var ( ErrNoExtendedInfo = errors.New("no extended info") ) -// ID represents the unique ID of a BTF object. -type ID uint32 - // Spec represents decoded BTF. type Spec struct { rawTypes []rawType strings stringTable types []Type - namedTypes map[string][]NamedType + namedTypes map[string][]namedType funcInfos map[string]extInfo lineInfos map[string]extInfo coreRelos map[string]coreRelos @@ -63,6 +61,15 @@ func LoadSpecFromReader(rd io.ReaderAt) (*Spec, error) { } defer file.Close() + btfSection, btfExtSection, sectionSizes, err := findBtfSections(file) + if err != nil { + return nil, err + } + + if btfSection == nil { + return nil, fmt.Errorf("btf: %w", ErrNotFound) + } + symbols, err := file.Symbols() if err != nil { return nil, fmt.Errorf("can't read symbols: %v", err) @@ -80,6 +87,10 @@ func LoadSpecFromReader(rd io.ReaderAt) (*Spec, error) { } secName := file.Sections[symbol.Section].Name + if _, ok := sectionSizes[secName]; !ok { + continue + } + if symbol.Value > math.MaxUint32 { return nil, fmt.Errorf("section %s: symbol %s: size exceeds maximum", secName, symbol.Name) } @@ -87,10 +98,24 @@ func LoadSpecFromReader(rd io.ReaderAt) (*Spec, error) { variableOffsets[variable{secName, symbol.Name}] = uint32(symbol.Value) } - return loadSpecFromELF(file, variableOffsets) + spec, err := loadNakedSpec(btfSection.Open(), file.ByteOrder, sectionSizes, variableOffsets) + if err != nil { + return nil, err + } + + if btfExtSection == nil { + return spec, nil + } + + spec.funcInfos, spec.lineInfos, spec.coreRelos, err = parseExtInfos(btfExtSection.Open(), file.ByteOrder, spec.strings) + if err != nil { + return nil, fmt.Errorf("can't read ext info: %w", err) + } + + return spec, nil } -func loadSpecFromELF(file *internal.SafeELFFile, variableOffsets map[variable]uint32) (*Spec, error) { +func findBtfSections(file *internal.SafeELFFile) (*elf.Section, *elf.Section, map[string]uint32, error) { var ( btfSection *elf.Section btfExtSection *elf.Section @@ -109,45 +134,33 @@ func loadSpecFromELF(file *internal.SafeELFFile, variableOffsets map[variable]ui } if sec.Size > math.MaxUint32 { - return nil, fmt.Errorf("section %s exceeds maximum size", sec.Name) + return nil, nil, nil, fmt.Errorf("section %s exceeds maximum size", sec.Name) } sectionSizes[sec.Name] = uint32(sec.Size) } } + return btfSection, btfExtSection, sectionSizes, nil +} - if btfSection == nil { - return nil, fmt.Errorf("btf: %w", ErrNotFound) - } - - spec, err := loadRawSpec(btfSection.Open(), file.ByteOrder, sectionSizes, variableOffsets) +func loadSpecFromVmlinux(rd io.ReaderAt) (*Spec, error) { + file, err := internal.NewSafeELFFile(rd) if err != nil { return nil, err } + defer file.Close() - if btfExtSection == nil { - return spec, nil - } - - spec.funcInfos, spec.lineInfos, spec.coreRelos, err = parseExtInfos(btfExtSection.Open(), file.ByteOrder, spec.strings) + btfSection, _, _, err := findBtfSections(file) if err != nil { - return nil, fmt.Errorf("can't read ext info: %w", err) + return nil, fmt.Errorf(".BTF ELF section: %s", err) } - - return spec, nil + if btfSection == nil { + return nil, fmt.Errorf("unable to find .BTF ELF section") + } + return loadNakedSpec(btfSection.Open(), file.ByteOrder, nil, nil) } -// LoadRawSpec reads a blob of BTF data that isn't wrapped in an ELF file. -// -// Prefer using LoadSpecFromReader, since this function only supports a subset -// of BTF. -func LoadRawSpec(btf io.Reader, bo binary.ByteOrder) (*Spec, error) { - // This will return an error if we encounter a Datasec, since we can't fix - // it up. - return loadRawSpec(btf, bo, nil, nil) -} - -func loadRawSpec(btf io.Reader, bo binary.ByteOrder, sectionSizes map[string]uint32, variableOffsets map[variable]uint32) (*Spec, error) { +func loadNakedSpec(btf io.ReadSeeker, bo binary.ByteOrder, sectionSizes map[string]uint32, variableOffsets map[variable]uint32) (*Spec, error) { rawTypes, rawStrings, err := parseBTF(btf, bo) if err != nil { return nil, err @@ -204,7 +217,7 @@ func loadKernelSpec() (*Spec, error) { if err == nil { defer fh.Close() - return LoadRawSpec(fh, internal.NativeEndian) + return loadNakedSpec(fh, internal.NativeEndian, nil, nil) } // use same list of locations as libbpf @@ -228,20 +241,14 @@ func loadKernelSpec() (*Spec, error) { } defer fh.Close() - file, err := internal.NewSafeELFFile(fh) - if err != nil { - return nil, err - } - defer file.Close() - - return loadSpecFromELF(file, nil) + return loadSpecFromVmlinux(fh) } return nil, fmt.Errorf("no BTF for kernel version %s: %w", release, internal.ErrNotSupported) } -func parseBTF(btf io.Reader, bo binary.ByteOrder) ([]rawType, stringTable, error) { - rawBTF, err := io.ReadAll(btf) +func parseBTF(btf io.ReadSeeker, bo binary.ByteOrder) ([]rawType, stringTable, error) { + rawBTF, err := ioutil.ReadAll(btf) if err != nil { return nil, nil, fmt.Errorf("can't read BTF: %v", err) } @@ -350,30 +357,6 @@ func fixupDatasec(rawTypes []rawType, rawStrings stringTable, sectionSizes map[s return nil } -// Copy creates a copy of Spec. -func (s *Spec) Copy() *Spec { - types, _ := copyTypes(s.types, nil) - namedTypes := make(map[string][]NamedType) - for _, typ := range types { - if named, ok := typ.(NamedType); ok { - name := essentialName(named.TypeName()) - namedTypes[name] = append(namedTypes[name], named) - } - } - - // NB: Other parts of spec are not copied since they are immutable. - return &Spec{ - s.rawTypes, - s.strings, - types, - namedTypes, - s.funcInfos, - s.lineInfos, - s.coreRelos, - s.byteOrder, - } -} - type marshalOpts struct { ByteOrder binary.ByteOrder StripFuncLinkage bool @@ -464,37 +447,36 @@ func (s *Spec) Program(name string, length uint64) (*Program, error) { return &Program{s, length, funcInfos, lineInfos, relos}, nil } +// Datasec returns the BTF required to create maps which represent data sections. +func (s *Spec) Datasec(name string) (*Map, error) { + var datasec Datasec + if err := s.FindType(name, &datasec); err != nil { + return nil, fmt.Errorf("data section %s: can't get BTF: %w", name, err) + } + + m := NewMap(s, &Void{}, &datasec) + return &m, nil +} + // FindType searches for a type with a specific name. // -// Called T a type that satisfies Type, typ must be a non-nil **T. -// On success, the address of the found type will be copied in typ. +// hint determines the type of the returned Type. // // Returns an error wrapping ErrNotFound if no matching // type exists in spec. -func (s *Spec) FindType(name string, typ interface{}) error { - typValue := reflect.ValueOf(typ) - if typValue.Kind() != reflect.Ptr { - return fmt.Errorf("%T is not a pointer", typ) - } +func (s *Spec) FindType(name string, typ Type) error { + var ( + wanted = reflect.TypeOf(typ) + candidate Type + ) - typPtr := typValue.Elem() - if !typPtr.CanSet() { - return fmt.Errorf("%T cannot be set", typ) - } - - wanted := typPtr.Type() - if !wanted.AssignableTo(reflect.TypeOf((*Type)(nil)).Elem()) { - return fmt.Errorf("%T does not satisfy Type interface", typ) - } - - var candidate Type for _, typ := range s.namedTypes[essentialName(name)] { if reflect.TypeOf(typ) != wanted { continue } // Match against the full name, not just the essential one. - if typ.TypeName() != name { + if typ.name() != name { continue } @@ -509,15 +491,15 @@ func (s *Spec) FindType(name string, typ interface{}) error { return fmt.Errorf("type %s: %w", name, ErrNotFound) } - typPtr.Set(reflect.ValueOf(candidate)) - + cpy, _ := copyType(candidate, nil) + value := reflect.Indirect(reflect.ValueOf(cpy)) + reflect.Indirect(reflect.ValueOf(typ)).Set(value) return nil } // Handle is a reference to BTF loaded into the kernel. type Handle struct { - spec *Spec - fd *internal.FD + fd *internal.FD } // NewHandle loads BTF into the kernel. @@ -559,32 +541,7 @@ func NewHandle(spec *Spec) (*Handle, error) { return nil, internal.ErrorWithLog(err, logBuf, logErr) } - return &Handle{spec.Copy(), fd}, nil -} - -// NewHandleFromID returns the BTF handle for a given id. -// -// Returns ErrNotExist, if there is no BTF with the given id. -// -// Requires CAP_SYS_ADMIN. -func NewHandleFromID(id ID) (*Handle, error) { - fd, err := internal.BPFObjGetFDByID(internal.BPF_BTF_GET_FD_BY_ID, uint32(id)) - if err != nil { - return nil, fmt.Errorf("get BTF by id: %w", err) - } - - info, err := newInfoFromFd(fd) - if err != nil { - _ = fd.Close() - return nil, fmt.Errorf("get BTF spec for handle: %w", err) - } - - return &Handle{info.BTF, fd}, nil -} - -// Spec returns the Spec that defined the BTF loaded into the kernel. -func (h *Handle) Spec() *Spec { - return h.spec + return &Handle{fd}, nil } // Close destroys the handle. @@ -606,8 +563,43 @@ func (h *Handle) FD() int { // Map is the BTF for a map. type Map struct { - Spec *Spec - Key, Value Type + spec *Spec + key, value Type +} + +// NewMap returns a new Map containing the given values. +// The key and value arguments are initialized to Void if nil values are given. +func NewMap(spec *Spec, key Type, value Type) Map { + if key == nil { + key = &Void{} + } + if value == nil { + value = &Void{} + } + + return Map{ + spec: spec, + key: key, + value: value, + } +} + +// MapSpec should be a method on Map, but is a free function +// to hide it from users of the ebpf package. +func MapSpec(m *Map) *Spec { + return m.spec +} + +// MapKey should be a method on Map, but is a free function +// to hide it from users of the ebpf package. +func MapKey(m *Map) Type { + return m.key +} + +// MapValue should be a method on Map, but is a free function +// to hide it from users of the ebpf package. +func MapValue(m *Map) Type { + return m.value } // Program is the BTF information for a stream of instructions. @@ -618,59 +610,68 @@ type Program struct { coreRelos coreRelos } -// Spec returns the BTF spec of this program. -func (p *Program) Spec() *Spec { - return p.spec +// ProgramSpec returns the Spec needed for loading function and line infos into the kernel. +// +// This is a free function instead of a method to hide it from users +// of package ebpf. +func ProgramSpec(s *Program) *Spec { + return s.spec } -// Append the information from other to the Program. -func (p *Program) Append(other *Program) error { - if other.spec != p.spec { - return fmt.Errorf("can't append program with different BTF specs") - } - - funcInfos, err := p.funcInfos.append(other.funcInfos, p.length) +// ProgramAppend the information from other to the Program. +// +// This is a free function instead of a method to hide it from users +// of package ebpf. +func ProgramAppend(s, other *Program) error { + funcInfos, err := s.funcInfos.append(other.funcInfos, s.length) if err != nil { return fmt.Errorf("func infos: %w", err) } - lineInfos, err := p.lineInfos.append(other.lineInfos, p.length) + lineInfos, err := s.lineInfos.append(other.lineInfos, s.length) if err != nil { return fmt.Errorf("line infos: %w", err) } - p.funcInfos = funcInfos - p.lineInfos = lineInfos - p.coreRelos = p.coreRelos.append(other.coreRelos, p.length) - p.length += other.length + s.funcInfos = funcInfos + s.lineInfos = lineInfos + s.coreRelos = s.coreRelos.append(other.coreRelos, s.length) + s.length += other.length return nil } -// FuncInfos returns the binary form of BTF function infos. -func (p *Program) FuncInfos() (recordSize uint32, bytes []byte, err error) { - bytes, err = p.funcInfos.MarshalBinary() - if err != nil { - return 0, nil, fmt.Errorf("func infos: %w", err) - } - - return p.funcInfos.recordSize, bytes, nil -} - -// LineInfos returns the binary form of BTF line infos. -func (p *Program) LineInfos() (recordSize uint32, bytes []byte, err error) { - bytes, err = p.lineInfos.MarshalBinary() - if err != nil { - return 0, nil, fmt.Errorf("line infos: %w", err) - } - - return p.lineInfos.recordSize, bytes, nil -} - -// Fixups returns the changes required to adjust the program to the target. +// ProgramFuncInfos returns the binary form of BTF function infos. // -// Passing a nil target will relocate against the running kernel. -func (p *Program) Fixups(target *Spec) (COREFixups, error) { - if len(p.coreRelos) == 0 { +// This is a free function instead of a method to hide it from users +// of package ebpf. +func ProgramFuncInfos(s *Program) (recordSize uint32, bytes []byte, err error) { + bytes, err = s.funcInfos.MarshalBinary() + if err != nil { + return 0, nil, err + } + + return s.funcInfos.recordSize, bytes, nil +} + +// ProgramLineInfos returns the binary form of BTF line infos. +// +// This is a free function instead of a method to hide it from users +// of package ebpf. +func ProgramLineInfos(s *Program) (recordSize uint32, bytes []byte, err error) { + bytes, err = s.lineInfos.MarshalBinary() + if err != nil { + return 0, nil, err + } + + return s.lineInfos.recordSize, bytes, nil +} + +// ProgramFixups returns the changes required to adjust the program to the target. +// +// This is a free function instead of a method to hide it from users +// of package ebpf. +func ProgramFixups(s *Program, target *Spec) (COREFixups, error) { + if len(s.coreRelos) == 0 { return nil, nil } @@ -682,7 +683,7 @@ func (p *Program) Fixups(target *Spec) (COREFixups, error) { } } - return coreRelocate(p.spec, target, p.coreRelos) + return coreRelocate(s.spec, target, s.coreRelos) } type bpfLoadBTFAttr struct { diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf_types.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf_types.go index d98c73ca5..a5ef94512 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf_types.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/btf_types.go @@ -31,8 +31,6 @@ const ( // Added ~5.1 kindVar kindDatasec - // Added ~5.13 - kindFloat ) // FuncLinkage describes BTF function linkage metadata. @@ -56,7 +54,7 @@ const ( const ( btfTypeKindShift = 24 - btfTypeKindLen = 5 + btfTypeKindLen = 4 btfTypeVlenShift = 0 btfTypeVlenMask = 16 btfTypeKindFlagShift = 31 @@ -69,8 +67,8 @@ type btfType struct { /* "info" bits arrangement * bits 0-15: vlen (e.g. # of struct's members), linkage * bits 16-23: unused - * bits 24-28: kind (e.g. int, ptr, array...etc) - * bits 29-30: unused + * bits 24-27: kind (e.g. int, ptr, array...etc) + * bits 28-30: unused * bit 31: kind_flag, currently used by * struct, union and fwd */ @@ -119,8 +117,6 @@ func (k btfKind) String() string { return "Variable" case kindDatasec: return "Section" - case kindFloat: - return "Float" default: return fmt.Sprintf("Unknown (%d)", k) } @@ -264,7 +260,6 @@ func readTypes(r io.Reader, bo binary.ByteOrder) ([]rawType, error) { data = new(btfVariable) case kindDatasec: data = make([]btfVarSecinfo, header.Vlen()) - case kindFloat: default: return nil, fmt.Errorf("type id %v: unknown kind: %v", id, header.Kind()) } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/core.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/core.go index d02df9d50..7c888f602 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/core.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/core.go @@ -234,13 +234,13 @@ func coreRelocate(local, target *Spec, relos coreRelos) (COREFixups, error) { } localType := local.types[id] - named, ok := localType.(NamedType) - if !ok || named.TypeName() == "" { + named, ok := localType.(namedType) + if !ok || named.name() == "" { return nil, fmt.Errorf("relocate unnamed or anonymous type %s: %w", localType, ErrNotSupported) } relos := relosByID[id] - targets := target.namedTypes[essentialName(named.TypeName())] + targets := target.namedTypes[named.essentialName()] fixups, err := coreCalculateFixups(localType, targets, relos) if err != nil { return nil, fmt.Errorf("relocate %s: %w", localType, err) @@ -262,7 +262,7 @@ var errImpossibleRelocation = errors.New("impossible relocation") // // The best target is determined by scoring: the less poisoning we have to do // the better the target is. -func coreCalculateFixups(local Type, targets []NamedType, relos coreRelos) ([]COREFixup, error) { +func coreCalculateFixups(local Type, targets []namedType, relos coreRelos) ([]COREFixup, error) { localID := local.ID() local, err := copyType(local, skipQualifierAndTypedef) if err != nil { @@ -467,8 +467,8 @@ func parseCoreAccessor(accessor string) (coreAccessor, error) { return nil, fmt.Errorf("empty accessor") } + var result coreAccessor parts := strings.Split(accessor, ":") - result := make(coreAccessor, 0, len(parts)) for _, part := range parts { // 31 bits to avoid overflowing int on 32 bit platforms. index, err := strconv.ParseUint(part, 10, 31) @@ -564,7 +564,7 @@ func coreFindField(local Type, localAcc coreAccessor, target Type) (_, _ coreFie // This is an anonymous struct or union, ignore it. local = localMember.Type - localOffset += localMember.OffsetBits + localOffset += localMember.Offset localMaybeFlex = false continue } @@ -585,10 +585,10 @@ func coreFindField(local Type, localAcc coreAccessor, target Type) (_, _ coreFie local = localMember.Type localMaybeFlex = acc == len(localMembers)-1 - localOffset += localMember.OffsetBits + localOffset += localMember.Offset target = targetMember.Type targetMaybeFlex = last - targetOffset += targetMember.OffsetBits + targetOffset += targetMember.Offset case *Array: // For arrays, acc is the index in the target. @@ -639,7 +639,7 @@ func coreFindField(local Type, localAcc coreAccessor, target Type) (_, _ coreFie // coreFindMember finds a member in a composite type while handling anonymous // structs and unions. -func coreFindMember(typ composite, name string) (Member, bool, error) { +func coreFindMember(typ composite, name Name) (Member, bool, error) { if name == "" { return Member{}, false, errors.New("can't search for anonymous member") } @@ -670,7 +670,7 @@ func coreFindMember(typ composite, name string) (Member, bool, error) { for j, member := range members { if member.Name == name { // NB: This is safe because member is a copy. - member.OffsetBits += target.offset + member.Offset += target.offset return member, j == len(members)-1, nil } @@ -685,7 +685,7 @@ func coreFindMember(typ composite, name string) (Member, bool, error) { return Member{}, false, fmt.Errorf("anonymous non-composite type %T not allowed", member.Type) } - targets = append(targets, offsetTarget{comp, target.offset + member.OffsetBits}) + targets = append(targets, offsetTarget{comp, target.offset + member.Offset}) } } @@ -704,9 +704,9 @@ func coreFindEnumValue(local Type, localAcc coreAccessor, target Type) (localVal return nil, nil, errImpossibleRelocation } - localName := essentialName(localValue.Name) + localName := localValue.Name.essentialName() for i, targetValue := range targetEnum.Values { - if essentialName(targetValue.Name) != localName { + if targetValue.Name.essentialName() != localName { continue } @@ -813,7 +813,6 @@ func coreAreTypesCompatible(localType Type, targetType Type) error { * least one of enums should be anonymous; * - for ENUMs, check sizes, names are ignored; * - for INT, size and signedness are ignored; - * - any two FLOATs are always compatible; * - for ARRAY, dimensionality is ignored, element types are checked for * compatibility recursively; * [ NB: coreAreMembersCompatible doesn't recurse, this check is done @@ -849,16 +848,16 @@ func coreAreMembersCompatible(localType Type, targetType Type) error { } switch lv := localType.(type) { - case *Array, *Pointer, *Float: + case *Array, *Pointer: return nil case *Enum: tv := targetType.(*Enum) - return doNamesMatch(lv.Name, tv.Name) + return doNamesMatch(lv.name(), tv.name()) case *Fwd: tv := targetType.(*Fwd) - return doNamesMatch(lv.Name, tv.Name) + return doNamesMatch(lv.name(), tv.name()) case *Int: tv := targetType.(*Int) diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/ext_info.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/ext_info.go index cdae2ec40..beba1bce6 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/ext_info.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/ext_info.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "io" + "io/ioutil" "github.com/cilium/ebpf/asm" "github.com/cilium/ebpf/internal" @@ -63,7 +64,7 @@ func parseExtInfos(r io.ReadSeeker, bo binary.ByteOrder, strings stringTable) (f // Of course, the .BTF.ext header has different semantics than the // .BTF ext header. We need to ignore non-null values. - _, err = io.CopyN(io.Discard, r, remainder) + _, err = io.CopyN(ioutil.Discard, r, remainder) if err != nil { return nil, nil, nil, fmt.Errorf("header padding: %v", err) } @@ -113,16 +114,11 @@ type extInfoRecord struct { } type extInfo struct { - byteOrder binary.ByteOrder recordSize uint32 records []extInfoRecord } func (ei extInfo) append(other extInfo, offset uint64) (extInfo, error) { - if other.byteOrder != ei.byteOrder { - return extInfo{}, fmt.Errorf("ext_info byte order mismatch, want %v (got %v)", ei.byteOrder, other.byteOrder) - } - if other.recordSize != ei.recordSize { return extInfo{}, fmt.Errorf("ext_info record size mismatch, want %d (got %d)", ei.recordSize, other.recordSize) } @@ -135,14 +131,10 @@ func (ei extInfo) append(other extInfo, offset uint64) (extInfo, error) { Opaque: info.Opaque, }) } - return extInfo{ei.byteOrder, ei.recordSize, records}, nil + return extInfo{ei.recordSize, records}, nil } func (ei extInfo) MarshalBinary() ([]byte, error) { - if ei.byteOrder != internal.NativeEndian { - return nil, fmt.Errorf("%s is not the native byte order", ei.byteOrder) - } - if len(ei.records) == 0 { return nil, nil } @@ -205,7 +197,6 @@ func parseExtInfo(r io.Reader, bo binary.ByteOrder, strings stringTable) (map[st } result[secName] = extInfo{ - bo, recordSize, records, } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/fuzz.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/fuzz.go index 220b285af..37e043fd3 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/fuzz.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/fuzz.go @@ -1,4 +1,3 @@ -//go:build gofuzz // +build gofuzz // Use with https://github.com/dvyukov/go-fuzz diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/info.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/info.go deleted file mode 100644 index 6a9b5d2e0..000000000 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/info.go +++ /dev/null @@ -1,48 +0,0 @@ -package btf - -import ( - "bytes" - - "github.com/cilium/ebpf/internal" -) - -// info describes a BTF object. -type info struct { - BTF *Spec - ID ID - // Name is an identifying name for the BTF, currently only used by the - // kernel. - Name string - // KernelBTF is true if the BTf originated with the kernel and not - // userspace. - KernelBTF bool -} - -func newInfoFromFd(fd *internal.FD) (*info, error) { - // We invoke the syscall once with a empty BTF and name buffers to get size - // information to allocate buffers. Then we invoke it a second time with - // buffers to receive the data. - bpfInfo, err := bpfGetBTFInfoByFD(fd, nil, nil) - if err != nil { - return nil, err - } - - btfBuffer := make([]byte, bpfInfo.btfSize) - nameBuffer := make([]byte, bpfInfo.nameLen) - bpfInfo, err = bpfGetBTFInfoByFD(fd, btfBuffer, nameBuffer) - if err != nil { - return nil, err - } - - spec, err := loadRawSpec(bytes.NewReader(btfBuffer), internal.NativeEndian, nil, nil) - if err != nil { - return nil, err - } - - return &info{ - BTF: spec, - ID: ID(bpfInfo.id), - Name: internal.CString(nameBuffer), - KernelBTF: bpfInfo.kernelBTF != 0, - }, nil -} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/strings.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/strings.go index 9876aa227..8782643a0 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/strings.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/strings.go @@ -5,12 +5,13 @@ import ( "errors" "fmt" "io" + "io/ioutil" ) type stringTable []byte func readStringTable(r io.Reader) (stringTable, error) { - contents, err := io.ReadAll(r) + contents, err := ioutil.ReadAll(r) if err != nil { return nil, fmt.Errorf("can't read string table: %v", err) } @@ -52,3 +53,8 @@ func (st stringTable) Lookup(offset uint32) (string, error) { return string(str[:end]), nil } + +func (st stringTable) LookupName(offset uint32) (Name, error) { + str, err := st.Lookup(offset) + return Name(str), err +} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/syscalls.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/syscalls.go deleted file mode 100644 index a4f80abd0..000000000 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/syscalls.go +++ /dev/null @@ -1,31 +0,0 @@ -package btf - -import ( - "fmt" - "unsafe" - - "github.com/cilium/ebpf/internal" -) - -type bpfBTFInfo struct { - btf internal.Pointer - btfSize uint32 - id uint32 - name internal.Pointer - nameLen uint32 - kernelBTF uint32 -} - -func bpfGetBTFInfoByFD(fd *internal.FD, btf, name []byte) (*bpfBTFInfo, error) { - info := bpfBTFInfo{ - btf: internal.NewSlicePointer(btf), - btfSize: uint32(len(btf)), - name: internal.NewSlicePointer(name), - nameLen: uint32(len(name)), - } - if err := internal.BPFObjGetInfoByFD(fd, unsafe.Pointer(&info), unsafe.Sizeof(info)); err != nil { - return nil, fmt.Errorf("can't get program info: %w", err) - } - - return &info, nil -} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/types.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/types.go index 5c8e7c6e5..62aa31bcd 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/types.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/btf/types.go @@ -30,26 +30,27 @@ type Type interface { walk(*typeDeque) } -// NamedType is a type with a name. -type NamedType interface { +// namedType is a type with a name. +// +// Most named types simply embed Name. +type namedType interface { Type - - // Name of the type, empty for anonymous types. - TypeName() string + name() string + essentialName() string } -var ( - _ NamedType = (*Int)(nil) - _ NamedType = (*Struct)(nil) - _ NamedType = (*Union)(nil) - _ NamedType = (*Enum)(nil) - _ NamedType = (*Fwd)(nil) - _ NamedType = (*Func)(nil) - _ NamedType = (*Typedef)(nil) - _ NamedType = (*Var)(nil) - _ NamedType = (*Datasec)(nil) - _ NamedType = (*Float)(nil) -) +// Name identifies a type. +// +// Anonymous types have an empty name. +type Name string + +func (n Name) name() string { + return string(n) +} + +func (n Name) essentialName() string { + return essentialName(string(n)) +} // Void is the unit type of BTF. type Void struct{} @@ -71,17 +72,19 @@ const ( // Int is an integer of a given length. type Int struct { TypeID - Name string + Name // The size of the integer in bytes. Size uint32 Encoding IntEncoding - // OffsetBits is the starting bit offset. Currently always 0. + // Offset is the starting bit offset. Currently always 0. // See https://www.kernel.org/doc/html/latest/bpf/btf.html#btf-kind-int - OffsetBits uint32 - Bits byte + Offset uint32 + Bits byte } +var _ namedType = (*Int)(nil) + func (i *Int) String() string { var s strings.Builder @@ -107,16 +110,15 @@ func (i *Int) String() string { return s.String() } -func (i *Int) TypeName() string { return i.Name } -func (i *Int) size() uint32 { return i.Size } -func (i *Int) walk(*typeDeque) {} +func (i *Int) size() uint32 { return i.Size } +func (i *Int) walk(*typeDeque) {} func (i *Int) copy() Type { cpy := *i return &cpy } func (i *Int) isBitfield() bool { - return i.OffsetBits > 0 + return i.Offset > 0 } // Pointer is a pointer to another type. @@ -156,7 +158,7 @@ func (arr *Array) copy() Type { // Struct is a compound type of consecutive members. type Struct struct { TypeID - Name string + Name // The size of the struct including padding, in bytes Size uint32 Members []Member @@ -166,8 +168,6 @@ func (s *Struct) String() string { return fmt.Sprintf("struct#%d[%q]", s.TypeID, s.Name) } -func (s *Struct) TypeName() string { return s.Name } - func (s *Struct) size() uint32 { return s.Size } func (s *Struct) walk(tdq *typeDeque) { @@ -189,7 +189,7 @@ func (s *Struct) members() []Member { // Union is a compound type where members occupy the same memory. type Union struct { TypeID - Name string + Name // The size of the union including padding, in bytes. Size uint32 Members []Member @@ -199,8 +199,6 @@ func (u *Union) String() string { return fmt.Sprintf("union#%d[%q]", u.TypeID, u.Name) } -func (u *Union) TypeName() string { return u.Name } - func (u *Union) size() uint32 { return u.Size } func (u *Union) walk(tdq *typeDeque) { @@ -238,17 +236,17 @@ var ( // // It is not a valid Type. type Member struct { - Name string + Name Type Type - // OffsetBits is the bit offset of this member. - OffsetBits uint32 + // Offset is the bit offset of this member + Offset uint32 BitfieldSize uint32 } // Enum lists possible values. type Enum struct { TypeID - Name string + Name Values []EnumValue } @@ -256,13 +254,11 @@ func (e *Enum) String() string { return fmt.Sprintf("enum#%d[%q]", e.TypeID, e.Name) } -func (e *Enum) TypeName() string { return e.Name } - // EnumValue is part of an Enum // // Is is not a valid Type type EnumValue struct { - Name string + Name Value int32 } @@ -298,7 +294,7 @@ func (fk FwdKind) String() string { // Fwd is a forward declaration of a Type. type Fwd struct { TypeID - Name string + Name Kind FwdKind } @@ -306,8 +302,6 @@ func (f *Fwd) String() string { return fmt.Sprintf("fwd#%d[%s %q]", f.TypeID, f.Kind, f.Name) } -func (f *Fwd) TypeName() string { return f.Name } - func (f *Fwd) walk(*typeDeque) {} func (f *Fwd) copy() Type { cpy := *f @@ -317,7 +311,7 @@ func (f *Fwd) copy() Type { // Typedef is an alias of a Type. type Typedef struct { TypeID - Name string + Name Type Type } @@ -325,8 +319,6 @@ func (td *Typedef) String() string { return fmt.Sprintf("typedef#%d[%q #%d]", td.TypeID, td.Name, td.Type.ID()) } -func (td *Typedef) TypeName() string { return td.Name } - func (td *Typedef) walk(tdq *typeDeque) { tdq.push(&td.Type) } func (td *Typedef) copy() Type { cpy := *td @@ -387,7 +379,7 @@ func (r *Restrict) copy() Type { // Func is a function definition. type Func struct { TypeID - Name string + Name Type Type Linkage FuncLinkage } @@ -396,8 +388,6 @@ func (f *Func) String() string { return fmt.Sprintf("func#%d[%s %q proto=#%d]", f.TypeID, f.Linkage, f.Name, f.Type.ID()) } -func (f *Func) TypeName() string { return f.Name } - func (f *Func) walk(tdq *typeDeque) { tdq.push(&f.Type) } func (f *Func) copy() Type { cpy := *f @@ -436,14 +426,14 @@ func (fp *FuncProto) copy() Type { } type FuncParam struct { - Name string + Name Type Type } // Var is a global variable. type Var struct { TypeID - Name string + Name Type Type Linkage VarLinkage } @@ -452,8 +442,6 @@ func (v *Var) String() string { return fmt.Sprintf("var#%d[%s %q]", v.TypeID, v.Linkage, v.Name) } -func (v *Var) TypeName() string { return v.Name } - func (v *Var) walk(tdq *typeDeque) { tdq.push(&v.Type) } func (v *Var) copy() Type { cpy := *v @@ -463,7 +451,7 @@ func (v *Var) copy() Type { // Datasec is a global program section containing data. type Datasec struct { TypeID - Name string + Name Size uint32 Vars []VarSecinfo } @@ -472,8 +460,6 @@ func (ds *Datasec) String() string { return fmt.Sprintf("section#%d[%q]", ds.TypeID, ds.Name) } -func (ds *Datasec) TypeName() string { return ds.Name } - func (ds *Datasec) size() uint32 { return ds.Size } func (ds *Datasec) walk(tdq *typeDeque) { @@ -489,7 +475,7 @@ func (ds *Datasec) copy() Type { return &cpy } -// VarSecinfo describes variable in a Datasec. +// VarSecinfo describes variable in a Datasec // // It is not a valid Type. type VarSecinfo struct { @@ -498,27 +484,6 @@ type VarSecinfo struct { Size uint32 } -// Float is a float of a given length. -type Float struct { - TypeID - Name string - - // The size of the float in bytes. - Size uint32 -} - -func (f *Float) String() string { - return fmt.Sprintf("float%d#%d[%q]", f.Size*8, f.TypeID, f.Name) -} - -func (f *Float) TypeName() string { return f.Name } -func (f *Float) size() uint32 { return f.Size } -func (f *Float) walk(*typeDeque) {} -func (f *Float) copy() Type { - cpy := *f - return &cpy -} - type sizer interface { size() uint32 } @@ -600,36 +565,14 @@ func Sizeof(typ Type) (int, error) { // // Returns any errors from transform verbatim. func copyType(typ Type, transform func(Type) (Type, error)) (Type, error) { - copies := make(copier) - return typ, copies.copy(&typ, transform) -} + var ( + copies = make(map[Type]Type) + work typeDeque + ) -// copy a slice of Types recursively. -// -// Types may form a cycle. -// -// Returns any errors from transform verbatim. -func copyTypes(types []Type, transform func(Type) (Type, error)) ([]Type, error) { - result := make([]Type, len(types)) - copy(result, types) - - copies := make(copier) - for i := range result { - if err := copies.copy(&result[i], transform); err != nil { - return nil, err - } - } - - return result, nil -} - -type copier map[Type]Type - -func (c copier) copy(typ *Type, transform func(Type) (Type, error)) error { - var work typeDeque - for t := typ; t != nil; t = work.pop() { + for t := &typ; t != nil; t = work.pop() { // *t is the identity of the type. - if cpy := c[*t]; cpy != nil { + if cpy := copies[*t]; cpy != nil { *t = cpy continue } @@ -638,21 +581,21 @@ func (c copier) copy(typ *Type, transform func(Type) (Type, error)) error { if transform != nil { tf, err := transform(*t) if err != nil { - return fmt.Errorf("copy %s: %w", *t, err) + return nil, fmt.Errorf("copy %s: %w", typ, err) } cpy = tf.copy() } else { cpy = (*t).copy() } - c[*t] = cpy + copies[*t] = cpy *t = cpy // Mark any nested types for copying. cpy.walk(&work) } - return nil + return typ, nil } // typeDeque keeps track of pointers to types which still @@ -663,10 +606,6 @@ type typeDeque struct { mask uint64 } -func (dq *typeDeque) empty() bool { - return dq.read == dq.write -} - // push adds a type to the stack. func (dq *typeDeque) push(t *Type) { if dq.write-dq.read < uint64(len(dq.types)) { @@ -693,7 +632,7 @@ func (dq *typeDeque) push(t *Type) { // shift returns the first element or null. func (dq *typeDeque) shift() *Type { - if dq.empty() { + if dq.read == dq.write { return nil } @@ -706,7 +645,7 @@ func (dq *typeDeque) shift() *Type { // pop returns the last element or null. func (dq *typeDeque) pop() *Type { - if dq.empty() { + if dq.read == dq.write { return nil } @@ -735,7 +674,7 @@ func (dq *typeDeque) all() []*Type { // Returns a map of named types (so, where NameOff is non-zero) and a slice of types // indexed by TypeID. Since BTF ignores compilation units, multiple types may share // the same name. A Type may form a cyclic graph by pointing at itself. -func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, namedTypes map[string][]NamedType, err error) { +func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, namedTypes map[string][]namedType, err error) { type fixupDef struct { id TypeID expectedKind btfKind @@ -752,17 +691,17 @@ func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, // work, since otherwise append might re-allocate members. members := make([]Member, 0, len(raw)) for i, btfMember := range raw { - name, err := rawStrings.Lookup(btfMember.NameOff) + name, err := rawStrings.LookupName(btfMember.NameOff) if err != nil { return nil, fmt.Errorf("can't get name for member %d: %w", i, err) } m := Member{ - Name: name, - OffsetBits: btfMember.Offset, + Name: name, + Offset: btfMember.Offset, } if kindFlag { m.BitfieldSize = btfMember.Offset >> 24 - m.OffsetBits &= 0xffffff + m.Offset &= 0xffffff } members = append(members, m) } @@ -774,7 +713,7 @@ func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, types = make([]Type, 0, len(rawTypes)) types = append(types, (*Void)(nil)) - namedTypes = make(map[string][]NamedType) + namedTypes = make(map[string][]namedType) for i, raw := range rawTypes { var ( @@ -784,7 +723,7 @@ func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, typ Type ) - name, err := rawStrings.Lookup(raw.NameOff) + name, err := rawStrings.LookupName(raw.NameOff) if err != nil { return nil, nil, fmt.Errorf("get name for type id %d: %w", id, err) } @@ -826,7 +765,7 @@ func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, rawvals := raw.data.([]btfEnum) vals := make([]EnumValue, 0, len(rawvals)) for i, btfVal := range rawvals { - name, err := rawStrings.Lookup(btfVal.NameOff) + name, err := rawStrings.LookupName(btfVal.NameOff) if err != nil { return nil, nil, fmt.Errorf("get name for enum value %d: %s", i, err) } @@ -873,7 +812,7 @@ func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, rawparams := raw.data.([]btfParam) params := make([]FuncParam, 0, len(rawparams)) for i, param := range rawparams { - name, err := rawStrings.Lookup(param.NameOff) + name, err := rawStrings.LookupName(param.NameOff) if err != nil { return nil, nil, fmt.Errorf("get name for func proto parameter %d: %s", i, err) } @@ -909,17 +848,14 @@ func inflateRawTypes(rawTypes []rawType, rawStrings stringTable) (types []Type, } typ = &Datasec{id, name, raw.SizeType, vars} - case kindFloat: - typ = &Float{id, name, raw.Size()} - default: return nil, nil, fmt.Errorf("type id %d: unknown kind: %v", id, raw.Kind()) } types = append(types, typ) - if named, ok := typ.(NamedType); ok { - if name := essentialName(named.TypeName()); name != "" { + if named, ok := typ.(namedType); ok { + if name := essentialName(named.name()); name != "" { namedTypes[name] = append(namedTypes[name], named) } } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/cpu.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/cpu.go index 3affa1efb..d3424ba43 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/cpu.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/cpu.go @@ -2,7 +2,7 @@ package internal import ( "fmt" - "os" + "io/ioutil" "strings" "sync" ) @@ -24,7 +24,7 @@ func PossibleCPUs() (int, error) { } func parseCPUsFromFile(path string) (int, error) { - spec, err := os.ReadFile(path) + spec, err := ioutil.ReadFile(path) if err != nil { return 0, err } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_be.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_be.go index 8c114ddf4..a56fbcc8e 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_be.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_be.go @@ -1,4 +1,3 @@ -//go:build armbe || mips || mips64p32 // +build armbe mips mips64p32 package internal diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_le.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_le.go index e65a61e45..be2ecfca7 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_le.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_32_le.go @@ -1,4 +1,3 @@ -//go:build 386 || amd64p32 || arm || mipsle || mips64p32le // +build 386 amd64p32 arm mipsle mips64p32le package internal diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_64.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_64.go index 71a3afe30..69452dceb 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_64.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/ptr_64.go @@ -1,5 +1,5 @@ -//go:build !386 && !amd64p32 && !arm && !mipsle && !mips64p32le && !armbe && !mips && !mips64p32 -// +build !386,!amd64p32,!arm,!mipsle,!mips64p32le,!armbe,!mips,!mips64p32 +// +build !386,!amd64p32,!arm,!mipsle,!mips64p32le +// +build !armbe,!mips,!mips64p32 package internal diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/syscall.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/syscall.go index b75037bb9..b766e643e 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/syscall.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/syscall.go @@ -1,7 +1,6 @@ package internal import ( - "errors" "fmt" "path/filepath" "runtime" @@ -69,48 +68,6 @@ func BPF(cmd BPFCmd, attr unsafe.Pointer, size uintptr) (uintptr, error) { return r1, err } -type BPFProgLoadAttr struct { - ProgType uint32 - InsCount uint32 - Instructions Pointer - License Pointer - LogLevel uint32 - LogSize uint32 - LogBuf Pointer - KernelVersion uint32 // since 4.1 2541517c32be - ProgFlags uint32 // since 4.11 e07b98d9bffe - ProgName BPFObjName // since 4.15 067cae47771c - ProgIfIndex uint32 // since 4.15 1f6f4cb7ba21 - ExpectedAttachType uint32 // since 4.17 5e43f899b03a - ProgBTFFd uint32 - FuncInfoRecSize uint32 - FuncInfo Pointer - FuncInfoCnt uint32 - LineInfoRecSize uint32 - LineInfo Pointer - LineInfoCnt uint32 - AttachBTFID uint32 - AttachProgFd uint32 -} - -// BPFProgLoad wraps BPF_PROG_LOAD. -func BPFProgLoad(attr *BPFProgLoadAttr) (*FD, error) { - for { - fd, err := BPF(BPF_PROG_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr)) - // As of ~4.20 the verifier can be interrupted by a signal, - // and returns EAGAIN in that case. - if errors.Is(err, unix.EAGAIN) { - continue - } - - if err != nil { - return nil, err - } - - return NewFD(uint32(fd)), nil - } -} - type BPFProgAttachAttr struct { TargetFd uint32 AttachBpfFd uint32 @@ -223,22 +180,6 @@ func BPFObjGetInfoByFD(fd *FD, info unsafe.Pointer, size uintptr) error { return nil } -type bpfGetFDByIDAttr struct { - id uint32 - next uint32 -} - -// BPFObjGetInfoByFD wraps BPF_*_GET_FD_BY_ID. -// -// Available from 4.13. -func BPFObjGetFDByID(cmd BPFCmd, id uint32) (*FD, error) { - attr := bpfGetFDByIDAttr{ - id: id, - } - ptr, err := BPF(cmd, unsafe.Pointer(&attr), unsafe.Sizeof(attr)) - return NewFD(uint32(ptr)), err -} - // BPFObjName is a null-terminated string made up of // 'A-Za-z0-9_' characters. type BPFObjName [unix.BPF_OBJ_NAME_LEN]byte diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_linux.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_linux.go index 9aa70fa78..0a18eaf0c 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_linux.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_linux.go @@ -1,4 +1,3 @@ -//go:build linux // +build linux package unix @@ -21,11 +20,10 @@ const ( EPERM = linux.EPERM ESRCH = linux.ESRCH ENODEV = linux.ENODEV - EBADF = linux.EBADF - E2BIG = linux.E2BIG // ENOTSUPP is not the same as ENOTSUP or EOPNOTSUP ENOTSUPP = syscall.Errno(0x20c) + EBADF = linux.EBADF BPF_F_NO_PREALLOC = linux.BPF_F_NO_PREALLOC BPF_F_NUMA_NODE = linux.BPF_F_NUMA_NODE BPF_F_RDONLY = linux.BPF_F_RDONLY @@ -37,9 +35,6 @@ const ( BPF_F_INNER_MAP = linux.BPF_F_INNER_MAP BPF_OBJ_NAME_LEN = linux.BPF_OBJ_NAME_LEN BPF_TAG_SIZE = linux.BPF_TAG_SIZE - BPF_RINGBUF_BUSY_BIT = linux.BPF_RINGBUF_BUSY_BIT - BPF_RINGBUF_DISCARD_BIT = linux.BPF_RINGBUF_DISCARD_BIT - BPF_RINGBUF_HDR_SZ = linux.BPF_RINGBUF_HDR_SZ SYS_BPF = linux.SYS_BPF F_DUPFD_CLOEXEC = linux.F_DUPFD_CLOEXEC EPOLL_CTL_ADD = linux.EPOLL_CTL_ADD @@ -74,6 +69,11 @@ type Statfs_t = linux.Statfs_t // Rlimit is a wrapper type Rlimit = linux.Rlimit +// Setrlimit is a wrapper +func Setrlimit(resource int, rlim *Rlimit) (err error) { + return linux.Setrlimit(resource, rlim) +} + // Syscall is a wrapper func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { return linux.Syscall(trap, a1, a2, a3) @@ -202,7 +202,3 @@ func KernelRelease() (string, error) { release := string(uname.Release[:end]) return release, nil } - -func Prlimit(pid, resource int, new, old *Rlimit) error { - return linux.Prlimit(pid, resource, new, old) -} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_other.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_other.go index 4f50d896e..1b06defc0 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_other.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/unix/types_other.go @@ -1,4 +1,3 @@ -//go:build !linux // +build !linux package unix @@ -22,7 +21,6 @@ const ( ESRCH = syscall.ESRCH ENODEV = syscall.ENODEV EBADF = syscall.Errno(0) - E2BIG = syscall.Errno(0) // ENOTSUPP is not the same as ENOTSUP or EOPNOTSUP ENOTSUPP = syscall.Errno(0x20c) @@ -37,9 +35,6 @@ const ( BPF_F_INNER_MAP = 0 BPF_OBJ_NAME_LEN = 0x10 BPF_TAG_SIZE = 0x8 - BPF_RINGBUF_BUSY_BIT = 0 - BPF_RINGBUF_DISCARD_BIT = 0 - BPF_RINGBUF_HDR_SZ = 0 SYS_BPF = 321 F_DUPFD_CLOEXEC = 0x406 EPOLLIN = 0x1 @@ -91,6 +86,11 @@ type Rlimit struct { Max uint64 } +// Setrlimit is a wrapper +func Setrlimit(resource int, rlim *Rlimit) (err error) { + return errNonLinux +} + // Syscall is a wrapper func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { return 0, 0, syscall.Errno(1) @@ -261,7 +261,3 @@ func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags func KernelRelease() (string, error) { return "", errNonLinux } - -func Prlimit(pid, resource int, new, old *Rlimit) error { - return errNonLinux -} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/internal/version.go b/src/runtime/vendor/github.com/cilium/ebpf/internal/version.go index 4915e5837..1a678bfe6 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/internal/version.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/internal/version.go @@ -2,7 +2,7 @@ package internal import ( "fmt" - "os" + "io/ioutil" "regexp" "sync" @@ -109,7 +109,7 @@ func detectKernelVersion() (Version, error) { // Example format: Ubuntu 4.15.0-91.92-generic 4.15.18 // This method exists in the kernel itself, see d18acd15c // ("perf tools: Fix kernel version error in ubuntu"). - if pvs, err := os.ReadFile("/proc/version_signature"); err == nil { + if pvs, err := ioutil.ReadFile("/proc/version_signature"); err == nil { // If /proc/version_signature exists, failing to parse it is an error. // It only exists on Ubuntu, where the real patch level is not obtainable // through any other method. diff --git a/src/runtime/vendor/github.com/cilium/ebpf/link/freplace.go b/src/runtime/vendor/github.com/cilium/ebpf/link/freplace.go deleted file mode 100644 index a698e1a9d..000000000 --- a/src/runtime/vendor/github.com/cilium/ebpf/link/freplace.go +++ /dev/null @@ -1,88 +0,0 @@ -package link - -import ( - "fmt" - - "github.com/cilium/ebpf" - "github.com/cilium/ebpf/internal/btf" -) - -type FreplaceLink struct { - RawLink -} - -// AttachFreplace attaches the given eBPF program to the function it replaces. -// -// The program and name can either be provided at link time, or can be provided -// at program load time. If they were provided at load time, they should be nil -// and empty respectively here, as they will be ignored by the kernel. -// Examples: -// -// AttachFreplace(dispatcher, "function", replacement) -// AttachFreplace(nil, "", replacement) -func AttachFreplace(targetProg *ebpf.Program, name string, prog *ebpf.Program) (*FreplaceLink, error) { - if (name == "") != (targetProg == nil) { - return nil, fmt.Errorf("must provide both or neither of name and targetProg: %w", errInvalidInput) - } - if prog == nil { - return nil, fmt.Errorf("prog cannot be nil: %w", errInvalidInput) - } - if prog.Type() != ebpf.Extension { - return nil, fmt.Errorf("eBPF program type %s is not an Extension: %w", prog.Type(), errInvalidInput) - } - - var ( - target int - typeID btf.TypeID - ) - if targetProg != nil { - info, err := targetProg.Info() - if err != nil { - return nil, err - } - btfID, ok := info.BTFID() - if !ok { - return nil, fmt.Errorf("could not get BTF ID for program %s: %w", info.Name, errInvalidInput) - } - btfHandle, err := btf.NewHandleFromID(btfID) - if err != nil { - return nil, err - } - defer btfHandle.Close() - - var function *btf.Func - if err := btfHandle.Spec().FindType(name, &function); err != nil { - return nil, err - } - - target = targetProg.FD() - typeID = function.ID() - } - - link, err := AttachRawLink(RawLinkOptions{ - Target: target, - Program: prog, - Attach: ebpf.AttachNone, - BTF: typeID, - }) - if err != nil { - return nil, err - } - - return &FreplaceLink{*link}, nil -} - -// Update implements the Link interface. -func (f *FreplaceLink) Update(new *ebpf.Program) error { - return fmt.Errorf("freplace update: %w", ErrNotSupported) -} - -// LoadPinnedFreplace loads a pinned iterator from a bpffs. -func LoadPinnedFreplace(fileName string, opts *ebpf.LoadPinOptions) (*FreplaceLink, error) { - link, err := LoadPinnedRawLink(fileName, TracingType, opts) - if err != nil { - return nil, err - } - - return &FreplaceLink{*link}, err -} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/link/kprobe.go b/src/runtime/vendor/github.com/cilium/ebpf/link/kprobe.go index b6577b5a9..ea71d6d60 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/link/kprobe.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/link/kprobe.go @@ -5,6 +5,7 @@ import ( "crypto/rand" "errors" "fmt" + "io/ioutil" "os" "path/filepath" "runtime" @@ -71,11 +72,10 @@ func (pt probeType) RetprobeBit() (uint64, error) { // given kernel symbol starts executing. See /proc/kallsyms for available // symbols. For example, printk(): // -// kp, err := Kprobe("printk", prog) +// Kprobe("printk", prog) // -// Losing the reference to the resulting Link (kp) will close the Kprobe -// and prevent further execution of prog. The Link must be Closed during -// program shutdown to avoid leaking system resources. +// The resulting Link must be Closed during program shutdown to avoid leaking +// system resources. func Kprobe(symbol string, prog *ebpf.Program) (Link, error) { k, err := kprobe(symbol, prog, false) if err != nil { @@ -95,11 +95,10 @@ func Kprobe(symbol string, prog *ebpf.Program) (Link, error) { // before the given kernel symbol exits, with the function stack left intact. // See /proc/kallsyms for available symbols. For example, printk(): // -// kp, err := Kretprobe("printk", prog) +// Kretprobe("printk", prog) // -// Losing the reference to the resulting Link (kp) will close the Kretprobe -// and prevent further execution of prog. The Link must be Closed during -// program shutdown to avoid leaking system resources. +// The resulting Link must be Closed during program shutdown to avoid leaking +// system resources. func Kretprobe(symbol string, prog *ebpf.Program) (Link, error) { k, err := kprobe(symbol, prog, true) if err != nil { @@ -158,7 +157,7 @@ func kprobe(symbol string, prog *ebpf.Program, ret bool) (*perfEvent, error) { // pmuKprobe opens a perf event based on the kprobe PMU. // Returns os.ErrNotExist if the given symbol does not exist in the kernel. func pmuKprobe(symbol string, ret bool) (*perfEvent, error) { - return pmuProbe(kprobeType, symbol, "", 0, perfAllThreads, ret) + return pmuProbe(kprobeType, symbol, "", 0, ret) } // pmuProbe opens a perf event based on a Performance Monitoring Unit. @@ -168,7 +167,7 @@ func pmuKprobe(symbol string, ret bool) (*perfEvent, error) { // 33ea4b24277b "perf/core: Implement the 'perf_uprobe' PMU" // // Returns ErrNotSupported if the kernel doesn't support perf_[k,u]probe PMU -func pmuProbe(typ probeType, symbol, path string, offset uint64, pid int, ret bool) (*perfEvent, error) { +func pmuProbe(typ probeType, symbol, path string, offset uint64, ret bool) (*perfEvent, error) { // Getting the PMU type will fail if the kernel doesn't support // the perf_[k,u]probe PMU. et, err := getPMUEventType(typ) @@ -192,7 +191,7 @@ func pmuProbe(typ probeType, symbol, path string, offset uint64, pid int, ret bo switch typ { case kprobeType: // Create a pointer to a NUL-terminated string for the kernel. - sp, err = unsafeStringPtr(symbol) + sp, err := unsafeStringPtr(symbol) if err != nil { return nil, err } @@ -203,7 +202,7 @@ func pmuProbe(typ probeType, symbol, path string, offset uint64, pid int, ret bo Config: config, // Retprobe flag } case uprobeType: - sp, err = unsafeStringPtr(path) + sp, err := unsafeStringPtr(path) if err != nil { return nil, err } @@ -221,7 +220,7 @@ func pmuProbe(typ probeType, symbol, path string, offset uint64, pid int, ret bo } } - fd, err := unix.PerfEventOpen(&attr, pid, 0, -1, unix.PERF_FLAG_FD_CLOEXEC) + fd, err := unix.PerfEventOpen(&attr, perfAllThreads, 0, -1, unix.PERF_FLAG_FD_CLOEXEC) // Since commit 97c753e62e6c, ENOENT is correctly returned instead of EINVAL // when trying to create a kretprobe for a missing symbol. Make sure ENOENT @@ -229,11 +228,6 @@ func pmuProbe(typ probeType, symbol, path string, offset uint64, pid int, ret bo if errors.Is(err, os.ErrNotExist) || errors.Is(err, unix.EINVAL) { return nil, fmt.Errorf("symbol '%s' not found: %w", symbol, os.ErrNotExist) } - // Since at least commit cb9a19fe4aa51, ENOTSUPP is returned - // when attempting to set a uprobe on a trap instruction. - if errors.Is(err, unix.ENOTSUPP) { - return nil, fmt.Errorf("failed setting uprobe on offset %#x (possible trap insn): %w", offset, err) - } if err != nil { return nil, fmt.Errorf("opening perf event: %w", err) } @@ -252,7 +246,7 @@ func pmuProbe(typ probeType, symbol, path string, offset uint64, pid int, ret bo // tracefsKprobe creates a Kprobe tracefs entry. func tracefsKprobe(symbol string, ret bool) (*perfEvent, error) { - return tracefsProbe(kprobeType, symbol, "", 0, perfAllThreads, ret) + return tracefsProbe(kprobeType, symbol, "", 0, ret) } // tracefsProbe creates a trace event by writing an entry to /[k,u]probe_events. @@ -261,7 +255,7 @@ func tracefsKprobe(symbol string, ret bool) (*perfEvent, error) { // Path and offset are only set in the case of uprobe(s) and are used to set // the executable/library path on the filesystem and the offset where the probe is inserted. // A perf event is then opened on the newly-created trace event and returned to the caller. -func tracefsProbe(typ probeType, symbol, path string, offset uint64, pid int, ret bool) (*perfEvent, error) { +func tracefsProbe(typ probeType, symbol, path string, offset uint64, ret bool) (*perfEvent, error) { // Generate a random string for each trace event we attempt to create. // This value is used as the 'group' token in tracefs to allow creating // multiple kprobe trace events with the same name. @@ -294,7 +288,7 @@ func tracefsProbe(typ probeType, symbol, path string, offset uint64, pid int, re } // Kprobes are ephemeral tracepoints and share the same perf event type. - fd, err := openTracepointPerfEvent(tid, pid) + fd, err := openTracepointPerfEvent(tid) if err != nil { return nil, err } @@ -419,7 +413,7 @@ func probePrefix(ret bool) string { func determineRetprobeBit(typ probeType) (uint64, error) { p := filepath.Join("/sys/bus/event_source/devices/", typ.String(), "/format/retprobe") - data, err := os.ReadFile(p) + data, err := ioutil.ReadFile(p) if err != nil { return 0, err } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/link/link.go b/src/runtime/vendor/github.com/cilium/ebpf/link/link.go index 492658469..16cfff415 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/link/link.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/link/link.go @@ -6,7 +6,6 @@ import ( "github.com/cilium/ebpf" "github.com/cilium/ebpf/internal" - "github.com/cilium/ebpf/internal/btf" ) var ErrNotSupported = internal.ErrNotSupported @@ -30,8 +29,8 @@ type Link interface { // Close frees resources. // - // The link will be broken unless it has been successfully pinned. - // A link may continue past the lifetime of the process if Close is + // The link will be broken unless it has been pinned. A link + // may continue past the lifetime of the process if Close is // not called. Close() error @@ -50,8 +49,6 @@ type RawLinkOptions struct { Program *ebpf.Program // Attach must match the attach type of Program. Attach ebpf.AttachType - // BTF is the BTF of the attachment target. - BTF btf.TypeID } // RawLinkInfo contains metadata on a link. @@ -86,10 +83,9 @@ func AttachRawLink(opts RawLinkOptions) (*RawLink, error) { } attr := bpfLinkCreateAttr{ - targetFd: uint32(opts.Target), - progFd: uint32(progFd), - attachType: opts.Attach, - targetBTFID: uint32(opts.BTF), + targetFd: uint32(opts.Target), + progFd: uint32(progFd), + attachType: opts.Attach, } fd, err := bpfLinkCreate(&attr) if err != nil { diff --git a/src/runtime/vendor/github.com/cilium/ebpf/link/perf_event.go b/src/runtime/vendor/github.com/cilium/ebpf/link/perf_event.go index 7e0443a75..5267a47ec 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/link/perf_event.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/link/perf_event.go @@ -4,6 +4,7 @@ import ( "bytes" "errors" "fmt" + "io/ioutil" "os" "path/filepath" "regexp" @@ -235,7 +236,7 @@ func getPMUEventType(typ probeType) (uint64, error) { // openTracepointPerfEvent opens a tracepoint-type perf event. System-wide // [k,u]probes created by writing to /[k,u]probe_events are tracepoints // behind the scenes, and can be attached to using these perf events. -func openTracepointPerfEvent(tid uint64, pid int) (*internal.FD, error) { +func openTracepointPerfEvent(tid uint64) (*internal.FD, error) { attr := unix.PerfEventAttr{ Type: unix.PERF_TYPE_TRACEPOINT, Config: tid, @@ -244,7 +245,7 @@ func openTracepointPerfEvent(tid uint64, pid int) (*internal.FD, error) { Wakeup: 1, } - fd, err := unix.PerfEventOpen(&attr, pid, 0, -1, unix.PERF_FLAG_FD_CLOEXEC) + fd, err := unix.PerfEventOpen(&attr, perfAllThreads, 0, -1, unix.PERF_FLAG_FD_CLOEXEC) if err != nil { return nil, fmt.Errorf("opening tracepoint perf event: %w", err) } @@ -262,7 +263,7 @@ func uint64FromFile(base string, path ...string) (uint64, error) { return 0, fmt.Errorf("path '%s' attempts to escape base path '%s': %w", l, base, errInvalidInput) } - data, err := os.ReadFile(p) + data, err := ioutil.ReadFile(p) if err != nil { return 0, fmt.Errorf("reading file %s: %w", p, err) } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/link/syscalls.go b/src/runtime/vendor/github.com/cilium/ebpf/link/syscalls.go index a61499438..30e8a8805 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/link/syscalls.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/link/syscalls.go @@ -88,11 +88,10 @@ var haveProgAttachReplace = internal.FeatureTest("BPF_PROG_ATTACH atomic replace }) type bpfLinkCreateAttr struct { - progFd uint32 - targetFd uint32 - attachType ebpf.AttachType - flags uint32 - targetBTFID uint32 + progFd uint32 + targetFd uint32 + attachType ebpf.AttachType + flags uint32 } func bpfLinkCreate(attr *bpfLinkCreateAttr) (*internal.FD, error) { diff --git a/src/runtime/vendor/github.com/cilium/ebpf/link/tracepoint.go b/src/runtime/vendor/github.com/cilium/ebpf/link/tracepoint.go index 7423df86b..b8ae04bf0 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/link/tracepoint.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/link/tracepoint.go @@ -11,11 +11,7 @@ import ( // tracepoints. The top-level directory is the group, the event's subdirectory // is the name. Example: // -// tp, err := Tracepoint("syscalls", "sys_enter_fork", prog) -// -// Losing the reference to the resulting Link (tp) will close the Tracepoint -// and prevent further execution of prog. The Link must be Closed during -// program shutdown to avoid leaking system resources. +// Tracepoint("syscalls", "sys_enter_fork", prog) // // Note that attaching eBPF programs to syscalls (sys_enter_*/sys_exit_*) is // only possible as of kernel 4.14 (commit cf5f5ce). @@ -38,7 +34,7 @@ func Tracepoint(group, name string, prog *ebpf.Program) (Link, error) { return nil, err } - fd, err := openTracepointPerfEvent(tid, perfAllThreads) + fd, err := openTracepointPerfEvent(tid) if err != nil { return nil, err } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/link/uprobe.go b/src/runtime/vendor/github.com/cilium/ebpf/link/uprobe.go index 59170ce04..2bc395ee3 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/link/uprobe.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/link/uprobe.go @@ -25,18 +25,14 @@ var ( value uint64 err error }{} - - // ErrNoSymbol indicates that the given symbol was not found - // in the ELF symbols table. - ErrNoSymbol = errors.New("not found") ) // Executable defines an executable program on the filesystem. type Executable struct { // Path of the executable on the filesystem. path string - // Parsed ELF symbols and dynamic symbols offsets. - offsets map[string]uint64 + // Parsed ELF symbols and dynamic symbols. + symbols map[string]elf.Symbol } // UprobeOptions defines additional parameters that will be used @@ -45,9 +41,6 @@ type UprobeOptions struct { // Symbol offset. Must be provided in case of external symbols (shared libs). // If set, overrides the offset eventually parsed from the executable. Offset uint64 - // Only set the uprobe on the given process ID. Useful when tracing - // shared library calls or programs that have many running instances. - PID int } // To open a new Executable, use: @@ -71,84 +64,42 @@ func OpenExecutable(path string) (*Executable, error) { return nil, fmt.Errorf("parse ELF file: %w", err) } - if se.Type != elf.ET_EXEC && se.Type != elf.ET_DYN { - // ELF is not an executable or a shared object. - return nil, errors.New("the given file is not an executable or a shared object") - } - - ex := Executable{ + var ex = Executable{ path: path, - offsets: make(map[string]uint64), + symbols: make(map[string]elf.Symbol), + } + if err := ex.addSymbols(se.Symbols); err != nil { + return nil, err } - if err := ex.load(se); err != nil { + if err := ex.addSymbols(se.DynamicSymbols); err != nil { return nil, err } return &ex, nil } -func (ex *Executable) load(f *internal.SafeELFFile) error { - syms, err := f.Symbols() +func (ex *Executable) addSymbols(f func() ([]elf.Symbol, error)) error { + // elf.Symbols and elf.DynamicSymbols return ErrNoSymbols if the section is not found. + syms, err := f() if err != nil && !errors.Is(err, elf.ErrNoSymbols) { return err } - - dynsyms, err := f.DynamicSymbols() - if err != nil && !errors.Is(err, elf.ErrNoSymbols) { - return err - } - - syms = append(syms, dynsyms...) - for _, s := range syms { if elf.ST_TYPE(s.Info) != elf.STT_FUNC { // Symbol not associated with a function or other executable code. continue } - - off := s.Value - - // Loop over ELF segments. - for _, prog := range f.Progs { - // Skip uninteresting segments. - if prog.Type != elf.PT_LOAD || (prog.Flags&elf.PF_X) == 0 { - continue - } - - if prog.Vaddr <= s.Value && s.Value < (prog.Vaddr+prog.Memsz) { - // If the symbol value is contained in the segment, calculate - // the symbol offset. - // - // fn symbol offset = fn symbol VA - .text VA + .text offset - // - // stackoverflow.com/a/40249502 - off = s.Value - prog.Vaddr + prog.Off - break - } - } - - ex.offsets[s.Name] = off + ex.symbols[s.Name] = s } - return nil } -func (ex *Executable) offset(symbol string) (uint64, error) { - if off, ok := ex.offsets[symbol]; ok { - // Symbols with location 0 from section undef are shared library calls and - // are relocated before the binary is executed. Dynamic linking is not - // implemented by the library, so mark this as unsupported for now. - // - // Since only offset values are stored and not elf.Symbol, if the value is 0, - // assume it's an external symbol. - if off == 0 { - return 0, fmt.Errorf("cannot resolve %s library call '%s', "+ - "consider providing the offset via options: %w", ex.path, symbol, ErrNotSupported) - } - return off, nil +func (ex *Executable) symbol(symbol string) (*elf.Symbol, error) { + if s, ok := ex.symbols[symbol]; ok { + return &s, nil } - return 0, fmt.Errorf("symbol %s: %w", symbol, ErrNoSymbol) + return nil, fmt.Errorf("symbol %s not found", symbol) } // Uprobe attaches the given eBPF program to a perf event that fires when the @@ -161,14 +112,11 @@ func (ex *Executable) offset(symbol string) (uint64, error) { // When using symbols which belongs to shared libraries, // an offset must be provided via options: // -// up, err := ex.Uprobe("main", prog, &UprobeOptions{Offset: 0x123}) +// ex.Uprobe("main", prog, &UprobeOptions{Offset: 0x123}) // -// Losing the reference to the resulting Link (up) will close the Uprobe -// and prevent further execution of prog. The Link must be Closed during -// program shutdown to avoid leaking system resources. -// -// Functions provided by shared libraries can currently not be traced and -// will result in an ErrNotSupported. +// The resulting Link must be Closed during program shutdown to avoid leaking +// system resources. Functions provided by shared libraries can currently not +// be traced and will result in an ErrNotSupported. func (ex *Executable) Uprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions) (Link, error) { u, err := ex.uprobe(symbol, prog, opts, false) if err != nil { @@ -193,14 +141,11 @@ func (ex *Executable) Uprobe(symbol string, prog *ebpf.Program, opts *UprobeOpti // When using symbols which belongs to shared libraries, // an offset must be provided via options: // -// up, err := ex.Uretprobe("main", prog, &UprobeOptions{Offset: 0x123}) +// ex.Uretprobe("main", prog, &UprobeOptions{Offset: 0x123}) // -// Losing the reference to the resulting Link (up) will close the Uprobe -// and prevent further execution of prog. The Link must be Closed during -// program shutdown to avoid leaking system resources. -// -// Functions provided by shared libraries can currently not be traced and -// will result in an ErrNotSupported. +// The resulting Link must be Closed during program shutdown to avoid leaking +// system resources. Functions provided by shared libraries can currently not +// be traced and will result in an ErrNotSupported. func (ex *Executable) Uretprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions) (Link, error) { u, err := ex.uprobe(symbol, prog, opts, true) if err != nil { @@ -230,20 +175,24 @@ func (ex *Executable) uprobe(symbol string, prog *ebpf.Program, opts *UprobeOpti if opts != nil && opts.Offset != 0 { offset = opts.Offset } else { - off, err := ex.offset(symbol) + sym, err := ex.symbol(symbol) if err != nil { - return nil, err + return nil, fmt.Errorf("symbol '%s' not found: %w", symbol, err) } - offset = off - } - pid := perfAllThreads - if opts != nil && opts.PID != 0 { - pid = opts.PID + // Symbols with location 0 from section undef are shared library calls and + // are relocated before the binary is executed. Dynamic linking is not + // implemented by the library, so mark this as unsupported for now. + if sym.Section == elf.SHN_UNDEF && sym.Value == 0 { + return nil, fmt.Errorf("cannot resolve %s library call '%s', "+ + "consider providing the offset via options: %w", ex.path, symbol, ErrNotSupported) + } + + offset = sym.Value } // Use uprobe PMU if the kernel has it available. - tp, err := pmuUprobe(symbol, ex.path, offset, pid, ret) + tp, err := pmuUprobe(symbol, ex.path, offset, ret) if err == nil { return tp, nil } @@ -252,7 +201,7 @@ func (ex *Executable) uprobe(symbol string, prog *ebpf.Program, opts *UprobeOpti } // Use tracefs if uprobe PMU is missing. - tp, err = tracefsUprobe(uprobeSanitizedSymbol(symbol), ex.path, offset, pid, ret) + tp, err = tracefsUprobe(uprobeSanitizedSymbol(symbol), ex.path, offset, ret) if err != nil { return nil, fmt.Errorf("creating trace event '%s:%s' in tracefs: %w", ex.path, symbol, err) } @@ -261,13 +210,13 @@ func (ex *Executable) uprobe(symbol string, prog *ebpf.Program, opts *UprobeOpti } // pmuUprobe opens a perf event based on the uprobe PMU. -func pmuUprobe(symbol, path string, offset uint64, pid int, ret bool) (*perfEvent, error) { - return pmuProbe(uprobeType, symbol, path, offset, pid, ret) +func pmuUprobe(symbol, path string, offset uint64, ret bool) (*perfEvent, error) { + return pmuProbe(uprobeType, symbol, path, offset, ret) } // tracefsUprobe creates a Uprobe tracefs entry. -func tracefsUprobe(symbol, path string, offset uint64, pid int, ret bool) (*perfEvent, error) { - return tracefsProbe(uprobeType, symbol, path, offset, pid, ret) +func tracefsUprobe(symbol, path string, offset uint64, ret bool) (*perfEvent, error) { + return tracefsProbe(uprobeType, symbol, path, offset, ret) } // uprobeSanitizedSymbol replaces every invalid characted for the tracefs api with an underscore. diff --git a/src/runtime/vendor/github.com/cilium/ebpf/linker.go b/src/runtime/vendor/github.com/cilium/ebpf/linker.go index f3b1629e7..6c2efef9e 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/linker.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/linker.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/cilium/ebpf/asm" + "github.com/cilium/ebpf/internal/btf" ) // link resolves bpf-to-bpf calls. @@ -39,7 +40,7 @@ func link(prog *ProgramSpec, libs []*ProgramSpec) error { pending = append(pending, lib.Instructions) if prog.BTF != nil && lib.BTF != nil { - if err := prog.BTF.Append(lib.BTF); err != nil { + if err := btf.ProgramAppend(prog.BTF, lib.BTF); err != nil { return fmt.Errorf("linking BTF of %s: %w", lib.Name, err) } } @@ -135,25 +136,5 @@ func fixupJumpsAndCalls(insns asm.Instructions) error { } } - // fixupBPFCalls replaces bpf_probe_read_{kernel,user}[_str] with bpf_probe_read[_str] on older kernels - // https://github.com/libbpf/libbpf/blob/master/src/libbpf.c#L6009 - iter = insns.Iterate() - for iter.Next() { - ins := iter.Ins - if !ins.IsBuiltinCall() { - continue - } - switch asm.BuiltinFunc(ins.Constant) { - case asm.FnProbeReadKernel, asm.FnProbeReadUser: - if err := haveProbeReadKernel(); err != nil { - ins.Constant = int64(asm.FnProbeRead) - } - case asm.FnProbeReadKernelStr, asm.FnProbeReadUserStr: - if err := haveProbeReadKernel(); err != nil { - ins.Constant = int64(asm.FnProbeReadStr) - } - } - } - return nil } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/map.go b/src/runtime/vendor/github.com/cilium/ebpf/map.go index cca387ead..f257d88c0 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/map.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/map.go @@ -1,7 +1,6 @@ package ebpf import ( - "bytes" "errors" "fmt" "io" @@ -66,11 +65,6 @@ type MapSpec struct { // InnerMap is used as a template for ArrayOfMaps and HashOfMaps InnerMap *MapSpec - // Extra trailing bytes found in the ELF map definition when using structs - // larger than libbpf's bpf_map_def. Must be empty before instantiating - // the MapSpec into a Map. - Extra bytes.Reader - // The BTF associated with this map. BTF *btf.Map } @@ -88,12 +82,9 @@ func (ms *MapSpec) Copy() *MapSpec { } cpy := *ms - cpy.Contents = make([]MapKV, len(ms.Contents)) copy(cpy.Contents, ms.Contents) - cpy.InnerMap = ms.InnerMap.Copy() - return &cpy } @@ -197,24 +188,14 @@ func NewMap(spec *MapSpec) (*Map, error) { // // The caller is responsible for ensuring the process' rlimit is set // sufficiently high for locking memory during map creation. This can be done -// by calling rlimit.RemoveMemlock() prior to calling NewMapWithOptions. +// by calling unix.Setrlimit with unix.RLIMIT_MEMLOCK prior to calling NewMapWithOptions. // // May return an error wrapping ErrMapIncompatible. func NewMapWithOptions(spec *MapSpec, opts MapOptions) (*Map, error) { handles := newHandleCache() defer handles.close() - m, err := newMapWithOptions(spec, opts, handles) - if err != nil { - return nil, fmt.Errorf("creating map: %w", err) - } - - err = m.finalize(spec) - if err != nil { - return nil, fmt.Errorf("populating map: %w", err) - } - - return m, nil + return newMapWithOptions(spec, opts, handles) } func newMapWithOptions(spec *MapSpec, opts MapOptions, handles *handleCache) (_ *Map, err error) { @@ -226,12 +207,8 @@ func newMapWithOptions(spec *MapSpec, opts MapOptions, handles *handleCache) (_ switch spec.Pinning { case PinByName: - if spec.Name == "" { - return nil, fmt.Errorf("pin by name: missing Name") - } - - if opts.PinPath == "" { - return nil, fmt.Errorf("pin by name: missing MapOptions.PinPath") + if spec.Name == "" || opts.PinPath == "" { + return nil, fmt.Errorf("pin by name: missing Name or PinPath") } path := filepath.Join(opts.PinPath, spec.Name) @@ -267,19 +244,16 @@ func newMapWithOptions(spec *MapSpec, opts MapOptions, handles *handleCache) (_ return nil, errors.New("inner maps cannot be pinned") } - template, err := spec.InnerMap.createMap(nil, opts, handles) + template, err := createMap(spec.InnerMap, nil, opts, handles) if err != nil { - return nil, fmt.Errorf("inner map: %w", err) + return nil, err } defer template.Close() - // Intentionally skip populating and freezing (finalizing) - // the inner map template since it will be removed shortly. - innerFd = template.fd } - m, err := spec.createMap(innerFd, opts, handles) + m, err := createMap(spec, innerFd, opts, handles) if err != nil { return nil, err } @@ -295,9 +269,7 @@ func newMapWithOptions(spec *MapSpec, opts MapOptions, handles *handleCache) (_ return m, nil } -// createMap validates the spec's properties and creates the map in the kernel -// using the given opts. It does not populate or freeze the map. -func (spec *MapSpec) createMap(inner *internal.FD, opts MapOptions, handles *handleCache) (_ *Map, err error) { +func createMap(spec *MapSpec, inner *internal.FD, opts MapOptions, handles *handleCache) (_ *Map, err error) { closeOnError := func(closer io.Closer) { if err != nil { closer.Close() @@ -306,16 +278,10 @@ func (spec *MapSpec) createMap(inner *internal.FD, opts MapOptions, handles *han spec = spec.Copy() - // Kernels 4.13 through 5.4 used a struct bpf_map_def that contained - // additional 'inner_map_idx' and later 'numa_node' fields. - // In order to support loading these definitions, tolerate the presence of - // extra bytes, but require them to be zeroes. - if _, err := io.Copy(internal.DiscardZeroes{}, &spec.Extra); err != nil { - return nil, errors.New("extra contains unhandled non-zero bytes, drain before creating map") - } - switch spec.Type { - case ArrayOfMaps, HashOfMaps: + case ArrayOfMaps: + fallthrough + case HashOfMaps: if err := haveNestedMaps(); err != nil { return nil, err } @@ -384,7 +350,7 @@ func (spec *MapSpec) createMap(inner *internal.FD, opts MapOptions, handles *han var btfDisabled bool if spec.BTF != nil { - handle, err := handles.btfHandle(spec.BTF.Spec) + handle, err := handles.btfHandle(btf.MapSpec(spec.BTF)) btfDisabled = errors.Is(err, btf.ErrNotSupported) if err != nil && !btfDisabled { return nil, fmt.Errorf("load BTF: %w", err) @@ -392,15 +358,15 @@ func (spec *MapSpec) createMap(inner *internal.FD, opts MapOptions, handles *han if handle != nil { attr.BTFFd = uint32(handle.FD()) - attr.BTFKeyTypeID = uint32(spec.BTF.Key.ID()) - attr.BTFValueTypeID = uint32(spec.BTF.Value.ID()) + attr.BTFKeyTypeID = uint32(btf.MapKey(spec.BTF).ID()) + attr.BTFValueTypeID = uint32(btf.MapValue(spec.BTF).ID()) } } fd, err := internal.BPFMapCreate(&attr) if err != nil { if errors.Is(err, unix.EPERM) { - return nil, fmt.Errorf("map create: %w (MEMLOCK bay be too low, consider rlimit.RemoveMemlock)", err) + return nil, fmt.Errorf("map create: RLIMIT_MEMLOCK may be too low: %w", err) } if btfDisabled { return nil, fmt.Errorf("map create without BTF: %w", err) @@ -414,11 +380,19 @@ func (spec *MapSpec) createMap(inner *internal.FD, opts MapOptions, handles *han return nil, fmt.Errorf("map create: %w", err) } + if err := m.populate(spec.Contents); err != nil { + return nil, fmt.Errorf("map create: can't set initial contents: %w", err) + } + + if spec.Freeze { + if err := m.Freeze(); err != nil { + return nil, fmt.Errorf("can't freeze map: %w", err) + } + } + return m, nil } -// newMap allocates and returns a new Map structure. -// Sets the fullValueSize on per-CPU maps. func newMap(fd *internal.FD, name string, typ MapType, keySize, valueSize, maxEntries, flags uint32) (*Map, error) { m := &Map{ name, @@ -441,7 +415,7 @@ func newMap(fd *internal.FD, name string, typ MapType, keySize, valueSize, maxEn return nil, err } - m.fullValueSize = internal.Align(int(valueSize), 8) * possibleCPUs + m.fullValueSize = align(int(valueSize), 8) * possibleCPUs return m, nil } @@ -918,21 +892,12 @@ func (m *Map) Freeze() error { return nil } -// finalize populates the Map according to the Contents specified -// in spec and freezes the Map if requested by spec. -func (m *Map) finalize(spec *MapSpec) error { - for _, kv := range spec.Contents { +func (m *Map) populate(contents []MapKV) error { + for _, kv := range contents { if err := m.Put(kv.Key, kv.Value); err != nil { - return fmt.Errorf("putting value: key %v: %w", kv.Key, err) + return fmt.Errorf("key %v: %w", kv.Key, err) } } - - if spec.Freeze { - if err := m.Freeze(); err != nil { - return fmt.Errorf("freezing map: %w", err) - } - } - return nil } @@ -1247,7 +1212,7 @@ func MapGetNextID(startID MapID) (MapID, error) { // // Returns ErrNotExist, if there is no eBPF map with the given id. func NewMapFromID(id MapID) (*Map, error) { - fd, err := internal.BPFObjGetFDByID(internal.BPF_MAP_GET_FD_BY_ID, uint32(id)) + fd, err := bpfObjGetFDByID(internal.BPF_MAP_GET_FD_BY_ID, uint32(id)) if err != nil { return nil, err } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/marshalers.go b/src/runtime/vendor/github.com/cilium/ebpf/marshalers.go index e461d673d..f2610eff9 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/marshalers.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/marshalers.go @@ -8,7 +8,6 @@ import ( "fmt" "reflect" "runtime" - "sync" "unsafe" "github.com/cilium/ebpf/internal" @@ -40,10 +39,6 @@ func marshalPtr(data interface{}, length int) (internal.Pointer, error) { // Returns an error if the given value isn't representable in exactly // length bytes. func marshalBytes(data interface{}, length int) (buf []byte, err error) { - if data == nil { - return nil, errors.New("can't marshal a nil value") - } - switch value := data.(type) { case encoding.BinaryMarshaler: buf, err = value.MarshalBinary() @@ -82,30 +77,22 @@ func makeBuffer(dst interface{}, length int) (internal.Pointer, []byte) { return internal.NewSlicePointer(buf), buf } -var bytesReaderPool = sync.Pool{ - New: func() interface{} { - return new(bytes.Reader) - }, -} - // unmarshalBytes converts a byte buffer into an arbitrary value. // // Prefer using Map.unmarshalKey and Map.unmarshalValue if possible, since // those have special cases that allow more types to be encoded. -// -// The common int32 and int64 types are directly handled to avoid -// unnecessary heap allocations as happening in the default case. func unmarshalBytes(data interface{}, buf []byte) error { switch value := data.(type) { case unsafe.Pointer: - var dst []byte - // Use unsafe.Slice when we drop support for pre1.17 (https://github.com/golang/go/issues/19367) - // We could opt for removing unsafe.Pointer support in the lib as well - sh := (*reflect.SliceHeader)(unsafe.Pointer(&dst)) - sh.Data = uintptr(value) - sh.Len = len(buf) - sh.Cap = len(buf) + // This could be solved in Go 1.17 by unsafe.Slice instead. (https://github.com/golang/go/issues/19367) + // We could opt for removing unsafe.Pointer support in the lib as well. + sh := &reflect.SliceHeader{ //nolint:govet + Data: uintptr(value), + Len: len(buf), + Cap: len(buf), + } + dst := *(*[]byte)(unsafe.Pointer(sh)) copy(dst, buf) runtime.KeepAlive(value) return nil @@ -119,38 +106,12 @@ func unmarshalBytes(data interface{}, buf []byte) error { case *[]byte: *value = buf return nil - case *int32: - if len(buf) < 4 { - return errors.New("int32 requires 4 bytes") - } - *value = int32(internal.NativeEndian.Uint32(buf)) - return nil - case *uint32: - if len(buf) < 4 { - return errors.New("uint32 requires 4 bytes") - } - *value = internal.NativeEndian.Uint32(buf) - return nil - case *int64: - if len(buf) < 8 { - return errors.New("int64 requires 8 bytes") - } - *value = int64(internal.NativeEndian.Uint64(buf)) - return nil - case *uint64: - if len(buf) < 8 { - return errors.New("uint64 requires 8 bytes") - } - *value = internal.NativeEndian.Uint64(buf) - return nil case string: return errors.New("require pointer to string") case []byte: return errors.New("require pointer to []byte") default: - rd := bytesReaderPool.Get().(*bytes.Reader) - rd.Reset(buf) - defer bytesReaderPool.Put(rd) + rd := bytes.NewReader(buf) if err := binary.Read(rd, internal.NativeEndian, value); err != nil { return fmt.Errorf("decoding %T: %v", value, err) } @@ -181,7 +142,7 @@ func marshalPerCPUValue(slice interface{}, elemLength int) (internal.Pointer, er return internal.Pointer{}, fmt.Errorf("per-CPU value exceeds number of CPUs") } - alignedElemLength := internal.Align(elemLength, 8) + alignedElemLength := align(elemLength, 8) buf := make([]byte, alignedElemLength*possibleCPUs) for i := 0; i < sliceLen; i++ { @@ -251,3 +212,7 @@ func unmarshalPerCPUValue(slicePtr interface{}, elemLength int, buf []byte) erro reflect.ValueOf(slicePtr).Elem().Set(slice) return nil } + +func align(n, alignment int) int { + return (int(n) + alignment - 1) / alignment * alignment +} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/prog.go b/src/runtime/vendor/github.com/cilium/ebpf/prog.go index 3549a3fe3..13bdb6dda 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/prog.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/prog.go @@ -57,21 +57,16 @@ type ProgramSpec struct { // Name is passed to the kernel as a debug aid. Must only contain // alpha numeric and '_' characters. Name string - // Type determines at which hook in the kernel a program will run. Type ProgramType AttachType AttachType - // Name of a kernel data structure or function to attach to. Its - // interpretation depends on Type and AttachType. - AttachTo string - // The program to attach to. Must be provided manually. - AttachTarget *Program + // Name of a kernel data structure to attach to. It's interpretation + // depends on Type and AttachType. + AttachTo string Instructions asm.Instructions - // Flags is passed to the kernel and specifies additional program // load attributes. Flags uint32 - // License of the program. Some helpers are only available if // the license is deemed compatible with the GPL. // @@ -151,7 +146,7 @@ func NewProgramWithOptions(spec *ProgramSpec, opts ProgramOptions) (*Program, er func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions, handles *handleCache) (*Program, error) { if len(spec.Instructions) == 0 { - return nil, errors.New("instructions cannot be empty") + return nil, errors.New("Instructions cannot be empty") } if spec.ByteOrder != nil && spec.ByteOrder != internal.NativeEndian { @@ -171,16 +166,16 @@ func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions, handles *hand kv = v.Kernel() } - attr := &internal.BPFProgLoadAttr{ - ProgType: uint32(spec.Type), - ProgFlags: spec.Flags, - ExpectedAttachType: uint32(spec.AttachType), - License: internal.NewStringPointer(spec.License), - KernelVersion: kv, + attr := &bpfProgLoadAttr{ + progType: spec.Type, + progFlags: spec.Flags, + expectedAttachType: spec.AttachType, + license: internal.NewStringPointer(spec.License), + kernelVersion: kv, } if haveObjName() == nil { - attr.ProgName = internal.NewBPFObjName(spec.Name) + attr.progName = internal.NewBPFObjName(spec.Name) } var err error @@ -195,35 +190,35 @@ func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions, handles *hand var btfDisabled bool var core btf.COREFixups if spec.BTF != nil { - core, err = spec.BTF.Fixups(targetBTF) + core, err = btf.ProgramFixups(spec.BTF, targetBTF) if err != nil { return nil, fmt.Errorf("CO-RE relocations: %w", err) } - handle, err := handles.btfHandle(spec.BTF.Spec()) + handle, err := handles.btfHandle(btf.ProgramSpec(spec.BTF)) btfDisabled = errors.Is(err, btf.ErrNotSupported) if err != nil && !btfDisabled { return nil, fmt.Errorf("load BTF: %w", err) } if handle != nil { - attr.ProgBTFFd = uint32(handle.FD()) + attr.progBTFFd = uint32(handle.FD()) - recSize, bytes, err := spec.BTF.LineInfos() + recSize, bytes, err := btf.ProgramLineInfos(spec.BTF) if err != nil { return nil, fmt.Errorf("get BTF line infos: %w", err) } - attr.LineInfoRecSize = recSize - attr.LineInfoCnt = uint32(uint64(len(bytes)) / uint64(recSize)) - attr.LineInfo = internal.NewSlicePointer(bytes) + attr.lineInfoRecSize = recSize + attr.lineInfoCnt = uint32(uint64(len(bytes)) / uint64(recSize)) + attr.lineInfo = internal.NewSlicePointer(bytes) - recSize, bytes, err = spec.BTF.FuncInfos() + recSize, bytes, err = btf.ProgramFuncInfos(spec.BTF) if err != nil { return nil, fmt.Errorf("get BTF function infos: %w", err) } - attr.FuncInfoRecSize = recSize - attr.FuncInfoCnt = uint32(uint64(len(bytes)) / uint64(recSize)) - attr.FuncInfo = internal.NewSlicePointer(bytes) + attr.funcInfoRecSize = recSize + attr.funcInfoCnt = uint32(uint64(len(bytes)) / uint64(recSize)) + attr.funcInfo = internal.NewSlicePointer(bytes) } } @@ -243,41 +238,16 @@ func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions, handles *hand } bytecode := buf.Bytes() - attr.Instructions = internal.NewSlicePointer(bytecode) - attr.InsCount = uint32(len(bytecode) / asm.InstructionSize) + attr.instructions = internal.NewSlicePointer(bytecode) + attr.insCount = uint32(len(bytecode) / asm.InstructionSize) if spec.AttachTo != "" { - if spec.AttachTarget != nil { - info, err := spec.AttachTarget.Info() - if err != nil { - return nil, fmt.Errorf("load target BTF: %w", err) - } - - btfID, ok := info.BTFID() - if !ok { - return nil, fmt.Errorf("load target BTF: no BTF info available") - } - btfHandle, err := btf.NewHandleFromID(btfID) - if err != nil { - return nil, fmt.Errorf("load target BTF: %w", err) - } - defer btfHandle.Close() - - targetBTF = btfHandle.Spec() - if err != nil { - return nil, fmt.Errorf("load target BTF: %w", err) - } - } - target, err := resolveBTFType(targetBTF, spec.AttachTo, spec.Type, spec.AttachType) if err != nil { return nil, err } if target != nil { - attr.AttachBTFID = uint32(target.ID()) - } - if spec.AttachTarget != nil { - attr.AttachProgFd = uint32(spec.AttachTarget.FD()) + attr.attachBTFID = target.ID() } } @@ -289,12 +259,12 @@ func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions, handles *hand var logBuf []byte if opts.LogLevel > 0 { logBuf = make([]byte, logSize) - attr.LogLevel = opts.LogLevel - attr.LogSize = uint32(len(logBuf)) - attr.LogBuf = internal.NewSlicePointer(logBuf) + attr.logLevel = opts.LogLevel + attr.logSize = uint32(len(logBuf)) + attr.logBuf = internal.NewSlicePointer(logBuf) } - fd, err := internal.BPFProgLoad(attr) + fd, err := bpfProgLoad(attr) if err == nil { return &Program{internal.CString(logBuf), fd, spec.Name, "", spec.Type}, nil } @@ -303,20 +273,17 @@ func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions, handles *hand if opts.LogLevel == 0 && opts.LogSize >= 0 { // Re-run with the verifier enabled to get better error messages. logBuf = make([]byte, logSize) - attr.LogLevel = 1 - attr.LogSize = uint32(len(logBuf)) - attr.LogBuf = internal.NewSlicePointer(logBuf) + attr.logLevel = 1 + attr.logSize = uint32(len(logBuf)) + attr.logBuf = internal.NewSlicePointer(logBuf) - fd, logErr = internal.BPFProgLoad(attr) - if logErr == nil { - fd.Close() - } + _, logErr = bpfProgLoad(attr) } if errors.Is(logErr, unix.EPERM) && logBuf[0] == 0 { // EPERM due to RLIMIT_MEMLOCK happens before the verifier, so we can // check that the log is empty to reduce false positives. - return nil, fmt.Errorf("load program: %w (MEMLOCK bay be too low, consider rlimit.RemoveMemlock)", logErr) + return nil, fmt.Errorf("load program: RLIMIT_MEMLOCK may be too low: %w", logErr) } err = internal.ErrorWithLog(err, logBuf, logErr) @@ -343,7 +310,7 @@ func NewProgramFromFD(fd int) (*Program, error) { // // Returns ErrNotExist, if there is no eBPF program with the given id. func NewProgramFromID(id ProgramID) (*Program, error) { - fd, err := internal.BPFObjGetFDByID(internal.BPF_PROG_GET_FD_BY_ID, uint32(id)) + fd, err := bpfObjGetFDByID(internal.BPF_PROG_GET_FD_BY_ID, uint32(id)) if err != nil { return nil, fmt.Errorf("get program by id: %w", err) } @@ -710,44 +677,45 @@ func ProgramGetNextID(startID ProgramID) (ProgramID, error) { // // Deprecated: use ProgramInfo.ID() instead. func (p *Program) ID() (ProgramID, error) { - info, err := bpfGetProgInfoByFD(p.fd, nil) + info, err := bpfGetProgInfoByFD(p.fd) if err != nil { return ProgramID(0), err } return ProgramID(info.id), nil } -func resolveBTFType(spec *btf.Spec, name string, progType ProgramType, attachType AttachType) (btf.Type, error) { +func resolveBTFType(kernel *btf.Spec, name string, progType ProgramType, attachType AttachType) (btf.Type, error) { type match struct { p ProgramType a AttachType } + var target btf.Type var typeName, featureName string switch (match{progType, attachType}) { case match{LSM, AttachLSMMac}: + target = new(btf.Func) typeName = "bpf_lsm_" + name featureName = name + " LSM hook" + case match{Tracing, AttachTraceIter}: + target = new(btf.Func) typeName = "bpf_iter_" + name featureName = name + " iterator" - case match{Extension, AttachNone}: - typeName = name - featureName = fmt.Sprintf("freplace %s", name) + default: return nil, nil } - if spec == nil { + if kernel == nil { var err error - spec, err = btf.LoadKernelSpec() + kernel, err = btf.LoadKernelSpec() if err != nil { return nil, fmt.Errorf("load kernel spec: %w", err) } } - var target *btf.Func - err := spec.FindType(typeName, &target) + err := kernel.FindType(typeName, target) if errors.Is(err, btf.ErrNotFound) { return nil, &internal.UnsupportedFeatureError{ Name: featureName, @@ -756,6 +724,5 @@ func resolveBTFType(spec *btf.Spec, name string, progType ProgramType, attachTyp if err != nil { return nil, fmt.Errorf("resolve BTF for %s: %w", featureName, err) } - return target, nil } diff --git a/src/runtime/vendor/github.com/cilium/ebpf/run-tests.sh b/src/runtime/vendor/github.com/cilium/ebpf/run-tests.sh index a079edc7e..e2437beed 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/run-tests.sh +++ b/src/runtime/vendor/github.com/cilium/ebpf/run-tests.sh @@ -5,7 +5,7 @@ # Run all tests on a 5.4 kernel # $ ./run-tests.sh 5.4 # Run a subset of tests: -# $ ./run-tests.sh 5.4 ./link +# $ ./run-tests.sh 5.4 go test ./link set -euo pipefail @@ -48,17 +48,15 @@ if [[ "${1:-}" = "--exec-vm" ]]; then rm "${output}/fake-stdin" fi - if ! $sudo virtme-run --kimg "${input}/bzImage" --memory 768M --pwd \ - --rwdir="${testdir}=${testdir}" \ - --rodir=/run/input="${input}" \ - --rwdir=/run/output="${output}" \ - --script-sh "PATH=\"$PATH\" \"$script\" --exec-test $cmd" \ - --kopt possible_cpus=2; then # need at least two CPUs for some tests - exit 23 - fi + $sudo virtme-run --kimg "${input}/bzImage" --memory 768M --pwd \ + --rwdir="${testdir}=${testdir}" \ + --rodir=/run/input="${input}" \ + --rwdir=/run/output="${output}" \ + --script-sh "PATH=\"$PATH\" \"$script\" --exec-test $cmd" \ + --qemu-opts -smp 2 # need at least two CPUs for some tests if [[ ! -e "${output}/success" ]]; then - exit 42 + exit 1 fi $sudo rm -r "$output" @@ -76,7 +74,7 @@ elif [[ "${1:-}" = "--exec-test" ]]; then dmesg -C if ! "$@"; then dmesg - exit 1 # this return code is "swallowed" by qemu + exit 1 fi touch "/run/output/success" exit 0 @@ -110,7 +108,7 @@ else echo "No selftests found, disabling" fi -args=(-short -coverpkg=./... -coverprofile=coverage.out -count 1 ./...) +args=(-v -short -coverpkg=./... -coverprofile=coverage.out -count 1 ./...) if (( $# > 0 )); then args=("$@") fi diff --git a/src/runtime/vendor/github.com/cilium/ebpf/syscalls.go b/src/runtime/vendor/github.com/cilium/ebpf/syscalls.go index f8cb5f0e0..f5a38549b 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/syscalls.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/syscalls.go @@ -1,14 +1,13 @@ package ebpf import ( - "bytes" "errors" "fmt" "os" "unsafe" - "github.com/cilium/ebpf/asm" "github.com/cilium/ebpf/internal" + "github.com/cilium/ebpf/internal/btf" "github.com/cilium/ebpf/internal/unix" ) @@ -74,6 +73,30 @@ type bpfMapInfo struct { btf_value_type_id uint32 } +type bpfProgLoadAttr struct { + progType ProgramType + insCount uint32 + instructions internal.Pointer + license internal.Pointer + logLevel uint32 + logSize uint32 + logBuf internal.Pointer + kernelVersion uint32 // since 4.1 2541517c32be + progFlags uint32 // since 4.11 e07b98d9bffe + progName internal.BPFObjName // since 4.15 067cae47771c + progIfIndex uint32 // since 4.15 1f6f4cb7ba21 + expectedAttachType AttachType // since 4.17 5e43f899b03a + progBTFFd uint32 + funcInfoRecSize uint32 + funcInfo internal.Pointer + funcInfoCnt uint32 + lineInfoRecSize uint32 + lineInfo internal.Pointer + lineInfoCnt uint32 + attachBTFID btf.TypeID + attachProgFd uint32 +} + type bpfProgInfo struct { prog_type uint32 id uint32 @@ -84,7 +107,7 @@ type bpfProgInfo struct { xlated_prog_insns internal.Pointer load_time uint64 // since 4.15 cb4d2b3f03d8 created_by_uid uint32 - nr_map_ids uint32 // since 4.15 cb4d2b3f03d8 + nr_map_ids uint32 map_ids internal.Pointer name internal.BPFObjName // since 4.15 067cae47771c ifindex uint32 @@ -122,6 +145,11 @@ type bpfProgTestRunAttr struct { duration uint32 } +type bpfGetFDByIDAttr struct { + id uint32 + next uint32 +} + type bpfMapFreezeAttr struct { mapFd uint32 } @@ -132,6 +160,23 @@ type bpfObjGetNextIDAttr struct { openFlags uint32 } +func bpfProgLoad(attr *bpfProgLoadAttr) (*internal.FD, error) { + for { + fd, err := internal.BPF(internal.BPF_PROG_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr)) + // As of ~4.20 the verifier can be interrupted by a signal, + // and returns EAGAIN in that case. + if errors.Is(err, unix.EAGAIN) { + continue + } + + if err != nil { + return nil, err + } + + return internal.NewFD(uint32(fd)), nil + } +} + func bpfProgTestRun(attr *bpfProgTestRunAttr) error { _, err := internal.BPF(internal.BPF_PROG_TEST_RUN, unsafe.Pointer(attr), unsafe.Sizeof(*attr)) return err @@ -327,10 +372,6 @@ func wrapMapError(err error) error { return internal.SyscallError(ErrNotSupported, unix.ENOTSUPP) } - if errors.Is(err, unix.E2BIG) { - return fmt.Errorf("key too big for map: %w", err) - } - return err } @@ -347,13 +388,8 @@ func bpfMapFreeze(m *internal.FD) error { return err } -func bpfGetProgInfoByFD(fd *internal.FD, ids []MapID) (*bpfProgInfo, error) { +func bpfGetProgInfoByFD(fd *internal.FD) (*bpfProgInfo, error) { var info bpfProgInfo - if len(ids) > 0 { - info.nr_map_ids = uint32(len(ids)) - info.map_ids = internal.NewPointer(unsafe.Pointer(&ids[0])) - } - if err := internal.BPFObjGetInfoByFD(fd, unsafe.Pointer(&info), unsafe.Sizeof(info)); err != nil { return nil, fmt.Errorf("can't get program info: %w", err) } @@ -435,30 +471,10 @@ var haveBatchAPI = internal.FeatureTest("map batch api", "5.6", func() error { return nil }) -var haveProbeReadKernel = internal.FeatureTest("bpf_probe_read_kernel", "5.5", func() error { - insns := asm.Instructions{ - asm.Mov.Reg(asm.R1, asm.R10), - asm.Add.Imm(asm.R1, -8), - asm.Mov.Imm(asm.R2, 8), - asm.Mov.Imm(asm.R3, 0), - asm.FnProbeReadKernel.Call(), - asm.Return(), +func bpfObjGetFDByID(cmd internal.BPFCmd, id uint32) (*internal.FD, error) { + attr := bpfGetFDByIDAttr{ + id: id, } - buf := bytes.NewBuffer(make([]byte, 0, len(insns)*asm.InstructionSize)) - if err := insns.Marshal(buf, internal.NativeEndian); err != nil { - return err - } - bytecode := buf.Bytes() - - fd, err := internal.BPFProgLoad(&internal.BPFProgLoadAttr{ - ProgType: uint32(Kprobe), - License: internal.NewStringPointer("GPL"), - Instructions: internal.NewSlicePointer(bytecode), - InsCount: uint32(len(bytecode) / asm.InstructionSize), - }) - if err != nil { - return internal.ErrNotSupported - } - _ = fd.Close() - return nil -}) + ptr, err := internal.BPF(cmd, unsafe.Pointer(&attr), unsafe.Sizeof(attr)) + return internal.NewFD(uint32(ptr)), err +} diff --git a/src/runtime/vendor/github.com/cilium/ebpf/types.go b/src/runtime/vendor/github.com/cilium/ebpf/types.go index 84b83f9f9..441a82fe4 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/types.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/types.go @@ -4,17 +4,12 @@ import ( "github.com/cilium/ebpf/internal/unix" ) -//go:generate stringer -output types_string.go -type=MapType,ProgramType,PinType +//go:generate stringer -output types_string.go -type=MapType,ProgramType,AttachType,PinType // MapType indicates the type map structure // that will be initialized in the kernel. type MapType uint32 -// Max returns the latest supported MapType. -func (_ MapType) Max() MapType { - return maxMapType - 1 -} - // All the various map types that can be created const ( UnspecifiedMap MapType = iota @@ -90,28 +85,15 @@ const ( SkStorage // DevMapHash - Hash-based indexing scheme for references to network devices. DevMapHash - // StructOpsMap - This map holds a kernel struct with its function pointer implemented in a BPF - // program. - StructOpsMap - // RingBuf - Similar to PerfEventArray, but shared across all CPUs. + StructOpts RingBuf - // InodeStorage - Specialized local storage map for inodes. InodeStorage - // TaskStorage - Specialized local storage map for task_struct. TaskStorage - // maxMapType - Bound enum of MapTypes, has to be last in enum. - maxMapType ) -// Deprecated: StructOpts was a typo, use StructOpsMap instead. -// -// Declared as a variable to prevent stringer from picking it up -// as an enum value. -var StructOpts MapType = StructOpsMap - // hasPerCPUValue returns true if the Map stores a value per CPU. func (mt MapType) hasPerCPUValue() bool { - return mt == PerCPUHash || mt == PerCPUArray || mt == LRUCPUHash || mt == PerCPUCGroupStorage + return mt == PerCPUHash || mt == PerCPUArray || mt == LRUCPUHash } // canStoreMap returns true if the map type accepts a map fd @@ -129,11 +111,6 @@ func (mt MapType) canStoreProgram() bool { // ProgramType of the eBPF program type ProgramType uint32 -// Max return the latest supported ProgramType. -func (_ ProgramType) Max() ProgramType { - return maxProgramType - 1 -} - // eBPF program types const ( UnspecifiedProgram ProgramType = iota @@ -167,7 +144,6 @@ const ( Extension LSM SkLookup - maxProgramType ) // AttachType of the eBPF program, needed to differentiate allowed context accesses in @@ -175,8 +151,6 @@ const ( // Will cause invalid argument (EINVAL) at program load time if set incorrectly. type AttachType uint32 -//go:generate stringer -type AttachType -trimprefix Attach - // AttachNone is an alias for AttachCGroupInetIngress for readability reasons. const AttachNone AttachType = 0 @@ -219,10 +193,6 @@ const ( AttachXDPCPUMap AttachSkLookup AttachXDP - AttachSkSKBVerdict - AttachSkReuseportSelect - AttachSkReuseportSelectOrMigrate - AttachPerfEvent ) // AttachFlags of the eBPF program used in BPF_PROG_ATTACH command diff --git a/src/runtime/vendor/github.com/cilium/ebpf/types_string.go b/src/runtime/vendor/github.com/cilium/ebpf/types_string.go index 81cbc9efd..c25f76564 100644 --- a/src/runtime/vendor/github.com/cilium/ebpf/types_string.go +++ b/src/runtime/vendor/github.com/cilium/ebpf/types_string.go @@ -1,4 +1,4 @@ -// Code generated by "stringer -output types_string.go -type=MapType,ProgramType,PinType"; DO NOT EDIT. +// Code generated by "stringer -output types_string.go -type=MapType,ProgramType,AttachType,PinType"; DO NOT EDIT. package ebpf @@ -34,16 +34,15 @@ func _() { _ = x[Stack-23] _ = x[SkStorage-24] _ = x[DevMapHash-25] - _ = x[StructOpsMap-26] + _ = x[StructOpts-26] _ = x[RingBuf-27] _ = x[InodeStorage-28] _ = x[TaskStorage-29] - _ = x[maxMapType-30] } -const _MapType_name = "UnspecifiedMapHashArrayProgramArrayPerfEventArrayPerCPUHashPerCPUArrayStackTraceCGroupArrayLRUHashLRUCPUHashLPMTrieArrayOfMapsHashOfMapsDevMapSockMapCPUMapXSKMapSockHashCGroupStorageReusePortSockArrayPerCPUCGroupStorageQueueStackSkStorageDevMapHashStructOpsMapRingBufInodeStorageTaskStoragemaxMapType" +const _MapType_name = "UnspecifiedMapHashArrayProgramArrayPerfEventArrayPerCPUHashPerCPUArrayStackTraceCGroupArrayLRUHashLRUCPUHashLPMTrieArrayOfMapsHashOfMapsDevMapSockMapCPUMapXSKMapSockHashCGroupStorageReusePortSockArrayPerCPUCGroupStorageQueueStackSkStorageDevMapHashStructOptsRingBufInodeStorageTaskStorage" -var _MapType_index = [...]uint16{0, 14, 18, 23, 35, 49, 59, 70, 80, 91, 98, 108, 115, 126, 136, 142, 149, 155, 161, 169, 182, 200, 219, 224, 229, 238, 248, 260, 267, 279, 290, 300} +var _MapType_index = [...]uint16{0, 14, 18, 23, 35, 49, 59, 70, 80, 91, 98, 108, 115, 126, 136, 142, 149, 155, 161, 169, 182, 200, 219, 224, 229, 238, 248, 258, 265, 277, 288} func (i MapType) String() string { if i >= MapType(len(_MapType_index)-1) { @@ -86,12 +85,11 @@ func _() { _ = x[Extension-28] _ = x[LSM-29] _ = x[SkLookup-30] - _ = x[maxProgramType-31] } -const _ProgramType_name = "UnspecifiedProgramSocketFilterKprobeSchedCLSSchedACTTracePointXDPPerfEventCGroupSKBCGroupSockLWTInLWTOutLWTXmitSockOpsSkSKBCGroupDeviceSkMsgRawTracepointCGroupSockAddrLWTSeg6LocalLircMode2SkReuseportFlowDissectorCGroupSysctlRawTracepointWritableCGroupSockoptTracingStructOpsExtensionLSMSkLookupmaxProgramType" +const _ProgramType_name = "UnspecifiedProgramSocketFilterKprobeSchedCLSSchedACTTracePointXDPPerfEventCGroupSKBCGroupSockLWTInLWTOutLWTXmitSockOpsSkSKBCGroupDeviceSkMsgRawTracepointCGroupSockAddrLWTSeg6LocalLircMode2SkReuseportFlowDissectorCGroupSysctlRawTracepointWritableCGroupSockoptTracingStructOpsExtensionLSMSkLookup" -var _ProgramType_index = [...]uint16{0, 18, 30, 36, 44, 52, 62, 65, 74, 83, 93, 98, 104, 111, 118, 123, 135, 140, 153, 167, 179, 188, 199, 212, 224, 245, 258, 265, 274, 283, 286, 294, 308} +var _ProgramType_index = [...]uint16{0, 18, 30, 36, 44, 52, 62, 65, 74, 83, 93, 98, 104, 111, 118, 123, 135, 140, 153, 167, 179, 188, 199, 212, 224, 245, 258, 265, 274, 283, 286, 294} func (i ProgramType) String() string { if i >= ProgramType(len(_ProgramType_index)-1) { @@ -99,6 +97,61 @@ func (i ProgramType) String() string { } return _ProgramType_name[_ProgramType_index[i]:_ProgramType_index[i+1]] } +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[AttachNone-0] + _ = x[AttachCGroupInetIngress-0] + _ = x[AttachCGroupInetEgress-1] + _ = x[AttachCGroupInetSockCreate-2] + _ = x[AttachCGroupSockOps-3] + _ = x[AttachSkSKBStreamParser-4] + _ = x[AttachSkSKBStreamVerdict-5] + _ = x[AttachCGroupDevice-6] + _ = x[AttachSkMsgVerdict-7] + _ = x[AttachCGroupInet4Bind-8] + _ = x[AttachCGroupInet6Bind-9] + _ = x[AttachCGroupInet4Connect-10] + _ = x[AttachCGroupInet6Connect-11] + _ = x[AttachCGroupInet4PostBind-12] + _ = x[AttachCGroupInet6PostBind-13] + _ = x[AttachCGroupUDP4Sendmsg-14] + _ = x[AttachCGroupUDP6Sendmsg-15] + _ = x[AttachLircMode2-16] + _ = x[AttachFlowDissector-17] + _ = x[AttachCGroupSysctl-18] + _ = x[AttachCGroupUDP4Recvmsg-19] + _ = x[AttachCGroupUDP6Recvmsg-20] + _ = x[AttachCGroupGetsockopt-21] + _ = x[AttachCGroupSetsockopt-22] + _ = x[AttachTraceRawTp-23] + _ = x[AttachTraceFEntry-24] + _ = x[AttachTraceFExit-25] + _ = x[AttachModifyReturn-26] + _ = x[AttachLSMMac-27] + _ = x[AttachTraceIter-28] + _ = x[AttachCgroupInet4GetPeername-29] + _ = x[AttachCgroupInet6GetPeername-30] + _ = x[AttachCgroupInet4GetSockname-31] + _ = x[AttachCgroupInet6GetSockname-32] + _ = x[AttachXDPDevMap-33] + _ = x[AttachCgroupInetSockRelease-34] + _ = x[AttachXDPCPUMap-35] + _ = x[AttachSkLookup-36] + _ = x[AttachXDP-37] +} + +const _AttachType_name = "AttachNoneAttachCGroupInetEgressAttachCGroupInetSockCreateAttachCGroupSockOpsAttachSkSKBStreamParserAttachSkSKBStreamVerdictAttachCGroupDeviceAttachSkMsgVerdictAttachCGroupInet4BindAttachCGroupInet6BindAttachCGroupInet4ConnectAttachCGroupInet6ConnectAttachCGroupInet4PostBindAttachCGroupInet6PostBindAttachCGroupUDP4SendmsgAttachCGroupUDP6SendmsgAttachLircMode2AttachFlowDissectorAttachCGroupSysctlAttachCGroupUDP4RecvmsgAttachCGroupUDP6RecvmsgAttachCGroupGetsockoptAttachCGroupSetsockoptAttachTraceRawTpAttachTraceFEntryAttachTraceFExitAttachModifyReturnAttachLSMMacAttachTraceIterAttachCgroupInet4GetPeernameAttachCgroupInet6GetPeernameAttachCgroupInet4GetSocknameAttachCgroupInet6GetSocknameAttachXDPDevMapAttachCgroupInetSockReleaseAttachXDPCPUMapAttachSkLookupAttachXDP" + +var _AttachType_index = [...]uint16{0, 10, 32, 58, 77, 100, 124, 142, 160, 181, 202, 226, 250, 275, 300, 323, 346, 361, 380, 398, 421, 444, 466, 488, 504, 521, 537, 555, 567, 582, 610, 638, 666, 694, 709, 736, 751, 765, 774} + +func (i AttachType) String() string { + if i >= AttachType(len(_AttachType_index)-1) { + return "AttachType(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _AttachType_name[_AttachType_index[i]:_AttachType_index[i+1]] +} func _() { // An "invalid array index" compiler error signifies that the constant values have changed. // Re-run the stringer command to generate them again. diff --git a/src/runtime/vendor/github.com/containerd/containerd/runtime/v2/shim/shim.go b/src/runtime/vendor/github.com/containerd/containerd/runtime/v2/shim/shim.go index 73e107b09..27c284d66 100644 --- a/src/runtime/vendor/github.com/containerd/containerd/runtime/v2/shim/shim.go +++ b/src/runtime/vendor/github.com/containerd/containerd/runtime/v2/shim/shim.go @@ -169,7 +169,7 @@ func setLogger(ctx context.Context, id string) (context.Context, error) { l.Logger.SetLevel(logrus.DebugLevel) } f, err := openLog(ctx, id) - if err != nil { //nolint:staticcheck // Ignore SA4023 as some platforms always return error + if err != nil { return ctx, err } l.Logger.SetOutput(f) @@ -255,12 +255,12 @@ func run(ctx context.Context, manager Manager, initFunc Init, name string, confi setRuntime() signals, err := setupSignals(config) - if err != nil { //nolint:staticcheck // Ignore SA4023 as some platforms always return error + if err != nil { return err } if !config.NoSubreaper { - if err := subreaper(); err != nil { //nolint:staticcheck // Ignore SA4023 as some platforms always return error + if err := subreaper(); err != nil { return err } } @@ -418,7 +418,7 @@ func run(ctx context.Context, manager Manager, initFunc Init, name string, confi } server, err := newServer() - if err != nil { //nolint:staticcheck // Ignore SA4023 as some platforms always return error + if err != nil { return fmt.Errorf("failed creating server: %w", err) } @@ -428,7 +428,7 @@ func run(ctx context.Context, manager Manager, initFunc Init, name string, confi } } - if err := serve(ctx, server, signals, sd.Shutdown); err != nil { //nolint:staticcheck // Ignore SA4023 as some platforms always return error + if err := serve(ctx, server, signals, sd.Shutdown); err != nil { if err != shutdown.ErrShutdown { return err } @@ -460,7 +460,7 @@ func serve(ctx context.Context, server *ttrpc.Server, signals chan os.Signal, sh } l, err := serveListener(socketFlag) - if err != nil { //nolint:staticcheck // Ignore SA4023 as some platforms always return error + if err != nil { return err } go func() { diff --git a/src/runtime/vendor/github.com/containernetworking/cni/pkg/skel/skel.go b/src/runtime/vendor/github.com/containernetworking/cni/pkg/skel/skel.go index cb8781972..da42db559 100644 --- a/src/runtime/vendor/github.com/containernetworking/cni/pkg/skel/skel.go +++ b/src/runtime/vendor/github.com/containernetworking/cni/pkg/skel/skel.go @@ -196,7 +196,6 @@ func (t *dispatcher) pluginMain(cmdAdd, cmdCheck, cmdDel func(_ *CmdArgs) error, // Print the about string to stderr when no command is set if err.Code == types.ErrInvalidEnvironmentVariables && t.Getenv("CNI_COMMAND") == "" && about != "" { _, _ = fmt.Fprintln(t.Stderr, about) - _, _ = fmt.Fprintf(t.Stderr, "CNI protocol versions supported: %s\n", strings.Join(versionInfo.SupportedVersions(), ", ")) return nil } return err @@ -249,7 +248,10 @@ func (t *dispatcher) pluginMain(cmdAdd, cmdCheck, cmdDel func(_ *CmdArgs) error, return types.NewError(types.ErrInvalidEnvironmentVariables, fmt.Sprintf("unknown CNI_COMMAND: %v", cmd), "") } - return err + if err != nil { + return err + } + return nil } // PluginMainWithError is the core "main" for a plugin. It accepts diff --git a/src/runtime/vendor/github.com/containernetworking/cni/pkg/version/plugin.go b/src/runtime/vendor/github.com/containernetworking/cni/pkg/version/plugin.go index 17b22b6b0..d4bc9d169 100644 --- a/src/runtime/vendor/github.com/containernetworking/cni/pkg/version/plugin.go +++ b/src/runtime/vendor/github.com/containernetworking/cni/pkg/version/plugin.go @@ -86,8 +86,8 @@ func (*PluginDecoder) Decode(jsonBytes []byte) (PluginInfo, error) { // minor, and micro numbers or returns an error func ParseVersion(version string) (int, int, int, error) { var major, minor, micro int - if version == "" { // special case: no version declared == v0.1.0 - return 0, 1, 0, nil + if version == "" { + return -1, -1, -1, fmt.Errorf("invalid version %q: the version is empty", version) } parts := strings.Split(version, ".") diff --git a/src/runtime/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go b/src/runtime/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go index f260f2813..3b745d491 100644 --- a/src/runtime/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go +++ b/src/runtime/vendor/github.com/containernetworking/plugins/pkg/ns/ns_linux.go @@ -106,8 +106,8 @@ var _ NetNS = &netNS{} const ( // https://github.com/torvalds/linux/blob/master/include/uapi/linux/magic.h - NSFS_MAGIC = unix.NSFS_MAGIC - PROCFS_MAGIC = unix.PROC_SUPER_MAGIC + NSFS_MAGIC = 0x6e736673 + PROCFS_MAGIC = 0x9fa0 ) type NSPathNotExistErr struct{ msg string } diff --git a/src/runtime/vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go b/src/runtime/vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go index b9683a3a4..f009bfb0a 100644 --- a/src/runtime/vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go +++ b/src/runtime/vendor/github.com/containernetworking/plugins/pkg/testutils/netns_linux.go @@ -53,7 +53,7 @@ func NewNS() (ns.NetNS, error) { nsRunDir := getNsRunDir() b := make([]byte, 16) - _, err := rand.Read(b) + _, err := rand.Reader.Read(b) if err != nil { return nil, fmt.Errorf("failed to generate random netns name: %v", err) } diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/README.md b/src/runtime/vendor/github.com/godbus/dbus/v5/README.markdown similarity index 81% rename from src/runtime/vendor/github.com/godbus/dbus/v5/README.md rename to src/runtime/vendor/github.com/godbus/dbus/v5/README.markdown index 5c2412583..1fb2eacaa 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/README.md +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/README.markdown @@ -14,12 +14,14 @@ D-Bus message bus system. ### Installation -This packages requires Go 1.12 or later. It can be installed by running the command below: +This packages requires Go 1.7. If you installed it and set up your GOPATH, just run: ``` -go get github.com/godbus/dbus/v5 +go get github.com/godbus/dbus ``` +If you want to use the subpackages, you can install them the same way. + ### Usage The complete package documentation and some simple examples are available at @@ -28,12 +30,10 @@ The complete package documentation and some simple examples are available at gives a short overview over the basic usage. #### Projects using godbus -- [fyne](https://github.com/fyne-io/fyne) a cross platform GUI in Go inspired by Material Design. -- [fynedesk](https://github.com/fyne-io/fynedesk) a full desktop environment for Linux/Unix using Fyne. -- [go-bluetooth](https://github.com/muka/go-bluetooth) provides a bluetooth client over bluez dbus API. -- [iwd](https://github.com/shibumi/iwd) go bindings for the internet wireless daemon "iwd". - [notify](https://github.com/esiqveland/notify) provides desktop notifications over dbus into a library. +- [go-bluetooth](https://github.com/muka/go-bluetooth) provides a bluetooth client over bluez dbus API. - [playerbm](https://github.com/altdesktop/playerbm) a bookmark utility for media players. +- [iwd](https://github.com/shibumi/iwd) go bindings for the internet wireless daemon "iwd". Please note that the API is considered unstable for now and may change without further notice. diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/auth.go b/src/runtime/vendor/github.com/godbus/dbus/v5/auth.go index a59b4c0eb..283487a0e 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/auth.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/auth.go @@ -53,7 +53,7 @@ type Auth interface { // bus. Auth must not be called on shared connections. func (conn *Conn) Auth(methods []Auth) error { if methods == nil { - uid := strconv.Itoa(os.Geteuid()) + uid := strconv.Itoa(os.Getuid()) methods = []Auth{AuthExternal(uid), AuthCookieSha1(uid, getHomeDir())} } in := bufio.NewReader(conn.transport) @@ -75,9 +75,9 @@ func (conn *Conn) Auth(methods []Auth) error { s = s[1:] for _, v := range s { for _, m := range methods { - if name, _, status := m.FirstData(); bytes.Equal(v, name) { + if name, data, status := m.FirstData(); bytes.Equal(v, name) { var ok bool - err = authWriteLine(conn.transport, []byte("AUTH"), v) + err = authWriteLine(conn.transport, []byte("AUTH"), v, data) if err != nil { return err } @@ -194,14 +194,11 @@ func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, boo } conn.uuid = string(s[1]) return nil, true - case state == waitingForOk && string(s[0]) == "DATA": - err = authWriteLine(conn.transport, []byte("DATA")) - if err != nil { - return err, false - } case state == waitingForOk && string(s[0]) == "REJECTED": return nil, false - case state == waitingForOk && string(s[0]) == "ERROR": + case state == waitingForOk && (string(s[0]) == "DATA" || + string(s[0]) == "ERROR"): + err = authWriteLine(conn.transport, []byte("CANCEL")) if err != nil { return err, false diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/conn.go b/src/runtime/vendor/github.com/godbus/dbus/v5/conn.go index 76fc5cde3..29fe018ad 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/conn.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/conn.go @@ -73,7 +73,7 @@ func SessionBus() (conn *Conn, err error) { return } -func getSessionBusAddress(autolaunch bool) (string, error) { +func getSessionBusAddress() (string, error) { if address := os.Getenv("DBUS_SESSION_BUS_ADDRESS"); address != "" && address != "autolaunch:" { return address, nil @@ -81,26 +81,12 @@ func getSessionBusAddress(autolaunch bool) (string, error) { os.Setenv("DBUS_SESSION_BUS_ADDRESS", address) return address, nil } - if !autolaunch { - return "", errors.New("dbus: couldn't determine address of session bus") - } return getSessionBusPlatformAddress() } // SessionBusPrivate returns a new private connection to the session bus. func SessionBusPrivate(opts ...ConnOption) (*Conn, error) { - address, err := getSessionBusAddress(true) - if err != nil { - return nil, err - } - - return Dial(address, opts...) -} - -// SessionBusPrivate returns a new private connection to the session bus. If -// the session bus is not already open, do not attempt to launch it. -func SessionBusPrivateNoAutoStartup(opts ...ConnOption) (*Conn, error) { - address, err := getSessionBusAddress(false) + address, err := getSessionBusAddress() if err != nil { return nil, err } @@ -135,7 +121,7 @@ func SystemBus() (conn *Conn, err error) { // ConnectSessionBus connects to the session bus. func ConnectSessionBus(opts ...ConnOption) (*Conn, error) { - address, err := getSessionBusAddress(true) + address, err := getSessionBusAddress() if err != nil { return nil, err } @@ -194,7 +180,7 @@ func Dial(address string, opts ...ConnOption) (*Conn, error) { // // Deprecated: use Dial with options instead. func DialHandler(address string, handler Handler, signalHandler SignalHandler) (*Conn, error) { - return Dial(address, WithHandler(handler), WithSignalHandler(signalHandler)) + return Dial(address, WithSignalHandler(signalHandler)) } // ConnOption is a connection option. @@ -492,24 +478,14 @@ func (conn *Conn) sendMessageAndIfClosed(msg *Message, ifClosed func()) { conn.outInt(msg) } err := conn.outHandler.sendAndIfClosed(msg, ifClosed) + conn.calls.handleSendError(msg, err) if err != nil { - conn.handleSendError(msg, err) + conn.serialGen.RetireSerial(msg.serial) } else if msg.Type != TypeMethodCall { conn.serialGen.RetireSerial(msg.serial) } } -func (conn *Conn) handleSendError(msg *Message, err error) { - if msg.Type == TypeMethodCall { - conn.calls.handleSendError(msg, err) - } else if msg.Type == TypeMethodReply { - if _, ok := err.(FormatError); ok { - conn.sendError(err, msg.Headers[FieldDestination].value.(string), msg.Headers[FieldReplySerial].value.(uint32)) - } - } - conn.serialGen.RetireSerial(msg.serial) -} - // Send sends the given message to the message bus. You usually don't need to // use this; use the higher-level equivalents (Call / Go, Emit and Export) // instead. If msg is a method call and NoReplyExpected is not set, a non-nil diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/decoder.go b/src/runtime/vendor/github.com/godbus/dbus/v5/decoder.go index 89bfed9d1..ede91575b 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/decoder.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/decoder.go @@ -10,16 +10,14 @@ type decoder struct { in io.Reader order binary.ByteOrder pos int - fds []int } // newDecoder returns a new decoder that reads values from in. The input is // expected to be in the given byte order. -func newDecoder(in io.Reader, order binary.ByteOrder, fds []int) *decoder { +func newDecoder(in io.Reader, order binary.ByteOrder) *decoder { dec := new(decoder) dec.in = in dec.order = order - dec.fds = fds return dec } @@ -55,7 +53,7 @@ func (dec *decoder) Decode(sig Signature) (vs []interface{}, err error) { vs = make([]interface{}, 0) s := sig.str for s != "" { - err, rem := validSingle(s, &depthCounter{}) + err, rem := validSingle(s, 0) if err != nil { return nil, err } @@ -152,7 +150,7 @@ func (dec *decoder) decode(s string, depth int) interface{} { if len(sig.str) == 0 { panic(FormatError("variant signature is empty")) } - err, rem := validSingle(sig.str, &depthCounter{}) + err, rem := validSingle(sig.str, 0) if err != nil { panic(err) } @@ -163,11 +161,7 @@ func (dec *decoder) decode(s string, depth int) interface{} { variant.value = dec.decode(sig.str, depth+1) return variant case 'h': - idx := dec.decode("u", depth).(uint32) - if int(idx) < len(dec.fds) { - return UnixFD(dec.fds[idx]) - } - return UnixFDIndex(idx) + return UnixFDIndex(dec.decode("u", depth).(uint32)) case 'a': if len(s) > 1 && s[1] == '{' { ksig := s[2:3] @@ -225,7 +219,7 @@ func (dec *decoder) decode(s string, depth int) interface{} { v := make([]interface{}, 0) s = s[1 : len(s)-1] for s != "" { - err, rem := validSingle(s, &depthCounter{}) + err, rem := validSingle(s, 0) if err != nil { panic(err) } diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/encoder.go b/src/runtime/vendor/github.com/godbus/dbus/v5/encoder.go index 015b26cd5..adfbb75c5 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/encoder.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/encoder.go @@ -5,33 +5,28 @@ import ( "encoding/binary" "io" "reflect" - "strings" - "unicode/utf8" ) // An encoder encodes values to the D-Bus wire format. type encoder struct { out io.Writer - fds []int order binary.ByteOrder pos int } // NewEncoder returns a new encoder that writes to out in the given byte order. -func newEncoder(out io.Writer, order binary.ByteOrder, fds []int) *encoder { - enc := newEncoderAtOffset(out, 0, order, fds) - return enc +func newEncoder(out io.Writer, order binary.ByteOrder) *encoder { + return newEncoderAtOffset(out, 0, order) } // newEncoderAtOffset returns a new encoder that writes to out in the given // byte order. Specify the offset to initialize pos for proper alignment // computation. -func newEncoderAtOffset(out io.Writer, offset int, order binary.ByteOrder, fds []int) *encoder { +func newEncoderAtOffset(out io.Writer, offset int, order binary.ByteOrder) *encoder { enc := new(encoder) enc.out = out enc.order = order enc.pos = offset - enc.fds = fds return enc } @@ -80,9 +75,6 @@ func (enc *encoder) Encode(vs ...interface{}) (err error) { // encode encodes the given value to the writer and panics on error. depth holds // the depth of the container nesting. func (enc *encoder) encode(v reflect.Value, depth int) { - if depth > 64 { - panic(FormatError("input exceeds depth limitation")) - } enc.align(alignment(v.Type())) switch v.Kind() { case reflect.Uint8: @@ -105,14 +97,7 @@ func (enc *encoder) encode(v reflect.Value, depth int) { enc.binwrite(uint16(v.Uint())) enc.pos += 2 case reflect.Int, reflect.Int32: - if v.Type() == unixFDType { - fd := v.Int() - idx := len(enc.fds) - enc.fds = append(enc.fds, int(fd)) - enc.binwrite(uint32(idx)) - } else { - enc.binwrite(int32(v.Int())) - } + enc.binwrite(int32(v.Int())) enc.pos += 4 case reflect.Uint, reflect.Uint32: enc.binwrite(uint32(v.Uint())) @@ -127,21 +112,9 @@ func (enc *encoder) encode(v reflect.Value, depth int) { enc.binwrite(v.Float()) enc.pos += 8 case reflect.String: - str := v.String() - if !utf8.ValidString(str) { - panic(FormatError("input has a not-utf8 char in string")) - } - if strings.IndexByte(str, byte(0)) != -1 { - panic(FormatError("input has a null char('\\000') in string")) - } - if v.Type() == objectPathType { - if !ObjectPath(str).IsValid() { - panic(FormatError("invalid object path")) - } - } - enc.encode(reflect.ValueOf(uint32(len(str))), depth) + enc.encode(reflect.ValueOf(uint32(len(v.String()))), depth) b := make([]byte, v.Len()+1) - copy(b, str) + copy(b, v.String()) b[len(b)-1] = 0 n, err := enc.out.Write(b) if err != nil { @@ -151,23 +124,20 @@ func (enc *encoder) encode(v reflect.Value, depth int) { case reflect.Ptr: enc.encode(v.Elem(), depth) case reflect.Slice, reflect.Array: + if depth >= 64 { + panic(FormatError("input exceeds container depth limit")) + } // Lookahead offset: 4 bytes for uint32 length (with alignment), // plus alignment for elements. n := enc.padding(0, 4) + 4 offset := enc.pos + n + enc.padding(n, alignment(v.Type().Elem())) var buf bytes.Buffer - bufenc := newEncoderAtOffset(&buf, offset, enc.order, enc.fds) + bufenc := newEncoderAtOffset(&buf, offset, enc.order) for i := 0; i < v.Len(); i++ { bufenc.encode(v.Index(i), depth+1) } - - if buf.Len() > 1<<26 { - panic(FormatError("input exceeds array size limitation")) - } - - enc.fds = bufenc.fds enc.encode(reflect.ValueOf(uint32(buf.Len())), depth) length := buf.Len() enc.align(alignment(v.Type().Elem())) @@ -176,10 +146,13 @@ func (enc *encoder) encode(v reflect.Value, depth int) { } enc.pos += length case reflect.Struct: + if depth >= 64 && v.Type() != signatureType { + panic(FormatError("input exceeds container depth limit")) + } switch t := v.Type(); t { case signatureType: str := v.Field(0) - enc.encode(reflect.ValueOf(byte(str.Len())), depth) + enc.encode(reflect.ValueOf(byte(str.Len())), depth+1) b := make([]byte, str.Len()+1) copy(b, str.String()) b[len(b)-1] = 0 @@ -203,6 +176,9 @@ func (enc *encoder) encode(v reflect.Value, depth int) { case reflect.Map: // Maps are arrays of structures, so they actually increase the depth by // 2. + if depth >= 63 { + panic(FormatError("input exceeds container depth limit")) + } if !isKeyType(v.Type().Key()) { panic(InvalidTypeError{v.Type()}) } @@ -213,13 +189,12 @@ func (enc *encoder) encode(v reflect.Value, depth int) { offset := enc.pos + n + enc.padding(n, 8) var buf bytes.Buffer - bufenc := newEncoderAtOffset(&buf, offset, enc.order, enc.fds) + bufenc := newEncoderAtOffset(&buf, offset, enc.order) for _, k := range keys { bufenc.align(8) bufenc.encode(k, depth+2) bufenc.encode(v.MapIndex(k), depth+2) } - enc.fds = bufenc.fds enc.encode(reflect.ValueOf(uint32(buf.Len())), depth) length := buf.Len() enc.align(8) diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/export.go b/src/runtime/vendor/github.com/godbus/dbus/v5/export.go index 522334715..2447b51d4 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/export.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/export.go @@ -26,27 +26,6 @@ var ( } ) -func MakeNoObjectError(path ObjectPath) Error { - return Error{ - "org.freedesktop.DBus.Error.NoSuchObject", - []interface{}{fmt.Sprintf("No such object '%s'", string(path))}, - } -} - -func MakeUnknownMethodError(methodName string) Error { - return Error{ - "org.freedesktop.DBus.Error.UnknownMethod", - []interface{}{fmt.Sprintf("Unknown / invalid method '%s'", methodName)}, - } -} - -func MakeUnknownInterfaceError(ifaceName string) Error { - return Error{ - "org.freedesktop.DBus.Error.UnknownInterface", - []interface{}{fmt.Sprintf("Object does not implement the interface '%s'", ifaceName)}, - } -} - func MakeFailedError(err error) *Error { return &Error{ "org.freedesktop.DBus.Error.Failed", @@ -149,11 +128,6 @@ func (conn *Conn) handleCall(msg *Message) { ifaceName, _ := msg.Headers[FieldInterface].value.(string) sender, hasSender := msg.Headers[FieldSender].value.(string) serial := msg.serial - - if len(name) == 0 { - conn.sendError(ErrMsgUnknownMethod, sender, serial) - } - if ifaceName == "org.freedesktop.DBus.Peer" { switch name { case "Ping": @@ -161,26 +135,29 @@ func (conn *Conn) handleCall(msg *Message) { case "GetMachineId": conn.sendReply(sender, serial, conn.uuid) default: - conn.sendError(MakeUnknownMethodError(name), sender, serial) + conn.sendError(ErrMsgUnknownMethod, sender, serial) } return } + if len(name) == 0 { + conn.sendError(ErrMsgUnknownMethod, sender, serial) + } object, ok := conn.handler.LookupObject(path) if !ok { - conn.sendError(MakeNoObjectError(path), sender, serial) + conn.sendError(ErrMsgNoObject, sender, serial) return } iface, exists := object.LookupInterface(ifaceName) if !exists { - conn.sendError(MakeUnknownInterfaceError(ifaceName), sender, serial) + conn.sendError(ErrMsgUnknownInterface, sender, serial) return } m, exists := iface.LookupMethod(name) if !exists { - conn.sendError(MakeUnknownMethodError(name), sender, serial) + conn.sendError(ErrMsgUnknownMethod, sender, serial) return } args, err := conn.decodeArguments(m, sender, msg) diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/message.go b/src/runtime/vendor/github.com/godbus/dbus/v5/message.go index 16693eb30..6a925367e 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/message.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/message.go @@ -118,7 +118,11 @@ type header struct { Variant } -func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) { +// DecodeMessage tries to decode a single message in the D-Bus wire format +// from the given reader. The byte order is figured out from the first byte. +// The possibly returned error can be an error of the underlying reader, an +// InvalidMessageError or a FormatError. +func DecodeMessage(rd io.Reader) (msg *Message, err error) { var order binary.ByteOrder var hlength, length uint32 var typ, flags, proto byte @@ -138,7 +142,7 @@ func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) { return nil, InvalidMessageError("invalid byte order") } - dec := newDecoder(rd, order, fds) + dec := newDecoder(rd, order) dec.pos = 1 msg = new(Message) @@ -162,7 +166,7 @@ func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) { if hlength+length+16 > 1<<27 { return nil, InvalidMessageError("message is too long") } - dec = newDecoder(io.MultiReader(bytes.NewBuffer(b), rd), order, fds) + dec = newDecoder(io.MultiReader(bytes.NewBuffer(b), rd), order) dec.pos = 12 vs, err = dec.Decode(Signature{"a(yv)"}) if err != nil { @@ -192,7 +196,7 @@ func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) { sig, _ := msg.Headers[FieldSignature].value.(Signature) if sig.str != "" { buf := bytes.NewBuffer(body) - dec = newDecoder(buf, order, fds) + dec = newDecoder(buf, order) vs, err := dec.Decode(sig) if err != nil { return nil, err @@ -203,32 +207,12 @@ func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) { return } -// DecodeMessage tries to decode a single message in the D-Bus wire format -// from the given reader. The byte order is figured out from the first byte. -// The possibly returned error can be an error of the underlying reader, an -// InvalidMessageError or a FormatError. -func DecodeMessage(rd io.Reader) (msg *Message, err error) { - return DecodeMessageWithFDs(rd, make([]int, 0)); -} - -type nullwriter struct{} - -func (nullwriter) Write(p []byte) (cnt int, err error) { - return len(p), nil -} - -func (msg *Message) CountFds() (int, error) { - if len(msg.Body) == 0 { - return 0, nil - } - enc := newEncoder(nullwriter{}, nativeEndian, make([]int, 0)) - err := enc.Encode(msg.Body...) - return len(enc.fds), err -} - -func (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds []int, err error) { +// EncodeTo encodes and sends a message to the given writer. The byte order must +// be either binary.LittleEndian or binary.BigEndian. If the message is not +// valid or an error occurs when writing, an error is returned. +func (msg *Message) EncodeTo(out io.Writer, order binary.ByteOrder) error { if err := msg.IsValid(); err != nil { - return make([]int, 0), err + return err } var vs [7]interface{} switch order { @@ -237,16 +221,12 @@ func (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds case binary.BigEndian: vs[0] = byte('B') default: - return make([]int, 0), errors.New("dbus: invalid byte order") + return errors.New("dbus: invalid byte order") } body := new(bytes.Buffer) - fds = make([]int, 0) - enc := newEncoder(body, order, fds) + enc := newEncoder(body, order) if len(msg.Body) != 0 { - err = enc.Encode(msg.Body...) - if err != nil { - return - } + enc.Encode(msg.Body...) } vs[1] = msg.Type vs[2] = msg.Flags @@ -259,28 +239,17 @@ func (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds } vs[6] = headers var buf bytes.Buffer - enc = newEncoder(&buf, order, enc.fds) - err = enc.Encode(vs[:]...) - if err != nil { - return - } + enc = newEncoder(&buf, order) + enc.Encode(vs[:]...) enc.align(8) body.WriteTo(&buf) if buf.Len() > 1<<27 { - return make([]int, 0), InvalidMessageError("message is too long") + return InvalidMessageError("message is too long") } if _, err := buf.WriteTo(out); err != nil { - return make([]int, 0), err + return err } - return enc.fds, nil -} - -// EncodeTo encodes and sends a message to the given writer. The byte order must -// be either binary.LittleEndian or binary.BigEndian. If the message is not -// valid or an error occurs when writing, an error is returned. -func (msg *Message) EncodeTo(out io.Writer, order binary.ByteOrder) (err error) { - _, err = msg.EncodeToWithFDs(out, order) - return err + return nil } // IsValid checks whether msg is a valid message and returns an diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/sig.go b/src/runtime/vendor/github.com/godbus/dbus/v5/sig.go index 41a039812..2d326cebc 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/sig.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/sig.go @@ -34,7 +34,7 @@ type Signature struct { func SignatureOf(vs ...interface{}) Signature { var s string for _, v := range vs { - s += getSignature(reflect.TypeOf(v), &depthCounter{}) + s += getSignature(reflect.TypeOf(v)) } return Signature{s} } @@ -42,19 +42,11 @@ func SignatureOf(vs ...interface{}) Signature { // SignatureOfType returns the signature of the given type. It panics if the // type is not representable in D-Bus. func SignatureOfType(t reflect.Type) Signature { - return Signature{getSignature(t, &depthCounter{})} + return Signature{getSignature(t)} } // getSignature returns the signature of the given type and panics on unknown types. -func getSignature(t reflect.Type, depth *depthCounter) (sig string) { - if !depth.Valid() { - panic("container nesting too deep") - } - defer func() { - if len(sig) > 255 { - panic("signature exceeds the length limitation") - } - }() +func getSignature(t reflect.Type) string { // handle simple types first switch t.Kind() { case reflect.Uint8: @@ -82,7 +74,7 @@ func getSignature(t reflect.Type, depth *depthCounter) (sig string) { case reflect.Float64: return "d" case reflect.Ptr: - return getSignature(t.Elem(), depth) + return getSignature(t.Elem()) case reflect.String: if t == objectPathType { return "o" @@ -98,20 +90,17 @@ func getSignature(t reflect.Type, depth *depthCounter) (sig string) { for i := 0; i < t.NumField(); i++ { field := t.Field(i) if field.PkgPath == "" && field.Tag.Get("dbus") != "-" { - s += getSignature(t.Field(i).Type, depth.EnterStruct()) + s += getSignature(t.Field(i).Type) } } - if len(s) == 0 { - panic("empty struct") - } return "(" + s + ")" case reflect.Array, reflect.Slice: - return "a" + getSignature(t.Elem(), depth.EnterArray()) + return "a" + getSignature(t.Elem()) case reflect.Map: if !isKeyType(t.Key()) { panic(InvalidTypeError{t}) } - return "a{" + getSignature(t.Key(), depth.EnterArray().EnterDictEntry()) + getSignature(t.Elem(), depth.EnterArray().EnterDictEntry()) + "}" + return "a{" + getSignature(t.Key()) + getSignature(t.Elem()) + "}" case reflect.Interface: return "v" } @@ -129,7 +118,7 @@ func ParseSignature(s string) (sig Signature, err error) { } sig.str = s for err == nil && len(s) != 0 { - err, s = validSingle(s, &depthCounter{}) + err, s = validSingle(s, 0) } if err != nil { sig = Signature{""} @@ -155,7 +144,7 @@ func (s Signature) Empty() bool { // Single returns whether the signature represents a single, complete type. func (s Signature) Single() bool { - err, r := validSingle(s.str, &depthCounter{}) + err, r := validSingle(s.str, 0) return err != nil && r == "" } @@ -175,38 +164,15 @@ func (e SignatureError) Error() string { return fmt.Sprintf("dbus: invalid signature: %q (%s)", e.Sig, e.Reason) } -type depthCounter struct { - arrayDepth, structDepth, dictEntryDepth int -} - -func (cnt *depthCounter) Valid() bool { - return cnt.arrayDepth <= 32 && cnt.structDepth <= 32 && cnt.dictEntryDepth <= 32 -} - -func (cnt depthCounter) EnterArray() *depthCounter { - cnt.arrayDepth++ - return &cnt -} - -func (cnt depthCounter) EnterStruct() *depthCounter { - cnt.structDepth++ - return &cnt -} - -func (cnt depthCounter) EnterDictEntry() *depthCounter { - cnt.dictEntryDepth++ - return &cnt -} - // Try to read a single type from this string. If it was successful, err is nil // and rem is the remaining unparsed part. Otherwise, err is a non-nil // SignatureError and rem is "". depth is the current recursion depth which may // not be greater than 64 and should be given as 0 on the first call. -func validSingle(s string, depth *depthCounter) (err error, rem string) { +func validSingle(s string, depth int) (err error, rem string) { if s == "" { return SignatureError{Sig: s, Reason: "empty signature"}, "" } - if !depth.Valid() { + if depth > 64 { return SignatureError{Sig: s, Reason: "container nesting too deep"}, "" } switch s[0] { @@ -221,10 +187,10 @@ func validSingle(s string, depth *depthCounter) (err error, rem string) { i++ rem = s[i+1:] s = s[2:i] - if err, _ = validSingle(s[:1], depth.EnterArray().EnterDictEntry()); err != nil { + if err, _ = validSingle(s[:1], depth+1); err != nil { return err, "" } - err, nr := validSingle(s[1:], depth.EnterArray().EnterDictEntry()) + err, nr := validSingle(s[1:], depth+1) if err != nil { return err, "" } @@ -233,7 +199,7 @@ func validSingle(s string, depth *depthCounter) (err error, rem string) { } return nil, rem } - return validSingle(s[1:], depth.EnterArray()) + return validSingle(s[1:], depth+1) case '(': i := findMatching(s, '(', ')') if i == -1 { @@ -242,7 +208,7 @@ func validSingle(s string, depth *depthCounter) (err error, rem string) { rem = s[i+1:] s = s[1:i] for err == nil && s != "" { - err, s = validSingle(s, depth.EnterStruct()) + err, s = validSingle(s, depth+1) } if err != nil { rem = "" @@ -270,7 +236,7 @@ func findMatching(s string, left, right rune) int { // typeFor returns the type of the given signature. It ignores any left over // characters and panics if s doesn't start with a valid type signature. func typeFor(s string) (t reflect.Type) { - err, _ := validSingle(s, &depthCounter{}) + err, _ := validSingle(s, 0) if err != nil { panic(err) } diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/transport_generic.go b/src/runtime/vendor/github.com/godbus/dbus/v5/transport_generic.go index a08e2813c..718a1ff02 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/transport_generic.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/transport_generic.go @@ -41,12 +41,10 @@ func (t genericTransport) ReadMessage() (*Message, error) { } func (t genericTransport) SendMessage(msg *Message) error { - fds, err := msg.CountFds() - if err != nil { - return err - } - if fds != 0 { - return errors.New("dbus: unix fd passing not enabled") + for _, v := range msg.Body { + if _, ok := v.(UnixFD); ok { + return errors.New("dbus: unix fd passing not enabled") + } } return msg.EncodeTo(t, nativeEndian) } diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/transport_unix.go b/src/runtime/vendor/github.com/godbus/dbus/v5/transport_unix.go index 2212e7fa7..c7cd02f97 100644 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/transport_unix.go +++ b/src/runtime/vendor/github.com/godbus/dbus/v5/transport_unix.go @@ -113,7 +113,7 @@ func (t *unixTransport) ReadMessage() (*Message, error) { if _, err := io.ReadFull(t.rdr, headerdata[4:]); err != nil { return nil, err } - dec := newDecoder(bytes.NewBuffer(headerdata), order, make([]int, 0)) + dec := newDecoder(bytes.NewBuffer(headerdata), order) dec.pos = 12 vs, err := dec.Decode(Signature{"a(yv)"}) if err != nil { @@ -147,7 +147,7 @@ func (t *unixTransport) ReadMessage() (*Message, error) { if err != nil { return nil, err } - msg, err := DecodeMessageWithFDs(bytes.NewBuffer(all), fds) + msg, err := DecodeMessage(bytes.NewBuffer(all)) if err != nil { return nil, err } @@ -179,21 +179,21 @@ func (t *unixTransport) ReadMessage() (*Message, error) { } func (t *unixTransport) SendMessage(msg *Message) error { - fdcnt, err := msg.CountFds() - if err != nil { - return err + fds := make([]int, 0) + for i, v := range msg.Body { + if fd, ok := v.(UnixFD); ok { + msg.Body[i] = UnixFDIndex(len(fds)) + fds = append(fds, int(fd)) + } } - if fdcnt != 0 { + if len(fds) != 0 { if !t.hasUnixFDs { return errors.New("dbus: unix fd passing not enabled") } - msg.Headers[FieldUnixFDs] = MakeVariant(uint32(fdcnt)) - buf := new(bytes.Buffer) - fds, err := msg.EncodeToWithFDs(buf, nativeEndian) - if err != nil { - return err - } + msg.Headers[FieldUnixFDs] = MakeVariant(uint32(len(fds))) oob := syscall.UnixRights(fds...) + buf := new(bytes.Buffer) + msg.EncodeTo(buf, nativeEndian) n, oobn, err := t.UnixConn.WriteMsgUnix(buf.Bytes(), oob, nil) if err != nil { return err diff --git a/src/runtime/vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go b/src/runtime/vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go deleted file mode 100644 index af7bafdf9..000000000 --- a/src/runtime/vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go +++ /dev/null @@ -1,14 +0,0 @@ -package dbus - -import "io" - -func (t *unixTransport) SendNullByte() error { - n, _, err := t.UnixConn.WriteMsgUnix([]byte{0}, nil, nil) - if err != nil { - return err - } - if n != 1 { - return io.ErrShortWrite - } - return nil -} diff --git a/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go b/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go index feb739d32..897ecbac4 100644 --- a/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go +++ b/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon.go @@ -12,7 +12,7 @@ import ( func rchcon(fpath, label string) error { return pwalkdir.Walk(fpath, func(p string, _ fs.DirEntry, _ error) error { - e := lSetFileLabel(p, label) + e := setFileLabel(p, label) // Walk a file tree can race with removal, so ignore ENOENT. if errors.Is(e, os.ErrNotExist) { return nil diff --git a/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go b/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go index ecc7abfac..2c8b033ce 100644 --- a/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go +++ b/src/runtime/vendor/github.com/opencontainers/selinux/go-selinux/rchcon_go115.go @@ -11,7 +11,7 @@ import ( func rchcon(fpath, label string) error { return pwalk.Walk(fpath, func(p string, _ os.FileInfo, _ error) error { - e := lSetFileLabel(p, label) + e := setFileLabel(p, label) // Walk a file tree can race with removal, so ignore ENOENT. if errors.Is(e, os.ErrNotExist) { return nil diff --git a/src/runtime/vendor/golang.org/x/sys/unix/asm_linux_loong64.s b/src/runtime/vendor/golang.org/x/sys/unix/asm_linux_loong64.s deleted file mode 100644 index 6abd48eef..000000000 --- a/src/runtime/vendor/golang.org/x/sys/unix/asm_linux_loong64.s +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && loong64 && gc -// +build linux -// +build loong64 -// +build gc - -#include "textflag.h" - - -// Just jump to package syscall's implementation for all these functions. -// The runtime may know about them. - -TEXT ·Syscall(SB),NOSPLIT,$0-56 - JMP syscall·Syscall(SB) - -TEXT ·Syscall6(SB),NOSPLIT,$0-80 - JMP syscall·Syscall6(SB) - -TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 - JAL runtime·entersyscall(SB) - MOVV a1+8(FP), R4 - MOVV a2+16(FP), R5 - MOVV a3+24(FP), R6 - MOVV R0, R7 - MOVV R0, R8 - MOVV R0, R9 - MOVV trap+0(FP), R11 // syscall entry - SYSCALL - MOVV R4, r1+32(FP) - MOVV R5, r2+40(FP) - JAL runtime·exitsyscall(SB) - RET - -TEXT ·RawSyscall(SB),NOSPLIT,$0-56 - JMP syscall·RawSyscall(SB) - -TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 - JMP syscall·RawSyscall6(SB) - -TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 - MOVV a1+8(FP), R4 - MOVV a2+16(FP), R5 - MOVV a3+24(FP), R6 - MOVV R0, R7 - MOVV R0, R8 - MOVV R0, R9 - MOVV trap+0(FP), R11 // syscall entry - SYSCALL - MOVV R4, r1+32(FP) - MOVV R5, r2+40(FP) - RET diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ioctl_linux.go b/src/runtime/vendor/golang.org/x/sys/unix/ioctl_linux.go index 884430b81..1dadead21 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -194,26 +194,3 @@ func ioctlIfreqData(fd int, req uint, value *ifreqData) error { // identical so pass *IfreqData directly. return ioctlPtr(fd, req, unsafe.Pointer(value)) } - -// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an -// existing KCM socket, returning a structure containing the file descriptor of -// the new socket. -func IoctlKCMClone(fd int) (*KCMClone, error) { - var info KCMClone - if err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil { - return nil, err - } - - return &info, nil -} - -// IoctlKCMAttach attaches a TCP socket and associated BPF program file -// descriptor to a multiplexor. -func IoctlKCMAttach(fd int, info KCMAttach) error { - return ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info)) -} - -// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor. -func IoctlKCMUnattach(fd int, info KCMUnattach) error { - return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info)) -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/mkerrors.sh b/src/runtime/vendor/golang.org/x/sys/unix/mkerrors.sh index d888fb770..a47b035f9 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/src/runtime/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -205,7 +205,6 @@ struct ltchars { #include #include #include -#include #include #include #include @@ -215,7 +214,6 @@ struct ltchars { #include #include #include -#include #include #include #include @@ -233,7 +231,6 @@ struct ltchars { #include #include #include -#include #include #include #include @@ -506,7 +503,6 @@ ccflags="$@" $2 ~ /^O?XTABS$/ || $2 ~ /^TC[IO](ON|OFF)$/ || $2 ~ /^IN_/ || - $2 ~ /^KCM/ || $2 ~ /^LANDLOCK_/ || $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || @@ -601,10 +597,8 @@ ccflags="$@" $2 ~ /^DEVLINK_/ || $2 ~ /^ETHTOOL_/ || $2 ~ /^LWTUNNEL_IP/ || - $2 ~ /^ITIMER_/ || $2 !~ "WMESGLEN" && $2 ~ /^W[A-Z0-9]+$/ || - $2 ~ /^P_/ || $2 ~/^PPPIOC/ || $2 ~ /^FAN_|FANOTIFY_/ || $2 == "HID_MAX_DESCRIPTOR_SIZE" || @@ -614,7 +608,6 @@ ccflags="$@" $2 ~ /^OTP/ || $2 ~ /^MEM/ || $2 ~ /^WG/ || - $2 ~ /^FIB_RULE_/ || $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} $2 ~ /^__WCOREFLAG$/ {next} $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_aix.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_aix.go index f2a114fc2..4f55c8d99 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -215,12 +215,18 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) { return } -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { // Recvmsg not implemented on AIX - return -1, -1, -1, ENOSYS + sa := new(SockaddrUnix) + return -1, -1, -1, sa, ENOSYS } -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { // SendmsgN not implemented on AIX return -1, ENOSYS } @@ -452,8 +458,8 @@ func Fsync(fd int) error { //sys Listen(s int, n int) (err error) //sys lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = pread64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = pread64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64 //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) //sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) //sysnb Setregid(rgid int, egid int) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_bsd.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_bsd.go index 9c87c5f07..0ce452326 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -325,9 +325,10 @@ func GetsockoptString(fd, level, opt int) (string, error) { //sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(rsa)) + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 { @@ -351,12 +352,29 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn } oobn = int(msg.Controllen) recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } return } //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(ptr)) msg.Namelen = uint32(salen) @@ -553,7 +571,12 @@ func UtimesNano(path string, ts []Timespec) error { if len(ts) != 2 { return EINVAL } - err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + // Darwin setattrlist can set nanosecond timestamps + err := setattrlistTimes(path, ts, 0) + if err != ENOSYS { + return err + } + err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) if err != ENOSYS { return err } @@ -573,6 +596,10 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { if len(ts) != 2 { return EINVAL } + err := setattrlistTimes(path, ts, flags) + if err != ENOSYS { + return err + } return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) } diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_darwin.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_darwin.go index 09a25c653..0eaab9131 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -141,6 +141,16 @@ func direntNamlen(buf []byte) (uint64, bool) { func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } +type attrList struct { + bitmapCount uint16 + _ uint16 + CommonAttr uint32 + VolAttr uint32 + DirAttr uint32 + FileAttr uint32 + Forkattr uint32 +} + //sysnb pipe(p *[2]int32) (err error) func Pipe(p []int) (err error) { @@ -272,7 +282,36 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) { return flistxattr(fd, xattrPointer(dest), len(dest), 0) } -//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) +func setattrlistTimes(path string, times []Timespec, flags int) error { + _p0, err := BytePtrFromString(path) + if err != nil { + return err + } + + var attrList attrList + attrList.bitmapCount = ATTR_BIT_MAP_COUNT + attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME + + // order is mtime, atime: the opposite of Chtimes + attributes := [2]Timespec{times[1], times[0]} + options := 0 + if flags&AT_SYMLINK_NOFOLLOW != 0 { + options |= FSOPT_NOFOLLOW + } + return setattrlist( + _p0, + unsafe.Pointer(&attrList), + unsafe.Pointer(&attributes), + unsafe.Sizeof(attributes), + options) +} + +//sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error { + // Darwin doesn't support SYS_UTIMENSAT + return ENOSYS +} /* * Wrapped @@ -507,8 +546,8 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index c61e27498..2e37c3167 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -125,12 +125,12 @@ func Pipe2(p []int, flags int) (err error) { } //sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { return extpread(fd, p, 0, offset) } //sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { return extpwrite(fd, p, 0, offset) } @@ -169,6 +169,11 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 6f6c510f4..2f650ae66 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -194,6 +194,11 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL @@ -633,8 +638,8 @@ func PtraceSingleStep(pid int) (err error) { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux.go index d251dafae..f432b0684 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -14,7 +14,6 @@ package unix import ( "encoding/binary" "syscall" - "time" "unsafe" ) @@ -250,13 +249,6 @@ func Getwd() (wd string, err error) { if n < 1 || n > len(buf) || buf[n-1] != 0 { return "", EINVAL } - // In some cases, Linux can return a path that starts with the - // "(unreachable)" prefix, which can potentially be a valid relative - // path. To work around that, return ENOENT if path is not absolute. - if buf[0] != '/' { - return "", ENOENT - } - return string(buf[0 : n-1]), nil } @@ -366,8 +358,6 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, return } -//sys Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) - func Mkfifo(path string, mode uint32) error { return Mknod(path, mode|S_IFIFO, 0) } @@ -1499,9 +1489,10 @@ func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error //sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL //sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(rsa)) + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 { @@ -1532,10 +1523,28 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn } oobn = int(msg.Controllen) recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } return } -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + var err error + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } var msg Msghdr msg.Name = (*byte)(ptr) msg.Namelen = uint32(salen) @@ -1829,9 +1838,6 @@ func Dup2(oldfd, newfd int) error { //sys Fremovexattr(fd int, attr string) (err error) //sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) //sys Fsync(fd int) (err error) -//sys Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) -//sys Fsopen(fsName string, flags int) (fd int, err error) -//sys Fspick(dirfd int, pathName string, flags int) (fd int, err error) //sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 //sysnb Getpgid(pid int) (pgid int, err error) @@ -1862,9 +1868,7 @@ func Getpgrp() (pid int) { //sys MemfdCreate(name string, flags int) (fd int, err error) //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) -//sys MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) -//sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 @@ -2189,7 +2193,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { gid = Getgid() } - if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) { + if uint32(gid) == st.Gid || isGroupMember(gid) { fmode = (st.Mode >> 3) & 7 } else { fmode = st.Mode & 7 @@ -2304,63 +2308,17 @@ type RemoteIovec struct { //sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN //sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD -//sys PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) //sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) //sys shmdt(addr uintptr) (err error) //sys shmget(key int, size int, flag int) (id int, err error) -//sys getitimer(which int, currValue *Itimerval) (err error) -//sys setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) - -// MakeItimerval creates an Itimerval from interval and value durations. -func MakeItimerval(interval, value time.Duration) Itimerval { - return Itimerval{ - Interval: NsecToTimeval(interval.Nanoseconds()), - Value: NsecToTimeval(value.Nanoseconds()), - } -} - -// A value which may be passed to the which parameter for Getitimer and -// Setitimer. -type ItimerWhich int - -// Possible which values for Getitimer and Setitimer. -const ( - ItimerReal ItimerWhich = ITIMER_REAL - ItimerVirtual ItimerWhich = ITIMER_VIRTUAL - ItimerProf ItimerWhich = ITIMER_PROF -) - -// Getitimer wraps getitimer(2) to return the current value of the timer -// specified by which. -func Getitimer(which ItimerWhich) (Itimerval, error) { - var it Itimerval - if err := getitimer(int(which), &it); err != nil { - return Itimerval{}, err - } - - return it, nil -} - -// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which. -// It returns the previous value of the timer. -// -// If the Itimerval argument is the zero value, the timer will be disarmed. -func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) { - var prev Itimerval - if err := setitimer(int(which), &it, &prev); err != nil { - return Itimerval{}, err - } - - return prev, nil -} - /* * Unimplemented */ // AfsSyscall +// Alarm // ArchPrctl // Brk // ClockNanosleep @@ -2376,6 +2334,7 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) { // GetMempolicy // GetRobustList // GetThreadArea +// Getitimer // Getpmsg // IoCancel // IoDestroy @@ -2453,4 +2412,5 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) { // Vfork // Vhangup // Vserver +// Waitid // _Sysctl diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_386.go index 518e476e6..5f757e8aa 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -35,8 +35,8 @@ func setTimeval(sec, usec int64) Timeval { //sys Iopl(level int) (err error) //sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 //sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 @@ -173,6 +173,14 @@ const ( _SENDMMSG = 20 ) +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) if e != 0 { diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go deleted file mode 100644 index 08086ac6a..000000000 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (386 || amd64 || mips || mipsle || mips64 || mipsle || ppc64 || ppc64le || ppc || s390x || sparc64) -// +build linux -// +build 386 amd64 mips mipsle mips64 mipsle ppc64 ppc64le ppc s390x sparc64 - -package unix - -// SYS_ALARM is not defined on arm or riscv, but is available for other GOARCH -// values. - -//sys Alarm(seconds uint) (remaining uint, err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index f5e9d6bef..4299125aa 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -28,10 +28,9 @@ func Lstat(path string, stat *Stat_t) (err error) { return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) } -//sys MemfdSecret(flags int) (fd int, err error) //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK @@ -63,6 +62,7 @@ func Stat(path string, stat *Stat_t) (err error) { //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) //sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index c1a7778f1..79edeb9cb 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -27,6 +27,7 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return newoffset, nil } +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) @@ -96,8 +97,8 @@ func Utime(path string, buf *Utimbuf) error { //sys utimes(path string, times *[2]Timeval) (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index d83e2c657..862890de2 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -22,9 +22,8 @@ import "unsafe" //sysnb getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) //sys Listen(s int, n int) (err error) -//sys MemfdSecret(flags int) (fd int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK @@ -67,6 +66,7 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { return ENOSYS } +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 98a2660b9..8932e34ad 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -21,8 +21,8 @@ package unix //sys Lchown(path string, uid int, gid int) (err error) //sys Listen(s int, n int) (err error) //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK @@ -48,6 +48,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) //sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go index b8a18c0ad..7821c25d9 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -25,8 +25,8 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sysnb Getuid() (uid int) //sys Lchown(path string, uid int, gid int) (err error) //sys Listen(s int, n int) (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 @@ -41,6 +41,7 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 //sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go index 4ed9e67c6..c5053a0f0 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go @@ -27,8 +27,8 @@ import ( //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 @@ -43,6 +43,7 @@ import ( //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 //sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go index db63d384c..25786c421 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -26,8 +26,8 @@ package unix //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT @@ -45,6 +45,7 @@ package unix //sys Statfs(path string, buf *Statfs_t) (err error) //sys Truncate(path string, length int64) (err error) //sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 8ff7adba0..6f9f71041 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -22,8 +22,8 @@ import "unsafe" //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) //sys Listen(s int, n int) (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { @@ -65,6 +65,7 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { return ENOSYS } +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go index 6fcf277b0..6aa59cb27 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -26,8 +26,8 @@ import ( //sys Lchown(path string, uid int, gid int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) @@ -145,6 +145,15 @@ const ( netSendMMsg = 20 ) +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index 02a45d9cc..bbe8d174f 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -23,8 +23,8 @@ package unix //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) @@ -42,6 +42,7 @@ package unix //sys Statfs(path string, buf *Statfs_t) (err error) //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 666f0a1b3..696fed496 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -163,6 +163,11 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e return -1, ENOSYS } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL @@ -308,8 +313,8 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 15d637d63..11b1d419d 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -149,6 +149,11 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL @@ -269,8 +274,8 @@ func Uname(uname *Utsname) error { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_solaris.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_solaris.go index 5c2003cec..5c813921e 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -451,9 +451,10 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) { //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg -func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { var msg Msghdr - msg.Name = (*byte)(unsafe.Pointer(rsa)) + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 { @@ -475,12 +476,29 @@ func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn return } oobn = int(msg.Accrightslen) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) return } //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg -func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(ptr)) msg.Namelen = uint32(salen) @@ -643,8 +661,8 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) //sys Pause() (err error) -//sys pread(fd int, p []byte, offset int64) (n int, err error) -//sys pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Rename(from string, to string) (err error) @@ -737,20 +755,8 @@ type fileObjCookie struct { type EventPort struct { port int mu sync.Mutex - fds map[uintptr]*fileObjCookie + fds map[uintptr]interface{} paths map[string]*fileObjCookie - // The user cookie presents an interesting challenge from a memory management perspective. - // There are two paths by which we can discover that it is no longer in use: - // 1. The user calls port_dissociate before any events fire - // 2. An event fires and we return it to the user - // The tricky situation is if the event has fired in the kernel but - // the user hasn't requested/received it yet. - // If the user wants to port_dissociate before the event has been processed, - // we should handle things gracefully. To do so, we need to keep an extra - // reference to the cookie around until the event is processed - // thus the otherwise seemingly extraneous "cookies" map - // The key of this map is a pointer to the corresponding &fCookie.cookie - cookies map[*interface{}]*fileObjCookie } // PortEvent is an abstraction of the port_event C struct. @@ -774,10 +780,9 @@ func NewEventPort() (*EventPort, error) { return nil, err } e := &EventPort{ - port: port, - fds: make(map[uintptr]*fileObjCookie), - paths: make(map[string]*fileObjCookie), - cookies: make(map[*interface{}]*fileObjCookie), + port: port, + fds: make(map[uintptr]interface{}), + paths: make(map[string]*fileObjCookie), } return e, nil } @@ -792,13 +797,9 @@ func NewEventPort() (*EventPort, error) { func (e *EventPort) Close() error { e.mu.Lock() defer e.mu.Unlock() - err := Close(e.port) - if err != nil { - return err - } e.fds = nil e.paths = nil - return nil + return Close(e.port) } // PathIsWatched checks to see if path is associated with this EventPort. @@ -835,7 +836,6 @@ func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, coo return err } e.paths[path] = fCookie - e.cookies[&fCookie.cookie] = fCookie return nil } @@ -848,19 +848,11 @@ func (e *EventPort) DissociatePath(path string) error { return fmt.Errorf("%v is not associated with this Event Port", path) } _, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj))) - // If the path is no longer associated with this event port (ENOENT) - // we should delete it from our map. We can still return ENOENT to the caller. - // But we need to save the cookie - if err != nil && err != ENOENT { + if err != nil { return err } - if err == nil { - // dissociate was successful, safe to delete the cookie - fCookie := e.paths[path] - delete(e.cookies, &fCookie.cookie) - } delete(e.paths, path) - return err + return nil } // AssociateFd wraps calls to port_associate(3c) on file descriptors. @@ -870,13 +862,12 @@ func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) erro if _, found := e.fds[fd]; found { return fmt.Errorf("%v is already associated with this Event Port", fd) } - fCookie := &fileObjCookie{nil, cookie} - _, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie))) + pcookie := &cookie + _, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(pcookie))) if err != nil { return err } - e.fds[fd] = fCookie - e.cookies[&fCookie.cookie] = fCookie + e.fds[fd] = pcookie return nil } @@ -889,16 +880,11 @@ func (e *EventPort) DissociateFd(fd uintptr) error { return fmt.Errorf("%v is not associated with this Event Port", fd) } _, err := port_dissociate(e.port, PORT_SOURCE_FD, fd) - if err != nil && err != ENOENT { + if err != nil { return err } - if err == nil { - // dissociate was successful, safe to delete the cookie - fCookie := e.fds[fd] - delete(e.cookies, &fCookie.cookie) - } delete(e.fds, fd) - return err + return nil } func createFileObj(name string, stat os.FileInfo) (*fileObj, error) { @@ -926,46 +912,24 @@ func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) { return nil, err } p := new(PortEvent) + p.Events = pe.Events + p.Source = pe.Source e.mu.Lock() defer e.mu.Unlock() - e.peIntToExt(pe, p) - return p, nil -} - -// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent -// NOTE: Always call this function while holding the e.mu mutex -func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) { - peExt.Events = peInt.Events - peExt.Source = peInt.Source - cookie := (*interface{})(unsafe.Pointer(peInt.User)) - peExt.Cookie = *cookie - switch peInt.Source { + switch pe.Source { case PORT_SOURCE_FD: - delete(e.cookies, cookie) - peExt.Fd = uintptr(peInt.Object) - // Only remove the fds entry if it exists and this cookie matches - if fobj, ok := e.fds[peExt.Fd]; ok { - if &fobj.cookie == cookie { - delete(e.fds, peExt.Fd) - } - } + p.Fd = uintptr(pe.Object) + cookie := (*interface{})(unsafe.Pointer(pe.User)) + p.Cookie = *cookie + delete(e.fds, p.Fd) case PORT_SOURCE_FILE: - if fCookie, ok := e.cookies[cookie]; ok && uintptr(unsafe.Pointer(fCookie.fobj)) == uintptr(peInt.Object) { - // Use our stashed reference rather than using unsafe on what we got back - // the unsafe version would be (*fileObj)(unsafe.Pointer(uintptr(peInt.Object))) - peExt.fobj = fCookie.fobj - } else { - panic("mismanaged memory") - } - delete(e.cookies, cookie) - peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name))) - // Only remove the paths entry if it exists and this cookie matches - if fobj, ok := e.paths[peExt.Path]; ok { - if &fobj.cookie == cookie { - delete(e.paths, peExt.Path) - } - } + p.fobj = (*fileObj)(unsafe.Pointer(uintptr(pe.Object))) + p.Path = BytePtrToString((*byte)(unsafe.Pointer(p.fobj.Name))) + cookie := (*interface{})(unsafe.Pointer(pe.User)) + p.Cookie = *cookie + delete(e.paths, p.Path) } + return p, nil } // Pending wraps port_getn(3c) and returns how many events are pending. @@ -998,7 +962,21 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) e.mu.Lock() defer e.mu.Unlock() for i := 0; i < int(got); i++ { - e.peIntToExt(&ps[i], &s[i]) + s[i].Events = ps[i].Events + s[i].Source = ps[i].Source + switch ps[i].Source { + case PORT_SOURCE_FD: + s[i].Fd = uintptr(ps[i].Object) + cookie := (*interface{})(unsafe.Pointer(ps[i].User)) + s[i].Cookie = *cookie + delete(e.fds, s[i].Fd) + case PORT_SOURCE_FILE: + s[i].fobj = (*fileObj)(unsafe.Pointer(uintptr(ps[i].Object))) + s[i].Path = BytePtrToString((*byte)(unsafe.Pointer(s[i].fobj.Name))) + cookie := (*interface{})(unsafe.Pointer(ps[i].User)) + s[i].Cookie = *cookie + delete(e.paths, s[i].Path) + } } return int(got), err } diff --git a/src/runtime/vendor/golang.org/x/sys/unix/syscall_unix.go b/src/runtime/vendor/golang.org/x/sys/unix/syscall_unix.go index 70508afc1..cf296a243 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -177,30 +177,6 @@ func Write(fd int, p []byte) (n int, err error) { return } -func Pread(fd int, p []byte, offset int64) (n int, err error) { - n, err = pread(fd, p, offset) - if raceenabled { - if n > 0 { - raceWriteRange(unsafe.Pointer(&p[0]), n) - } - if err == nil { - raceAcquire(unsafe.Pointer(&ioSync)) - } - } - return -} - -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - n, err = pwrite(fd, p, offset) - if raceenabled && n > 0 { - raceReadRange(unsafe.Pointer(&p[0]), n) - } - return -} - // For testing: clients can set this flag to force // creation of IPv6 sockets to return EAFNOSUPPORT. var SocketDisableIPv6 bool @@ -337,33 +313,6 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { return } -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { - var rsa RawSockaddrAny - n, oobn, recvflags, err = recvmsgRaw(fd, p, oob, flags, &rsa) - // source address is only specified if the socket is unconnected - if rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } - return -} - -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) - return -} - -func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { - var ptr unsafe.Pointer - var salen _Socklen - if to != nil { - ptr, salen, err = to.sockaddr() - if err != nil { - return 0, err - } - } - return sendmsgN(fd, p, oob, ptr, salen, flags) -} - func Send(s int, buf []byte, flags int) (err error) { return sendto(s, buf, flags, nil, 0) } diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zerrors_linux.go b/src/runtime/vendor/golang.org/x/sys/unix/zerrors_linux.go index 3de79fa25..6bce65803 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -260,17 +260,6 @@ const ( BUS_USB = 0x3 BUS_VIRTUAL = 0x6 CAN_BCM = 0x2 - CAN_CTRLMODE_3_SAMPLES = 0x4 - CAN_CTRLMODE_BERR_REPORTING = 0x10 - CAN_CTRLMODE_CC_LEN8_DLC = 0x100 - CAN_CTRLMODE_FD = 0x20 - CAN_CTRLMODE_FD_NON_ISO = 0x80 - CAN_CTRLMODE_LISTENONLY = 0x2 - CAN_CTRLMODE_LOOPBACK = 0x1 - CAN_CTRLMODE_ONE_SHOT = 0x8 - CAN_CTRLMODE_PRESUME_ACK = 0x40 - CAN_CTRLMODE_TDC_AUTO = 0x200 - CAN_CTRLMODE_TDC_MANUAL = 0x400 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff @@ -348,7 +337,6 @@ const ( CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff - CAN_TERMINATION_DISABLED = 0x0 CAN_TP16 = 0x3 CAN_TP20 = 0x4 CAP_AUDIT_CONTROL = 0x1e @@ -393,11 +381,9 @@ const ( CAP_SYS_TIME = 0x19 CAP_SYS_TTY_CONFIG = 0x1a CAP_WAKE_ALARM = 0x23 - CEPH_SUPER_MAGIC = 0xc36400 CFLUSH = 0xf CGROUP2_SUPER_MAGIC = 0x63677270 CGROUP_SUPER_MAGIC = 0x27e0eb - CIFS_SUPER_MAGIC = 0xff534d42 CLOCK_BOOTTIME = 0x7 CLOCK_BOOTTIME_ALARM = 0x9 CLOCK_DEFAULT = 0x0 @@ -786,7 +772,6 @@ const ( EV_SYN = 0x0 EV_VERSION = 0x10001 EXABYTE_ENABLE_NEST = 0xf0 - EXFAT_SUPER_MAGIC = 0x2011bab0 EXT2_SUPER_MAGIC = 0xef53 EXT3_SUPER_MAGIC = 0xef53 EXT4_SUPER_MAGIC = 0xef53 @@ -829,8 +814,6 @@ const ( FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 FAN_EVENT_INFO_TYPE_ERROR = 0x5 FAN_EVENT_INFO_TYPE_FID = 0x1 - FAN_EVENT_INFO_TYPE_NEW_DFID_NAME = 0xc - FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa FAN_EVENT_INFO_TYPE_PIDFD = 0x4 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 @@ -859,27 +842,17 @@ const ( FAN_OPEN_EXEC_PERM = 0x40000 FAN_OPEN_PERM = 0x10000 FAN_Q_OVERFLOW = 0x4000 - FAN_RENAME = 0x10000000 FAN_REPORT_DFID_NAME = 0xc00 - FAN_REPORT_DFID_NAME_TARGET = 0x1e00 FAN_REPORT_DIR_FID = 0x400 FAN_REPORT_FID = 0x200 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 - FAN_REPORT_TARGET_FID = 0x1000 FAN_REPORT_TID = 0x100 FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 - FIB_RULE_DEV_DETACHED = 0x8 - FIB_RULE_FIND_SADDR = 0x10000 - FIB_RULE_IIF_DETACHED = 0x8 - FIB_RULE_INVERT = 0x2 - FIB_RULE_OIF_DETACHED = 0x10 - FIB_RULE_PERMANENT = 0x1 - FIB_RULE_UNRESOLVED = 0x4 FIDEDUPERANGE = 0xc0189436 FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" @@ -942,7 +915,6 @@ const ( FS_VERITY_METADATA_TYPE_DESCRIPTOR = 0x2 FS_VERITY_METADATA_TYPE_MERKLE_TREE = 0x1 FS_VERITY_METADATA_TYPE_SIGNATURE = 0x3 - FUSE_SUPER_MAGIC = 0x65735546 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1296,14 +1268,9 @@ const ( IP_XFRM_POLICY = 0x11 ISOFS_SUPER_MAGIC = 0x9660 ISTRIP = 0x20 - ITIMER_PROF = 0x2 - ITIMER_REAL = 0x0 - ITIMER_VIRTUAL = 0x1 IUTF8 = 0x4000 IXANY = 0x800 JFFS2_SUPER_MAGIC = 0x72b6 - KCMPROTO_CONNECTED = 0x0 - KCM_RECV_DISABLE = 0x1 KEXEC_ARCH_386 = 0x30000 KEXEC_ARCH_68K = 0x40000 KEXEC_ARCH_AARCH64 = 0xb70000 @@ -1511,7 +1478,6 @@ const ( MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 - MODULE_INIT_COMPRESSED_FILE = 0x4 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 MOUNT_ATTR_IDMAP = 0x100000 @@ -1866,9 +1832,6 @@ const ( PERF_MEM_BLK_NA = 0x1 PERF_MEM_BLK_SHIFT = 0x28 PERF_MEM_HOPS_0 = 0x1 - PERF_MEM_HOPS_1 = 0x2 - PERF_MEM_HOPS_2 = 0x3 - PERF_MEM_HOPS_3 = 0x4 PERF_MEM_HOPS_SHIFT = 0x2b PERF_MEM_LOCK_LOCKED = 0x2 PERF_MEM_LOCK_NA = 0x1 @@ -2072,8 +2035,6 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 - PR_SET_VMA = 0x53564d41 - PR_SET_VMA_ANON_NAME = 0x0 PR_SPEC_DISABLE = 0x4 PR_SPEC_DISABLE_NOEXEC = 0x10 PR_SPEC_ENABLE = 0x2 @@ -2157,10 +2118,6 @@ const ( PTRACE_SYSCALL_INFO_NONE = 0x0 PTRACE_SYSCALL_INFO_SECCOMP = 0x3 PTRACE_TRACEME = 0x0 - P_ALL = 0x0 - P_PGID = 0x2 - P_PID = 0x1 - P_PIDFD = 0x3 QNX4_SUPER_MAGIC = 0x2f QNX6_SUPER_MAGIC = 0x68191122 RAMFS_MAGIC = 0x858458f6 @@ -2486,9 +2443,6 @@ const ( SIOCGSTAMPNS = 0x8907 SIOCGSTAMPNS_OLD = 0x8907 SIOCGSTAMP_OLD = 0x8906 - SIOCKCMATTACH = 0x89e0 - SIOCKCMCLONE = 0x89e2 - SIOCKCMUNATTACH = 0x89e1 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d @@ -2531,7 +2485,6 @@ const ( SMART_STATUS = 0xda SMART_WRITE_LOG_SECTOR = 0xd6 SMART_WRITE_THRESHOLDS = 0xd7 - SMB2_SUPER_MAGIC = 0xfe534d42 SMB_SUPER_MAGIC = 0x517b SOCKFS_MAGIC = 0x534f434b SOCK_BUF_LOCK_MASK = 0x3 @@ -2673,7 +2626,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xb + TASKSTATS_VERSION = 0xa TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go index 870215d2c..85e0cc386 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -975,7 +975,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] @@ -992,7 +992,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go index a89b0bfa5..f1d4a73b0 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -931,7 +931,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] @@ -946,7 +946,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 879376589..0ae0ed4cb 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -643,22 +643,17 @@ var libc_flistxattr_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) +func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc_utimensat_trampoline_addr uintptr +var libc_setattrlist_trampoline_addr uintptr -//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1703,7 +1698,7 @@ var libc_pathconf_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1724,7 +1719,7 @@ var libc_pread_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 8da90cf0e..eac6ca806 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -228,11 +228,11 @@ TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setattrlist(SB) -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fcntl(SB) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index f47eedd5a..cf71be3ed 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -643,22 +643,17 @@ var libc_flistxattr_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) +func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc_utimensat_trampoline_addr uintptr +var libc_setattrlist_trampoline_addr uintptr -//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1703,7 +1698,7 @@ var libc_pathconf_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1724,7 +1719,7 @@ var libc_pread_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 4d26f7d01..4ebcf2175 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -228,11 +228,11 @@ TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) -TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_utimensat(SB) +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_setattrlist(SB) -GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 -DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fcntl(SB) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index e9d9997ee..3e9bddb7b 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index edd373b1a..c72a462b9 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index 82e9764b2..530d5df90 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go index a6479acd1..71e7df9e8 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux.go index bc4a27531..93edda4c4 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -231,16 +231,6 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) { - _, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) ret = int(r0) @@ -828,49 +818,6 @@ func Fsync(fd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) { - r0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs)) - fsfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsopen(fsName string, flags int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fsName) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fspick(dirfd int, pathName string, flags int) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(pathName) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getdents(fd int, buf []byte) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { @@ -1248,26 +1195,6 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fromPathName) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(toPathName) - if err != nil { - return - } - _, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1278,22 +1205,6 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func OpenTree(dfd int, fileName string, flags uint) (r int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(fileName) - if err != nil { - return - } - r0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - r = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) fd = int(r0) @@ -2081,16 +1992,6 @@ func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) { - _, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag)) ret = uintptr(r0) @@ -2131,23 +2032,3 @@ func shmget(key int, size int, flag int) (id int, err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getitimer(which int, currValue *Itimerval) (err error) { - _, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) { - _, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index 88af526b7..ff90c81e7 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go syscall_linux_alarm.go +// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && 386 @@ -200,7 +200,7 @@ func Lstat(path string, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -217,7 +217,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -524,14 +524,3 @@ func utimes(path string, times *[2]Timeval) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index 2a0c4aa6a..fa7d3dbe4 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go syscall_linux_alarm.go +// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && amd64 @@ -215,17 +215,6 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func MemfdSecret(flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Pause() (err error) { _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) if e1 != 0 { @@ -236,7 +225,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -253,7 +242,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -455,6 +444,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -691,14 +691,3 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index 4882bde3a..654f91530 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -46,6 +46,17 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -538,7 +549,7 @@ func utimes(path string, times *[2]Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -555,7 +566,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index 9f8c24e43..e893f987f 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -180,18 +180,7 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func MemfdSecret(flags int) (fd int, err error) { - r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -208,7 +197,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -400,6 +389,17 @@ func Truncate(path string, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index d7d6f4244..6d1552885 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go +// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && mips @@ -150,7 +150,7 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -167,7 +167,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -344,6 +344,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -691,14 +702,3 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index 7f1f8e653..1e20d72df 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go syscall_linux_alarm.go +// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && mips64 @@ -180,7 +180,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -197,7 +197,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -399,6 +399,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -685,14 +696,3 @@ func stat(path string, st *stat_t) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index f933d0f51..82b5e2d9e 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -180,7 +180,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -197,7 +197,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -399,6 +399,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index 297d0a998..a0440c1d4 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go +// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && mipsle @@ -150,7 +150,7 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -167,7 +167,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -344,6 +344,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -691,14 +702,3 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go index 2e32e7a44..5864b9ca6 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go syscall_linux_alarm.go +// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && ppc @@ -210,7 +210,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -227,7 +227,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -409,6 +409,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -696,14 +707,3 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index 3c5317046..beeb49e34 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go +// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && ppc64 @@ -240,7 +240,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -257,7 +257,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -475,6 +475,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -742,14 +753,3 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index a00c6744e..53139b82c 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go +// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && ppc64le @@ -240,7 +240,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -257,7 +257,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -475,6 +475,17 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -742,14 +753,3 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index a1a9bcbbd..63b393b80 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -180,7 +180,7 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -197,7 +197,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -369,6 +369,17 @@ func Truncate(path string, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index e0dabc602..202add37d 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go syscall_linux_alarm.go +// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && s390x @@ -210,7 +210,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -227,7 +227,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -533,14 +533,3 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 368623c0f..2ab268c34 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go syscall_linux_alarm.go +// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && sparc64 @@ -220,7 +220,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -237,7 +237,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -455,6 +455,17 @@ func Truncate(path string, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -686,14 +697,3 @@ func utimes(path string, times *[2]Timeval) (err error) { } return } - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Alarm(seconds uint) (remaining uint, err error) { - r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) - remaining = uint(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index 4af561a48..51d0c0742 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index 3b90e9448..df2efb6db 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index 890f4ccd1..c8536c2c9 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index c79f071fc..8b981bfc2 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index a057fc5d3..8f80f4ade 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 04db8fa2f..3a47aca7b 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index 69f803006..883a9b45e 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index c96a50517..aac7fdc95 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index 016d959bc..877618746 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index d12f4fbfe..b5f926cee 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -227,8 +227,8 @@ import ( //go:linkname procOpenat libc_openat //go:linkname procPathconf libc_pathconf //go:linkname procPause libc_pause -//go:linkname procpread libc_pread -//go:linkname procpwrite libc_pwrite +//go:linkname procPread libc_pread +//go:linkname procPwrite libc_pwrite //go:linkname procread libc_read //go:linkname procReadlink libc_readlink //go:linkname procRename libc_rename @@ -364,8 +364,8 @@ var ( procOpenat, procPathconf, procPause, - procpread, - procpwrite, + procPread, + procPwrite, procread, procReadlink, procRename, @@ -1380,12 +1380,12 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pread(fd int, p []byte, offset int64) (n int, err error) { +func Pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = e1 @@ -1395,12 +1395,12 @@ func pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func pwrite(fd int, p []byte, offset int64) (n int, err error) { +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = e1 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 62192e1de..cac1f758b 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -446,5 +446,4 @@ const ( SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 490aab5d2..f327e4a0b 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -368,5 +368,4 @@ const ( SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index aca17b6fa..fb06a08d4 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -410,5 +410,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 54b4dfa54..58285646e 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -313,5 +313,4 @@ const ( SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index 65a99efc2..3b0418e68 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -430,5 +430,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 4446 SYS_PROCESS_MRELEASE = 4448 SYS_FUTEX_WAITV = 4449 - SYS_SET_MEMPOLICY_HOME_NODE = 4450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 841c8a668..314ebf166 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -360,5 +360,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 5446 SYS_PROCESS_MRELEASE = 5448 SYS_FUTEX_WAITV = 5449 - SYS_SET_MEMPOLICY_HOME_NODE = 5450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index e26a7c765..b8fbb937a 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -360,5 +360,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 5446 SYS_PROCESS_MRELEASE = 5448 SYS_FUTEX_WAITV = 5449 - SYS_SET_MEMPOLICY_HOME_NODE = 5450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index 26447260a..ee309b2ba 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -430,5 +430,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 4446 SYS_PROCESS_MRELEASE = 4448 SYS_FUTEX_WAITV = 4449 - SYS_SET_MEMPOLICY_HOME_NODE = 4450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 26aefc186..ac3748104 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -437,5 +437,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 8d4cd9d99..5aa472111 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -409,5 +409,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 3b405d1f8..0793ac1a6 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -409,5 +409,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index c3a5af862..a520962e3 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -311,5 +311,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 8ffa66469..d1738586b 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -374,5 +374,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 6a39640e7..dfd5660f9 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -388,5 +388,4 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 - SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux.go index 9962d26bb..66788f156 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -24,11 +24,6 @@ type ItimerSpec struct { Value Timespec } -type Itimerval struct { - Interval Timeval - Value Timeval -} - const ( TIME_OK = 0x0 TIME_INS = 0x1 @@ -754,25 +749,6 @@ const ( AT_SYMLINK_NOFOLLOW = 0x100 AT_EACCESS = 0x200 - - OPEN_TREE_CLONE = 0x1 - - MOVE_MOUNT_F_SYMLINKS = 0x1 - MOVE_MOUNT_F_AUTOMOUNTS = 0x2 - MOVE_MOUNT_F_EMPTY_PATH = 0x4 - MOVE_MOUNT_T_SYMLINKS = 0x10 - MOVE_MOUNT_T_AUTOMOUNTS = 0x20 - MOVE_MOUNT_T_EMPTY_PATH = 0x40 - MOVE_MOUNT_SET_GROUP = 0x100 - - FSOPEN_CLOEXEC = 0x1 - - FSPICK_CLOEXEC = 0x1 - FSPICK_SYMLINK_NOFOLLOW = 0x2 - FSPICK_NO_AUTOMOUNT = 0x4 - FSPICK_EMPTY_PATH = 0x8 - - FSMOUNT_CLOEXEC = 0x1 ) type OpenHow struct { @@ -3638,7 +3614,7 @@ const ( ETHTOOL_A_RINGS_RX_MINI = 0x7 ETHTOOL_A_RINGS_RX_JUMBO = 0x8 ETHTOOL_A_RINGS_TX = 0x9 - ETHTOOL_A_RINGS_MAX = 0xa + ETHTOOL_A_RINGS_MAX = 0x9 ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -3790,8 +3766,6 @@ const ( ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 ) -const SPEED_UNKNOWN = -0x1 - type EthtoolDrvinfo struct { Cmd uint32 Driver [32]byte @@ -4091,1500 +4065,3 @@ const ( NL_POLICY_TYPE_ATTR_MASK = 0xc NL_POLICY_TYPE_ATTR_MAX = 0xc ) - -type CANBitTiming struct { - Bitrate uint32 - Sample_point uint32 - Tq uint32 - Prop_seg uint32 - Phase_seg1 uint32 - Phase_seg2 uint32 - Sjw uint32 - Brp uint32 -} - -type CANBitTimingConst struct { - Name [16]uint8 - Tseg1_min uint32 - Tseg1_max uint32 - Tseg2_min uint32 - Tseg2_max uint32 - Sjw_max uint32 - Brp_min uint32 - Brp_max uint32 - Brp_inc uint32 -} - -type CANClock struct { - Freq uint32 -} - -type CANBusErrorCounters struct { - Txerr uint16 - Rxerr uint16 -} - -type CANCtrlMode struct { - Mask uint32 - Flags uint32 -} - -type CANDeviceStats struct { - Bus_error uint32 - Error_warning uint32 - Error_passive uint32 - Bus_off uint32 - Arbitration_lost uint32 - Restarts uint32 -} - -const ( - CAN_STATE_ERROR_ACTIVE = 0x0 - CAN_STATE_ERROR_WARNING = 0x1 - CAN_STATE_ERROR_PASSIVE = 0x2 - CAN_STATE_BUS_OFF = 0x3 - CAN_STATE_STOPPED = 0x4 - CAN_STATE_SLEEPING = 0x5 - CAN_STATE_MAX = 0x6 -) - -const ( - IFLA_CAN_UNSPEC = 0x0 - IFLA_CAN_BITTIMING = 0x1 - IFLA_CAN_BITTIMING_CONST = 0x2 - IFLA_CAN_CLOCK = 0x3 - IFLA_CAN_STATE = 0x4 - IFLA_CAN_CTRLMODE = 0x5 - IFLA_CAN_RESTART_MS = 0x6 - IFLA_CAN_RESTART = 0x7 - IFLA_CAN_BERR_COUNTER = 0x8 - IFLA_CAN_DATA_BITTIMING = 0x9 - IFLA_CAN_DATA_BITTIMING_CONST = 0xa - IFLA_CAN_TERMINATION = 0xb - IFLA_CAN_TERMINATION_CONST = 0xc - IFLA_CAN_BITRATE_CONST = 0xd - IFLA_CAN_DATA_BITRATE_CONST = 0xe - IFLA_CAN_BITRATE_MAX = 0xf -) - -type KCMAttach struct { - Fd int32 - Bpf_fd int32 -} - -type KCMUnattach struct { - Fd int32 -} - -type KCMClone struct { - Fd int32 -} - -const ( - NL80211_AC_BE = 0x2 - NL80211_AC_BK = 0x3 - NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED = 0x0 - NL80211_ACL_POLICY_DENY_UNLESS_LISTED = 0x1 - NL80211_AC_VI = 0x1 - NL80211_AC_VO = 0x0 - NL80211_ATTR_4ADDR = 0x53 - NL80211_ATTR_ACK = 0x5c - NL80211_ATTR_ACK_SIGNAL = 0x107 - NL80211_ATTR_ACL_POLICY = 0xa5 - NL80211_ATTR_ADMITTED_TIME = 0xd4 - NL80211_ATTR_AIRTIME_WEIGHT = 0x112 - NL80211_ATTR_AKM_SUITES = 0x4c - NL80211_ATTR_AP_ISOLATE = 0x60 - NL80211_ATTR_AUTH_DATA = 0x9c - NL80211_ATTR_AUTH_TYPE = 0x35 - NL80211_ATTR_BANDS = 0xef - NL80211_ATTR_BEACON_HEAD = 0xe - NL80211_ATTR_BEACON_INTERVAL = 0xc - NL80211_ATTR_BEACON_TAIL = 0xf - NL80211_ATTR_BG_SCAN_PERIOD = 0x98 - NL80211_ATTR_BSS_BASIC_RATES = 0x24 - NL80211_ATTR_BSS = 0x2f - NL80211_ATTR_BSS_CTS_PROT = 0x1c - NL80211_ATTR_BSS_HT_OPMODE = 0x6d - NL80211_ATTR_BSSID = 0xf5 - NL80211_ATTR_BSS_SELECT = 0xe3 - NL80211_ATTR_BSS_SHORT_PREAMBLE = 0x1d - NL80211_ATTR_BSS_SHORT_SLOT_TIME = 0x1e - NL80211_ATTR_CENTER_FREQ1 = 0xa0 - NL80211_ATTR_CENTER_FREQ1_OFFSET = 0x123 - NL80211_ATTR_CENTER_FREQ2 = 0xa1 - NL80211_ATTR_CHANNEL_WIDTH = 0x9f - NL80211_ATTR_CH_SWITCH_BLOCK_TX = 0xb8 - NL80211_ATTR_CH_SWITCH_COUNT = 0xb7 - NL80211_ATTR_CIPHER_SUITE_GROUP = 0x4a - NL80211_ATTR_CIPHER_SUITES = 0x39 - NL80211_ATTR_CIPHER_SUITES_PAIRWISE = 0x49 - NL80211_ATTR_CNTDWN_OFFS_BEACON = 0xba - NL80211_ATTR_CNTDWN_OFFS_PRESP = 0xbb - NL80211_ATTR_COALESCE_RULE = 0xb6 - NL80211_ATTR_COALESCE_RULE_CONDITION = 0x2 - NL80211_ATTR_COALESCE_RULE_DELAY = 0x1 - NL80211_ATTR_COALESCE_RULE_MAX = 0x3 - NL80211_ATTR_COALESCE_RULE_PKT_PATTERN = 0x3 - NL80211_ATTR_CONN_FAILED_REASON = 0x9b - NL80211_ATTR_CONTROL_PORT = 0x44 - NL80211_ATTR_CONTROL_PORT_ETHERTYPE = 0x66 - NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT = 0x67 - NL80211_ATTR_CONTROL_PORT_NO_PREAUTH = 0x11e - NL80211_ATTR_CONTROL_PORT_OVER_NL80211 = 0x108 - NL80211_ATTR_COOKIE = 0x58 - NL80211_ATTR_CQM_BEACON_LOSS_EVENT = 0x8 - NL80211_ATTR_CQM = 0x5e - NL80211_ATTR_CQM_MAX = 0x9 - NL80211_ATTR_CQM_PKT_LOSS_EVENT = 0x4 - NL80211_ATTR_CQM_RSSI_HYST = 0x2 - NL80211_ATTR_CQM_RSSI_LEVEL = 0x9 - NL80211_ATTR_CQM_RSSI_THOLD = 0x1 - NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT = 0x3 - NL80211_ATTR_CQM_TXE_INTVL = 0x7 - NL80211_ATTR_CQM_TXE_PKTS = 0x6 - NL80211_ATTR_CQM_TXE_RATE = 0x5 - NL80211_ATTR_CRIT_PROT_ID = 0xb3 - NL80211_ATTR_CSA_C_OFF_BEACON = 0xba - NL80211_ATTR_CSA_C_OFF_PRESP = 0xbb - NL80211_ATTR_CSA_C_OFFSETS_TX = 0xcd - NL80211_ATTR_CSA_IES = 0xb9 - NL80211_ATTR_DEVICE_AP_SME = 0x8d - NL80211_ATTR_DFS_CAC_TIME = 0x7 - NL80211_ATTR_DFS_REGION = 0x92 - NL80211_ATTR_DISABLE_HE = 0x12d - NL80211_ATTR_DISABLE_HT = 0x93 - NL80211_ATTR_DISABLE_VHT = 0xaf - NL80211_ATTR_DISCONNECTED_BY_AP = 0x47 - NL80211_ATTR_DONT_WAIT_FOR_ACK = 0x8e - NL80211_ATTR_DTIM_PERIOD = 0xd - NL80211_ATTR_DURATION = 0x57 - NL80211_ATTR_EXT_CAPA = 0xa9 - NL80211_ATTR_EXT_CAPA_MASK = 0xaa - NL80211_ATTR_EXTERNAL_AUTH_ACTION = 0x104 - NL80211_ATTR_EXTERNAL_AUTH_SUPPORT = 0x105 - NL80211_ATTR_EXT_FEATURES = 0xd9 - NL80211_ATTR_FEATURE_FLAGS = 0x8f - NL80211_ATTR_FILS_CACHE_ID = 0xfd - NL80211_ATTR_FILS_DISCOVERY = 0x126 - NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM = 0xfb - NL80211_ATTR_FILS_ERP_REALM = 0xfa - NL80211_ATTR_FILS_ERP_RRK = 0xfc - NL80211_ATTR_FILS_ERP_USERNAME = 0xf9 - NL80211_ATTR_FILS_KEK = 0xf2 - NL80211_ATTR_FILS_NONCES = 0xf3 - NL80211_ATTR_FRAME = 0x33 - NL80211_ATTR_FRAME_MATCH = 0x5b - NL80211_ATTR_FRAME_TYPE = 0x65 - NL80211_ATTR_FREQ_AFTER = 0x3b - NL80211_ATTR_FREQ_BEFORE = 0x3a - NL80211_ATTR_FREQ_FIXED = 0x3c - NL80211_ATTR_FREQ_RANGE_END = 0x3 - NL80211_ATTR_FREQ_RANGE_MAX_BW = 0x4 - NL80211_ATTR_FREQ_RANGE_START = 0x2 - NL80211_ATTR_FTM_RESPONDER = 0x10e - NL80211_ATTR_FTM_RESPONDER_STATS = 0x10f - NL80211_ATTR_GENERATION = 0x2e - NL80211_ATTR_HANDLE_DFS = 0xbf - NL80211_ATTR_HE_6GHZ_CAPABILITY = 0x125 - NL80211_ATTR_HE_BSS_COLOR = 0x11b - NL80211_ATTR_HE_CAPABILITY = 0x10d - NL80211_ATTR_HE_OBSS_PD = 0x117 - NL80211_ATTR_HIDDEN_SSID = 0x7e - NL80211_ATTR_HT_CAPABILITY = 0x1f - NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 - NL80211_ATTR_IE_ASSOC_RESP = 0x80 - NL80211_ATTR_IE = 0x2a - NL80211_ATTR_IE_PROBE_RESP = 0x7f - NL80211_ATTR_IE_RIC = 0xb2 - NL80211_ATTR_IFACE_SOCKET_OWNER = 0xcc - NL80211_ATTR_IFINDEX = 0x3 - NL80211_ATTR_IFNAME = 0x4 - NL80211_ATTR_IFTYPE_AKM_SUITES = 0x11c - NL80211_ATTR_IFTYPE = 0x5 - NL80211_ATTR_IFTYPE_EXT_CAPA = 0xe6 - NL80211_ATTR_INACTIVITY_TIMEOUT = 0x96 - NL80211_ATTR_INTERFACE_COMBINATIONS = 0x78 - NL80211_ATTR_KEY_CIPHER = 0x9 - NL80211_ATTR_KEY = 0x50 - NL80211_ATTR_KEY_DATA = 0x7 - NL80211_ATTR_KEY_DEFAULT = 0xb - NL80211_ATTR_KEY_DEFAULT_MGMT = 0x28 - NL80211_ATTR_KEY_DEFAULT_TYPES = 0x6e - NL80211_ATTR_KEY_IDX = 0x8 - NL80211_ATTR_KEYS = 0x51 - NL80211_ATTR_KEY_SEQ = 0xa - NL80211_ATTR_KEY_TYPE = 0x37 - NL80211_ATTR_LOCAL_MESH_POWER_MODE = 0xa4 - NL80211_ATTR_LOCAL_STATE_CHANGE = 0x5f - NL80211_ATTR_MAC_ACL_MAX = 0xa7 - NL80211_ATTR_MAC_ADDRS = 0xa6 - NL80211_ATTR_MAC = 0x6 - NL80211_ATTR_MAC_HINT = 0xc8 - NL80211_ATTR_MAC_MASK = 0xd7 - NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x135 - NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 - NL80211_ATTR_MAX_CSA_COUNTERS = 0xce - NL80211_ATTR_MAX_MATCH_SETS = 0x85 - NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 - NL80211_ATTR_MAX_NUM_SCAN_SSIDS = 0x2b - NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS = 0xde - NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS = 0x7b - NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION = 0x6f - NL80211_ATTR_MAX_SCAN_IE_LEN = 0x38 - NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL = 0xdf - NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS = 0xe0 - NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN = 0x7c - NL80211_ATTR_MCAST_RATE = 0x6b - NL80211_ATTR_MDID = 0xb1 - NL80211_ATTR_MEASUREMENT_DURATION = 0xeb - NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY = 0xec - NL80211_ATTR_MESH_CONFIG = 0x23 - NL80211_ATTR_MESH_ID = 0x18 - NL80211_ATTR_MESH_PEER_AID = 0xed - NL80211_ATTR_MESH_SETUP = 0x70 - NL80211_ATTR_MGMT_SUBTYPE = 0x29 - NL80211_ATTR_MNTR_FLAGS = 0x17 - NL80211_ATTR_MPATH_INFO = 0x1b - NL80211_ATTR_MPATH_NEXT_HOP = 0x1a - NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED = 0xf4 - NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR = 0xe8 - NL80211_ATTR_MU_MIMO_GROUP_DATA = 0xe7 - NL80211_ATTR_NAN_FUNC = 0xf0 - NL80211_ATTR_NAN_MASTER_PREF = 0xee - NL80211_ATTR_NAN_MATCH = 0xf1 - NL80211_ATTR_NETNS_FD = 0xdb - NL80211_ATTR_NOACK_MAP = 0x95 - NL80211_ATTR_NSS = 0x106 - NL80211_ATTR_OFFCHANNEL_TX_OK = 0x6c - NL80211_ATTR_OPER_CLASS = 0xd6 - NL80211_ATTR_OPMODE_NOTIF = 0xc2 - NL80211_ATTR_P2P_CTWINDOW = 0xa2 - NL80211_ATTR_P2P_OPPPS = 0xa3 - NL80211_ATTR_PAD = 0xe5 - NL80211_ATTR_PBSS = 0xe2 - NL80211_ATTR_PEER_AID = 0xb5 - NL80211_ATTR_PEER_MEASUREMENTS = 0x111 - NL80211_ATTR_PID = 0x52 - NL80211_ATTR_PMK = 0xfe - NL80211_ATTR_PMKID = 0x55 - NL80211_ATTR_PMK_LIFETIME = 0x11f - NL80211_ATTR_PMKR0_NAME = 0x102 - NL80211_ATTR_PMK_REAUTH_THRESHOLD = 0x120 - NL80211_ATTR_PMKSA_CANDIDATE = 0x86 - NL80211_ATTR_PORT_AUTHORIZED = 0x103 - NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 - NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 - NL80211_ATTR_PREV_BSSID = 0x4f - NL80211_ATTR_PRIVACY = 0x46 - NL80211_ATTR_PROBE_RESP = 0x91 - NL80211_ATTR_PROBE_RESP_OFFLOAD = 0x90 - NL80211_ATTR_PROTOCOL_FEATURES = 0xad - NL80211_ATTR_PS_STATE = 0x5d - NL80211_ATTR_QOS_MAP = 0xc7 - NL80211_ATTR_RADAR_EVENT = 0xa8 - NL80211_ATTR_REASON_CODE = 0x36 - NL80211_ATTR_RECEIVE_MULTICAST = 0x121 - NL80211_ATTR_RECONNECT_REQUESTED = 0x12b - NL80211_ATTR_REG_ALPHA2 = 0x21 - NL80211_ATTR_REG_INDOOR = 0xdd - NL80211_ATTR_REG_INITIATOR = 0x30 - NL80211_ATTR_REG_RULE_FLAGS = 0x1 - NL80211_ATTR_REG_RULES = 0x22 - NL80211_ATTR_REG_TYPE = 0x31 - NL80211_ATTR_REKEY_DATA = 0x7a - NL80211_ATTR_REQ_IE = 0x4d - NL80211_ATTR_RESP_IE = 0x4e - NL80211_ATTR_ROAM_SUPPORT = 0x83 - NL80211_ATTR_RX_FRAME_TYPES = 0x64 - NL80211_ATTR_RXMGMT_FLAGS = 0xbc - NL80211_ATTR_RX_SIGNAL_DBM = 0x97 - NL80211_ATTR_S1G_CAPABILITY = 0x128 - NL80211_ATTR_S1G_CAPABILITY_MASK = 0x129 - NL80211_ATTR_SAE_DATA = 0x9c - NL80211_ATTR_SAE_PASSWORD = 0x115 - NL80211_ATTR_SAE_PWE = 0x12a - NL80211_ATTR_SAR_SPEC = 0x12c - NL80211_ATTR_SCAN_FLAGS = 0x9e - NL80211_ATTR_SCAN_FREQ_KHZ = 0x124 - NL80211_ATTR_SCAN_FREQUENCIES = 0x2c - NL80211_ATTR_SCAN_GENERATION = 0x2e - NL80211_ATTR_SCAN_SSIDS = 0x2d - NL80211_ATTR_SCAN_START_TIME_TSF_BSSID = 0xea - NL80211_ATTR_SCAN_START_TIME_TSF = 0xe9 - NL80211_ATTR_SCAN_SUPP_RATES = 0x7d - NL80211_ATTR_SCHED_SCAN_DELAY = 0xdc - NL80211_ATTR_SCHED_SCAN_INTERVAL = 0x77 - NL80211_ATTR_SCHED_SCAN_MATCH = 0x84 - NL80211_ATTR_SCHED_SCAN_MATCH_SSID = 0x1 - NL80211_ATTR_SCHED_SCAN_MAX_REQS = 0x100 - NL80211_ATTR_SCHED_SCAN_MULTI = 0xff - NL80211_ATTR_SCHED_SCAN_PLANS = 0xe1 - NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI = 0xf6 - NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST = 0xf7 - NL80211_ATTR_SMPS_MODE = 0xd5 - NL80211_ATTR_SOCKET_OWNER = 0xcc - NL80211_ATTR_SOFTWARE_IFTYPES = 0x79 - NL80211_ATTR_SPLIT_WIPHY_DUMP = 0xae - NL80211_ATTR_SSID = 0x34 - NL80211_ATTR_STA_AID = 0x10 - NL80211_ATTR_STA_CAPABILITY = 0xab - NL80211_ATTR_STA_EXT_CAPABILITY = 0xac - NL80211_ATTR_STA_FLAGS2 = 0x43 - NL80211_ATTR_STA_FLAGS = 0x11 - NL80211_ATTR_STA_INFO = 0x15 - NL80211_ATTR_STA_LISTEN_INTERVAL = 0x12 - NL80211_ATTR_STA_PLINK_ACTION = 0x19 - NL80211_ATTR_STA_PLINK_STATE = 0x74 - NL80211_ATTR_STA_SUPPORTED_CHANNELS = 0xbd - NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES = 0xbe - NL80211_ATTR_STA_SUPPORTED_RATES = 0x13 - NL80211_ATTR_STA_SUPPORT_P2P_PS = 0xe4 - NL80211_ATTR_STATUS_CODE = 0x48 - NL80211_ATTR_STA_TX_POWER = 0x114 - NL80211_ATTR_STA_TX_POWER_SETTING = 0x113 - NL80211_ATTR_STA_VLAN = 0x14 - NL80211_ATTR_STA_WME = 0x81 - NL80211_ATTR_SUPPORT_10_MHZ = 0xc1 - NL80211_ATTR_SUPPORT_5_MHZ = 0xc0 - NL80211_ATTR_SUPPORT_AP_UAPSD = 0x82 - NL80211_ATTR_SUPPORTED_COMMANDS = 0x32 - NL80211_ATTR_SUPPORTED_IFTYPES = 0x20 - NL80211_ATTR_SUPPORT_IBSS_RSN = 0x68 - NL80211_ATTR_SUPPORT_MESH_AUTH = 0x73 - NL80211_ATTR_SURVEY_INFO = 0x54 - NL80211_ATTR_SURVEY_RADIO_STATS = 0xda - NL80211_ATTR_TDLS_ACTION = 0x88 - NL80211_ATTR_TDLS_DIALOG_TOKEN = 0x89 - NL80211_ATTR_TDLS_EXTERNAL_SETUP = 0x8c - NL80211_ATTR_TDLS_INITIATOR = 0xcf - NL80211_ATTR_TDLS_OPERATION = 0x8a - NL80211_ATTR_TDLS_PEER_CAPABILITY = 0xcb - NL80211_ATTR_TDLS_SUPPORT = 0x8b - NL80211_ATTR_TESTDATA = 0x45 - NL80211_ATTR_TID_CONFIG = 0x11d - NL80211_ATTR_TIMED_OUT = 0x41 - NL80211_ATTR_TIMEOUT = 0x110 - NL80211_ATTR_TIMEOUT_REASON = 0xf8 - NL80211_ATTR_TSID = 0xd2 - NL80211_ATTR_TWT_RESPONDER = 0x116 - NL80211_ATTR_TX_FRAME_TYPES = 0x63 - NL80211_ATTR_TX_NO_CCK_RATE = 0x87 - NL80211_ATTR_TXQ_LIMIT = 0x10a - NL80211_ATTR_TXQ_MEMORY_LIMIT = 0x10b - NL80211_ATTR_TXQ_QUANTUM = 0x10c - NL80211_ATTR_TXQ_STATS = 0x109 - NL80211_ATTR_TX_RATES = 0x5a - NL80211_ATTR_UNSOL_BCAST_PROBE_RESP = 0x127 - NL80211_ATTR_UNSPEC = 0x0 - NL80211_ATTR_USE_MFP = 0x42 - NL80211_ATTR_USER_PRIO = 0xd3 - NL80211_ATTR_USER_REG_HINT_TYPE = 0x9a - NL80211_ATTR_USE_RRM = 0xd0 - NL80211_ATTR_VENDOR_DATA = 0xc5 - NL80211_ATTR_VENDOR_EVENTS = 0xc6 - NL80211_ATTR_VENDOR_ID = 0xc3 - NL80211_ATTR_VENDOR_SUBCMD = 0xc4 - NL80211_ATTR_VHT_CAPABILITY = 0x9d - NL80211_ATTR_VHT_CAPABILITY_MASK = 0xb0 - NL80211_ATTR_VLAN_ID = 0x11a - NL80211_ATTR_WANT_1X_4WAY_HS = 0x101 - NL80211_ATTR_WDEV = 0x99 - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX = 0x72 - NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX = 0x71 - NL80211_ATTR_WIPHY_ANTENNA_RX = 0x6a - NL80211_ATTR_WIPHY_ANTENNA_TX = 0x69 - NL80211_ATTR_WIPHY_BANDS = 0x16 - NL80211_ATTR_WIPHY_CHANNEL_TYPE = 0x27 - NL80211_ATTR_WIPHY = 0x1 - NL80211_ATTR_WIPHY_COVERAGE_CLASS = 0x59 - NL80211_ATTR_WIPHY_DYN_ACK = 0xd1 - NL80211_ATTR_WIPHY_EDMG_BW_CONFIG = 0x119 - NL80211_ATTR_WIPHY_EDMG_CHANNELS = 0x118 - NL80211_ATTR_WIPHY_FRAG_THRESHOLD = 0x3f - NL80211_ATTR_WIPHY_FREQ = 0x26 - NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 - NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 - NL80211_ATTR_WIPHY_NAME = 0x2 - NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e - NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d - NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 - NL80211_ATTR_WIPHY_SELF_MANAGED_REG = 0xd8 - NL80211_ATTR_WIPHY_TX_POWER_LEVEL = 0x62 - NL80211_ATTR_WIPHY_TX_POWER_SETTING = 0x61 - NL80211_ATTR_WIPHY_TXQ_PARAMS = 0x25 - NL80211_ATTR_WOWLAN_TRIGGERS = 0x75 - NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76 - NL80211_ATTR_WPA_VERSIONS = 0x4b - NL80211_AUTHTYPE_AUTOMATIC = 0x8 - NL80211_AUTHTYPE_FILS_PK = 0x7 - NL80211_AUTHTYPE_FILS_SK = 0x5 - NL80211_AUTHTYPE_FILS_SK_PFS = 0x6 - NL80211_AUTHTYPE_FT = 0x2 - NL80211_AUTHTYPE_MAX = 0x7 - NL80211_AUTHTYPE_NETWORK_EAP = 0x3 - NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0 - NL80211_AUTHTYPE_SAE = 0x4 - NL80211_AUTHTYPE_SHARED_KEY = 0x1 - NL80211_BAND_2GHZ = 0x0 - NL80211_BAND_5GHZ = 0x1 - NL80211_BAND_60GHZ = 0x2 - NL80211_BAND_6GHZ = 0x3 - NL80211_BAND_ATTR_EDMG_BW_CONFIG = 0xb - NL80211_BAND_ATTR_EDMG_CHANNELS = 0xa - NL80211_BAND_ATTR_FREQS = 0x1 - NL80211_BAND_ATTR_HT_AMPDU_DENSITY = 0x6 - NL80211_BAND_ATTR_HT_AMPDU_FACTOR = 0x5 - NL80211_BAND_ATTR_HT_CAPA = 0x4 - NL80211_BAND_ATTR_HT_MCS_SET = 0x3 - NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 - NL80211_BAND_ATTR_MAX = 0xb - NL80211_BAND_ATTR_RATES = 0x2 - NL80211_BAND_ATTR_VHT_CAPA = 0x8 - NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 - NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA = 0x6 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC = 0x2 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET = 0x4 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY = 0x3 - NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 0x5 - NL80211_BAND_IFTYPE_ATTR_IFTYPES = 0x1 - NL80211_BAND_IFTYPE_ATTR_MAX = 0x7 - NL80211_BAND_S1GHZ = 0x4 - NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE = 0x2 - NL80211_BITRATE_ATTR_MAX = 0x2 - NL80211_BITRATE_ATTR_RATE = 0x1 - NL80211_BSS_BEACON_IES = 0xb - NL80211_BSS_BEACON_INTERVAL = 0x4 - NL80211_BSS_BEACON_TSF = 0xd - NL80211_BSS_BSSID = 0x1 - NL80211_BSS_CAPABILITY = 0x5 - NL80211_BSS_CHAIN_SIGNAL = 0x13 - NL80211_BSS_CHAN_WIDTH_10 = 0x1 - NL80211_BSS_CHAN_WIDTH_1 = 0x3 - NL80211_BSS_CHAN_WIDTH_20 = 0x0 - NL80211_BSS_CHAN_WIDTH_2 = 0x4 - NL80211_BSS_CHAN_WIDTH_5 = 0x2 - NL80211_BSS_CHAN_WIDTH = 0xc - NL80211_BSS_FREQUENCY = 0x2 - NL80211_BSS_FREQUENCY_OFFSET = 0x14 - NL80211_BSS_INFORMATION_ELEMENTS = 0x6 - NL80211_BSS_LAST_SEEN_BOOTTIME = 0xf - NL80211_BSS_MAX = 0x14 - NL80211_BSS_PAD = 0x10 - NL80211_BSS_PARENT_BSSID = 0x12 - NL80211_BSS_PARENT_TSF = 0x11 - NL80211_BSS_PRESP_DATA = 0xe - NL80211_BSS_SEEN_MS_AGO = 0xa - NL80211_BSS_SELECT_ATTR_BAND_PREF = 0x2 - NL80211_BSS_SELECT_ATTR_MAX = 0x3 - NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 0x3 - NL80211_BSS_SELECT_ATTR_RSSI = 0x1 - NL80211_BSS_SIGNAL_MBM = 0x7 - NL80211_BSS_SIGNAL_UNSPEC = 0x8 - NL80211_BSS_STATUS_ASSOCIATED = 0x1 - NL80211_BSS_STATUS_AUTHENTICATED = 0x0 - NL80211_BSS_STATUS = 0x9 - NL80211_BSS_STATUS_IBSS_JOINED = 0x2 - NL80211_BSS_TSF = 0x3 - NL80211_CHAN_HT20 = 0x1 - NL80211_CHAN_HT40MINUS = 0x2 - NL80211_CHAN_HT40PLUS = 0x3 - NL80211_CHAN_NO_HT = 0x0 - NL80211_CHAN_WIDTH_10 = 0x7 - NL80211_CHAN_WIDTH_160 = 0x5 - NL80211_CHAN_WIDTH_16 = 0xc - NL80211_CHAN_WIDTH_1 = 0x8 - NL80211_CHAN_WIDTH_20 = 0x1 - NL80211_CHAN_WIDTH_20_NOHT = 0x0 - NL80211_CHAN_WIDTH_2 = 0x9 - NL80211_CHAN_WIDTH_40 = 0x2 - NL80211_CHAN_WIDTH_4 = 0xa - NL80211_CHAN_WIDTH_5 = 0x6 - NL80211_CHAN_WIDTH_80 = 0x3 - NL80211_CHAN_WIDTH_80P80 = 0x4 - NL80211_CHAN_WIDTH_8 = 0xb - NL80211_CMD_ABORT_SCAN = 0x72 - NL80211_CMD_ACTION = 0x3b - NL80211_CMD_ACTION_TX_STATUS = 0x3c - NL80211_CMD_ADD_NAN_FUNCTION = 0x75 - NL80211_CMD_ADD_TX_TS = 0x69 - NL80211_CMD_ASSOCIATE = 0x26 - NL80211_CMD_AUTHENTICATE = 0x25 - NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL = 0x38 - NL80211_CMD_CHANGE_NAN_CONFIG = 0x77 - NL80211_CMD_CHANNEL_SWITCH = 0x66 - NL80211_CMD_CH_SWITCH_NOTIFY = 0x58 - NL80211_CMD_CH_SWITCH_STARTED_NOTIFY = 0x6e - NL80211_CMD_CONNECT = 0x2e - NL80211_CMD_CONN_FAILED = 0x5b - NL80211_CMD_CONTROL_PORT_FRAME = 0x81 - NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS = 0x8b - NL80211_CMD_CRIT_PROTOCOL_START = 0x62 - NL80211_CMD_CRIT_PROTOCOL_STOP = 0x63 - NL80211_CMD_DEAUTHENTICATE = 0x27 - NL80211_CMD_DEL_BEACON = 0x10 - NL80211_CMD_DEL_INTERFACE = 0x8 - NL80211_CMD_DEL_KEY = 0xc - NL80211_CMD_DEL_MPATH = 0x18 - NL80211_CMD_DEL_NAN_FUNCTION = 0x76 - NL80211_CMD_DEL_PMK = 0x7c - NL80211_CMD_DEL_PMKSA = 0x35 - NL80211_CMD_DEL_STATION = 0x14 - NL80211_CMD_DEL_TX_TS = 0x6a - NL80211_CMD_DEL_WIPHY = 0x4 - NL80211_CMD_DISASSOCIATE = 0x28 - NL80211_CMD_DISCONNECT = 0x30 - NL80211_CMD_EXTERNAL_AUTH = 0x7f - NL80211_CMD_FLUSH_PMKSA = 0x36 - NL80211_CMD_FRAME = 0x3b - NL80211_CMD_FRAME_TX_STATUS = 0x3c - NL80211_CMD_FRAME_WAIT_CANCEL = 0x43 - NL80211_CMD_FT_EVENT = 0x61 - NL80211_CMD_GET_BEACON = 0xd - NL80211_CMD_GET_COALESCE = 0x64 - NL80211_CMD_GET_FTM_RESPONDER_STATS = 0x82 - NL80211_CMD_GET_INTERFACE = 0x5 - NL80211_CMD_GET_KEY = 0x9 - NL80211_CMD_GET_MESH_CONFIG = 0x1c - NL80211_CMD_GET_MESH_PARAMS = 0x1c - NL80211_CMD_GET_MPATH = 0x15 - NL80211_CMD_GET_MPP = 0x6b - NL80211_CMD_GET_POWER_SAVE = 0x3e - NL80211_CMD_GET_PROTOCOL_FEATURES = 0x5f - NL80211_CMD_GET_REG = 0x1f - NL80211_CMD_GET_SCAN = 0x20 - NL80211_CMD_GET_STATION = 0x11 - NL80211_CMD_GET_SURVEY = 0x32 - NL80211_CMD_GET_WIPHY = 0x1 - NL80211_CMD_GET_WOWLAN = 0x49 - NL80211_CMD_JOIN_IBSS = 0x2b - NL80211_CMD_JOIN_MESH = 0x44 - NL80211_CMD_JOIN_OCB = 0x6c - NL80211_CMD_LEAVE_IBSS = 0x2c - NL80211_CMD_LEAVE_MESH = 0x45 - NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x93 - NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 - NL80211_CMD_NAN_MATCH = 0x78 - NL80211_CMD_NEW_BEACON = 0xf - NL80211_CMD_NEW_INTERFACE = 0x7 - NL80211_CMD_NEW_KEY = 0xb - NL80211_CMD_NEW_MPATH = 0x17 - NL80211_CMD_NEW_PEER_CANDIDATE = 0x48 - NL80211_CMD_NEW_SCAN_RESULTS = 0x22 - NL80211_CMD_NEW_STATION = 0x13 - NL80211_CMD_NEW_SURVEY_RESULTS = 0x33 - NL80211_CMD_NEW_WIPHY = 0x3 - NL80211_CMD_NOTIFY_CQM = 0x40 - NL80211_CMD_NOTIFY_RADAR = 0x86 - NL80211_CMD_PEER_MEASUREMENT_COMPLETE = 0x85 - NL80211_CMD_PEER_MEASUREMENT_RESULT = 0x84 - NL80211_CMD_PEER_MEASUREMENT_START = 0x83 - NL80211_CMD_PMKSA_CANDIDATE = 0x50 - NL80211_CMD_PORT_AUTHORIZED = 0x7d - NL80211_CMD_PROBE_CLIENT = 0x54 - NL80211_CMD_PROBE_MESH_LINK = 0x88 - NL80211_CMD_RADAR_DETECT = 0x5e - NL80211_CMD_REG_BEACON_HINT = 0x2a - NL80211_CMD_REG_CHANGE = 0x24 - NL80211_CMD_REGISTER_ACTION = 0x3a - NL80211_CMD_REGISTER_BEACONS = 0x55 - NL80211_CMD_REGISTER_FRAME = 0x3a - NL80211_CMD_RELOAD_REGDB = 0x7e - NL80211_CMD_REMAIN_ON_CHANNEL = 0x37 - NL80211_CMD_REQ_SET_REG = 0x1b - NL80211_CMD_ROAM = 0x2f - NL80211_CMD_SCAN_ABORTED = 0x23 - NL80211_CMD_SCHED_SCAN_RESULTS = 0x4d - NL80211_CMD_SCHED_SCAN_STOPPED = 0x4e - NL80211_CMD_SET_BEACON = 0xe - NL80211_CMD_SET_BSS = 0x19 - NL80211_CMD_SET_CHANNEL = 0x41 - NL80211_CMD_SET_COALESCE = 0x65 - NL80211_CMD_SET_CQM = 0x3f - NL80211_CMD_SET_INTERFACE = 0x6 - NL80211_CMD_SET_KEY = 0xa - NL80211_CMD_SET_MAC_ACL = 0x5d - NL80211_CMD_SET_MCAST_RATE = 0x5c - NL80211_CMD_SET_MESH_CONFIG = 0x1d - NL80211_CMD_SET_MESH_PARAMS = 0x1d - NL80211_CMD_SET_MGMT_EXTRA_IE = 0x1e - NL80211_CMD_SET_MPATH = 0x16 - NL80211_CMD_SET_MULTICAST_TO_UNICAST = 0x79 - NL80211_CMD_SET_NOACK_MAP = 0x57 - NL80211_CMD_SET_PMK = 0x7b - NL80211_CMD_SET_PMKSA = 0x34 - NL80211_CMD_SET_POWER_SAVE = 0x3d - NL80211_CMD_SET_QOS_MAP = 0x68 - NL80211_CMD_SET_REG = 0x1a - NL80211_CMD_SET_REKEY_OFFLOAD = 0x4f - NL80211_CMD_SET_SAR_SPECS = 0x8c - NL80211_CMD_SET_STATION = 0x12 - NL80211_CMD_SET_TID_CONFIG = 0x89 - NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 - NL80211_CMD_SET_WDS_PEER = 0x42 - NL80211_CMD_SET_WIPHY = 0x2 - NL80211_CMD_SET_WIPHY_NETNS = 0x31 - NL80211_CMD_SET_WOWLAN = 0x4a - NL80211_CMD_STA_OPMODE_CHANGED = 0x80 - NL80211_CMD_START_AP = 0xf - NL80211_CMD_START_NAN = 0x73 - NL80211_CMD_START_P2P_DEVICE = 0x59 - NL80211_CMD_START_SCHED_SCAN = 0x4b - NL80211_CMD_STOP_AP = 0x10 - NL80211_CMD_STOP_NAN = 0x74 - NL80211_CMD_STOP_P2P_DEVICE = 0x5a - NL80211_CMD_STOP_SCHED_SCAN = 0x4c - NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH = 0x70 - NL80211_CMD_TDLS_CHANNEL_SWITCH = 0x6f - NL80211_CMD_TDLS_MGMT = 0x52 - NL80211_CMD_TDLS_OPER = 0x51 - NL80211_CMD_TESTMODE = 0x2d - NL80211_CMD_TRIGGER_SCAN = 0x21 - NL80211_CMD_UNEXPECTED_4ADDR_FRAME = 0x56 - NL80211_CMD_UNEXPECTED_FRAME = 0x53 - NL80211_CMD_UNPROT_BEACON = 0x8a - NL80211_CMD_UNPROT_DEAUTHENTICATE = 0x46 - NL80211_CMD_UNPROT_DISASSOCIATE = 0x47 - NL80211_CMD_UNSPEC = 0x0 - NL80211_CMD_UPDATE_CONNECT_PARAMS = 0x7a - NL80211_CMD_UPDATE_FT_IES = 0x60 - NL80211_CMD_UPDATE_OWE_INFO = 0x87 - NL80211_CMD_VENDOR = 0x67 - NL80211_CMD_WIPHY_REG_CHANGE = 0x71 - NL80211_COALESCE_CONDITION_MATCH = 0x0 - NL80211_COALESCE_CONDITION_NO_MATCH = 0x1 - NL80211_CONN_FAIL_BLOCKED_CLIENT = 0x1 - NL80211_CONN_FAIL_MAX_CLIENTS = 0x0 - NL80211_CQM_RSSI_BEACON_LOSS_EVENT = 0x2 - NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH = 0x1 - NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW = 0x0 - NL80211_CQM_TXE_MAX_INTVL = 0x708 - NL80211_CRIT_PROTO_APIPA = 0x3 - NL80211_CRIT_PROTO_DHCP = 0x1 - NL80211_CRIT_PROTO_EAPOL = 0x2 - NL80211_CRIT_PROTO_MAX_DURATION = 0x1388 - NL80211_CRIT_PROTO_UNSPEC = 0x0 - NL80211_DFS_AVAILABLE = 0x2 - NL80211_DFS_ETSI = 0x2 - NL80211_DFS_FCC = 0x1 - NL80211_DFS_JP = 0x3 - NL80211_DFS_UNAVAILABLE = 0x1 - NL80211_DFS_UNSET = 0x0 - NL80211_DFS_USABLE = 0x0 - NL80211_EDMG_BW_CONFIG_MAX = 0xf - NL80211_EDMG_BW_CONFIG_MIN = 0x4 - NL80211_EDMG_CHANNELS_MAX = 0x3c - NL80211_EDMG_CHANNELS_MIN = 0x1 - NL80211_EXTERNAL_AUTH_ABORT = 0x1 - NL80211_EXTERNAL_AUTH_START = 0x0 - NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 0x32 - NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 0x10 - NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 0xf - NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 0x12 - NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 0x1b - NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 - NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 - NL80211_EXT_FEATURE_AQL = 0x28 - NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e - NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 - NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 - NL80211_EXT_FEATURE_BEACON_RATE_HT = 0x7 - NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 0x6 - NL80211_EXT_FEATURE_BEACON_RATE_VHT = 0x8 - NL80211_EXT_FEATURE_BSS_PARENT_TSF = 0x4 - NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 0x1f - NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 0x2a - NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 0x1a - NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 0x30 - NL80211_EXT_FEATURE_CQM_RSSI_LIST = 0xd - NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 0x1b - NL80211_EXT_FEATURE_DEL_IBSS_STA = 0x2c - NL80211_EXT_FEATURE_DFS_OFFLOAD = 0x19 - NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 - NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 - NL80211_EXT_FEATURE_FILS_DISCOVERY = 0x34 - NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 0x11 - NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 0xe - NL80211_EXT_FEATURE_FILS_STA = 0x9 - NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 0x18 - NL80211_EXT_FEATURE_LOW_POWER_SCAN = 0x17 - NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 0x16 - NL80211_EXT_FEATURE_MFP_OPTIONAL = 0x15 - NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 0xa - NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 0xb - NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 0x2d - NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 0x2 - NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x14 - NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 0x13 - NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 0x31 - NL80211_EXT_FEATURE_PROTECTED_TWT = 0x2b - NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 - NL80211_EXT_FEATURE_RRM = 0x1 - NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 - NL80211_EXT_FEATURE_SAE_OFFLOAD = 0x26 - NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 0x2f - NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 0x1e - NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 0x1d - NL80211_EXT_FEATURE_SCAN_START_TIME = 0x3 - NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23 - NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 0xc - NL80211_EXT_FEATURE_SECURE_LTF = 0x37 - NL80211_EXT_FEATURE_SECURE_RTT = 0x38 - NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 - NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 - NL80211_EXT_FEATURE_TXQS = 0x1c - NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 - NL80211_EXT_FEATURE_VHT_IBSS = 0x0 - NL80211_EXT_FEATURE_VLAN_OFFLOAD = 0x27 - NL80211_FEATURE_ACKTO_ESTIMATION = 0x800000 - NL80211_FEATURE_ACTIVE_MONITOR = 0x20000 - NL80211_FEATURE_ADVERTISE_CHAN_LIMITS = 0x4000 - NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE = 0x40000 - NL80211_FEATURE_AP_SCAN = 0x100 - NL80211_FEATURE_CELL_BASE_REG_HINTS = 0x8 - NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES = 0x80000 - NL80211_FEATURE_DYNAMIC_SMPS = 0x2000000 - NL80211_FEATURE_FULL_AP_CLIENT_STATE = 0x8000 - NL80211_FEATURE_HT_IBSS = 0x2 - NL80211_FEATURE_INACTIVITY_TIMER = 0x4 - NL80211_FEATURE_LOW_PRIORITY_SCAN = 0x40 - NL80211_FEATURE_MAC_ON_CREATE = 0x8000000 - NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 0x80000000 - NL80211_FEATURE_NEED_OBSS_SCAN = 0x400 - NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 0x10 - NL80211_FEATURE_P2P_GO_CTWIN = 0x800 - NL80211_FEATURE_P2P_GO_OPPPS = 0x1000 - NL80211_FEATURE_QUIET = 0x200000 - NL80211_FEATURE_SAE = 0x20 - NL80211_FEATURE_SCAN_FLUSH = 0x80 - NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR = 0x20000000 - NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR = 0x40000000 - NL80211_FEATURE_SK_TX_STATUS = 0x1 - NL80211_FEATURE_STATIC_SMPS = 0x1000000 - NL80211_FEATURE_SUPPORTS_WMM_ADMISSION = 0x4000000 - NL80211_FEATURE_TDLS_CHANNEL_SWITCH = 0x10000000 - NL80211_FEATURE_TX_POWER_INSERTION = 0x400000 - NL80211_FEATURE_USERSPACE_MPM = 0x10000 - NL80211_FEATURE_VIF_TXPOWER = 0x200 - NL80211_FEATURE_WFA_TPC_IE_IN_PROBES = 0x100000 - NL80211_FILS_DISCOVERY_ATTR_INT_MAX = 0x2 - NL80211_FILS_DISCOVERY_ATTR_INT_MIN = 0x1 - NL80211_FILS_DISCOVERY_ATTR_MAX = 0x3 - NL80211_FILS_DISCOVERY_ATTR_TMPL = 0x3 - NL80211_FILS_DISCOVERY_TMPL_MIN_LEN = 0x2a - NL80211_FREQUENCY_ATTR_16MHZ = 0x19 - NL80211_FREQUENCY_ATTR_1MHZ = 0x15 - NL80211_FREQUENCY_ATTR_2MHZ = 0x16 - NL80211_FREQUENCY_ATTR_4MHZ = 0x17 - NL80211_FREQUENCY_ATTR_8MHZ = 0x18 - NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd - NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 - NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 - NL80211_FREQUENCY_ATTR_DISABLED = 0x2 - NL80211_FREQUENCY_ATTR_FREQ = 0x1 - NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe - NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x19 - NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 - NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 - NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc - NL80211_FREQUENCY_ATTR_NO_20MHZ = 0x10 - NL80211_FREQUENCY_ATTR_NO_80MHZ = 0xb - NL80211_FREQUENCY_ATTR_NO_HE = 0x13 - NL80211_FREQUENCY_ATTR_NO_HT40_MINUS = 0x9 - NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa - NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 - NL80211_FREQUENCY_ATTR_NO_IR = 0x3 - NL80211_FREQUENCY_ATTR_OFFSET = 0x14 - NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 - NL80211_FREQUENCY_ATTR_RADAR = 0x5 - NL80211_FREQUENCY_ATTR_WMM = 0x12 - NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 - NL80211_FTM_RESP_ATTR_ENABLED = 0x1 - NL80211_FTM_RESP_ATTR_LCI = 0x2 - NL80211_FTM_RESP_ATTR_MAX = 0x3 - NL80211_FTM_STATS_ASAP_NUM = 0x4 - NL80211_FTM_STATS_FAILED_NUM = 0x3 - NL80211_FTM_STATS_MAX = 0xa - NL80211_FTM_STATS_NON_ASAP_NUM = 0x5 - NL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM = 0x9 - NL80211_FTM_STATS_PAD = 0xa - NL80211_FTM_STATS_PARTIAL_NUM = 0x2 - NL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM = 0x8 - NL80211_FTM_STATS_SUCCESS_NUM = 0x1 - NL80211_FTM_STATS_TOTAL_DURATION_MSEC = 0x6 - NL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM = 0x7 - NL80211_GENL_NAME = "nl80211" - NL80211_HE_BSS_COLOR_ATTR_COLOR = 0x1 - NL80211_HE_BSS_COLOR_ATTR_DISABLED = 0x2 - NL80211_HE_BSS_COLOR_ATTR_MAX = 0x3 - NL80211_HE_BSS_COLOR_ATTR_PARTIAL = 0x3 - NL80211_HE_MAX_CAPABILITY_LEN = 0x36 - NL80211_HE_MIN_CAPABILITY_LEN = 0x10 - NL80211_HE_NSS_MAX = 0x8 - NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP = 0x4 - NL80211_HE_OBSS_PD_ATTR_MAX = 0x6 - NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET = 0x2 - NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET = 0x1 - NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET = 0x3 - NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP = 0x5 - NL80211_HE_OBSS_PD_ATTR_SR_CTRL = 0x6 - NL80211_HIDDEN_SSID_NOT_IN_USE = 0x0 - NL80211_HIDDEN_SSID_ZERO_CONTENTS = 0x2 - NL80211_HIDDEN_SSID_ZERO_LEN = 0x1 - NL80211_HT_CAPABILITY_LEN = 0x1a - NL80211_IFACE_COMB_BI_MIN_GCD = 0x7 - NL80211_IFACE_COMB_LIMITS = 0x1 - NL80211_IFACE_COMB_MAXNUM = 0x2 - NL80211_IFACE_COMB_NUM_CHANNELS = 0x4 - NL80211_IFACE_COMB_RADAR_DETECT_REGIONS = 0x6 - NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS = 0x5 - NL80211_IFACE_COMB_STA_AP_BI_MATCH = 0x3 - NL80211_IFACE_COMB_UNSPEC = 0x0 - NL80211_IFACE_LIMIT_MAX = 0x1 - NL80211_IFACE_LIMIT_TYPES = 0x2 - NL80211_IFACE_LIMIT_UNSPEC = 0x0 - NL80211_IFTYPE_ADHOC = 0x1 - NL80211_IFTYPE_AKM_ATTR_IFTYPES = 0x1 - NL80211_IFTYPE_AKM_ATTR_MAX = 0x2 - NL80211_IFTYPE_AKM_ATTR_SUITES = 0x2 - NL80211_IFTYPE_AP = 0x3 - NL80211_IFTYPE_AP_VLAN = 0x4 - NL80211_IFTYPE_MAX = 0xc - NL80211_IFTYPE_MESH_POINT = 0x7 - NL80211_IFTYPE_MONITOR = 0x6 - NL80211_IFTYPE_NAN = 0xc - NL80211_IFTYPE_OCB = 0xb - NL80211_IFTYPE_P2P_CLIENT = 0x8 - NL80211_IFTYPE_P2P_DEVICE = 0xa - NL80211_IFTYPE_P2P_GO = 0x9 - NL80211_IFTYPE_STATION = 0x2 - NL80211_IFTYPE_UNSPECIFIED = 0x0 - NL80211_IFTYPE_WDS = 0x5 - NL80211_KCK_EXT_LEN = 0x18 - NL80211_KCK_LEN = 0x10 - NL80211_KEK_EXT_LEN = 0x20 - NL80211_KEK_LEN = 0x10 - NL80211_KEY_CIPHER = 0x3 - NL80211_KEY_DATA = 0x1 - NL80211_KEY_DEFAULT_BEACON = 0xa - NL80211_KEY_DEFAULT = 0x5 - NL80211_KEY_DEFAULT_MGMT = 0x6 - NL80211_KEY_DEFAULT_TYPE_MULTICAST = 0x2 - NL80211_KEY_DEFAULT_TYPES = 0x8 - NL80211_KEY_DEFAULT_TYPE_UNICAST = 0x1 - NL80211_KEY_IDX = 0x2 - NL80211_KEY_MAX = 0xa - NL80211_KEY_MODE = 0x9 - NL80211_KEY_NO_TX = 0x1 - NL80211_KEY_RX_TX = 0x0 - NL80211_KEY_SEQ = 0x4 - NL80211_KEY_SET_TX = 0x2 - NL80211_KEY_TYPE = 0x7 - NL80211_KEYTYPE_GROUP = 0x0 - NL80211_KEYTYPE_PAIRWISE = 0x1 - NL80211_KEYTYPE_PEERKEY = 0x2 - NL80211_MAX_NR_AKM_SUITES = 0x2 - NL80211_MAX_NR_CIPHER_SUITES = 0x5 - NL80211_MAX_SUPP_HT_RATES = 0x4d - NL80211_MAX_SUPP_RATES = 0x20 - NL80211_MAX_SUPP_REG_RULES = 0x80 - NL80211_MESHCONF_ATTR_MAX = 0x1f - NL80211_MESHCONF_AUTO_OPEN_PLINKS = 0x7 - NL80211_MESHCONF_AWAKE_WINDOW = 0x1b - NL80211_MESHCONF_CONFIRM_TIMEOUT = 0x2 - NL80211_MESHCONF_CONNECTED_TO_AS = 0x1f - NL80211_MESHCONF_CONNECTED_TO_GATE = 0x1d - NL80211_MESHCONF_ELEMENT_TTL = 0xf - NL80211_MESHCONF_FORWARDING = 0x13 - NL80211_MESHCONF_GATE_ANNOUNCEMENTS = 0x11 - NL80211_MESHCONF_HOLDING_TIMEOUT = 0x3 - NL80211_MESHCONF_HT_OPMODE = 0x16 - NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT = 0xb - NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL = 0x19 - NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES = 0x8 - NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME = 0xd - NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT = 0x17 - NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL = 0x12 - NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL = 0xc - NL80211_MESHCONF_HWMP_RANN_INTERVAL = 0x10 - NL80211_MESHCONF_HWMP_ROOT_INTERVAL = 0x18 - NL80211_MESHCONF_HWMP_ROOTMODE = 0xe - NL80211_MESHCONF_MAX_PEER_LINKS = 0x4 - NL80211_MESHCONF_MAX_RETRIES = 0x5 - NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT = 0xa - NL80211_MESHCONF_NOLEARN = 0x1e - NL80211_MESHCONF_PATH_REFRESH_TIME = 0x9 - NL80211_MESHCONF_PLINK_TIMEOUT = 0x1c - NL80211_MESHCONF_POWER_MODE = 0x1a - NL80211_MESHCONF_RETRY_TIMEOUT = 0x1 - NL80211_MESHCONF_RSSI_THRESHOLD = 0x14 - NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR = 0x15 - NL80211_MESHCONF_TTL = 0x6 - NL80211_MESH_POWER_ACTIVE = 0x1 - NL80211_MESH_POWER_DEEP_SLEEP = 0x3 - NL80211_MESH_POWER_LIGHT_SLEEP = 0x2 - NL80211_MESH_POWER_MAX = 0x3 - NL80211_MESH_POWER_UNKNOWN = 0x0 - NL80211_MESH_SETUP_ATTR_MAX = 0x8 - NL80211_MESH_SETUP_AUTH_PROTOCOL = 0x8 - NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC = 0x2 - NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL = 0x1 - NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC = 0x6 - NL80211_MESH_SETUP_IE = 0x3 - NL80211_MESH_SETUP_USERSPACE_AMPE = 0x5 - NL80211_MESH_SETUP_USERSPACE_AUTH = 0x4 - NL80211_MESH_SETUP_USERSPACE_MPM = 0x7 - NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE = 0x3 - NL80211_MFP_NO = 0x0 - NL80211_MFP_OPTIONAL = 0x2 - NL80211_MFP_REQUIRED = 0x1 - NL80211_MIN_REMAIN_ON_CHANNEL_TIME = 0xa - NL80211_MNTR_FLAG_ACTIVE = 0x6 - NL80211_MNTR_FLAG_CONTROL = 0x3 - NL80211_MNTR_FLAG_COOK_FRAMES = 0x5 - NL80211_MNTR_FLAG_FCSFAIL = 0x1 - NL80211_MNTR_FLAG_MAX = 0x6 - NL80211_MNTR_FLAG_OTHER_BSS = 0x4 - NL80211_MNTR_FLAG_PLCPFAIL = 0x2 - NL80211_MPATH_FLAG_ACTIVE = 0x1 - NL80211_MPATH_FLAG_FIXED = 0x8 - NL80211_MPATH_FLAG_RESOLVED = 0x10 - NL80211_MPATH_FLAG_RESOLVING = 0x2 - NL80211_MPATH_FLAG_SN_VALID = 0x4 - NL80211_MPATH_INFO_DISCOVERY_RETRIES = 0x7 - NL80211_MPATH_INFO_DISCOVERY_TIMEOUT = 0x6 - NL80211_MPATH_INFO_EXPTIME = 0x4 - NL80211_MPATH_INFO_FLAGS = 0x5 - NL80211_MPATH_INFO_FRAME_QLEN = 0x1 - NL80211_MPATH_INFO_HOP_COUNT = 0x8 - NL80211_MPATH_INFO_MAX = 0x9 - NL80211_MPATH_INFO_METRIC = 0x3 - NL80211_MPATH_INFO_PATH_CHANGE = 0x9 - NL80211_MPATH_INFO_SN = 0x2 - NL80211_MULTICAST_GROUP_CONFIG = "config" - NL80211_MULTICAST_GROUP_MLME = "mlme" - NL80211_MULTICAST_GROUP_NAN = "nan" - NL80211_MULTICAST_GROUP_REG = "regulatory" - NL80211_MULTICAST_GROUP_SCAN = "scan" - NL80211_MULTICAST_GROUP_TESTMODE = "testmode" - NL80211_MULTICAST_GROUP_VENDOR = "vendor" - NL80211_NAN_FUNC_ATTR_MAX = 0x10 - NL80211_NAN_FUNC_CLOSE_RANGE = 0x9 - NL80211_NAN_FUNC_FOLLOW_UP = 0x2 - NL80211_NAN_FUNC_FOLLOW_UP_DEST = 0x8 - NL80211_NAN_FUNC_FOLLOW_UP_ID = 0x6 - NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID = 0x7 - NL80211_NAN_FUNC_INSTANCE_ID = 0xf - NL80211_NAN_FUNC_MAX_TYPE = 0x2 - NL80211_NAN_FUNC_PUBLISH_BCAST = 0x4 - NL80211_NAN_FUNC_PUBLISH = 0x0 - NL80211_NAN_FUNC_PUBLISH_TYPE = 0x3 - NL80211_NAN_FUNC_RX_MATCH_FILTER = 0xd - NL80211_NAN_FUNC_SERVICE_ID = 0x2 - NL80211_NAN_FUNC_SERVICE_ID_LEN = 0x6 - NL80211_NAN_FUNC_SERVICE_INFO = 0xb - NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN = 0xff - NL80211_NAN_FUNC_SRF = 0xc - NL80211_NAN_FUNC_SRF_MAX_LEN = 0xff - NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE = 0x5 - NL80211_NAN_FUNC_SUBSCRIBE = 0x1 - NL80211_NAN_FUNC_TERM_REASON = 0x10 - NL80211_NAN_FUNC_TERM_REASON_ERROR = 0x2 - NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED = 0x1 - NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST = 0x0 - NL80211_NAN_FUNC_TTL = 0xa - NL80211_NAN_FUNC_TX_MATCH_FILTER = 0xe - NL80211_NAN_FUNC_TYPE = 0x1 - NL80211_NAN_MATCH_ATTR_MAX = 0x2 - NL80211_NAN_MATCH_FUNC_LOCAL = 0x1 - NL80211_NAN_MATCH_FUNC_PEER = 0x2 - NL80211_NAN_SOLICITED_PUBLISH = 0x1 - NL80211_NAN_SRF_ATTR_MAX = 0x4 - NL80211_NAN_SRF_BF = 0x2 - NL80211_NAN_SRF_BF_IDX = 0x3 - NL80211_NAN_SRF_INCLUDE = 0x1 - NL80211_NAN_SRF_MAC_ADDRS = 0x4 - NL80211_NAN_UNSOLICITED_PUBLISH = 0x2 - NL80211_NUM_ACS = 0x4 - NL80211_P2P_PS_SUPPORTED = 0x1 - NL80211_P2P_PS_UNSUPPORTED = 0x0 - NL80211_PKTPAT_MASK = 0x1 - NL80211_PKTPAT_OFFSET = 0x3 - NL80211_PKTPAT_PATTERN = 0x2 - NL80211_PLINK_ACTION_BLOCK = 0x2 - NL80211_PLINK_ACTION_NO_ACTION = 0x0 - NL80211_PLINK_ACTION_OPEN = 0x1 - NL80211_PLINK_BLOCKED = 0x6 - NL80211_PLINK_CNF_RCVD = 0x3 - NL80211_PLINK_ESTAB = 0x4 - NL80211_PLINK_HOLDING = 0x5 - NL80211_PLINK_LISTEN = 0x0 - NL80211_PLINK_OPN_RCVD = 0x2 - NL80211_PLINK_OPN_SNT = 0x1 - NL80211_PMKSA_CANDIDATE_BSSID = 0x2 - NL80211_PMKSA_CANDIDATE_INDEX = 0x1 - NL80211_PMKSA_CANDIDATE_PREAUTH = 0x3 - NL80211_PMSR_ATTR_MAX = 0x5 - NL80211_PMSR_ATTR_MAX_PEERS = 0x1 - NL80211_PMSR_ATTR_PEERS = 0x5 - NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 0x3 - NL80211_PMSR_ATTR_REPORT_AP_TSF = 0x2 - NL80211_PMSR_ATTR_TYPE_CAPA = 0x4 - NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1 - NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6 - NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7 - NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0xa - NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8 - NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2 - NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa - NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES = 0x5 - NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC = 0x4 - NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI = 0x3 - NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED = 0x9 - NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS = 0x7 - NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP = 0x5 - NL80211_PMSR_FTM_FAILURE_NO_RESPONSE = 0x1 - NL80211_PMSR_FTM_FAILURE_PEER_BUSY = 0x6 - NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE = 0x4 - NL80211_PMSR_FTM_FAILURE_REJECTED = 0x2 - NL80211_PMSR_FTM_FAILURE_UNSPECIFIED = 0x0 - NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL = 0x3 - NL80211_PMSR_FTM_REQ_ATTR_ASAP = 0x1 - NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION = 0x5 - NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 - NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 - NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc - NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xd - NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb - NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3 - NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7 - NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE = 0x2 - NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC = 0x9 - NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI = 0x8 - NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED = 0xa - NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION = 0x7 - NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX = 0x2 - NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME = 0x5 - NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC = 0x14 - NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG = 0x10 - NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD = 0x12 - NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE = 0x11 - NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1 - NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8 - NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13 - NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x15 - NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6 - NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3 - NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4 - NL80211_PMSR_FTM_RESP_ATTR_PAD = 0x15 - NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG = 0x9 - NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD = 0xa - NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG = 0xd - NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD = 0xf - NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE = 0xe - NL80211_PMSR_FTM_RESP_ATTR_RX_RATE = 0xc - NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 0xb - NL80211_PMSR_PEER_ATTR_ADDR = 0x1 - NL80211_PMSR_PEER_ATTR_CHAN = 0x2 - NL80211_PMSR_PEER_ATTR_MAX = 0x4 - NL80211_PMSR_PEER_ATTR_REQ = 0x3 - NL80211_PMSR_PEER_ATTR_RESP = 0x4 - NL80211_PMSR_REQ_ATTR_DATA = 0x1 - NL80211_PMSR_REQ_ATTR_GET_AP_TSF = 0x2 - NL80211_PMSR_REQ_ATTR_MAX = 0x2 - NL80211_PMSR_RESP_ATTR_AP_TSF = 0x4 - NL80211_PMSR_RESP_ATTR_DATA = 0x1 - NL80211_PMSR_RESP_ATTR_FINAL = 0x5 - NL80211_PMSR_RESP_ATTR_HOST_TIME = 0x3 - NL80211_PMSR_RESP_ATTR_MAX = 0x6 - NL80211_PMSR_RESP_ATTR_PAD = 0x6 - NL80211_PMSR_RESP_ATTR_STATUS = 0x2 - NL80211_PMSR_STATUS_FAILURE = 0x3 - NL80211_PMSR_STATUS_REFUSED = 0x1 - NL80211_PMSR_STATUS_SUCCESS = 0x0 - NL80211_PMSR_STATUS_TIMEOUT = 0x2 - NL80211_PMSR_TYPE_FTM = 0x1 - NL80211_PMSR_TYPE_INVALID = 0x0 - NL80211_PMSR_TYPE_MAX = 0x1 - NL80211_PREAMBLE_DMG = 0x3 - NL80211_PREAMBLE_HE = 0x4 - NL80211_PREAMBLE_HT = 0x1 - NL80211_PREAMBLE_LEGACY = 0x0 - NL80211_PREAMBLE_VHT = 0x2 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 0x8 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P = 0x4 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 = 0x2 - NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS = 0x1 - NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP = 0x1 - NL80211_PS_DISABLED = 0x0 - NL80211_PS_ENABLED = 0x1 - NL80211_RADAR_CAC_ABORTED = 0x2 - NL80211_RADAR_CAC_FINISHED = 0x1 - NL80211_RADAR_CAC_STARTED = 0x5 - NL80211_RADAR_DETECTED = 0x0 - NL80211_RADAR_NOP_FINISHED = 0x3 - NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 - NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb - NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa - NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 - NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc - NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 - NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 - NL80211_RATE_INFO_BITRATE32 = 0x5 - NL80211_RATE_INFO_BITRATE = 0x1 - NL80211_RATE_INFO_HE_1XLTF = 0x0 - NL80211_RATE_INFO_HE_2XLTF = 0x1 - NL80211_RATE_INFO_HE_4XLTF = 0x2 - NL80211_RATE_INFO_HE_DCM = 0x10 - NL80211_RATE_INFO_HE_GI_0_8 = 0x0 - NL80211_RATE_INFO_HE_GI_1_6 = 0x1 - NL80211_RATE_INFO_HE_GI_3_2 = 0x2 - NL80211_RATE_INFO_HE_GI = 0xf - NL80211_RATE_INFO_HE_MCS = 0xd - NL80211_RATE_INFO_HE_NSS = 0xe - NL80211_RATE_INFO_HE_RU_ALLOC_106 = 0x2 - NL80211_RATE_INFO_HE_RU_ALLOC_242 = 0x3 - NL80211_RATE_INFO_HE_RU_ALLOC_26 = 0x0 - NL80211_RATE_INFO_HE_RU_ALLOC_2x996 = 0x6 - NL80211_RATE_INFO_HE_RU_ALLOC_484 = 0x4 - NL80211_RATE_INFO_HE_RU_ALLOC_52 = 0x1 - NL80211_RATE_INFO_HE_RU_ALLOC_996 = 0x5 - NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 - NL80211_RATE_INFO_MAX = 0x11 - NL80211_RATE_INFO_MCS = 0x2 - NL80211_RATE_INFO_SHORT_GI = 0x4 - NL80211_RATE_INFO_VHT_MCS = 0x6 - NL80211_RATE_INFO_VHT_NSS = 0x7 - NL80211_REGDOM_SET_BY_CORE = 0x0 - NL80211_REGDOM_SET_BY_COUNTRY_IE = 0x3 - NL80211_REGDOM_SET_BY_DRIVER = 0x2 - NL80211_REGDOM_SET_BY_USER = 0x1 - NL80211_REGDOM_TYPE_COUNTRY = 0x0 - NL80211_REGDOM_TYPE_CUSTOM_WORLD = 0x2 - NL80211_REGDOM_TYPE_INTERSECTION = 0x3 - NL80211_REGDOM_TYPE_WORLD = 0x1 - NL80211_REG_RULE_ATTR_MAX = 0x7 - NL80211_REKEY_DATA_AKM = 0x4 - NL80211_REKEY_DATA_KCK = 0x2 - NL80211_REKEY_DATA_KEK = 0x1 - NL80211_REKEY_DATA_REPLAY_CTR = 0x3 - NL80211_REPLAY_CTR_LEN = 0x8 - NL80211_RRF_AUTO_BW = 0x800 - NL80211_RRF_DFS = 0x10 - NL80211_RRF_GO_CONCURRENT = 0x1000 - NL80211_RRF_IR_CONCURRENT = 0x1000 - NL80211_RRF_NO_160MHZ = 0x10000 - NL80211_RRF_NO_80MHZ = 0x8000 - NL80211_RRF_NO_CCK = 0x2 - NL80211_RRF_NO_HE = 0x20000 - NL80211_RRF_NO_HT40 = 0x6000 - NL80211_RRF_NO_HT40MINUS = 0x2000 - NL80211_RRF_NO_HT40PLUS = 0x4000 - NL80211_RRF_NO_IBSS = 0x80 - NL80211_RRF_NO_INDOOR = 0x4 - NL80211_RRF_NO_IR_ALL = 0x180 - NL80211_RRF_NO_IR = 0x80 - NL80211_RRF_NO_OFDM = 0x1 - NL80211_RRF_NO_OUTDOOR = 0x8 - NL80211_RRF_PASSIVE_SCAN = 0x80 - NL80211_RRF_PTMP_ONLY = 0x40 - NL80211_RRF_PTP_ONLY = 0x20 - NL80211_RXMGMT_FLAG_ANSWERED = 0x1 - NL80211_RXMGMT_FLAG_EXTERNAL_AUTH = 0x2 - NL80211_SAE_PWE_BOTH = 0x3 - NL80211_SAE_PWE_HASH_TO_ELEMENT = 0x2 - NL80211_SAE_PWE_HUNT_AND_PECK = 0x1 - NL80211_SAE_PWE_UNSPECIFIED = 0x0 - NL80211_SAR_ATTR_MAX = 0x2 - NL80211_SAR_ATTR_SPECS = 0x2 - NL80211_SAR_ATTR_SPECS_END_FREQ = 0x4 - NL80211_SAR_ATTR_SPECS_MAX = 0x4 - NL80211_SAR_ATTR_SPECS_POWER = 0x1 - NL80211_SAR_ATTR_SPECS_RANGE_INDEX = 0x2 - NL80211_SAR_ATTR_SPECS_START_FREQ = 0x3 - NL80211_SAR_ATTR_TYPE = 0x1 - NL80211_SAR_TYPE_POWER = 0x0 - NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP = 0x20 - NL80211_SCAN_FLAG_AP = 0x4 - NL80211_SCAN_FLAG_COLOCATED_6GHZ = 0x4000 - NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME = 0x10 - NL80211_SCAN_FLAG_FLUSH = 0x2 - NL80211_SCAN_FLAG_FREQ_KHZ = 0x2000 - NL80211_SCAN_FLAG_HIGH_ACCURACY = 0x400 - NL80211_SCAN_FLAG_LOW_POWER = 0x200 - NL80211_SCAN_FLAG_LOW_PRIORITY = 0x1 - NL80211_SCAN_FLAG_LOW_SPAN = 0x100 - NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 0x1000 - NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x80 - NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE = 0x40 - NL80211_SCAN_FLAG_RANDOM_ADDR = 0x8 - NL80211_SCAN_FLAG_RANDOM_SN = 0x800 - NL80211_SCAN_RSSI_THOLD_OFF = -0x12c - NL80211_SCHED_SCAN_MATCH_ATTR_BSSID = 0x5 - NL80211_SCHED_SCAN_MATCH_ATTR_MAX = 0x6 - NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI = 0x3 - NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST = 0x4 - NL80211_SCHED_SCAN_MATCH_ATTR_RSSI = 0x2 - NL80211_SCHED_SCAN_MATCH_ATTR_SSID = 0x1 - NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI = 0x6 - NL80211_SCHED_SCAN_PLAN_INTERVAL = 0x1 - NL80211_SCHED_SCAN_PLAN_ITERATIONS = 0x2 - NL80211_SCHED_SCAN_PLAN_MAX = 0x2 - NL80211_SMPS_DYNAMIC = 0x2 - NL80211_SMPS_MAX = 0x2 - NL80211_SMPS_OFF = 0x0 - NL80211_SMPS_STATIC = 0x1 - NL80211_STA_BSS_PARAM_BEACON_INTERVAL = 0x5 - NL80211_STA_BSS_PARAM_CTS_PROT = 0x1 - NL80211_STA_BSS_PARAM_DTIM_PERIOD = 0x4 - NL80211_STA_BSS_PARAM_MAX = 0x5 - NL80211_STA_BSS_PARAM_SHORT_PREAMBLE = 0x2 - NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME = 0x3 - NL80211_STA_FLAG_ASSOCIATED = 0x7 - NL80211_STA_FLAG_AUTHENTICATED = 0x5 - NL80211_STA_FLAG_AUTHORIZED = 0x1 - NL80211_STA_FLAG_MAX = 0x7 - NL80211_STA_FLAG_MAX_OLD_API = 0x6 - NL80211_STA_FLAG_MFP = 0x4 - NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 - NL80211_STA_FLAG_TDLS_PEER = 0x6 - NL80211_STA_FLAG_WME = 0x3 - NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 - NL80211_STA_INFO_ACK_SIGNAL = 0x22 - NL80211_STA_INFO_AIRTIME_LINK_METRIC = 0x29 - NL80211_STA_INFO_AIRTIME_WEIGHT = 0x28 - NL80211_STA_INFO_ASSOC_AT_BOOTTIME = 0x2a - NL80211_STA_INFO_BEACON_LOSS = 0x12 - NL80211_STA_INFO_BEACON_RX = 0x1d - NL80211_STA_INFO_BEACON_SIGNAL_AVG = 0x1e - NL80211_STA_INFO_BSS_PARAM = 0xf - NL80211_STA_INFO_CHAIN_SIGNAL_AVG = 0x1a - NL80211_STA_INFO_CHAIN_SIGNAL = 0x19 - NL80211_STA_INFO_CONNECTED_TIME = 0x10 - NL80211_STA_INFO_CONNECTED_TO_AS = 0x2b - NL80211_STA_INFO_CONNECTED_TO_GATE = 0x26 - NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG = 0x23 - NL80211_STA_INFO_EXPECTED_THROUGHPUT = 0x1b - NL80211_STA_INFO_FCS_ERROR_COUNT = 0x25 - NL80211_STA_INFO_INACTIVE_TIME = 0x1 - NL80211_STA_INFO_LLID = 0x4 - NL80211_STA_INFO_LOCAL_PM = 0x14 - NL80211_STA_INFO_MAX = 0x2b - NL80211_STA_INFO_NONPEER_PM = 0x16 - NL80211_STA_INFO_PAD = 0x21 - NL80211_STA_INFO_PEER_PM = 0x15 - NL80211_STA_INFO_PLID = 0x5 - NL80211_STA_INFO_PLINK_STATE = 0x6 - NL80211_STA_INFO_RX_BITRATE = 0xe - NL80211_STA_INFO_RX_BYTES64 = 0x17 - NL80211_STA_INFO_RX_BYTES = 0x2 - NL80211_STA_INFO_RX_DROP_MISC = 0x1c - NL80211_STA_INFO_RX_DURATION = 0x20 - NL80211_STA_INFO_RX_MPDUS = 0x24 - NL80211_STA_INFO_RX_PACKETS = 0x9 - NL80211_STA_INFO_SIGNAL_AVG = 0xd - NL80211_STA_INFO_SIGNAL = 0x7 - NL80211_STA_INFO_STA_FLAGS = 0x11 - NL80211_STA_INFO_TID_STATS = 0x1f - NL80211_STA_INFO_T_OFFSET = 0x13 - NL80211_STA_INFO_TX_BITRATE = 0x8 - NL80211_STA_INFO_TX_BYTES64 = 0x18 - NL80211_STA_INFO_TX_BYTES = 0x3 - NL80211_STA_INFO_TX_DURATION = 0x27 - NL80211_STA_INFO_TX_FAILED = 0xc - NL80211_STA_INFO_TX_PACKETS = 0xa - NL80211_STA_INFO_TX_RETRIES = 0xb - NL80211_STA_WME_MAX = 0x2 - NL80211_STA_WME_MAX_SP = 0x2 - NL80211_STA_WME_UAPSD_QUEUES = 0x1 - NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY = 0x5 - NL80211_SURVEY_INFO_CHANNEL_TIME = 0x4 - NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 0x6 - NL80211_SURVEY_INFO_CHANNEL_TIME_RX = 0x7 - NL80211_SURVEY_INFO_CHANNEL_TIME_TX = 0x8 - NL80211_SURVEY_INFO_FREQUENCY = 0x1 - NL80211_SURVEY_INFO_FREQUENCY_OFFSET = 0xc - NL80211_SURVEY_INFO_IN_USE = 0x3 - NL80211_SURVEY_INFO_MAX = 0xc - NL80211_SURVEY_INFO_NOISE = 0x2 - NL80211_SURVEY_INFO_PAD = 0xa - NL80211_SURVEY_INFO_TIME_BSS_RX = 0xb - NL80211_SURVEY_INFO_TIME_BUSY = 0x5 - NL80211_SURVEY_INFO_TIME = 0x4 - NL80211_SURVEY_INFO_TIME_EXT_BUSY = 0x6 - NL80211_SURVEY_INFO_TIME_RX = 0x7 - NL80211_SURVEY_INFO_TIME_SCAN = 0x9 - NL80211_SURVEY_INFO_TIME_TX = 0x8 - NL80211_TDLS_DISABLE_LINK = 0x4 - NL80211_TDLS_DISCOVERY_REQ = 0x0 - NL80211_TDLS_ENABLE_LINK = 0x3 - NL80211_TDLS_PEER_HE = 0x8 - NL80211_TDLS_PEER_HT = 0x1 - NL80211_TDLS_PEER_VHT = 0x2 - NL80211_TDLS_PEER_WMM = 0x4 - NL80211_TDLS_SETUP = 0x1 - NL80211_TDLS_TEARDOWN = 0x2 - NL80211_TID_CONFIG_ATTR_AMPDU_CTRL = 0x9 - NL80211_TID_CONFIG_ATTR_AMSDU_CTRL = 0xb - NL80211_TID_CONFIG_ATTR_MAX = 0xd - NL80211_TID_CONFIG_ATTR_NOACK = 0x6 - NL80211_TID_CONFIG_ATTR_OVERRIDE = 0x4 - NL80211_TID_CONFIG_ATTR_PAD = 0x1 - NL80211_TID_CONFIG_ATTR_PEER_SUPP = 0x3 - NL80211_TID_CONFIG_ATTR_RETRY_LONG = 0x8 - NL80211_TID_CONFIG_ATTR_RETRY_SHORT = 0x7 - NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL = 0xa - NL80211_TID_CONFIG_ATTR_TIDS = 0x5 - NL80211_TID_CONFIG_ATTR_TX_RATE = 0xd - NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE = 0xc - NL80211_TID_CONFIG_ATTR_VIF_SUPP = 0x2 - NL80211_TID_CONFIG_DISABLE = 0x1 - NL80211_TID_CONFIG_ENABLE = 0x0 - NL80211_TID_STATS_MAX = 0x6 - NL80211_TID_STATS_PAD = 0x5 - NL80211_TID_STATS_RX_MSDU = 0x1 - NL80211_TID_STATS_TX_MSDU = 0x2 - NL80211_TID_STATS_TX_MSDU_FAILED = 0x4 - NL80211_TID_STATS_TX_MSDU_RETRIES = 0x3 - NL80211_TID_STATS_TXQ_STATS = 0x6 - NL80211_TIMEOUT_ASSOC = 0x3 - NL80211_TIMEOUT_AUTH = 0x2 - NL80211_TIMEOUT_SCAN = 0x1 - NL80211_TIMEOUT_UNSPECIFIED = 0x0 - NL80211_TKIP_DATA_OFFSET_ENCR_KEY = 0x0 - NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY = 0x18 - NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY = 0x10 - NL80211_TX_POWER_AUTOMATIC = 0x0 - NL80211_TX_POWER_FIXED = 0x2 - NL80211_TX_POWER_LIMITED = 0x1 - NL80211_TXQ_ATTR_AC = 0x1 - NL80211_TXQ_ATTR_AIFS = 0x5 - NL80211_TXQ_ATTR_CWMAX = 0x4 - NL80211_TXQ_ATTR_CWMIN = 0x3 - NL80211_TXQ_ATTR_MAX = 0x5 - NL80211_TXQ_ATTR_QUEUE = 0x1 - NL80211_TXQ_ATTR_TXOP = 0x2 - NL80211_TXQ_Q_BE = 0x2 - NL80211_TXQ_Q_BK = 0x3 - NL80211_TXQ_Q_VI = 0x1 - NL80211_TXQ_Q_VO = 0x0 - NL80211_TXQ_STATS_BACKLOG_BYTES = 0x1 - NL80211_TXQ_STATS_BACKLOG_PACKETS = 0x2 - NL80211_TXQ_STATS_COLLISIONS = 0x8 - NL80211_TXQ_STATS_DROPS = 0x4 - NL80211_TXQ_STATS_ECN_MARKS = 0x5 - NL80211_TXQ_STATS_FLOWS = 0x3 - NL80211_TXQ_STATS_MAX = 0xb - NL80211_TXQ_STATS_MAX_FLOWS = 0xb - NL80211_TXQ_STATS_OVERLIMIT = 0x6 - NL80211_TXQ_STATS_OVERMEMORY = 0x7 - NL80211_TXQ_STATS_TX_BYTES = 0x9 - NL80211_TXQ_STATS_TX_PACKETS = 0xa - NL80211_TX_RATE_AUTOMATIC = 0x0 - NL80211_TXRATE_DEFAULT_GI = 0x0 - NL80211_TX_RATE_FIXED = 0x2 - NL80211_TXRATE_FORCE_LGI = 0x2 - NL80211_TXRATE_FORCE_SGI = 0x1 - NL80211_TXRATE_GI = 0x4 - NL80211_TXRATE_HE = 0x5 - NL80211_TXRATE_HE_GI = 0x6 - NL80211_TXRATE_HE_LTF = 0x7 - NL80211_TXRATE_HT = 0x2 - NL80211_TXRATE_LEGACY = 0x1 - NL80211_TX_RATE_LIMITED = 0x1 - NL80211_TXRATE_MAX = 0x7 - NL80211_TXRATE_MCS = 0x2 - NL80211_TXRATE_VHT = 0x3 - NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT = 0x1 - NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX = 0x2 - NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL = 0x2 - NL80211_USER_REG_HINT_CELL_BASE = 0x1 - NL80211_USER_REG_HINT_INDOOR = 0x2 - NL80211_USER_REG_HINT_USER = 0x0 - NL80211_VENDOR_ID_IS_LINUX = 0x80000000 - NL80211_VHT_CAPABILITY_LEN = 0xc - NL80211_VHT_NSS_MAX = 0x8 - NL80211_WIPHY_NAME_MAXLEN = 0x40 - NL80211_WMMR_AIFSN = 0x3 - NL80211_WMMR_CW_MAX = 0x2 - NL80211_WMMR_CW_MIN = 0x1 - NL80211_WMMR_MAX = 0x4 - NL80211_WMMR_TXOP = 0x4 - NL80211_WOWLAN_PKTPAT_MASK = 0x1 - NL80211_WOWLAN_PKTPAT_OFFSET = 0x3 - NL80211_WOWLAN_PKTPAT_PATTERN = 0x2 - NL80211_WOWLAN_TCP_DATA_INTERVAL = 0x9 - NL80211_WOWLAN_TCP_DATA_PAYLOAD = 0x6 - NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ = 0x7 - NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN = 0x8 - NL80211_WOWLAN_TCP_DST_IPV4 = 0x2 - NL80211_WOWLAN_TCP_DST_MAC = 0x3 - NL80211_WOWLAN_TCP_DST_PORT = 0x5 - NL80211_WOWLAN_TCP_SRC_IPV4 = 0x1 - NL80211_WOWLAN_TCP_SRC_PORT = 0x4 - NL80211_WOWLAN_TCP_WAKE_MASK = 0xb - NL80211_WOWLAN_TCP_WAKE_PAYLOAD = 0xa - NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE = 0x8 - NL80211_WOWLAN_TRIG_ANY = 0x1 - NL80211_WOWLAN_TRIG_DISCONNECT = 0x2 - NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST = 0x7 - NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE = 0x6 - NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED = 0x5 - NL80211_WOWLAN_TRIG_MAGIC_PKT = 0x3 - NL80211_WOWLAN_TRIG_NET_DETECT = 0x12 - NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS = 0x13 - NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 - NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 - NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe - NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa - NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb - NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc - NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN = 0xd - NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST = 0x10 - NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH = 0xf - NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS = 0x11 - NL80211_WPA_VERSION_1 = 0x1 - NL80211_WPA_VERSION_2 = 0x2 - NL80211_WPA_VERSION_3 = 0x4 -) - -const ( - FRA_UNSPEC = 0x0 - FRA_DST = 0x1 - FRA_SRC = 0x2 - FRA_IIFNAME = 0x3 - FRA_GOTO = 0x4 - FRA_UNUSED2 = 0x5 - FRA_PRIORITY = 0x6 - FRA_UNUSED3 = 0x7 - FRA_UNUSED4 = 0x8 - FRA_UNUSED5 = 0x9 - FRA_FWMARK = 0xa - FRA_FLOW = 0xb - FRA_TUN_ID = 0xc - FRA_SUPPRESS_IFGROUP = 0xd - FRA_SUPPRESS_PREFIXLEN = 0xe - FRA_TABLE = 0xf - FRA_FWMASK = 0x10 - FRA_OIFNAME = 0x11 - FRA_PAD = 0x12 - FRA_L3MDEV = 0x13 - FRA_UID_RANGE = 0x14 - FRA_PROTOCOL = 0x15 - FRA_IP_PROTO = 0x16 - FRA_SPORT_RANGE = 0x17 - FRA_DPORT_RANGE = 0x18 - FR_ACT_UNSPEC = 0x0 - FR_ACT_TO_TBL = 0x1 - FR_ACT_GOTO = 0x2 - FR_ACT_NOP = 0x3 - FR_ACT_RES3 = 0x4 - FR_ACT_RES4 = 0x5 - FR_ACT_BLACKHOLE = 0x6 - FR_ACT_UNREACHABLE = 0x7 - FR_ACT_PROHIBIT = 0x8 -) diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 531409256..bea254945 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -240,10 +240,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -254,13 +250,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ [116]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -322,8 +311,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint32 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index b02ab83db..b8c8f2894 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -255,10 +255,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -269,14 +265,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -336,8 +324,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 9e6871d2e..4db443016 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -231,10 +231,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -245,13 +241,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ [116]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -313,8 +302,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint32 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index b732d1255..3ebcad8a8 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -234,10 +234,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -248,14 +244,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -315,8 +303,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 5310f71ea..3eb33e48a 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -236,10 +236,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -250,13 +246,6 @@ type Sigset_t struct { const _C__NSIG = 0x80 -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ [116]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -318,8 +307,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint32 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 219bbb126..79a944672 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -237,10 +237,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -251,14 +247,6 @@ type Sigset_t struct { const _C__NSIG = 0x80 -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -318,8 +306,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index be9432da5..8f4b107ca 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -237,10 +237,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -251,14 +247,6 @@ type Sigset_t struct { const _C__NSIG = 0x80 -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -318,8 +306,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index d0155a42e..e4eb21798 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -236,10 +236,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -250,13 +246,6 @@ type Sigset_t struct { const _C__NSIG = 0x80 -type Siginfo struct { - Signo int32 - Code int32 - Errno int32 - _ [116]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -318,8 +307,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint32 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 01c17bcc6..d5b21f0f7 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -243,10 +243,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -257,13 +253,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ [116]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -325,8 +314,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint32 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 944a9c3c7..5188d142b 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -244,10 +244,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -258,14 +254,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -325,8 +313,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 5d2c90e1c..de4dd4c73 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -244,10 +244,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -258,14 +254,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -325,8 +313,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index e173cb515..dccbf9b06 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -262,10 +262,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -276,14 +272,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -343,8 +331,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 6106715d5..635880610 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -210,8 +210,8 @@ type PtraceFpregs struct { } type PtracePer struct { - Control_regs [3]uint64 - _ [8]byte + _ [0]uint64 + _ [32]byte Starting_addr uint64 Ending_addr uint64 Perc_atmid uint16 @@ -257,10 +257,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x80000 -) - const ( POLLRDHUP = 0x2000 ) @@ -271,14 +267,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -338,8 +326,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index ca7b37b4b..765edc13f 100644 --- a/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/src/runtime/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -239,10 +239,6 @@ type EpollEvent struct { Pad int32 } -const ( - OPEN_TREE_CLOEXEC = 0x400000 -) - const ( POLLRDHUP = 0x800 ) @@ -253,14 +249,6 @@ type Sigset_t struct { const _C__NSIG = 0x41 -type Siginfo struct { - Signo int32 - Errno int32 - Code int32 - _ int32 - _ [112]byte -} - type Termios struct { Iflag uint32 Oflag uint32 @@ -320,8 +308,6 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 - Compact_count uint64 - Compact_delay_total uint64 } type cpuMask uint64 diff --git a/src/runtime/vendor/golang.org/x/sys/windows/syscall_windows.go b/src/runtime/vendor/golang.org/x/sys/windows/syscall_windows.go index ce3075c45..cf44e6933 100644 --- a/src/runtime/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/src/runtime/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -10,7 +10,6 @@ import ( errorspkg "errors" "fmt" "runtime" - "strings" "sync" "syscall" "time" @@ -87,8 +86,10 @@ func StringToUTF16(s string) []uint16 { // s, with a terminating NUL added. If s contains a NUL byte at any // location, it returns (nil, syscall.EINVAL). func UTF16FromString(s string) ([]uint16, error) { - if strings.IndexByte(s, 0) != -1 { - return nil, syscall.EINVAL + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, syscall.EINVAL + } } return utf16.Encode([]rune(s + "\x00")), nil } @@ -185,8 +186,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) //sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW //sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState -//sys readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile -//sys writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile +//sys ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) +//sys WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) //sys GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) //sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] //sys CloseHandle(handle Handle) (err error) @@ -548,6 +549,12 @@ func Read(fd Handle, p []byte) (n int, err error) { } return 0, e } + if raceenabled { + if done > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), int(done)) + } + raceAcquire(unsafe.Pointer(&ioSync)) + } return int(done), nil } @@ -560,31 +567,12 @@ func Write(fd Handle, p []byte) (n int, err error) { if e != nil { return 0, e } + if raceenabled && done > 0 { + raceReadRange(unsafe.Pointer(&p[0]), int(done)) + } return int(done), nil } -func ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { - err := readFile(fd, p, done, overlapped) - if raceenabled { - if *done > 0 { - raceWriteRange(unsafe.Pointer(&p[0]), int(*done)) - } - raceAcquire(unsafe.Pointer(&ioSync)) - } - return err -} - -func WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { - if raceenabled { - raceReleaseMerge(unsafe.Pointer(&ioSync)) - } - err := writeFile(fd, p, done, overlapped) - if raceenabled && *done > 0 { - raceReadRange(unsafe.Pointer(&p[0]), int(*done)) - } - return err -} - var ioSync int64 func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { diff --git a/src/runtime/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/src/runtime/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 68f52c1e6..9ea1a44f0 100644 --- a/src/runtime/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/src/runtime/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -2761,7 +2761,7 @@ func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree return } -func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { +func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { var _p0 *byte if len(buf) > 0 { _p0 = &buf[0] @@ -3203,7 +3203,7 @@ func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, return } -func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { +func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { var _p0 *byte if len(buf) > 0 { _p0 = &buf[0]