Compare commits
5 Commits
Author | SHA1 | Date |
---|---|---|
|
7c6167725b | |
|
b63cf81bb5 | |
|
e86b33e7c5 | |
|
71fa86684d | |
|
9d8d33bd67 |
|
@ -48,7 +48,7 @@ meta_task:
|
||||||
vendor_task:
|
vendor_task:
|
||||||
|
|
||||||
container:
|
container:
|
||||||
image: golang:1.22
|
image: golang:1.23
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- make vendor
|
- make vendor
|
||||||
|
|
10
go.mod
10
go.mod
|
@ -1,12 +1,12 @@
|
||||||
module github.com/containers/oci-seccomp-bpf-hook
|
module github.com/containers/oci-seccomp-bpf-hook
|
||||||
|
|
||||||
go 1.22.8
|
go 1.23.0
|
||||||
|
|
||||||
toolchain go1.22.11
|
toolchain go1.23.8
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/containers/common v0.62.3
|
github.com/containers/common v0.62.3
|
||||||
github.com/containers/storage v1.57.2
|
github.com/containers/storage v1.58.0
|
||||||
github.com/iovisor/gobpf v0.2.1-0.20221005153822-16120a1bf4d4
|
github.com/iovisor/gobpf v0.2.1-0.20221005153822-16120a1bf4d4
|
||||||
github.com/opencontainers/runtime-spec v1.2.1
|
github.com/opencontainers/runtime-spec v1.2.1
|
||||||
github.com/seccomp/libseccomp-golang v0.10.0
|
github.com/seccomp/libseccomp-golang v0.10.0
|
||||||
|
@ -20,9 +20,9 @@ require (
|
||||||
github.com/kr/pretty v0.3.1 // indirect
|
github.com/kr/pretty v0.3.1 // indirect
|
||||||
github.com/moby/sys/capability v0.4.0 // indirect
|
github.com/moby/sys/capability v0.4.0 // indirect
|
||||||
github.com/moby/sys/mountinfo v0.7.2 // indirect
|
github.com/moby/sys/mountinfo v0.7.2 // indirect
|
||||||
github.com/moby/sys/user v0.3.0 // indirect
|
github.com/moby/sys/user v0.4.0 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
golang.org/x/sys v0.29.0 // indirect
|
golang.org/x/sys v0.32.0 // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
12
go.sum
12
go.sum
|
@ -1,7 +1,7 @@
|
||||||
github.com/containers/common v0.62.3 h1:aOGryqXfW6aKBbHbqOveH7zB+ihavUN03X/2pUSvWFI=
|
github.com/containers/common v0.62.3 h1:aOGryqXfW6aKBbHbqOveH7zB+ihavUN03X/2pUSvWFI=
|
||||||
github.com/containers/common v0.62.3/go.mod h1:3R8kDox2prC9uj/a2hmXj/YjZz5sBEUNrcDiw51S0Lo=
|
github.com/containers/common v0.62.3/go.mod h1:3R8kDox2prC9uj/a2hmXj/YjZz5sBEUNrcDiw51S0Lo=
|
||||||
github.com/containers/storage v1.57.2 h1:2roCtTyE9pzIaBDHibK72DTnYkPmwWaq5uXxZdaWK4U=
|
github.com/containers/storage v1.58.0 h1:Q7SyyCCjqgT3wYNgRNIL8o/wUS92heIj2/cc8Sewvcc=
|
||||||
github.com/containers/storage v1.57.2/go.mod h1:i/Hb4lu7YgFr9G0K6BMjqW0BLJO1sFsnWQwj2UoWCUM=
|
github.com/containers/storage v1.58.0/go.mod h1:w7Jl6oG+OpeLGLzlLyOZPkmUso40kjpzgrHUk5tyBlo=
|
||||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
@ -22,8 +22,8 @@ github.com/moby/sys/capability v0.4.0 h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCnd
|
||||||
github.com/moby/sys/capability v0.4.0/go.mod h1:4g9IK291rVkms3LKCDOoYlnV8xKwoDTpIrNEE35Wq0I=
|
github.com/moby/sys/capability v0.4.0/go.mod h1:4g9IK291rVkms3LKCDOoYlnV8xKwoDTpIrNEE35Wq0I=
|
||||||
github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
|
github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
|
||||||
github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
|
github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
|
||||||
github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
|
github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=
|
||||||
github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
|
github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
|
||||||
github.com/opencontainers/runtime-spec v1.2.1 h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU8lpJfSlR0xww=
|
github.com/opencontainers/runtime-spec v1.2.1 h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU8lpJfSlR0xww=
|
||||||
github.com/opencontainers/runtime-spec v1.2.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.2.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/runtime-tools v0.9.1-0.20241108202711-f7e3563b0271 h1:TPj0pMLCTy1CKwmrat3hqTxoZfqOuTy0asG0ccpGk8Q=
|
github.com/opencontainers/runtime-tools v0.9.1-0.20241108202711-f7e3563b0271 h1:TPj0pMLCTy1CKwmrat3hqTxoZfqOuTy0asG0ccpGk8Q=
|
||||||
|
@ -45,8 +45,8 @@ github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
|
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
|
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
|
||||||
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
func Exists(path string) error {
|
func Exists(path string) error {
|
||||||
// It uses unix.Faccessat which is a faster operation compared to os.Stat for
|
// It uses unix.Faccessat which is a faster operation compared to os.Stat for
|
||||||
// simply checking the existence of a file.
|
// simply checking the existence of a file.
|
||||||
err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, 0)
|
err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, unix.AT_EACCESS)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &os.PathError{Op: "faccessat", Path: path, Err: err}
|
return &os.PathError{Op: "faccessat", Path: path, Err: err}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ func Exists(path string) error {
|
||||||
func Lexists(path string) error {
|
func Lexists(path string) error {
|
||||||
// It uses unix.Faccessat which is a faster operation compared to os.Stat for
|
// It uses unix.Faccessat which is a faster operation compared to os.Stat for
|
||||||
// simply checking the existence of a file.
|
// simply checking the existence of a file.
|
||||||
err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, unix.AT_SYMLINK_NOFOLLOW)
|
err := unix.Faccessat(unix.AT_FDCWD, path, unix.F_OK, unix.AT_SYMLINK_NOFOLLOW|unix.AT_EACCESS)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &os.PathError{Op: "faccessat", Path: path, Err: err}
|
return &os.PathError{Op: "faccessat", Path: path, Err: err}
|
||||||
}
|
}
|
||||||
|
|
20
vendor/github.com/containers/storage/pkg/fileutils/reflink_linux.go
generated
vendored
Normal file
20
vendor/github.com/containers/storage/pkg/fileutils/reflink_linux.go
generated
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
package fileutils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ReflinkOrCopy attempts to reflink the source to the destination fd.
|
||||||
|
// If reflinking fails or is unsupported, it falls back to io.Copy().
|
||||||
|
func ReflinkOrCopy(src, dst *os.File) error {
|
||||||
|
err := unix.IoctlFileClone(int(dst.Fd()), int(src.Fd()))
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = io.Copy(dst, src)
|
||||||
|
return err
|
||||||
|
}
|
15
vendor/github.com/containers/storage/pkg/fileutils/reflink_unsupported.go
generated
vendored
Normal file
15
vendor/github.com/containers/storage/pkg/fileutils/reflink_unsupported.go
generated
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
//go:build !linux
|
||||||
|
|
||||||
|
package fileutils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ReflinkOrCopy attempts to reflink the source to the destination fd.
|
||||||
|
// If reflinking fails or is unsupported, it falls back to io.Copy().
|
||||||
|
func ReflinkOrCopy(src, dst *os.File) error {
|
||||||
|
_, err := io.Copy(dst, src)
|
||||||
|
return err
|
||||||
|
}
|
|
@ -429,25 +429,25 @@ func parseOverrideXattr(xstat []byte) (Stat, error) {
|
||||||
var stat Stat
|
var stat Stat
|
||||||
attrs := strings.Split(string(xstat), ":")
|
attrs := strings.Split(string(xstat), ":")
|
||||||
if len(attrs) < 3 {
|
if len(attrs) < 3 {
|
||||||
return stat, fmt.Errorf("The number of parts in %s is less than 3",
|
return stat, fmt.Errorf("the number of parts in %s is less than 3",
|
||||||
ContainersOverrideXattr)
|
ContainersOverrideXattr)
|
||||||
}
|
}
|
||||||
|
|
||||||
value, err := strconv.ParseUint(attrs[0], 10, 32)
|
value, err := strconv.ParseUint(attrs[0], 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return stat, fmt.Errorf("Failed to parse UID: %w", err)
|
return stat, fmt.Errorf("failed to parse UID: %w", err)
|
||||||
}
|
}
|
||||||
stat.IDs.UID = int(value)
|
stat.IDs.UID = int(value)
|
||||||
|
|
||||||
value, err = strconv.ParseUint(attrs[1], 10, 32)
|
value, err = strconv.ParseUint(attrs[1], 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return stat, fmt.Errorf("Failed to parse GID: %w", err)
|
return stat, fmt.Errorf("failed to parse GID: %w", err)
|
||||||
}
|
}
|
||||||
stat.IDs.GID = int(value)
|
stat.IDs.GID = int(value)
|
||||||
|
|
||||||
value, err = strconv.ParseUint(attrs[2], 8, 32)
|
value, err = strconv.ParseUint(attrs[2], 8, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return stat, fmt.Errorf("Failed to parse mode: %w", err)
|
return stat, fmt.Errorf("failed to parse mode: %w", err)
|
||||||
}
|
}
|
||||||
stat.Mode = os.FileMode(value) & os.ModePerm
|
stat.Mode = os.FileMode(value) & os.ModePerm
|
||||||
if value&0o1000 != 0 {
|
if value&0o1000 != 0 {
|
||||||
|
@ -484,7 +484,7 @@ func parseOverrideXattr(xstat []byte) (Stat, error) {
|
||||||
return stat, err
|
return stat, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return stat, fmt.Errorf("Invalid file type %s", typ)
|
return stat, fmt.Errorf("invalid file type %s", typ)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return stat, nil
|
return stat, nil
|
||||||
|
@ -494,18 +494,18 @@ func parseDevice(typ string) (int, int, error) {
|
||||||
parts := strings.Split(typ, "-")
|
parts := strings.Split(typ, "-")
|
||||||
// If there are more than 3 parts, just ignore them to be forward compatible
|
// If there are more than 3 parts, just ignore them to be forward compatible
|
||||||
if len(parts) < 3 {
|
if len(parts) < 3 {
|
||||||
return 0, 0, fmt.Errorf("Invalid device type %s", typ)
|
return 0, 0, fmt.Errorf("invalid device type %s", typ)
|
||||||
}
|
}
|
||||||
if parts[0] != "block" && parts[0] != "char" {
|
if parts[0] != "block" && parts[0] != "char" {
|
||||||
return 0, 0, fmt.Errorf("Invalid device type %s", typ)
|
return 0, 0, fmt.Errorf("invalid device type %s", typ)
|
||||||
}
|
}
|
||||||
major, err := strconv.Atoi(parts[1])
|
major, err := strconv.Atoi(parts[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, fmt.Errorf("Failed to parse major number: %w", err)
|
return 0, 0, fmt.Errorf("failed to parse major number: %w", err)
|
||||||
}
|
}
|
||||||
minor, err := strconv.Atoi(parts[2])
|
minor, err := strconv.Atoi(parts[2])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, 0, fmt.Errorf("Failed to parse minor number: %w", err)
|
return 0, 0, fmt.Errorf("failed to parse minor number: %w", err)
|
||||||
}
|
}
|
||||||
return major, minor, nil
|
return major, minor, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ package idtools
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"os/user"
|
"os/user"
|
||||||
|
"sync"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -13,16 +14,14 @@ import (
|
||||||
#include <shadow/subid.h>
|
#include <shadow/subid.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
const char *Prog = "storage";
|
|
||||||
FILE *shadow_logfd = NULL;
|
|
||||||
|
|
||||||
struct subid_range get_range(struct subid_range *ranges, int i)
|
struct subid_range get_range(struct subid_range *ranges, int i)
|
||||||
{
|
{
|
||||||
shadow_logfd = stderr;
|
return ranges[i];
|
||||||
return ranges[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(SUBID_ABI_MAJOR) || (SUBID_ABI_MAJOR < 4)
|
#if !defined(SUBID_ABI_MAJOR) || (SUBID_ABI_MAJOR < 4)
|
||||||
|
# define subid_init libsubid_init
|
||||||
# define subid_get_uid_ranges get_subuid_ranges
|
# define subid_get_uid_ranges get_subuid_ranges
|
||||||
# define subid_get_gid_ranges get_subgid_ranges
|
# define subid_get_gid_ranges get_subgid_ranges
|
||||||
#endif
|
#endif
|
||||||
|
@ -30,6 +29,8 @@ struct subid_range get_range(struct subid_range *ranges, int i)
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
|
var onceInit sync.Once
|
||||||
|
|
||||||
func readSubid(username string, isUser bool) (ranges, error) {
|
func readSubid(username string, isUser bool) (ranges, error) {
|
||||||
var ret ranges
|
var ret ranges
|
||||||
uidstr := ""
|
uidstr := ""
|
||||||
|
@ -42,6 +43,10 @@ func readSubid(username string, isUser bool) (ranges, error) {
|
||||||
uidstr = u.Uid
|
uidstr = u.Uid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onceInit.Do(func() {
|
||||||
|
C.subid_init(C.CString("storage"), C.stderr)
|
||||||
|
})
|
||||||
|
|
||||||
cUsername := C.CString(username)
|
cUsername := C.CString(username)
|
||||||
defer C.free(unsafe.Pointer(cUsername))
|
defer C.free(unsafe.Pointer(cUsername))
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ func panicIfNotInitialized() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func naiveSelf() string { //nolint: unused
|
func naiveSelf() string {
|
||||||
name := os.Args[0]
|
name := os.Args[0]
|
||||||
if filepath.Base(name) == name {
|
if filepath.Base(name) == name {
|
||||||
if lp, err := exec.LookPath(name); err == nil {
|
if lp, err := exec.LookPath(name); err == nil {
|
||||||
|
|
|
@ -9,9 +9,9 @@ func fromStatT(s *syscall.Stat_t) (*StatT, error) {
|
||||||
mode: s.Mode,
|
mode: s.Mode,
|
||||||
uid: s.Uid,
|
uid: s.Uid,
|
||||||
gid: s.Gid,
|
gid: s.Gid,
|
||||||
rdev: uint64(s.Rdev),
|
rdev: uint64(s.Rdev), //nolint:unconvert
|
||||||
mtim: s.Mtim,
|
mtim: s.Mtim,
|
||||||
dev: uint64(s.Dev),
|
dev: uint64(s.Dev), //nolint:unconvert
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,9 +32,9 @@ type Cmd struct {
|
||||||
*exec.Cmd
|
*exec.Cmd
|
||||||
UnshareFlags int
|
UnshareFlags int
|
||||||
UseNewuidmap bool
|
UseNewuidmap bool
|
||||||
UidMappings []specs.LinuxIDMapping // nolint: revive,golint
|
UidMappings []specs.LinuxIDMapping //nolint: revive
|
||||||
UseNewgidmap bool
|
UseNewgidmap bool
|
||||||
GidMappings []specs.LinuxIDMapping // nolint: revive,golint
|
GidMappings []specs.LinuxIDMapping //nolint: revive
|
||||||
GidMappingsEnableSetgroups bool
|
GidMappingsEnableSetgroups bool
|
||||||
Setsid bool
|
Setsid bool
|
||||||
Setpgrp bool
|
Setpgrp bool
|
||||||
|
@ -98,7 +98,7 @@ func IsSetID(path string, modeid os.FileMode, capid capability.Cap) (bool, error
|
||||||
return cap.Get(capability.EFFECTIVE, capid), nil
|
return cap.Get(capability.EFFECTIVE, capid), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Cmd) Start() error {
|
func (c *Cmd) Start() (retErr error) {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
|
@ -167,6 +167,15 @@ func (c *Cmd) Start() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the function fails from here, we need to make sure the
|
||||||
|
// child process is killed and properly cleaned up.
|
||||||
|
defer func() {
|
||||||
|
if retErr != nil {
|
||||||
|
_ = c.Cmd.Process.Kill()
|
||||||
|
_ = c.Cmd.Wait()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
// Close the ends of the pipes that the parent doesn't need.
|
// Close the ends of the pipes that the parent doesn't need.
|
||||||
continueRead.Close()
|
continueRead.Close()
|
||||||
continueRead = nil
|
continueRead = nil
|
||||||
|
@ -240,7 +249,7 @@ func (c *Cmd) Start() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("finding newgidmap: %w", err)
|
return fmt.Errorf("finding newgidmap: %w", err)
|
||||||
}
|
}
|
||||||
cmd := exec.Command(path, append([]string{pidString}, strings.Fields(strings.Replace(g.String(), "\n", " ", -1))...)...)
|
cmd := exec.Command(path, append([]string{pidString}, strings.Fields(g.String())...)...)
|
||||||
g.Reset()
|
g.Reset()
|
||||||
cmd.Stdout = g
|
cmd.Stdout = g
|
||||||
cmd.Stderr = g
|
cmd.Stderr = g
|
||||||
|
@ -258,7 +267,7 @@ func (c *Cmd) Start() error {
|
||||||
}
|
}
|
||||||
logrus.Warnf("Falling back to single mapping")
|
logrus.Warnf("Falling back to single mapping")
|
||||||
g.Reset()
|
g.Reset()
|
||||||
g.Write([]byte(fmt.Sprintf("0 %d 1\n", os.Getegid())))
|
fmt.Fprintf(g, "0 %d 1\n", os.Getegid())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !gidmapSet {
|
if !gidmapSet {
|
||||||
|
@ -300,7 +309,7 @@ func (c *Cmd) Start() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("finding newuidmap: %w", err)
|
return fmt.Errorf("finding newuidmap: %w", err)
|
||||||
}
|
}
|
||||||
cmd := exec.Command(path, append([]string{pidString}, strings.Fields(strings.Replace(u.String(), "\n", " ", -1))...)...)
|
cmd := exec.Command(path, append([]string{pidString}, strings.Fields(u.String())...)...)
|
||||||
u.Reset()
|
u.Reset()
|
||||||
cmd.Stdout = u
|
cmd.Stdout = u
|
||||||
cmd.Stderr = u
|
cmd.Stderr = u
|
||||||
|
@ -319,7 +328,7 @@ func (c *Cmd) Start() error {
|
||||||
|
|
||||||
logrus.Warnf("Falling back to single mapping")
|
logrus.Warnf("Falling back to single mapping")
|
||||||
u.Reset()
|
u.Reset()
|
||||||
u.Write([]byte(fmt.Sprintf("0 %d 1\n", os.Geteuid())))
|
fmt.Fprintf(u, "0 %d 1\n", os.Geteuid())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !uidmapSet {
|
if !uidmapSet {
|
||||||
|
@ -459,7 +468,7 @@ type Runnable interface {
|
||||||
Run() error
|
Run() error
|
||||||
}
|
}
|
||||||
|
|
||||||
func bailOnError(err error, format string, a ...interface{}) { // nolint: revive,goprintffuncname
|
func bailOnError(err error, format string, a ...any) { //nolint:revive,goprintffuncname
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if format != "" {
|
if format != "" {
|
||||||
logrus.Errorf("%s: %v", fmt.Sprintf(format, a...), err)
|
logrus.Errorf("%s: %v", fmt.Sprintf(format, a...), err)
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MkdirOpt is a type for options to pass to Mkdir calls
|
||||||
|
type MkdirOpt func(*mkdirOptions)
|
||||||
|
|
||||||
|
type mkdirOptions struct {
|
||||||
|
onlyNew bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithOnlyNew is an option for MkdirAllAndChown that will only change ownership and permissions
|
||||||
|
// on newly created directories. If the directory already exists, it will not be modified
|
||||||
|
func WithOnlyNew(o *mkdirOptions) {
|
||||||
|
o.onlyNew = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// MkdirAllAndChown creates a directory (include any along the path) and then modifies
|
||||||
|
// ownership to the requested uid/gid. By default, if the directory already exists, this
|
||||||
|
// function will still change ownership and permissions. If WithOnlyNew is passed as an
|
||||||
|
// option, then only the newly created directories will have ownership and permissions changed.
|
||||||
|
func MkdirAllAndChown(path string, mode os.FileMode, uid, gid int, opts ...MkdirOpt) error {
|
||||||
|
var options mkdirOptions
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(&options)
|
||||||
|
}
|
||||||
|
|
||||||
|
return mkdirAs(path, mode, uid, gid, true, options.onlyNew)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MkdirAndChown creates a directory and then modifies ownership to the requested uid/gid.
|
||||||
|
// By default, if the directory already exists, this function still changes ownership and permissions.
|
||||||
|
// If WithOnlyNew is passed as an option, then only the newly created directory will have ownership
|
||||||
|
// and permissions changed.
|
||||||
|
// Note that unlike os.Mkdir(), this function does not return IsExist error
|
||||||
|
// in case path already exists.
|
||||||
|
func MkdirAndChown(path string, mode os.FileMode, uid, gid int, opts ...MkdirOpt) error {
|
||||||
|
var options mkdirOptions
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(&options)
|
||||||
|
}
|
||||||
|
return mkdirAs(path, mode, uid, gid, false, options.onlyNew)
|
||||||
|
}
|
||||||
|
|
||||||
|
// getRootUIDGID retrieves the remapped root uid/gid pair from the set of maps.
|
||||||
|
// If the maps are empty, then the root uid/gid will default to "real" 0/0
|
||||||
|
func getRootUIDGID(uidMap, gidMap []IDMap) (int, int, error) {
|
||||||
|
uid, err := toHost(0, uidMap)
|
||||||
|
if err != nil {
|
||||||
|
return -1, -1, err
|
||||||
|
}
|
||||||
|
gid, err := toHost(0, gidMap)
|
||||||
|
if err != nil {
|
||||||
|
return -1, -1, err
|
||||||
|
}
|
||||||
|
return uid, gid, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// toContainer takes an id mapping, and uses it to translate a
|
||||||
|
// host ID to the remapped ID. If no map is provided, then the translation
|
||||||
|
// assumes a 1-to-1 mapping and returns the passed in id
|
||||||
|
func toContainer(hostID int, idMap []IDMap) (int, error) {
|
||||||
|
if idMap == nil {
|
||||||
|
return hostID, nil
|
||||||
|
}
|
||||||
|
for _, m := range idMap {
|
||||||
|
if (int64(hostID) >= m.ParentID) && (int64(hostID) <= (m.ParentID + m.Count - 1)) {
|
||||||
|
contID := int(m.ID + (int64(hostID) - m.ParentID))
|
||||||
|
return contID, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1, fmt.Errorf("host ID %d cannot be mapped to a container ID", hostID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// toHost takes an id mapping and a remapped ID, and translates the
|
||||||
|
// ID to the mapped host ID. If no map is provided, then the translation
|
||||||
|
// assumes a 1-to-1 mapping and returns the passed in id #
|
||||||
|
func toHost(contID int, idMap []IDMap) (int, error) {
|
||||||
|
if idMap == nil {
|
||||||
|
return contID, nil
|
||||||
|
}
|
||||||
|
for _, m := range idMap {
|
||||||
|
if (int64(contID) >= m.ID) && (int64(contID) <= (m.ID + m.Count - 1)) {
|
||||||
|
hostID := int(m.ParentID + (int64(contID) - m.ID))
|
||||||
|
return hostID, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1, fmt.Errorf("container ID %d cannot be mapped to a host ID", contID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdentityMapping contains a mappings of UIDs and GIDs.
|
||||||
|
// The zero value represents an empty mapping.
|
||||||
|
type IdentityMapping struct {
|
||||||
|
UIDMaps []IDMap `json:"UIDMaps"`
|
||||||
|
GIDMaps []IDMap `json:"GIDMaps"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RootPair returns a uid and gid pair for the root user. The error is ignored
|
||||||
|
// because a root user always exists, and the defaults are correct when the uid
|
||||||
|
// and gid maps are empty.
|
||||||
|
func (i IdentityMapping) RootPair() (int, int) {
|
||||||
|
uid, gid, _ := getRootUIDGID(i.UIDMaps, i.GIDMaps)
|
||||||
|
return uid, gid
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToHost returns the host UID and GID for the container uid, gid.
|
||||||
|
// Remapping is only performed if the ids aren't already the remapped root ids
|
||||||
|
func (i IdentityMapping) ToHost(uid, gid int) (int, int, error) {
|
||||||
|
var err error
|
||||||
|
ruid, rgid := i.RootPair()
|
||||||
|
|
||||||
|
if uid != ruid {
|
||||||
|
ruid, err = toHost(uid, i.UIDMaps)
|
||||||
|
if err != nil {
|
||||||
|
return ruid, rgid, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if gid != rgid {
|
||||||
|
rgid, err = toHost(gid, i.GIDMaps)
|
||||||
|
}
|
||||||
|
return ruid, rgid, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToContainer returns the container UID and GID for the host uid and gid
|
||||||
|
func (i IdentityMapping) ToContainer(uid, gid int) (int, int, error) {
|
||||||
|
ruid, err := toContainer(uid, i.UIDMaps)
|
||||||
|
if err != nil {
|
||||||
|
return -1, -1, err
|
||||||
|
}
|
||||||
|
rgid, err := toContainer(gid, i.GIDMaps)
|
||||||
|
return ruid, rgid, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Empty returns true if there are no id mappings
|
||||||
|
func (i IdentityMapping) Empty() bool {
|
||||||
|
return len(i.UIDMaps) == 0 && len(i.GIDMaps) == 0
|
||||||
|
}
|
|
@ -0,0 +1,143 @@
|
||||||
|
//go:build !windows
|
||||||
|
|
||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
func mkdirAs(path string, mode os.FileMode, uid, gid int, mkAll, onlyNew bool) error {
|
||||||
|
path, err := filepath.Abs(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
stat, err := os.Stat(path)
|
||||||
|
if err == nil {
|
||||||
|
if !stat.IsDir() {
|
||||||
|
return &os.PathError{Op: "mkdir", Path: path, Err: syscall.ENOTDIR}
|
||||||
|
}
|
||||||
|
if onlyNew {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// short-circuit -- we were called with an existing directory and chown was requested
|
||||||
|
return setPermissions(path, mode, uid, gid, stat)
|
||||||
|
}
|
||||||
|
|
||||||
|
// make an array containing the original path asked for, plus (for mkAll == true)
|
||||||
|
// all path components leading up to the complete path that don't exist before we MkdirAll
|
||||||
|
// so that we can chown all of them properly at the end. If onlyNew is true, we won't
|
||||||
|
// chown the full directory path if it exists
|
||||||
|
var paths []string
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
paths = append(paths, path)
|
||||||
|
}
|
||||||
|
|
||||||
|
if mkAll {
|
||||||
|
// walk back to "/" looking for directories which do not exist
|
||||||
|
// and add them to the paths array for chown after creation
|
||||||
|
dirPath := path
|
||||||
|
for {
|
||||||
|
dirPath = filepath.Dir(dirPath)
|
||||||
|
if dirPath == "/" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if _, err = os.Stat(dirPath); os.IsNotExist(err) {
|
||||||
|
paths = append(paths, dirPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err = os.MkdirAll(path, mode); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else if err = os.Mkdir(path, mode); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// even if it existed, we will chown the requested path + any subpaths that
|
||||||
|
// didn't exist when we called MkdirAll
|
||||||
|
for _, pathComponent := range paths {
|
||||||
|
if err = setPermissions(pathComponent, mode, uid, gid, nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// setPermissions performs a chown/chmod only if the uid/gid don't match what's requested
|
||||||
|
// Normally a Chown is a no-op if uid/gid match, but in some cases this can still cause an error, e.g. if the
|
||||||
|
// dir is on an NFS share, so don't call chown unless we absolutely must.
|
||||||
|
// Likewise for setting permissions.
|
||||||
|
func setPermissions(p string, mode os.FileMode, uid, gid int, stat os.FileInfo) error {
|
||||||
|
if stat == nil {
|
||||||
|
var err error
|
||||||
|
stat, err = os.Stat(p)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if stat.Mode().Perm() != mode.Perm() {
|
||||||
|
if err := os.Chmod(p, mode.Perm()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ssi := stat.Sys().(*syscall.Stat_t)
|
||||||
|
if ssi.Uid == uint32(uid) && ssi.Gid == uint32(gid) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return os.Chown(p, uid, gid)
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadIdentityMapping takes a requested username and
|
||||||
|
// using the data from /etc/sub{uid,gid} ranges, creates the
|
||||||
|
// proper uid and gid remapping ranges for that user/group pair
|
||||||
|
func LoadIdentityMapping(name string) (IdentityMapping, error) {
|
||||||
|
// TODO: Consider adding support for calling out to "getent"
|
||||||
|
usr, err := LookupUser(name)
|
||||||
|
if err != nil {
|
||||||
|
return IdentityMapping{}, fmt.Errorf("could not get user for username %s: %w", name, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
subuidRanges, err := lookupSubRangesFile("/etc/subuid", usr)
|
||||||
|
if err != nil {
|
||||||
|
return IdentityMapping{}, err
|
||||||
|
}
|
||||||
|
subgidRanges, err := lookupSubRangesFile("/etc/subgid", usr)
|
||||||
|
if err != nil {
|
||||||
|
return IdentityMapping{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return IdentityMapping{
|
||||||
|
UIDMaps: subuidRanges,
|
||||||
|
GIDMaps: subgidRanges,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func lookupSubRangesFile(path string, usr User) ([]IDMap, error) {
|
||||||
|
uidstr := strconv.Itoa(usr.Uid)
|
||||||
|
rangeList, err := ParseSubIDFileFilter(path, func(sid SubID) bool {
|
||||||
|
return sid.Name == usr.Name || sid.Name == uidstr
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if len(rangeList) == 0 {
|
||||||
|
return nil, fmt.Errorf("no subuid ranges found for user %q", usr.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
idMap := []IDMap{}
|
||||||
|
|
||||||
|
var containerID int64
|
||||||
|
for _, idrange := range rangeList {
|
||||||
|
idMap = append(idMap, IDMap{
|
||||||
|
ID: containerID,
|
||||||
|
ParentID: idrange.SubID,
|
||||||
|
Count: idrange.Count,
|
||||||
|
})
|
||||||
|
containerID = containerID + idrange.Count
|
||||||
|
}
|
||||||
|
return idMap, nil
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// This is currently a wrapper around [os.MkdirAll] since currently
|
||||||
|
// permissions aren't set through this path, the identity isn't utilized.
|
||||||
|
// Ownership is handled elsewhere, but in the future could be support here
|
||||||
|
// too.
|
||||||
|
func mkdirAs(path string, _ os.FileMode, _, _ int, _, _ bool) error {
|
||||||
|
return os.MkdirAll(path, 0)
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
// Copyright 2025 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 go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:linkname runtime_getAuxv runtime.getAuxv
|
||||||
|
func runtime_getAuxv() []uintptr
|
||||||
|
|
||||||
|
// Auxv returns the ELF auxiliary vector as a sequence of key/value pairs.
|
||||||
|
// The returned slice is always a fresh copy, owned by the caller.
|
||||||
|
// It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed,
|
||||||
|
// which happens in some locked-down environments and build modes.
|
||||||
|
func Auxv() ([][2]uintptr, error) {
|
||||||
|
vec := runtime_getAuxv()
|
||||||
|
vecLen := len(vec)
|
||||||
|
|
||||||
|
if vecLen == 0 {
|
||||||
|
return nil, syscall.ENOENT
|
||||||
|
}
|
||||||
|
|
||||||
|
if vecLen%2 != 0 {
|
||||||
|
return nil, syscall.EINVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make([]uintptr, vecLen)
|
||||||
|
copy(result, vec)
|
||||||
|
return unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
// Copyright 2025 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 !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
|
||||||
|
func Auxv() ([][2]uintptr, error) {
|
||||||
|
return nil, syscall.ENOTSUP
|
||||||
|
}
|
|
@ -602,7 +602,150 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)
|
// sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)
|
||||||
|
const minIovec = 8
|
||||||
|
|
||||||
|
func Readv(fd int, iovs [][]byte) (n int, err error) {
|
||||||
|
if !darwinKernelVersionMin(11, 0, 0) {
|
||||||
|
return 0, ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
n, err = readv(fd, iovecs)
|
||||||
|
readvRacedetect(iovecs, n, err)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
|
if !darwinKernelVersionMin(11, 0, 0) {
|
||||||
|
return 0, ENOSYS
|
||||||
|
}
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
n, err = preadv(fd, iovecs, offset)
|
||||||
|
readvRacedetect(iovecs, n, err)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Writev(fd int, iovs [][]byte) (n int, err error) {
|
||||||
|
if !darwinKernelVersionMin(11, 0, 0) {
|
||||||
|
return 0, ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
if raceenabled {
|
||||||
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
n, err = writev(fd, iovecs)
|
||||||
|
writevRacedetect(iovecs, n)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
|
if !darwinKernelVersionMin(11, 0, 0) {
|
||||||
|
return 0, ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
if raceenabled {
|
||||||
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
n, err = pwritev(fd, iovecs, offset)
|
||||||
|
writevRacedetect(iovecs, n)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func appendBytes(vecs []Iovec, bs [][]byte) []Iovec {
|
||||||
|
for _, b := range bs {
|
||||||
|
var v Iovec
|
||||||
|
v.SetLen(len(b))
|
||||||
|
if len(b) > 0 {
|
||||||
|
v.Base = &b[0]
|
||||||
|
} else {
|
||||||
|
v.Base = (*byte)(unsafe.Pointer(&_zero))
|
||||||
|
}
|
||||||
|
vecs = append(vecs, v)
|
||||||
|
}
|
||||||
|
return vecs
|
||||||
|
}
|
||||||
|
|
||||||
|
func writevRacedetect(iovecs []Iovec, n int) {
|
||||||
|
if !raceenabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for i := 0; n > 0 && i < len(iovecs); i++ {
|
||||||
|
m := int(iovecs[i].Len)
|
||||||
|
if m > n {
|
||||||
|
m = n
|
||||||
|
}
|
||||||
|
n -= m
|
||||||
|
if m > 0 {
|
||||||
|
raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func readvRacedetect(iovecs []Iovec, n int, err error) {
|
||||||
|
if !raceenabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for i := 0; n > 0 && i < len(iovecs); i++ {
|
||||||
|
m := int(iovecs[i].Len)
|
||||||
|
if m > n {
|
||||||
|
m = n
|
||||||
|
}
|
||||||
|
n -= m
|
||||||
|
if m > 0 {
|
||||||
|
raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
raceAcquire(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func darwinMajorMinPatch() (maj, min, patch int, err error) {
|
||||||
|
var un Utsname
|
||||||
|
err = Uname(&un)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var mmp [3]int
|
||||||
|
c := 0
|
||||||
|
Loop:
|
||||||
|
for _, b := range un.Release[:] {
|
||||||
|
switch {
|
||||||
|
case b >= '0' && b <= '9':
|
||||||
|
mmp[c] = 10*mmp[c] + int(b-'0')
|
||||||
|
case b == '.':
|
||||||
|
c++
|
||||||
|
if c > 2 {
|
||||||
|
return 0, 0, 0, ENOTSUP
|
||||||
|
}
|
||||||
|
case b == 0:
|
||||||
|
break Loop
|
||||||
|
default:
|
||||||
|
return 0, 0, 0, ENOTSUP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c != 2 {
|
||||||
|
return 0, 0, 0, ENOTSUP
|
||||||
|
}
|
||||||
|
return mmp[0], mmp[1], mmp[2], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func darwinKernelVersionMin(maj, min, patch int) bool {
|
||||||
|
actualMaj, actualMin, actualPatch, err := darwinMajorMinPatch()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return actualMaj > maj || actualMaj == maj && (actualMin > min || actualMin == min && actualPatch >= patch)
|
||||||
|
}
|
||||||
|
|
||||||
//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
|
//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
|
||||||
|
|
||||||
//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
|
//sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error)
|
||||||
|
@ -705,3 +848,7 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI
|
||||||
//sys write(fd int, p []byte) (n int, err error)
|
//sys write(fd int, p []byte) (n int, err error)
|
||||||
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
|
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
|
||||||
//sys munmap(addr uintptr, length uintptr) (err error)
|
//sys munmap(addr uintptr, length uintptr) (err error)
|
||||||
|
//sys readv(fd int, iovecs []Iovec) (n int, err error)
|
||||||
|
//sys preadv(fd int, iovecs []Iovec, offset int64) (n int, err error)
|
||||||
|
//sys writev(fd int, iovecs []Iovec) (n int, err error)
|
||||||
|
//sys pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error)
|
||||||
|
|
|
@ -13,6 +13,7 @@ package unix
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
@ -417,7 +418,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||||
return nil, 0, EINVAL
|
return nil, 0, EINVAL
|
||||||
}
|
}
|
||||||
sa.raw.Family = AF_UNIX
|
sa.raw.Family = AF_UNIX
|
||||||
for i := 0; i < n; i++ {
|
for i := range n {
|
||||||
sa.raw.Path[i] = int8(name[i])
|
sa.raw.Path[i] = int8(name[i])
|
||||||
}
|
}
|
||||||
// length is family (uint16), name, NUL.
|
// length is family (uint16), name, NUL.
|
||||||
|
@ -507,7 +508,7 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||||
psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))
|
psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))
|
||||||
psm[0] = byte(sa.PSM)
|
psm[0] = byte(sa.PSM)
|
||||||
psm[1] = byte(sa.PSM >> 8)
|
psm[1] = byte(sa.PSM >> 8)
|
||||||
for i := 0; i < len(sa.Addr); i++ {
|
for i := range len(sa.Addr) {
|
||||||
sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]
|
sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]
|
||||||
}
|
}
|
||||||
cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))
|
cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))
|
||||||
|
@ -589,11 +590,11 @@ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||||
sa.raw.Family = AF_CAN
|
sa.raw.Family = AF_CAN
|
||||||
sa.raw.Ifindex = int32(sa.Ifindex)
|
sa.raw.Ifindex = int32(sa.Ifindex)
|
||||||
rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
|
rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
|
||||||
for i := 0; i < 4; i++ {
|
for i := range 4 {
|
||||||
sa.raw.Addr[i] = rx[i]
|
sa.raw.Addr[i] = rx[i]
|
||||||
}
|
}
|
||||||
tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
|
tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
|
||||||
for i := 0; i < 4; i++ {
|
for i := range 4 {
|
||||||
sa.raw.Addr[i+4] = tx[i]
|
sa.raw.Addr[i+4] = tx[i]
|
||||||
}
|
}
|
||||||
return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
|
return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil
|
||||||
|
@ -618,11 +619,11 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||||
sa.raw.Family = AF_CAN
|
sa.raw.Family = AF_CAN
|
||||||
sa.raw.Ifindex = int32(sa.Ifindex)
|
sa.raw.Ifindex = int32(sa.Ifindex)
|
||||||
n := (*[8]byte)(unsafe.Pointer(&sa.Name))
|
n := (*[8]byte)(unsafe.Pointer(&sa.Name))
|
||||||
for i := 0; i < 8; i++ {
|
for i := range 8 {
|
||||||
sa.raw.Addr[i] = n[i]
|
sa.raw.Addr[i] = n[i]
|
||||||
}
|
}
|
||||||
p := (*[4]byte)(unsafe.Pointer(&sa.PGN))
|
p := (*[4]byte)(unsafe.Pointer(&sa.PGN))
|
||||||
for i := 0; i < 4; i++ {
|
for i := range 4 {
|
||||||
sa.raw.Addr[i+8] = p[i]
|
sa.raw.Addr[i+8] = p[i]
|
||||||
}
|
}
|
||||||
sa.raw.Addr[12] = sa.Addr
|
sa.raw.Addr[12] = sa.Addr
|
||||||
|
@ -911,7 +912,7 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) {
|
||||||
// These are EBCDIC encoded by the kernel, but we still need to pad them
|
// These are EBCDIC encoded by the kernel, but we still need to pad them
|
||||||
// with blanks. Initializing with blanks allows the caller to feed in either
|
// with blanks. Initializing with blanks allows the caller to feed in either
|
||||||
// a padded or an unpadded string.
|
// a padded or an unpadded string.
|
||||||
for i := 0; i < 8; i++ {
|
for i := range 8 {
|
||||||
sa.raw.Nodeid[i] = ' '
|
sa.raw.Nodeid[i] = ' '
|
||||||
sa.raw.User_id[i] = ' '
|
sa.raw.User_id[i] = ' '
|
||||||
sa.raw.Name[i] = ' '
|
sa.raw.Name[i] = ' '
|
||||||
|
@ -1148,7 +1149,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
var user [8]byte
|
var user [8]byte
|
||||||
var name [8]byte
|
var name [8]byte
|
||||||
|
|
||||||
for i := 0; i < 8; i++ {
|
for i := range 8 {
|
||||||
user[i] = byte(pp.User_id[i])
|
user[i] = byte(pp.User_id[i])
|
||||||
name[i] = byte(pp.Name[i])
|
name[i] = byte(pp.Name[i])
|
||||||
}
|
}
|
||||||
|
@ -1173,11 +1174,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
Ifindex: int(pp.Ifindex),
|
Ifindex: int(pp.Ifindex),
|
||||||
}
|
}
|
||||||
name := (*[8]byte)(unsafe.Pointer(&sa.Name))
|
name := (*[8]byte)(unsafe.Pointer(&sa.Name))
|
||||||
for i := 0; i < 8; i++ {
|
for i := range 8 {
|
||||||
name[i] = pp.Addr[i]
|
name[i] = pp.Addr[i]
|
||||||
}
|
}
|
||||||
pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN))
|
pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN))
|
||||||
for i := 0; i < 4; i++ {
|
for i := range 4 {
|
||||||
pgn[i] = pp.Addr[i+8]
|
pgn[i] = pp.Addr[i+8]
|
||||||
}
|
}
|
||||||
addr := (*[1]byte)(unsafe.Pointer(&sa.Addr))
|
addr := (*[1]byte)(unsafe.Pointer(&sa.Addr))
|
||||||
|
@ -1188,11 +1189,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
Ifindex: int(pp.Ifindex),
|
Ifindex: int(pp.Ifindex),
|
||||||
}
|
}
|
||||||
rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
|
rx := (*[4]byte)(unsafe.Pointer(&sa.RxID))
|
||||||
for i := 0; i < 4; i++ {
|
for i := range 4 {
|
||||||
rx[i] = pp.Addr[i]
|
rx[i] = pp.Addr[i]
|
||||||
}
|
}
|
||||||
tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
|
tx := (*[4]byte)(unsafe.Pointer(&sa.TxID))
|
||||||
for i := 0; i < 4; i++ {
|
for i := range 4 {
|
||||||
tx[i] = pp.Addr[i+4]
|
tx[i] = pp.Addr[i+4]
|
||||||
}
|
}
|
||||||
return sa, nil
|
return sa, nil
|
||||||
|
@ -2216,10 +2217,7 @@ func readvRacedetect(iovecs []Iovec, n int, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for i := 0; n > 0 && i < len(iovecs); i++ {
|
for i := 0; n > 0 && i < len(iovecs); i++ {
|
||||||
m := int(iovecs[i].Len)
|
m := min(int(iovecs[i].Len), n)
|
||||||
if m > n {
|
|
||||||
m = n
|
|
||||||
}
|
|
||||||
n -= m
|
n -= m
|
||||||
if m > 0 {
|
if m > 0 {
|
||||||
raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
|
raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
|
||||||
|
@ -2270,10 +2268,7 @@ func writevRacedetect(iovecs []Iovec, n int) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for i := 0; n > 0 && i < len(iovecs); i++ {
|
for i := 0; n > 0 && i < len(iovecs); i++ {
|
||||||
m := int(iovecs[i].Len)
|
m := min(int(iovecs[i].Len), n)
|
||||||
if m > n {
|
|
||||||
m = n
|
|
||||||
}
|
|
||||||
n -= m
|
n -= m
|
||||||
if m > 0 {
|
if m > 0 {
|
||||||
raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
|
raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
|
||||||
|
@ -2320,12 +2315,7 @@ func isGroupMember(gid int) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, g := range groups {
|
return slices.Contains(groups, gid)
|
||||||
if g == gid {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func isCapDacOverrideSet() bool {
|
func isCapDacOverrideSet() bool {
|
||||||
|
|
|
@ -1102,3 +1102,90 @@ func (s *Strioctl) SetInt(i int) {
|
||||||
func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {
|
func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {
|
||||||
return ioctlPtrRet(fd, req, unsafe.Pointer(s))
|
return ioctlPtrRet(fd, req, unsafe.Pointer(s))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ucred Helpers
|
||||||
|
// See ucred(3c) and getpeerucred(3c)
|
||||||
|
|
||||||
|
//sys getpeerucred(fd uintptr, ucred *uintptr) (err error)
|
||||||
|
//sys ucredFree(ucred uintptr) = ucred_free
|
||||||
|
//sys ucredGet(pid int) (ucred uintptr, err error) = ucred_get
|
||||||
|
//sys ucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid
|
||||||
|
//sys ucredGetegid(ucred uintptr) (gid int) = ucred_getegid
|
||||||
|
//sys ucredGetruid(ucred uintptr) (uid int) = ucred_getruid
|
||||||
|
//sys ucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid
|
||||||
|
//sys ucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid
|
||||||
|
//sys ucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid
|
||||||
|
//sys ucredGetpid(ucred uintptr) (pid int) = ucred_getpid
|
||||||
|
|
||||||
|
// Ucred is an opaque struct that holds user credentials.
|
||||||
|
type Ucred struct {
|
||||||
|
ucred uintptr
|
||||||
|
}
|
||||||
|
|
||||||
|
// We need to ensure that ucredFree is called on the underlying ucred
|
||||||
|
// when the Ucred is garbage collected.
|
||||||
|
func ucredFinalizer(u *Ucred) {
|
||||||
|
ucredFree(u.ucred)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetPeerUcred(fd uintptr) (*Ucred, error) {
|
||||||
|
var ucred uintptr
|
||||||
|
err := getpeerucred(fd, &ucred)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result := &Ucred{
|
||||||
|
ucred: ucred,
|
||||||
|
}
|
||||||
|
// set the finalizer on the result so that the ucred will be freed
|
||||||
|
runtime.SetFinalizer(result, ucredFinalizer)
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func UcredGet(pid int) (*Ucred, error) {
|
||||||
|
ucred, err := ucredGet(pid)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result := &Ucred{
|
||||||
|
ucred: ucred,
|
||||||
|
}
|
||||||
|
// set the finalizer on the result so that the ucred will be freed
|
||||||
|
runtime.SetFinalizer(result, ucredFinalizer)
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Ucred) Geteuid() int {
|
||||||
|
defer runtime.KeepAlive(u)
|
||||||
|
return ucredGeteuid(u.ucred)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Ucred) Getruid() int {
|
||||||
|
defer runtime.KeepAlive(u)
|
||||||
|
return ucredGetruid(u.ucred)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Ucred) Getsuid() int {
|
||||||
|
defer runtime.KeepAlive(u)
|
||||||
|
return ucredGetsuid(u.ucred)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Ucred) Getegid() int {
|
||||||
|
defer runtime.KeepAlive(u)
|
||||||
|
return ucredGetegid(u.ucred)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Ucred) Getrgid() int {
|
||||||
|
defer runtime.KeepAlive(u)
|
||||||
|
return ucredGetrgid(u.ucred)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Ucred) Getsgid() int {
|
||||||
|
defer runtime.KeepAlive(u)
|
||||||
|
return ucredGetsgid(u.ucred)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *Ucred) Getpid() int {
|
||||||
|
defer runtime.KeepAlive(u)
|
||||||
|
return ucredGetpid(u.ucred)
|
||||||
|
}
|
||||||
|
|
|
@ -1245,6 +1245,7 @@ const (
|
||||||
FAN_REPORT_DFID_NAME = 0xc00
|
FAN_REPORT_DFID_NAME = 0xc00
|
||||||
FAN_REPORT_DFID_NAME_TARGET = 0x1e00
|
FAN_REPORT_DFID_NAME_TARGET = 0x1e00
|
||||||
FAN_REPORT_DIR_FID = 0x400
|
FAN_REPORT_DIR_FID = 0x400
|
||||||
|
FAN_REPORT_FD_ERROR = 0x2000
|
||||||
FAN_REPORT_FID = 0x200
|
FAN_REPORT_FID = 0x200
|
||||||
FAN_REPORT_NAME = 0x800
|
FAN_REPORT_NAME = 0x800
|
||||||
FAN_REPORT_PIDFD = 0x80
|
FAN_REPORT_PIDFD = 0x80
|
||||||
|
@ -1330,8 +1331,10 @@ const (
|
||||||
FUSE_SUPER_MAGIC = 0x65735546
|
FUSE_SUPER_MAGIC = 0x65735546
|
||||||
FUTEXFS_SUPER_MAGIC = 0xbad1dea
|
FUTEXFS_SUPER_MAGIC = 0xbad1dea
|
||||||
F_ADD_SEALS = 0x409
|
F_ADD_SEALS = 0x409
|
||||||
|
F_CREATED_QUERY = 0x404
|
||||||
F_DUPFD = 0x0
|
F_DUPFD = 0x0
|
||||||
F_DUPFD_CLOEXEC = 0x406
|
F_DUPFD_CLOEXEC = 0x406
|
||||||
|
F_DUPFD_QUERY = 0x403
|
||||||
F_EXLCK = 0x4
|
F_EXLCK = 0x4
|
||||||
F_GETFD = 0x1
|
F_GETFD = 0x1
|
||||||
F_GETFL = 0x3
|
F_GETFL = 0x3
|
||||||
|
@ -1551,6 +1554,7 @@ const (
|
||||||
IPPROTO_ROUTING = 0x2b
|
IPPROTO_ROUTING = 0x2b
|
||||||
IPPROTO_RSVP = 0x2e
|
IPPROTO_RSVP = 0x2e
|
||||||
IPPROTO_SCTP = 0x84
|
IPPROTO_SCTP = 0x84
|
||||||
|
IPPROTO_SMC = 0x100
|
||||||
IPPROTO_TCP = 0x6
|
IPPROTO_TCP = 0x6
|
||||||
IPPROTO_TP = 0x1d
|
IPPROTO_TP = 0x1d
|
||||||
IPPROTO_UDP = 0x11
|
IPPROTO_UDP = 0x11
|
||||||
|
@ -1623,6 +1627,8 @@ const (
|
||||||
IPV6_UNICAST_IF = 0x4c
|
IPV6_UNICAST_IF = 0x4c
|
||||||
IPV6_USER_FLOW = 0xe
|
IPV6_USER_FLOW = 0xe
|
||||||
IPV6_V6ONLY = 0x1a
|
IPV6_V6ONLY = 0x1a
|
||||||
|
IPV6_VERSION = 0x60
|
||||||
|
IPV6_VERSION_MASK = 0xf0
|
||||||
IPV6_XFRM_POLICY = 0x23
|
IPV6_XFRM_POLICY = 0x23
|
||||||
IP_ADD_MEMBERSHIP = 0x23
|
IP_ADD_MEMBERSHIP = 0x23
|
||||||
IP_ADD_SOURCE_MEMBERSHIP = 0x27
|
IP_ADD_SOURCE_MEMBERSHIP = 0x27
|
||||||
|
@ -1867,6 +1873,7 @@ const (
|
||||||
MADV_UNMERGEABLE = 0xd
|
MADV_UNMERGEABLE = 0xd
|
||||||
MADV_WILLNEED = 0x3
|
MADV_WILLNEED = 0x3
|
||||||
MADV_WIPEONFORK = 0x12
|
MADV_WIPEONFORK = 0x12
|
||||||
|
MAP_DROPPABLE = 0x8
|
||||||
MAP_FILE = 0x0
|
MAP_FILE = 0x0
|
||||||
MAP_FIXED = 0x10
|
MAP_FIXED = 0x10
|
||||||
MAP_FIXED_NOREPLACE = 0x100000
|
MAP_FIXED_NOREPLACE = 0x100000
|
||||||
|
@ -1967,6 +1974,7 @@ const (
|
||||||
MSG_PEEK = 0x2
|
MSG_PEEK = 0x2
|
||||||
MSG_PROXY = 0x10
|
MSG_PROXY = 0x10
|
||||||
MSG_RST = 0x1000
|
MSG_RST = 0x1000
|
||||||
|
MSG_SOCK_DEVMEM = 0x2000000
|
||||||
MSG_SYN = 0x400
|
MSG_SYN = 0x400
|
||||||
MSG_TRUNC = 0x20
|
MSG_TRUNC = 0x20
|
||||||
MSG_TRYHARD = 0x4
|
MSG_TRYHARD = 0x4
|
||||||
|
@ -2083,6 +2091,7 @@ const (
|
||||||
NFC_ATR_REQ_MAXSIZE = 0x40
|
NFC_ATR_REQ_MAXSIZE = 0x40
|
||||||
NFC_ATR_RES_GB_MAXSIZE = 0x2f
|
NFC_ATR_RES_GB_MAXSIZE = 0x2f
|
||||||
NFC_ATR_RES_MAXSIZE = 0x40
|
NFC_ATR_RES_MAXSIZE = 0x40
|
||||||
|
NFC_ATS_MAXSIZE = 0x14
|
||||||
NFC_COMM_ACTIVE = 0x0
|
NFC_COMM_ACTIVE = 0x0
|
||||||
NFC_COMM_PASSIVE = 0x1
|
NFC_COMM_PASSIVE = 0x1
|
||||||
NFC_DEVICE_NAME_MAXSIZE = 0x8
|
NFC_DEVICE_NAME_MAXSIZE = 0x8
|
||||||
|
@ -2163,6 +2172,7 @@ const (
|
||||||
NFNL_SUBSYS_QUEUE = 0x3
|
NFNL_SUBSYS_QUEUE = 0x3
|
||||||
NFNL_SUBSYS_ULOG = 0x4
|
NFNL_SUBSYS_ULOG = 0x4
|
||||||
NFS_SUPER_MAGIC = 0x6969
|
NFS_SUPER_MAGIC = 0x6969
|
||||||
|
NFT_BITWISE_BOOL = 0x0
|
||||||
NFT_CHAIN_FLAGS = 0x7
|
NFT_CHAIN_FLAGS = 0x7
|
||||||
NFT_CHAIN_MAXNAMELEN = 0x100
|
NFT_CHAIN_MAXNAMELEN = 0x100
|
||||||
NFT_CT_MAX = 0x17
|
NFT_CT_MAX = 0x17
|
||||||
|
@ -2491,6 +2501,7 @@ const (
|
||||||
PR_GET_PDEATHSIG = 0x2
|
PR_GET_PDEATHSIG = 0x2
|
||||||
PR_GET_SECCOMP = 0x15
|
PR_GET_SECCOMP = 0x15
|
||||||
PR_GET_SECUREBITS = 0x1b
|
PR_GET_SECUREBITS = 0x1b
|
||||||
|
PR_GET_SHADOW_STACK_STATUS = 0x4a
|
||||||
PR_GET_SPECULATION_CTRL = 0x34
|
PR_GET_SPECULATION_CTRL = 0x34
|
||||||
PR_GET_TAGGED_ADDR_CTRL = 0x38
|
PR_GET_TAGGED_ADDR_CTRL = 0x38
|
||||||
PR_GET_THP_DISABLE = 0x2a
|
PR_GET_THP_DISABLE = 0x2a
|
||||||
|
@ -2499,6 +2510,7 @@ const (
|
||||||
PR_GET_TIMING = 0xd
|
PR_GET_TIMING = 0xd
|
||||||
PR_GET_TSC = 0x19
|
PR_GET_TSC = 0x19
|
||||||
PR_GET_UNALIGN = 0x5
|
PR_GET_UNALIGN = 0x5
|
||||||
|
PR_LOCK_SHADOW_STACK_STATUS = 0x4c
|
||||||
PR_MCE_KILL = 0x21
|
PR_MCE_KILL = 0x21
|
||||||
PR_MCE_KILL_CLEAR = 0x0
|
PR_MCE_KILL_CLEAR = 0x0
|
||||||
PR_MCE_KILL_DEFAULT = 0x2
|
PR_MCE_KILL_DEFAULT = 0x2
|
||||||
|
@ -2525,6 +2537,8 @@ const (
|
||||||
PR_PAC_GET_ENABLED_KEYS = 0x3d
|
PR_PAC_GET_ENABLED_KEYS = 0x3d
|
||||||
PR_PAC_RESET_KEYS = 0x36
|
PR_PAC_RESET_KEYS = 0x36
|
||||||
PR_PAC_SET_ENABLED_KEYS = 0x3c
|
PR_PAC_SET_ENABLED_KEYS = 0x3c
|
||||||
|
PR_PMLEN_MASK = 0x7f000000
|
||||||
|
PR_PMLEN_SHIFT = 0x18
|
||||||
PR_PPC_DEXCR_CTRL_CLEAR = 0x4
|
PR_PPC_DEXCR_CTRL_CLEAR = 0x4
|
||||||
PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10
|
PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10
|
||||||
PR_PPC_DEXCR_CTRL_EDITABLE = 0x1
|
PR_PPC_DEXCR_CTRL_EDITABLE = 0x1
|
||||||
|
@ -2592,6 +2606,7 @@ const (
|
||||||
PR_SET_PTRACER = 0x59616d61
|
PR_SET_PTRACER = 0x59616d61
|
||||||
PR_SET_SECCOMP = 0x16
|
PR_SET_SECCOMP = 0x16
|
||||||
PR_SET_SECUREBITS = 0x1c
|
PR_SET_SECUREBITS = 0x1c
|
||||||
|
PR_SET_SHADOW_STACK_STATUS = 0x4b
|
||||||
PR_SET_SPECULATION_CTRL = 0x35
|
PR_SET_SPECULATION_CTRL = 0x35
|
||||||
PR_SET_SYSCALL_USER_DISPATCH = 0x3b
|
PR_SET_SYSCALL_USER_DISPATCH = 0x3b
|
||||||
PR_SET_TAGGED_ADDR_CTRL = 0x37
|
PR_SET_TAGGED_ADDR_CTRL = 0x37
|
||||||
|
@ -2602,6 +2617,9 @@ const (
|
||||||
PR_SET_UNALIGN = 0x6
|
PR_SET_UNALIGN = 0x6
|
||||||
PR_SET_VMA = 0x53564d41
|
PR_SET_VMA = 0x53564d41
|
||||||
PR_SET_VMA_ANON_NAME = 0x0
|
PR_SET_VMA_ANON_NAME = 0x0
|
||||||
|
PR_SHADOW_STACK_ENABLE = 0x1
|
||||||
|
PR_SHADOW_STACK_PUSH = 0x4
|
||||||
|
PR_SHADOW_STACK_WRITE = 0x2
|
||||||
PR_SME_GET_VL = 0x40
|
PR_SME_GET_VL = 0x40
|
||||||
PR_SME_SET_VL = 0x3f
|
PR_SME_SET_VL = 0x3f
|
||||||
PR_SME_SET_VL_ONEXEC = 0x40000
|
PR_SME_SET_VL_ONEXEC = 0x40000
|
||||||
|
@ -2911,7 +2929,6 @@ const (
|
||||||
RTM_NEWNEXTHOP = 0x68
|
RTM_NEWNEXTHOP = 0x68
|
||||||
RTM_NEWNEXTHOPBUCKET = 0x74
|
RTM_NEWNEXTHOPBUCKET = 0x74
|
||||||
RTM_NEWNSID = 0x58
|
RTM_NEWNSID = 0x58
|
||||||
RTM_NEWNVLAN = 0x70
|
|
||||||
RTM_NEWPREFIX = 0x34
|
RTM_NEWPREFIX = 0x34
|
||||||
RTM_NEWQDISC = 0x24
|
RTM_NEWQDISC = 0x24
|
||||||
RTM_NEWROUTE = 0x18
|
RTM_NEWROUTE = 0x18
|
||||||
|
@ -2920,6 +2937,7 @@ const (
|
||||||
RTM_NEWTCLASS = 0x28
|
RTM_NEWTCLASS = 0x28
|
||||||
RTM_NEWTFILTER = 0x2c
|
RTM_NEWTFILTER = 0x2c
|
||||||
RTM_NEWTUNNEL = 0x78
|
RTM_NEWTUNNEL = 0x78
|
||||||
|
RTM_NEWVLAN = 0x70
|
||||||
RTM_NR_FAMILIES = 0x1b
|
RTM_NR_FAMILIES = 0x1b
|
||||||
RTM_NR_MSGTYPES = 0x6c
|
RTM_NR_MSGTYPES = 0x6c
|
||||||
RTM_SETDCB = 0x4f
|
RTM_SETDCB = 0x4f
|
||||||
|
|
|
@ -116,6 +116,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -304,6 +306,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
|
|
@ -116,6 +116,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -305,6 +307,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -310,6 +312,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
|
|
@ -109,6 +109,7 @@ const (
|
||||||
F_SETOWN = 0x8
|
F_SETOWN = 0x8
|
||||||
F_UNLCK = 0x2
|
F_UNLCK = 0x2
|
||||||
F_WRLCK = 0x1
|
F_WRLCK = 0x1
|
||||||
|
GCS_MAGIC = 0x47435300
|
||||||
HIDIOCGRAWINFO = 0x80084803
|
HIDIOCGRAWINFO = 0x80084803
|
||||||
HIDIOCGRDESC = 0x90044802
|
HIDIOCGRDESC = 0x90044802
|
||||||
HIDIOCGRDESCSIZE = 0x80044801
|
HIDIOCGRDESCSIZE = 0x80044801
|
||||||
|
@ -119,6 +120,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -302,6 +305,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
|
|
@ -116,6 +116,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -297,6 +299,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x80
|
IN_NONBLOCK = 0x80
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xfffffff
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xfffff
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -303,6 +305,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x80
|
IN_NONBLOCK = 0x80
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xfffffff
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xfffff
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -303,6 +305,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x80
|
IN_NONBLOCK = 0x80
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -303,6 +305,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x80
|
IN_NONBLOCK = 0x80
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -303,6 +305,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xfffffff
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xfffff
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
IUCLC = 0x1000
|
IUCLC = 0x1000
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
|
@ -358,6 +360,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xfffffff
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xfffff
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
IUCLC = 0x1000
|
IUCLC = 0x1000
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
|
@ -362,6 +364,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x80
|
ISIG = 0x80
|
||||||
IUCLC = 0x1000
|
IUCLC = 0x1000
|
||||||
IXOFF = 0x400
|
IXOFF = 0x400
|
||||||
|
@ -362,6 +364,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xffffff0f
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xffff0f00
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -294,6 +296,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
|
|
@ -115,6 +115,8 @@ const (
|
||||||
IN_CLOEXEC = 0x80000
|
IN_CLOEXEC = 0x80000
|
||||||
IN_NONBLOCK = 0x800
|
IN_NONBLOCK = 0x800
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xfffffff
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xfffff
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -366,6 +368,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
SCM_TIMESTAMPING_OPT_STATS = 0x36
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
SCM_TIMESTAMPING_PKTINFO = 0x3a
|
||||||
SCM_TIMESTAMPNS = 0x23
|
SCM_TIMESTAMPNS = 0x23
|
||||||
|
SCM_TS_OPT_ID = 0x51
|
||||||
SCM_TXTIME = 0x3d
|
SCM_TXTIME = 0x3d
|
||||||
SCM_WIFI_STATUS = 0x29
|
SCM_WIFI_STATUS = 0x29
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103
|
||||||
|
|
|
@ -119,6 +119,8 @@ const (
|
||||||
IN_CLOEXEC = 0x400000
|
IN_CLOEXEC = 0x400000
|
||||||
IN_NONBLOCK = 0x4000
|
IN_NONBLOCK = 0x4000
|
||||||
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9
|
||||||
|
IPV6_FLOWINFO_MASK = 0xfffffff
|
||||||
|
IPV6_FLOWLABEL_MASK = 0xfffff
|
||||||
ISIG = 0x1
|
ISIG = 0x1
|
||||||
IUCLC = 0x200
|
IUCLC = 0x200
|
||||||
IXOFF = 0x1000
|
IXOFF = 0x1000
|
||||||
|
@ -357,6 +359,7 @@ const (
|
||||||
SCM_TIMESTAMPING_OPT_STATS = 0x38
|
SCM_TIMESTAMPING_OPT_STATS = 0x38
|
||||||
SCM_TIMESTAMPING_PKTINFO = 0x3c
|
SCM_TIMESTAMPING_PKTINFO = 0x3c
|
||||||
SCM_TIMESTAMPNS = 0x21
|
SCM_TIMESTAMPNS = 0x21
|
||||||
|
SCM_TS_OPT_ID = 0x5a
|
||||||
SCM_TXTIME = 0x3f
|
SCM_TXTIME = 0x3f
|
||||||
SCM_WIFI_STATUS = 0x25
|
SCM_WIFI_STATUS = 0x25
|
||||||
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103
|
||||||
|
|
|
@ -2512,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func Fstat(fd int, stat *Stat_t) (err error) {
|
func Fstat(fd int, stat *Stat_t) (err error) {
|
||||||
_, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
|
_, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
|
|
@ -738,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)
|
DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_fstat64(SB)
|
JMP libc_fstat64(SB)
|
||||||
GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
@ -2512,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func Fstat(fd int, stat *Stat_t) (err error) {
|
func Fstat(fd int, stat *Stat_t) (err error) {
|
||||||
_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
|
_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
|
|
|
@ -738,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)
|
DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_fstat(SB)
|
JMP libc_fstat(SB)
|
||||||
GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8
|
||||||
|
|
|
@ -141,6 +141,16 @@ import (
|
||||||
//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
|
//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so"
|
||||||
//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
|
//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so"
|
||||||
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
|
//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so"
|
||||||
|
//go:cgo_import_dynamic libc_getpeerucred getpeerucred "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_get ucred_get "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_getegid ucred_getegid "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_getruid ucred_getruid "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_getpid ucred_getpid "libc.so"
|
||||||
|
//go:cgo_import_dynamic libc_ucred_free ucred_free "libc.so"
|
||||||
//go:cgo_import_dynamic libc_port_create port_create "libc.so"
|
//go:cgo_import_dynamic libc_port_create port_create "libc.so"
|
||||||
//go:cgo_import_dynamic libc_port_associate port_associate "libc.so"
|
//go:cgo_import_dynamic libc_port_associate port_associate "libc.so"
|
||||||
//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so"
|
//go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so"
|
||||||
|
@ -280,6 +290,16 @@ import (
|
||||||
//go:linkname procgetpeername libc_getpeername
|
//go:linkname procgetpeername libc_getpeername
|
||||||
//go:linkname procsetsockopt libc_setsockopt
|
//go:linkname procsetsockopt libc_setsockopt
|
||||||
//go:linkname procrecvfrom libc_recvfrom
|
//go:linkname procrecvfrom libc_recvfrom
|
||||||
|
//go:linkname procgetpeerucred libc_getpeerucred
|
||||||
|
//go:linkname procucred_get libc_ucred_get
|
||||||
|
//go:linkname procucred_geteuid libc_ucred_geteuid
|
||||||
|
//go:linkname procucred_getegid libc_ucred_getegid
|
||||||
|
//go:linkname procucred_getruid libc_ucred_getruid
|
||||||
|
//go:linkname procucred_getrgid libc_ucred_getrgid
|
||||||
|
//go:linkname procucred_getsuid libc_ucred_getsuid
|
||||||
|
//go:linkname procucred_getsgid libc_ucred_getsgid
|
||||||
|
//go:linkname procucred_getpid libc_ucred_getpid
|
||||||
|
//go:linkname procucred_free libc_ucred_free
|
||||||
//go:linkname procport_create libc_port_create
|
//go:linkname procport_create libc_port_create
|
||||||
//go:linkname procport_associate libc_port_associate
|
//go:linkname procport_associate libc_port_associate
|
||||||
//go:linkname procport_dissociate libc_port_dissociate
|
//go:linkname procport_dissociate libc_port_dissociate
|
||||||
|
@ -420,6 +440,16 @@ var (
|
||||||
procgetpeername,
|
procgetpeername,
|
||||||
procsetsockopt,
|
procsetsockopt,
|
||||||
procrecvfrom,
|
procrecvfrom,
|
||||||
|
procgetpeerucred,
|
||||||
|
procucred_get,
|
||||||
|
procucred_geteuid,
|
||||||
|
procucred_getegid,
|
||||||
|
procucred_getruid,
|
||||||
|
procucred_getrgid,
|
||||||
|
procucred_getsuid,
|
||||||
|
procucred_getsgid,
|
||||||
|
procucred_getpid,
|
||||||
|
procucred_free,
|
||||||
procport_create,
|
procport_create,
|
||||||
procport_associate,
|
procport_associate,
|
||||||
procport_dissociate,
|
procport_dissociate,
|
||||||
|
@ -2029,6 +2059,90 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
|
||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func getpeerucred(fd uintptr, ucred *uintptr) (err error) {
|
||||||
|
_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGet(pid int) (ucred uintptr, err error) {
|
||||||
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0)
|
||||||
|
ucred = uintptr(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGeteuid(ucred uintptr) (uid int) {
|
||||||
|
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
uid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGetegid(ucred uintptr) (gid int) {
|
||||||
|
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
gid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGetruid(ucred uintptr) (uid int) {
|
||||||
|
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
uid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGetrgid(ucred uintptr) (gid int) {
|
||||||
|
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
gid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGetsuid(ucred uintptr) (uid int) {
|
||||||
|
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
uid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGetsgid(ucred uintptr) (gid int) {
|
||||||
|
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
gid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredGetpid(ucred uintptr) (pid int) {
|
||||||
|
r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
pid = int(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func ucredFree(ucred uintptr) {
|
||||||
|
sysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func port_create() (n int, err error) {
|
func port_create() (n int, err error) {
|
||||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
|
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
|
||||||
n = int(r0)
|
n = int(r0)
|
||||||
|
|
|
@ -458,4 +458,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -381,4 +381,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -422,4 +422,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -325,4 +325,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -321,4 +321,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -442,4 +442,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 4460
|
SYS_LSM_SET_SELF_ATTR = 4460
|
||||||
SYS_LSM_LIST_MODULES = 4461
|
SYS_LSM_LIST_MODULES = 4461
|
||||||
SYS_MSEAL = 4462
|
SYS_MSEAL = 4462
|
||||||
|
SYS_SETXATTRAT = 4463
|
||||||
|
SYS_GETXATTRAT = 4464
|
||||||
|
SYS_LISTXATTRAT = 4465
|
||||||
|
SYS_REMOVEXATTRAT = 4466
|
||||||
)
|
)
|
||||||
|
|
|
@ -372,4 +372,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 5460
|
SYS_LSM_SET_SELF_ATTR = 5460
|
||||||
SYS_LSM_LIST_MODULES = 5461
|
SYS_LSM_LIST_MODULES = 5461
|
||||||
SYS_MSEAL = 5462
|
SYS_MSEAL = 5462
|
||||||
|
SYS_SETXATTRAT = 5463
|
||||||
|
SYS_GETXATTRAT = 5464
|
||||||
|
SYS_LISTXATTRAT = 5465
|
||||||
|
SYS_REMOVEXATTRAT = 5466
|
||||||
)
|
)
|
||||||
|
|
|
@ -372,4 +372,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 5460
|
SYS_LSM_SET_SELF_ATTR = 5460
|
||||||
SYS_LSM_LIST_MODULES = 5461
|
SYS_LSM_LIST_MODULES = 5461
|
||||||
SYS_MSEAL = 5462
|
SYS_MSEAL = 5462
|
||||||
|
SYS_SETXATTRAT = 5463
|
||||||
|
SYS_GETXATTRAT = 5464
|
||||||
|
SYS_LISTXATTRAT = 5465
|
||||||
|
SYS_REMOVEXATTRAT = 5466
|
||||||
)
|
)
|
||||||
|
|
|
@ -442,4 +442,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 4460
|
SYS_LSM_SET_SELF_ATTR = 4460
|
||||||
SYS_LSM_LIST_MODULES = 4461
|
SYS_LSM_LIST_MODULES = 4461
|
||||||
SYS_MSEAL = 4462
|
SYS_MSEAL = 4462
|
||||||
|
SYS_SETXATTRAT = 4463
|
||||||
|
SYS_GETXATTRAT = 4464
|
||||||
|
SYS_LISTXATTRAT = 4465
|
||||||
|
SYS_REMOVEXATTRAT = 4466
|
||||||
)
|
)
|
||||||
|
|
|
@ -449,4 +449,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -421,4 +421,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -421,4 +421,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -326,4 +326,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -387,4 +387,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -400,4 +400,8 @@ const (
|
||||||
SYS_LSM_SET_SELF_ATTR = 460
|
SYS_LSM_SET_SELF_ATTR = 460
|
||||||
SYS_LSM_LIST_MODULES = 461
|
SYS_LSM_LIST_MODULES = 461
|
||||||
SYS_MSEAL = 462
|
SYS_MSEAL = 462
|
||||||
|
SYS_SETXATTRAT = 463
|
||||||
|
SYS_GETXATTRAT = 464
|
||||||
|
SYS_LISTXATTRAT = 465
|
||||||
|
SYS_REMOVEXATTRAT = 466
|
||||||
)
|
)
|
||||||
|
|
|
@ -4747,7 +4747,7 @@ const (
|
||||||
NL80211_ATTR_MAC_HINT = 0xc8
|
NL80211_ATTR_MAC_HINT = 0xc8
|
||||||
NL80211_ATTR_MAC_MASK = 0xd7
|
NL80211_ATTR_MAC_MASK = 0xd7
|
||||||
NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca
|
NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca
|
||||||
NL80211_ATTR_MAX = 0x14c
|
NL80211_ATTR_MAX = 0x14d
|
||||||
NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4
|
NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4
|
||||||
NL80211_ATTR_MAX_CSA_COUNTERS = 0xce
|
NL80211_ATTR_MAX_CSA_COUNTERS = 0xce
|
||||||
NL80211_ATTR_MAX_MATCH_SETS = 0x85
|
NL80211_ATTR_MAX_MATCH_SETS = 0x85
|
||||||
|
@ -5519,7 +5519,7 @@ const (
|
||||||
NL80211_MNTR_FLAG_CONTROL = 0x3
|
NL80211_MNTR_FLAG_CONTROL = 0x3
|
||||||
NL80211_MNTR_FLAG_COOK_FRAMES = 0x5
|
NL80211_MNTR_FLAG_COOK_FRAMES = 0x5
|
||||||
NL80211_MNTR_FLAG_FCSFAIL = 0x1
|
NL80211_MNTR_FLAG_FCSFAIL = 0x1
|
||||||
NL80211_MNTR_FLAG_MAX = 0x6
|
NL80211_MNTR_FLAG_MAX = 0x7
|
||||||
NL80211_MNTR_FLAG_OTHER_BSS = 0x4
|
NL80211_MNTR_FLAG_OTHER_BSS = 0x4
|
||||||
NL80211_MNTR_FLAG_PLCPFAIL = 0x2
|
NL80211_MNTR_FLAG_PLCPFAIL = 0x2
|
||||||
NL80211_MPATH_FLAG_ACTIVE = 0x1
|
NL80211_MPATH_FLAG_ACTIVE = 0x1
|
||||||
|
@ -6174,3 +6174,5 @@ type SockDiagReq struct {
|
||||||
Family uint8
|
Family uint8
|
||||||
Protocol uint8
|
Protocol uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const RTM_NEWNVLAN = 0x70
|
||||||
|
|
|
@ -1074,6 +1074,7 @@ const (
|
||||||
IP_ADD_MEMBERSHIP = 0xc
|
IP_ADD_MEMBERSHIP = 0xc
|
||||||
IP_DROP_MEMBERSHIP = 0xd
|
IP_DROP_MEMBERSHIP = 0xd
|
||||||
IP_PKTINFO = 0x13
|
IP_PKTINFO = 0x13
|
||||||
|
IP_MTU_DISCOVER = 0x47
|
||||||
|
|
||||||
IPV6_V6ONLY = 0x1b
|
IPV6_V6ONLY = 0x1b
|
||||||
IPV6_UNICAST_HOPS = 0x4
|
IPV6_UNICAST_HOPS = 0x4
|
||||||
|
@ -1083,6 +1084,7 @@ const (
|
||||||
IPV6_JOIN_GROUP = 0xc
|
IPV6_JOIN_GROUP = 0xc
|
||||||
IPV6_LEAVE_GROUP = 0xd
|
IPV6_LEAVE_GROUP = 0xd
|
||||||
IPV6_PKTINFO = 0x13
|
IPV6_PKTINFO = 0x13
|
||||||
|
IPV6_MTU_DISCOVER = 0x47
|
||||||
|
|
||||||
MSG_OOB = 0x1
|
MSG_OOB = 0x1
|
||||||
MSG_PEEK = 0x2
|
MSG_PEEK = 0x2
|
||||||
|
@ -1132,6 +1134,15 @@ const (
|
||||||
WSASYS_STATUS_LEN = 128
|
WSASYS_STATUS_LEN = 128
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// enum PMTUD_STATE from ws2ipdef.h
|
||||||
|
const (
|
||||||
|
IP_PMTUDISC_NOT_SET = 0
|
||||||
|
IP_PMTUDISC_DO = 1
|
||||||
|
IP_PMTUDISC_DONT = 2
|
||||||
|
IP_PMTUDISC_PROBE = 3
|
||||||
|
IP_PMTUDISC_MAX = 4
|
||||||
|
)
|
||||||
|
|
||||||
type WSABuf struct {
|
type WSABuf struct {
|
||||||
Len uint32
|
Len uint32
|
||||||
Buf *byte
|
Buf *byte
|
||||||
|
@ -1146,6 +1157,22 @@ type WSAMsg struct {
|
||||||
Flags uint32
|
Flags uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type WSACMSGHDR struct {
|
||||||
|
Len uintptr
|
||||||
|
Level int32
|
||||||
|
Type int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type IN_PKTINFO struct {
|
||||||
|
Addr [4]byte
|
||||||
|
Ifindex uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type IN6_PKTINFO struct {
|
||||||
|
Addr [16]byte
|
||||||
|
Ifindex uint32
|
||||||
|
}
|
||||||
|
|
||||||
// Flags for WSASocket
|
// Flags for WSASocket
|
||||||
const (
|
const (
|
||||||
WSA_FLAG_OVERLAPPED = 0x01
|
WSA_FLAG_OVERLAPPED = 0x01
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# github.com/containers/common v0.62.3
|
# github.com/containers/common v0.62.3
|
||||||
## explicit; go 1.22.8
|
## explicit; go 1.22.8
|
||||||
github.com/containers/common/pkg/seccomp
|
github.com/containers/common/pkg/seccomp
|
||||||
# github.com/containers/storage v1.57.2
|
# github.com/containers/storage v1.58.0
|
||||||
## explicit; go 1.22.0
|
## explicit; go 1.23.0
|
||||||
github.com/containers/storage/pkg/fileutils
|
github.com/containers/storage/pkg/fileutils
|
||||||
github.com/containers/storage/pkg/idtools
|
github.com/containers/storage/pkg/idtools
|
||||||
github.com/containers/storage/pkg/mount
|
github.com/containers/storage/pkg/mount
|
||||||
|
@ -30,7 +30,7 @@ github.com/moby/sys/capability
|
||||||
# github.com/moby/sys/mountinfo v0.7.2
|
# github.com/moby/sys/mountinfo v0.7.2
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
github.com/moby/sys/mountinfo
|
github.com/moby/sys/mountinfo
|
||||||
# github.com/moby/sys/user v0.3.0
|
# github.com/moby/sys/user v0.4.0
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
github.com/moby/sys/user
|
github.com/moby/sys/user
|
||||||
# github.com/opencontainers/runtime-spec v1.2.1
|
# github.com/opencontainers/runtime-spec v1.2.1
|
||||||
|
@ -50,8 +50,8 @@ github.com/sirupsen/logrus/hooks/syslog
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
github.com/stretchr/testify/assert
|
github.com/stretchr/testify/assert
|
||||||
github.com/stretchr/testify/assert/yaml
|
github.com/stretchr/testify/assert/yaml
|
||||||
# golang.org/x/sys v0.29.0
|
# golang.org/x/sys v0.32.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.23.0
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
golang.org/x/sys/windows
|
golang.org/x/sys/windows
|
||||||
# gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
|
# gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
|
||||||
|
|
Loading…
Reference in New Issue