Bump github.com/containers/image/v5 from 5.15.2 to 5.16.0
Bumps [github.com/containers/image/v5](https://github.com/containers/image) from 5.15.2 to 5.16.0. - [Release notes](https://github.com/containers/image/releases) - [Commits](https://github.com/containers/image/compare/v5.15.2...v5.16.0) --- updated-dependencies: - dependency-name: github.com/containers/image/v5 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
parent
6f1faf36da
commit
f5ce02b227
8
go.mod
8
go.mod
|
@ -14,10 +14,10 @@ require (
|
|||
github.com/containers/buildah v1.22.3
|
||||
github.com/containers/common v0.43.2
|
||||
github.com/containers/conmon v2.0.20+incompatible
|
||||
github.com/containers/image/v5 v5.15.2
|
||||
github.com/containers/image/v5 v5.16.0
|
||||
github.com/containers/ocicrypt v1.1.2
|
||||
github.com/containers/psgo v1.5.2
|
||||
github.com/containers/storage v1.34.1
|
||||
github.com/containers/storage v1.35.0
|
||||
github.com/coreos/go-systemd/v22 v22.3.2
|
||||
github.com/coreos/stream-metadata-go v0.0.0-20210225230131-70edb9eb47b3
|
||||
github.com/cri-o/ocicni v0.2.1-0.20210621164014-d0acc7862283
|
||||
|
@ -46,7 +46,7 @@ require (
|
|||
github.com/onsi/ginkgo v1.16.4
|
||||
github.com/onsi/gomega v1.16.0
|
||||
github.com/opencontainers/go-digest v1.0.0
|
||||
github.com/opencontainers/image-spec v1.0.2-0.20190823105129-775207bd45b6
|
||||
github.com/opencontainers/image-spec v1.0.2-0.20210819154149-5ad6f50d6283
|
||||
github.com/opencontainers/runc v1.0.2
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417
|
||||
github.com/opencontainers/runtime-tools v0.9.0
|
||||
|
@ -65,7 +65,7 @@ require (
|
|||
go.etcd.io/bbolt v1.3.6
|
||||
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
|
||||
golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
|
||||
k8s.io/api v0.22.1
|
||||
k8s.io/apimachinery v0.22.1
|
||||
|
|
20
go.sum
20
go.sum
|
@ -247,8 +247,9 @@ github.com/containers/conmon v2.0.20+incompatible h1:YbCVSFSCqFjjVwHTPINGdMX1F6J
|
|||
github.com/containers/conmon v2.0.20+incompatible/go.mod h1:hgwZ2mtuDrppv78a/cOBNiCm6O0UMWGx1mu7P00nu5I=
|
||||
github.com/containers/image/v5 v5.14.0/go.mod h1:SxiBKOcKuT+4yTjD0AskjO+UwFvNcVOJ9qlAw1HNSPU=
|
||||
github.com/containers/image/v5 v5.15.0/go.mod h1:gzdBcooi6AFdiqfzirUqv90hUyHyI0MMdaqKzACKr2s=
|
||||
github.com/containers/image/v5 v5.15.2 h1:DKicmVr0h1HGkzs9muoErX+fVbV9sV9W5TyMy5perLE=
|
||||
github.com/containers/image/v5 v5.15.2/go.mod h1:8jejVSzTDfyPwr/HXp9rri34n/vbdavYk6IzTiB3TBw=
|
||||
github.com/containers/image/v5 v5.16.0 h1:WQcNSzb7+ngS2cfynx0vUwhk+scpgiKlldVcsF8GPbI=
|
||||
github.com/containers/image/v5 v5.16.0/go.mod h1:XgTpfAPLRGOd1XYyCU5cISFr777bLmOerCSpt/v7+Q4=
|
||||
github.com/containers/libtrust v0.0.0-20190913040956-14b96171aa3b h1:Q8ePgVfHDplZ7U33NwHZkrVELsZP5fYj9pM5WBZB2GE=
|
||||
github.com/containers/libtrust v0.0.0-20190913040956-14b96171aa3b/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY=
|
||||
github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc=
|
||||
|
@ -263,8 +264,9 @@ github.com/containers/storage v1.32.6/go.mod h1:mdB+b89p+jU8zpzLTVXA0gWMmIo0Wrkf
|
|||
github.com/containers/storage v1.33.0/go.mod h1:FUZPF4nJijX8ixdhByZJXf02cvbyLi6dyDwXdIe8QVY=
|
||||
github.com/containers/storage v1.33.1/go.mod h1:FUZPF4nJijX8ixdhByZJXf02cvbyLi6dyDwXdIe8QVY=
|
||||
github.com/containers/storage v1.34.0/go.mod h1:t6I+hTgPU0/tVxQ75vw406wDi/TXwYBqZp4QZV9N7b8=
|
||||
github.com/containers/storage v1.34.1 h1:PsBGMH7hwuQ3MOr7qTgPznFrE8ebfIbwQbg2gKvg0lE=
|
||||
github.com/containers/storage v1.34.1/go.mod h1:FY2TcbfgCLMU4lYoKnlZeZXeH353TOTbpDEA+sAcqAY=
|
||||
github.com/containers/storage v1.35.0 h1:bNduWshYm1tq4IPJRC+zLs3VQ+1tbauU0CZBaqzPxw4=
|
||||
github.com/containers/storage v1.35.0/go.mod h1:qzYhasQP2/V9D9XdO+vRwkHBhsBO0oznMLzzRDQ8s20=
|
||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
|
@ -730,8 +732,9 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
|
|||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||
github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/opencontainers/image-spec v1.0.2-0.20190823105129-775207bd45b6 h1:yN8BPXVwMBAm3Cuvh1L5XE8XpvYRMdsVLd82ILprhUU=
|
||||
github.com/opencontainers/image-spec v1.0.2-0.20190823105129-775207bd45b6/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/opencontainers/image-spec v1.0.2-0.20210819154149-5ad6f50d6283 h1:TVzvdjOalkJBNkbpPVMAr4KV9QRf2IjfxdyxwAK78Gs=
|
||||
github.com/opencontainers/image-spec v1.0.2-0.20210819154149-5ad6f50d6283/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||
github.com/opencontainers/runc v0.0.0-20190425234816-dae70e8efea4/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||
github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||
|
@ -908,13 +911,16 @@ github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/
|
|||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||
github.com/vbatts/tar-split v0.11.1 h1:0Odu65rhcZ3JZaPHxl7tCI3V/C/Q9Zf82UFravl02dE=
|
||||
github.com/vbatts/tar-split v0.11.1/go.mod h1:LEuURwDEiWjRjwu46yU3KVGuUdVv/dcnpcEPSzR8z6g=
|
||||
github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME=
|
||||
github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI=
|
||||
github.com/vbauerster/mpb/v6 v6.0.4 h1:h6J5zM/2wimP5Hj00unQuV8qbo5EPcj6wbkCqgj7KcY=
|
||||
github.com/vbauerster/mpb/v6 v6.0.4/go.mod h1:a/+JT57gqh6Du0Ay5jSR+uBMfXGdlR7VQlGP52fJxLM=
|
||||
github.com/vbauerster/mpb/v7 v7.0.3 h1:NfX0pHWhlDTev15M/C3qmSTM1EiIjcS+/d6qS6H4FnI=
|
||||
github.com/vbauerster/mpb/v7 v7.0.3/go.mod h1:NXGsfPGx6G2JssqvEcULtDqUrxuuYs4llpv8W6ZUpzk=
|
||||
github.com/vbauerster/mpb/v7 v7.1.3 h1:VJkiLuuBs/re5SCHLVkYOPYAs+1jagk5QIDHgAXLVVA=
|
||||
github.com/vbauerster/mpb/v7 v7.1.3/go.mod h1:X5GlohZw2fIpypMXWaKart+HGSAjpz49skxkDk+ZL7c=
|
||||
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
|
||||
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
|
||||
github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852 h1:cPXZWzzG0NllBLdjWoD1nDfaqu98YMv+OneaKc8sPOA=
|
||||
|
@ -1197,8 +1203,10 @@ golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55 h1:rw6UNGRMfarCepjI8qOepea/SXwIBVfTKjztZ5gBbq4=
|
||||
golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201113234701-d7a72108b828/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
|
|
|
@ -36,14 +36,6 @@ import (
|
|||
"golang.org/x/term"
|
||||
)
|
||||
|
||||
type digestingReader struct {
|
||||
source io.Reader
|
||||
digester digest.Digester
|
||||
expectedDigest digest.Digest
|
||||
validationFailed bool
|
||||
validationSucceeded bool
|
||||
}
|
||||
|
||||
var (
|
||||
// ErrDecryptParamsMissing is returned if there is missing decryption parameters
|
||||
ErrDecryptParamsMissing = errors.New("Necessary DecryptParameters not present")
|
||||
|
@ -51,6 +43,10 @@ var (
|
|||
// maxParallelDownloads is used to limit the maximum number of parallel
|
||||
// downloads. Let's follow Firefox by limiting it to 6.
|
||||
maxParallelDownloads = uint(6)
|
||||
|
||||
// defaultCompressionFormat is used if the destination transport requests
|
||||
// compression, and the user does not explicitly instruct us to use an algorithm.
|
||||
defaultCompressionFormat = &compression.Gzip
|
||||
)
|
||||
|
||||
// compressionBufferSize is the buffer size used to compress a blob
|
||||
|
@ -64,66 +60,22 @@ var expectedCompressionFormats = map[string]*compressiontypes.Algorithm{
|
|||
manifest.DockerV2Schema2LayerMediaType: &compression.Gzip,
|
||||
}
|
||||
|
||||
// newDigestingReader returns an io.Reader implementation with contents of source, which will eventually return a non-EOF error
|
||||
// or set validationSucceeded/validationFailed to true if the source stream does/does not match expectedDigest.
|
||||
// (neither is set if EOF is never reached).
|
||||
func newDigestingReader(source io.Reader, expectedDigest digest.Digest) (*digestingReader, error) {
|
||||
var digester digest.Digester
|
||||
if err := expectedDigest.Validate(); err != nil {
|
||||
return nil, errors.Errorf("Invalid digest specification %s", expectedDigest)
|
||||
}
|
||||
digestAlgorithm := expectedDigest.Algorithm()
|
||||
if !digestAlgorithm.Available() {
|
||||
return nil, errors.Errorf("Invalid digest specification %s: unsupported digest algorithm %s", expectedDigest, digestAlgorithm)
|
||||
}
|
||||
digester = digestAlgorithm.Digester()
|
||||
|
||||
return &digestingReader{
|
||||
source: source,
|
||||
digester: digester,
|
||||
expectedDigest: expectedDigest,
|
||||
validationFailed: false,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (d *digestingReader) Read(p []byte) (int, error) {
|
||||
n, err := d.source.Read(p)
|
||||
if n > 0 {
|
||||
if n2, err := d.digester.Hash().Write(p[:n]); n2 != n || err != nil {
|
||||
// Coverage: This should not happen, the hash.Hash interface requires
|
||||
// d.digest.Write to never return an error, and the io.Writer interface
|
||||
// requires n2 == len(input) if no error is returned.
|
||||
return 0, errors.Wrapf(err, "updating digest during verification: %d vs. %d", n2, n)
|
||||
}
|
||||
}
|
||||
if err == io.EOF {
|
||||
actualDigest := d.digester.Digest()
|
||||
if actualDigest != d.expectedDigest {
|
||||
d.validationFailed = true
|
||||
return 0, errors.Errorf("Digest did not match, expected %s, got %s", d.expectedDigest, actualDigest)
|
||||
}
|
||||
d.validationSucceeded = true
|
||||
}
|
||||
return n, err
|
||||
}
|
||||
|
||||
// copier allows us to keep track of diffID values for blobs, and other
|
||||
// data shared across one or more images in a possible manifest list.
|
||||
type copier struct {
|
||||
dest types.ImageDestination
|
||||
rawSource types.ImageSource
|
||||
reportWriter io.Writer
|
||||
progressOutput io.Writer
|
||||
progressInterval time.Duration
|
||||
progress chan types.ProgressProperties
|
||||
blobInfoCache internalblobinfocache.BlobInfoCache2
|
||||
copyInParallel bool
|
||||
compressionFormat compressiontypes.Algorithm
|
||||
compressionLevel *int
|
||||
ociDecryptConfig *encconfig.DecryptConfig
|
||||
ociEncryptConfig *encconfig.EncryptConfig
|
||||
maxParallelDownloads uint
|
||||
downloadForeignLayers bool
|
||||
dest types.ImageDestination
|
||||
rawSource types.ImageSource
|
||||
reportWriter io.Writer
|
||||
progressOutput io.Writer
|
||||
progressInterval time.Duration
|
||||
progress chan types.ProgressProperties
|
||||
blobInfoCache internalblobinfocache.BlobInfoCache2
|
||||
compressionFormat *compressiontypes.Algorithm // Compression algorithm to use, if the user explicitly requested one, or nil.
|
||||
compressionLevel *int
|
||||
ociDecryptConfig *encconfig.DecryptConfig
|
||||
ociEncryptConfig *encconfig.EncryptConfig
|
||||
concurrentBlobCopiesSemaphore *semaphore.Weighted // Limits the amount of concurrently copied blobs
|
||||
downloadForeignLayers bool
|
||||
}
|
||||
|
||||
// imageCopier tracks state specific to a single image (possibly an item of a manifest list)
|
||||
|
@ -196,7 +148,10 @@ type Options struct {
|
|||
// encrypted if non-nil. If nil, it does not attempt to decrypt an image.
|
||||
OciDecryptConfig *encconfig.DecryptConfig
|
||||
|
||||
// MaxParallelDownloads indicates the maximum layers to pull at the same time. A reasonable default is used if this is left as 0.
|
||||
// A weighted semaphore to limit the amount of concurrently copied layers and configs. Applies to all copy operations using the semaphore. If set, MaxParallelDownloads is ignored.
|
||||
ConcurrentBlobCopiesSemaphore *semaphore.Weighted
|
||||
|
||||
// MaxParallelDownloads indicates the maximum layers to pull at the same time. Applies to a single copy operation. A reasonable default is used if this is left as 0. Ignored if ConcurrentBlobCopiesSemaphore is set.
|
||||
MaxParallelDownloads uint
|
||||
|
||||
// When OptimizeDestinationImageAlreadyExists is set, optimize the copy assuming that the destination image already
|
||||
|
@ -269,7 +224,6 @@ func Image(ctx context.Context, policyContext *signature.PolicyContext, destRef,
|
|||
if !isTTY(reportWriter) {
|
||||
progressOutput = ioutil.Discard
|
||||
}
|
||||
copyInParallel := dest.HasThreadSafePutBlob() && rawSource.HasThreadSafeGetBlob()
|
||||
|
||||
c := &copier{
|
||||
dest: dest,
|
||||
|
@ -278,24 +232,38 @@ func Image(ctx context.Context, policyContext *signature.PolicyContext, destRef,
|
|||
progressOutput: progressOutput,
|
||||
progressInterval: options.ProgressInterval,
|
||||
progress: options.Progress,
|
||||
copyInParallel: copyInParallel,
|
||||
// FIXME? The cache is used for sources and destinations equally, but we only have a SourceCtx and DestinationCtx.
|
||||
// For now, use DestinationCtx (because blob reuse changes the behavior of the destination side more); eventually
|
||||
// we might want to add a separate CommonCtx — or would that be too confusing?
|
||||
blobInfoCache: internalblobinfocache.FromBlobInfoCache(blobinfocache.DefaultCache(options.DestinationCtx)),
|
||||
ociDecryptConfig: options.OciDecryptConfig,
|
||||
ociEncryptConfig: options.OciEncryptConfig,
|
||||
maxParallelDownloads: options.MaxParallelDownloads,
|
||||
downloadForeignLayers: options.DownloadForeignLayers,
|
||||
}
|
||||
// Default to using gzip compression unless specified otherwise.
|
||||
if options.DestinationCtx == nil || options.DestinationCtx.CompressionFormat == nil {
|
||||
c.compressionFormat = compression.Gzip
|
||||
|
||||
// Set the concurrentBlobCopiesSemaphore if we can copy layers in parallel.
|
||||
if dest.HasThreadSafePutBlob() && rawSource.HasThreadSafeGetBlob() {
|
||||
c.concurrentBlobCopiesSemaphore = options.ConcurrentBlobCopiesSemaphore
|
||||
if c.concurrentBlobCopiesSemaphore == nil {
|
||||
max := options.MaxParallelDownloads
|
||||
if max == 0 {
|
||||
max = maxParallelDownloads
|
||||
}
|
||||
c.concurrentBlobCopiesSemaphore = semaphore.NewWeighted(int64(max))
|
||||
}
|
||||
} else {
|
||||
c.compressionFormat = *options.DestinationCtx.CompressionFormat
|
||||
c.concurrentBlobCopiesSemaphore = semaphore.NewWeighted(int64(1))
|
||||
if options.ConcurrentBlobCopiesSemaphore != nil {
|
||||
if err := options.ConcurrentBlobCopiesSemaphore.Acquire(ctx, 1); err != nil {
|
||||
return nil, fmt.Errorf("acquiring semaphore for concurrent blob copies: %w", err)
|
||||
}
|
||||
defer options.ConcurrentBlobCopiesSemaphore.Release(1)
|
||||
}
|
||||
}
|
||||
|
||||
if options.DestinationCtx != nil {
|
||||
// Note that the compressionLevel can be nil.
|
||||
// Note that compressionFormat and compressionLevel can be nil.
|
||||
c.compressionFormat = options.DestinationCtx.CompressionFormat
|
||||
c.compressionLevel = options.DestinationCtx.CompressionLevel
|
||||
}
|
||||
|
||||
|
@ -904,22 +872,9 @@ func (ic *imageCopier) copyLayers(ctx context.Context) error {
|
|||
// copyGroup is used to determine if all layers are copied
|
||||
copyGroup := sync.WaitGroup{}
|
||||
|
||||
// copySemaphore is used to limit the number of parallel downloads to
|
||||
// avoid malicious images causing troubles and to be nice to servers.
|
||||
var copySemaphore *semaphore.Weighted
|
||||
if ic.c.copyInParallel {
|
||||
max := ic.c.maxParallelDownloads
|
||||
if max == 0 {
|
||||
max = maxParallelDownloads
|
||||
}
|
||||
copySemaphore = semaphore.NewWeighted(int64(max))
|
||||
} else {
|
||||
copySemaphore = semaphore.NewWeighted(int64(1))
|
||||
}
|
||||
|
||||
data := make([]copyLayerData, numLayers)
|
||||
copyLayerHelper := func(index int, srcLayer types.BlobInfo, toEncrypt bool, pool *mpb.Progress, srcRef reference.Named) {
|
||||
defer copySemaphore.Release(1)
|
||||
defer ic.c.concurrentBlobCopiesSemaphore.Release(1)
|
||||
defer copyGroup.Done()
|
||||
cld := copyLayerData{}
|
||||
if !ic.c.downloadForeignLayers && ic.c.dest.AcceptsForeignLayerURLs() && len(srcLayer.URLs) != 0 {
|
||||
|
@ -957,17 +912,17 @@ func (ic *imageCopier) copyLayers(ctx context.Context) error {
|
|||
}
|
||||
|
||||
if err := func() error { // A scope for defer
|
||||
progressPool, progressCleanup := ic.c.newProgressPool(ctx)
|
||||
defer func() {
|
||||
// Wait for all layers to be copied. progressCleanup() must not be called while any of the copyLayerHelpers interact with the progressPool.
|
||||
copyGroup.Wait()
|
||||
progressCleanup()
|
||||
}()
|
||||
progressPool := ic.c.newProgressPool()
|
||||
defer progressPool.Wait()
|
||||
|
||||
// Ensure we wait for all layers to be copied. progressPool.Wait() must not be called while any of the copyLayerHelpers interact with the progressPool.
|
||||
defer copyGroup.Wait()
|
||||
|
||||
for i, srcLayer := range srcInfos {
|
||||
err = copySemaphore.Acquire(ctx, 1)
|
||||
err = ic.c.concurrentBlobCopiesSemaphore.Acquire(ctx, 1)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Can't acquire semaphore")
|
||||
// This can only fail with ctx.Err(), so no need to blame acquiring the semaphore.
|
||||
return fmt.Errorf("copying layer: %w", err)
|
||||
}
|
||||
copyGroup.Add(1)
|
||||
go copyLayerHelper(i, srcLayer, encLayerBitmap[i], progressPool, ic.c.rawSource.Reference().DockerReference())
|
||||
|
@ -1061,15 +1016,13 @@ func (ic *imageCopier) copyUpdatedConfigAndManifest(ctx context.Context, instanc
|
|||
return man, manifestDigest, nil
|
||||
}
|
||||
|
||||
// newProgressPool creates a *mpb.Progress and a cleanup function.
|
||||
// The caller must eventually call the returned cleanup function after the pool will no longer be updated.
|
||||
func (c *copier) newProgressPool(ctx context.Context) (*mpb.Progress, func()) {
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
pool := mpb.NewWithContext(ctx, mpb.WithWidth(40), mpb.WithOutput(c.progressOutput))
|
||||
return pool, func() {
|
||||
cancel()
|
||||
pool.Wait()
|
||||
}
|
||||
// newProgressPool creates a *mpb.Progress.
|
||||
// The caller must eventually call pool.Wait() after the pool will no longer be updated.
|
||||
// NOTE: Every progress bar created within the progress pool must either successfully
|
||||
// complete or be aborted, or pool.Wait() will hang. That is typically done
|
||||
// using "defer bar.Abort(false)", which must be called BEFORE pool.Wait() is called.
|
||||
func (c *copier) newProgressPool() *mpb.Progress {
|
||||
return mpb.New(mpb.WithWidth(40), mpb.WithOutput(c.progressOutput))
|
||||
}
|
||||
|
||||
// customPartialBlobCounter provides a decorator function for the partial blobs retrieval progress bar
|
||||
|
@ -1090,6 +1043,9 @@ func customPartialBlobCounter(filler interface{}, wcc ...decor.WC) decor.Decorat
|
|||
|
||||
// createProgressBar creates a mpb.Bar in pool. Note that if the copier's reportWriter
|
||||
// is ioutil.Discard, the progress bar's output will be discarded
|
||||
// NOTE: Every progress bar created within a progress pool must either successfully
|
||||
// complete or be aborted, or pool.Wait() will hang. That is typically done
|
||||
// using "defer bar.Abort(false)", which must happen BEFORE pool.Wait() is called.
|
||||
func (c *copier) createProgressBar(pool *mpb.Progress, partial bool, info types.BlobInfo, kind string, onComplete string) *mpb.Bar {
|
||||
// shortDigestLen is the length of the digest used for blobs.
|
||||
const shortDigestLen = 12
|
||||
|
@ -1149,15 +1105,23 @@ func (c *copier) createProgressBar(pool *mpb.Progress, partial bool, info types.
|
|||
func (c *copier) copyConfig(ctx context.Context, src types.Image) error {
|
||||
srcInfo := src.ConfigInfo()
|
||||
if srcInfo.Digest != "" {
|
||||
if err := c.concurrentBlobCopiesSemaphore.Acquire(ctx, 1); err != nil {
|
||||
// This can only fail with ctx.Err(), so no need to blame acquiring the semaphore.
|
||||
return fmt.Errorf("copying config: %w", err)
|
||||
}
|
||||
defer c.concurrentBlobCopiesSemaphore.Release(1)
|
||||
|
||||
configBlob, err := src.ConfigBlob(ctx)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "reading config blob %s", srcInfo.Digest)
|
||||
}
|
||||
|
||||
destInfo, err := func() (types.BlobInfo, error) { // A scope for defer
|
||||
progressPool, progressCleanup := c.newProgressPool(ctx)
|
||||
defer progressCleanup()
|
||||
progressPool := c.newProgressPool()
|
||||
defer progressPool.Wait()
|
||||
bar := c.createProgressBar(progressPool, false, srcInfo, "config", "done")
|
||||
defer bar.Abort(false)
|
||||
|
||||
destInfo, err := c.copyBlobFromStream(ctx, bytes.NewReader(configBlob), srcInfo, nil, false, true, false, bar, -1, false)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
|
@ -1184,7 +1148,7 @@ type diffIDResult struct {
|
|||
|
||||
// copyLayer copies a layer with srcInfo (with known Digest and Annotations and possibly known Size) in src to dest, perhaps (de/re/)compressing it,
|
||||
// and returns a complete blobInfo of the copied layer, and a value for LayerDiffIDs if diffIDIsNeeded
|
||||
// srcRef can be used as an additional hint to the destination during checking whehter a layer can be reused but srcRef can be nil.
|
||||
// srcRef can be used as an additional hint to the destination during checking whether a layer can be reused but srcRef can be nil.
|
||||
func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo, toEncrypt bool, pool *mpb.Progress, layerIndex int, srcRef reference.Named, emptyLayer bool) (types.BlobInfo, digest.Digest, error) {
|
||||
// If the srcInfo doesn't contain compression information, try to compute it from the
|
||||
// MediaType, which was either read from a manifest by way of LayerInfos() or constructed
|
||||
|
@ -1245,8 +1209,11 @@ func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo, to
|
|||
}
|
||||
if reused {
|
||||
logrus.Debugf("Skipping blob %s (already present):", srcInfo.Digest)
|
||||
bar := ic.c.createProgressBar(pool, false, srcInfo, "blob", "skipped: already exists")
|
||||
bar.SetTotal(0, true)
|
||||
func() { // A scope for defer
|
||||
bar := ic.c.createProgressBar(pool, false, srcInfo, "blob", "skipped: already exists")
|
||||
defer bar.Abort(false)
|
||||
bar.SetTotal(0, true)
|
||||
}()
|
||||
|
||||
// Throw an event that the layer has been skipped
|
||||
if ic.c.progress != nil && ic.c.progressInterval > 0 {
|
||||
|
@ -1279,40 +1246,49 @@ func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo, to
|
|||
imgSource, okSource := ic.c.rawSource.(internalTypes.ImageSourceSeekable)
|
||||
imgDest, okDest := ic.c.dest.(internalTypes.ImageDestinationPartial)
|
||||
if okSource && okDest && !diffIDIsNeeded {
|
||||
bar := ic.c.createProgressBar(pool, true, srcInfo, "blob", "done")
|
||||
if reused, blobInfo := func() (bool, types.BlobInfo) { // A scope for defer
|
||||
bar := ic.c.createProgressBar(pool, true, srcInfo, "blob", "done")
|
||||
hideProgressBar := true
|
||||
defer func() { // Note that this is not the same as defer bar.Abort(hideProgressBar); we need hideProgressBar to be evaluated lazily.
|
||||
bar.Abort(hideProgressBar)
|
||||
}()
|
||||
|
||||
progress := make(chan int64)
|
||||
terminate := make(chan interface{})
|
||||
progress := make(chan int64)
|
||||
terminate := make(chan interface{})
|
||||
|
||||
defer close(terminate)
|
||||
defer close(progress)
|
||||
defer close(terminate)
|
||||
defer close(progress)
|
||||
|
||||
proxy := imageSourceSeekableProxy{
|
||||
source: imgSource,
|
||||
progress: progress,
|
||||
}
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case written := <-progress:
|
||||
bar.IncrInt64(written)
|
||||
case <-terminate:
|
||||
return
|
||||
}
|
||||
proxy := imageSourceSeekableProxy{
|
||||
source: imgSource,
|
||||
progress: progress,
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case written := <-progress:
|
||||
bar.IncrInt64(written)
|
||||
case <-terminate:
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
bar.SetTotal(srcInfo.Size, false)
|
||||
info, err := imgDest.PutBlobPartial(ctx, proxy, srcInfo, ic.c.blobInfoCache)
|
||||
if err == nil {
|
||||
bar.SetRefill(srcInfo.Size - bar.Current())
|
||||
bar.SetCurrent(srcInfo.Size)
|
||||
bar.SetTotal(srcInfo.Size, true)
|
||||
logrus.Debugf("Retrieved partial blob %v", srcInfo.Digest)
|
||||
return info, cachedDiffID, nil
|
||||
bar.SetTotal(srcInfo.Size, false)
|
||||
info, err := imgDest.PutBlobPartial(ctx, proxy, srcInfo, ic.c.blobInfoCache)
|
||||
if err == nil {
|
||||
bar.SetRefill(srcInfo.Size - bar.Current())
|
||||
bar.SetCurrent(srcInfo.Size)
|
||||
bar.SetTotal(srcInfo.Size, true)
|
||||
hideProgressBar = false
|
||||
logrus.Debugf("Retrieved partial blob %v", srcInfo.Digest)
|
||||
return true, info
|
||||
}
|
||||
logrus.Debugf("Failed to retrieve partial blob: %v", err)
|
||||
return false, types.BlobInfo{}
|
||||
}(); reused {
|
||||
return blobInfo, cachedDiffID, nil
|
||||
}
|
||||
bar.Abort(true)
|
||||
logrus.Debugf("Failed to retrieve partial blob: %v", err)
|
||||
}
|
||||
|
||||
// Fallback: copy the layer, computing the diffID if we need to do so
|
||||
|
@ -1322,32 +1298,35 @@ func (ic *imageCopier) copyLayer(ctx context.Context, srcInfo types.BlobInfo, to
|
|||
}
|
||||
defer srcStream.Close()
|
||||
|
||||
bar := ic.c.createProgressBar(pool, false, srcInfo, "blob", "done")
|
||||
return func() (types.BlobInfo, digest.Digest, error) { // A scope for defer
|
||||
bar := ic.c.createProgressBar(pool, false, srcInfo, "blob", "done")
|
||||
defer bar.Abort(false)
|
||||
|
||||
blobInfo, diffIDChan, err := ic.copyLayerFromStream(ctx, srcStream, types.BlobInfo{Digest: srcInfo.Digest, Size: srcBlobSize, MediaType: srcInfo.MediaType, Annotations: srcInfo.Annotations}, diffIDIsNeeded, toEncrypt, bar, layerIndex, emptyLayer)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, "", err
|
||||
}
|
||||
|
||||
diffID := cachedDiffID
|
||||
if diffIDIsNeeded {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return types.BlobInfo{}, "", ctx.Err()
|
||||
case diffIDResult := <-diffIDChan:
|
||||
if diffIDResult.err != nil {
|
||||
return types.BlobInfo{}, "", errors.Wrap(diffIDResult.err, "computing layer DiffID")
|
||||
}
|
||||
logrus.Debugf("Computed DiffID %s for layer %s", diffIDResult.digest, srcInfo.Digest)
|
||||
// This is safe because we have just computed diffIDResult.Digest ourselves, and in the process
|
||||
// we have read all of the input blob, so srcInfo.Digest must have been validated by digestingReader.
|
||||
ic.c.blobInfoCache.RecordDigestUncompressedPair(srcInfo.Digest, diffIDResult.digest)
|
||||
diffID = diffIDResult.digest
|
||||
blobInfo, diffIDChan, err := ic.copyLayerFromStream(ctx, srcStream, types.BlobInfo{Digest: srcInfo.Digest, Size: srcBlobSize, MediaType: srcInfo.MediaType, Annotations: srcInfo.Annotations}, diffIDIsNeeded, toEncrypt, bar, layerIndex, emptyLayer)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, "", err
|
||||
}
|
||||
}
|
||||
|
||||
bar.SetTotal(srcInfo.Size, true)
|
||||
return blobInfo, diffID, nil
|
||||
diffID := cachedDiffID
|
||||
if diffIDIsNeeded {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return types.BlobInfo{}, "", ctx.Err()
|
||||
case diffIDResult := <-diffIDChan:
|
||||
if diffIDResult.err != nil {
|
||||
return types.BlobInfo{}, "", errors.Wrap(diffIDResult.err, "computing layer DiffID")
|
||||
}
|
||||
logrus.Debugf("Computed DiffID %s for layer %s", diffIDResult.digest, srcInfo.Digest)
|
||||
// This is safe because we have just computed diffIDResult.Digest ourselves, and in the process
|
||||
// we have read all of the input blob, so srcInfo.Digest must have been validated by digestingReader.
|
||||
ic.c.blobInfoCache.RecordDigestUncompressedPair(srcInfo.Digest, diffIDResult.digest)
|
||||
diffID = diffIDResult.digest
|
||||
}
|
||||
}
|
||||
|
||||
bar.SetTotal(srcInfo.Size, true)
|
||||
return blobInfo, diffID, nil
|
||||
}()
|
||||
}
|
||||
|
||||
// copyLayerFromStream is an implementation detail of copyLayer; mostly providing a separate “defer” scope.
|
||||
|
@ -1502,7 +1481,7 @@ func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, sr
|
|||
// short-circuit conditions
|
||||
var inputInfo types.BlobInfo
|
||||
var compressionOperation types.LayerCompression
|
||||
uploadCompressionFormat := &c.compressionFormat
|
||||
var uploadCompressionFormat *compressiontypes.Algorithm
|
||||
srcCompressorName := internalblobinfocache.Uncompressed
|
||||
if isCompressed {
|
||||
srcCompressorName = compressionFormat.Name()
|
||||
|
@ -1514,14 +1493,19 @@ func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, sr
|
|||
compressionOperation = types.PreserveOriginal
|
||||
inputInfo = srcInfo
|
||||
srcCompressorName = internalblobinfocache.UnknownCompression
|
||||
uploadCompressorName = internalblobinfocache.UnknownCompression
|
||||
uploadCompressionFormat = nil
|
||||
uploadCompressorName = internalblobinfocache.UnknownCompression
|
||||
} else if canModifyBlob && c.dest.DesiredLayerCompression() == types.Compress && !isCompressed {
|
||||
logrus.Debugf("Compressing blob on the fly")
|
||||
compressionOperation = types.Compress
|
||||
pipeReader, pipeWriter := io.Pipe()
|
||||
defer pipeReader.Close()
|
||||
|
||||
if c.compressionFormat != nil {
|
||||
uploadCompressionFormat = c.compressionFormat
|
||||
} else {
|
||||
uploadCompressionFormat = defaultCompressionFormat
|
||||
}
|
||||
// If this fails while writing data, it will do pipeWriter.CloseWithError(); if it fails otherwise,
|
||||
// e.g. because we have exited and due to pipeReader.Close() above further writing to the pipe has failed,
|
||||
// we don’t care.
|
||||
|
@ -1530,7 +1514,8 @@ func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, sr
|
|||
inputInfo.Digest = ""
|
||||
inputInfo.Size = -1
|
||||
uploadCompressorName = uploadCompressionFormat.Name()
|
||||
} else if canModifyBlob && c.dest.DesiredLayerCompression() == types.Compress && isCompressed && uploadCompressionFormat.Name() != compressionFormat.Name() {
|
||||
} else if canModifyBlob && c.dest.DesiredLayerCompression() == types.Compress && isCompressed &&
|
||||
c.compressionFormat != nil && c.compressionFormat.Name() != compressionFormat.Name() {
|
||||
// When the blob is compressed, but the desired format is different, it first needs to be decompressed and finally
|
||||
// re-compressed using the desired format.
|
||||
logrus.Debugf("Blob will be converted")
|
||||
|
@ -1545,6 +1530,7 @@ func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, sr
|
|||
pipeReader, pipeWriter := io.Pipe()
|
||||
defer pipeReader.Close()
|
||||
|
||||
uploadCompressionFormat = c.compressionFormat
|
||||
go c.compressGoroutine(pipeWriter, s, compressionMetadata, *uploadCompressionFormat) // Closes pipeWriter
|
||||
|
||||
destStream = pipeReader
|
||||
|
@ -1562,14 +1548,13 @@ func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, sr
|
|||
destStream = s
|
||||
inputInfo.Digest = ""
|
||||
inputInfo.Size = -1
|
||||
uploadCompressorName = internalblobinfocache.Uncompressed
|
||||
uploadCompressionFormat = nil
|
||||
uploadCompressorName = internalblobinfocache.Uncompressed
|
||||
} else {
|
||||
// PreserveOriginal might also need to recompress the original blob if the desired compression format is different.
|
||||
logrus.Debugf("Using original blob without modification")
|
||||
compressionOperation = types.PreserveOriginal
|
||||
inputInfo = srcInfo
|
||||
uploadCompressorName = srcCompressorName
|
||||
// Remember if the original blob was compressed, and if so how, so that if
|
||||
// LayerInfosForCopy() returned something that differs from what was in the
|
||||
// source's manifest, and UpdatedImage() needs to call UpdateLayerInfos(),
|
||||
|
@ -1579,6 +1564,7 @@ func (c *copier) copyBlobFromStream(ctx context.Context, srcStream io.Reader, sr
|
|||
} else {
|
||||
uploadCompressionFormat = nil
|
||||
}
|
||||
uploadCompressorName = srcCompressorName
|
||||
}
|
||||
|
||||
// === Encrypt the stream for valid mediatypes if ociEncryptConfig provided
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package copy
|
||||
|
||||
import (
|
||||
"hash"
|
||||
"io"
|
||||
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type digestingReader struct {
|
||||
source io.Reader
|
||||
digester digest.Digester
|
||||
hash hash.Hash
|
||||
expectedDigest digest.Digest
|
||||
validationFailed bool
|
||||
validationSucceeded bool
|
||||
}
|
||||
|
||||
// newDigestingReader returns an io.Reader implementation with contents of source, which will eventually return a non-EOF error
|
||||
// or set validationSucceeded/validationFailed to true if the source stream does/does not match expectedDigest.
|
||||
// (neither is set if EOF is never reached).
|
||||
func newDigestingReader(source io.Reader, expectedDigest digest.Digest) (*digestingReader, error) {
|
||||
var digester digest.Digester
|
||||
if err := expectedDigest.Validate(); err != nil {
|
||||
return nil, errors.Errorf("Invalid digest specification %s", expectedDigest)
|
||||
}
|
||||
digestAlgorithm := expectedDigest.Algorithm()
|
||||
if !digestAlgorithm.Available() {
|
||||
return nil, errors.Errorf("Invalid digest specification %s: unsupported digest algorithm %s", expectedDigest, digestAlgorithm)
|
||||
}
|
||||
digester = digestAlgorithm.Digester()
|
||||
|
||||
return &digestingReader{
|
||||
source: source,
|
||||
digester: digester,
|
||||
hash: digester.Hash(),
|
||||
expectedDigest: expectedDigest,
|
||||
validationFailed: false,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (d *digestingReader) Read(p []byte) (int, error) {
|
||||
n, err := d.source.Read(p)
|
||||
if n > 0 {
|
||||
if n2, err := d.hash.Write(p[:n]); n2 != n || err != nil {
|
||||
// Coverage: This should not happen, the hash.Hash interface requires
|
||||
// d.digest.Write to never return an error, and the io.Writer interface
|
||||
// requires n2 == len(input) if no error is returned.
|
||||
return 0, errors.Wrapf(err, "updating digest during verification: %d vs. %d", n2, n)
|
||||
}
|
||||
}
|
||||
if err == io.EOF {
|
||||
actualDigest := d.digester.Digest()
|
||||
if actualDigest != d.expectedDigest {
|
||||
d.validationFailed = true
|
||||
return 0, errors.Errorf("Digest did not match, expected %s, got %s", d.expectedDigest, actualDigest)
|
||||
}
|
||||
d.validationSucceeded = true
|
||||
}
|
||||
return n, err
|
||||
}
|
|
@ -8,6 +8,7 @@ import (
|
|||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/containers/image/v5/internal/putblobdigest"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/opencontainers/go-digest"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -141,7 +142,7 @@ func (d *dirImageDestination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// May update cache.
|
||||
// WARNING: The contents of stream are being verified on the fly. Until stream.Read() returns io.EOF, the contents of the data SHOULD NOT be available
|
||||
|
@ -163,17 +164,15 @@ func (d *dirImageDestination) PutBlob(ctx context.Context, stream io.Reader, inp
|
|||
}
|
||||
}()
|
||||
|
||||
digester := digest.Canonical.Digester()
|
||||
tee := io.TeeReader(stream, digester.Hash())
|
||||
|
||||
digester, stream := putblobdigest.DigestIfCanonicalUnknown(stream, inputInfo)
|
||||
// TODO: This can take quite some time, and should ideally be cancellable using ctx.Done().
|
||||
size, err := io.Copy(blobFile, tee)
|
||||
size, err := io.Copy(blobFile, stream)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
}
|
||||
computedDigest := digester.Digest()
|
||||
blobDigest := digester.Digest()
|
||||
if inputInfo.Size != -1 && size != inputInfo.Size {
|
||||
return types.BlobInfo{}, errors.Errorf("Size mismatch when copying %s, expected %d, got %d", computedDigest, inputInfo.Size, size)
|
||||
return types.BlobInfo{}, errors.Errorf("Size mismatch when copying %s, expected %d, got %d", blobDigest, inputInfo.Size, size)
|
||||
}
|
||||
if err := blobFile.Sync(); err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
|
@ -189,7 +188,7 @@ func (d *dirImageDestination) PutBlob(ctx context.Context, stream io.Reader, inp
|
|||
}
|
||||
}
|
||||
|
||||
blobPath := d.ref.layerPath(computedDigest)
|
||||
blobPath := d.ref.layerPath(blobDigest)
|
||||
// need to explicitly close the file, since a rename won't otherwise not work on Windows
|
||||
blobFile.Close()
|
||||
explicitClosed = true
|
||||
|
@ -197,7 +196,7 @@ func (d *dirImageDestination) PutBlob(ctx context.Context, stream io.Reader, inp
|
|||
return types.BlobInfo{}, err
|
||||
}
|
||||
succeeded = true
|
||||
return types.BlobInfo{Digest: computedDigest, Size: size}, nil
|
||||
return types.BlobInfo{Digest: blobDigest, Size: size}, nil
|
||||
}
|
||||
|
||||
// TryReusingBlob checks whether the transport already contains, or can efficiently reuse, a blob, and if so, applies it to the current destination
|
||||
|
|
|
@ -17,6 +17,7 @@ import (
|
|||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/internal/blobinfocache"
|
||||
"github.com/containers/image/v5/internal/iolimits"
|
||||
"github.com/containers/image/v5/internal/putblobdigest"
|
||||
"github.com/containers/image/v5/internal/uploadreader"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/image/v5/pkg/blobinfocache/none"
|
||||
|
@ -124,14 +125,14 @@ func (d *dockerImageDestination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// May update cache.
|
||||
// WARNING: The contents of stream are being verified on the fly. Until stream.Read() returns io.EOF, the contents of the data SHOULD NOT be available
|
||||
// to any other readers for download using the supplied digest.
|
||||
// If stream.Read() at any time, ESPECIALLY at end of input, returns an error, PutBlob MUST 1) fail, and 2) delete any data stored so far.
|
||||
func (d *dockerImageDestination) PutBlob(ctx context.Context, stream io.Reader, inputInfo types.BlobInfo, cache types.BlobInfoCache, isConfig bool) (types.BlobInfo, error) {
|
||||
if inputInfo.Digest.String() != "" {
|
||||
if inputInfo.Digest != "" {
|
||||
// This should not really be necessary, at least the copy code calls TryReusingBlob automatically.
|
||||
// Still, we need to check, if only because the "initiate upload" endpoint does not have a documented "blob already exists" return value.
|
||||
// But we do that with NoCache, so that it _only_ checks the primary destination, instead of trying all mount candidates _again_.
|
||||
|
@ -161,10 +162,12 @@ func (d *dockerImageDestination) PutBlob(ctx context.Context, stream io.Reader,
|
|||
return types.BlobInfo{}, errors.Wrap(err, "determining upload URL")
|
||||
}
|
||||
|
||||
digester := digest.Canonical.Digester()
|
||||
digester, stream := putblobdigest.DigestIfCanonicalUnknown(stream, inputInfo)
|
||||
sizeCounter := &sizeCounter{}
|
||||
stream = io.TeeReader(stream, sizeCounter)
|
||||
|
||||
uploadLocation, err = func() (*url.URL, error) { // A scope for defer
|
||||
uploadReader := uploadreader.NewUploadReader(io.TeeReader(stream, io.MultiWriter(digester.Hash(), sizeCounter)))
|
||||
uploadReader := uploadreader.NewUploadReader(stream)
|
||||
// This error text should never be user-visible, we terminate only after makeRequestToResolvedURL
|
||||
// returns, so there isn’t a way for the error text to be provided to any of our callers.
|
||||
defer uploadReader.Terminate(errors.New("Reading data from an already terminated upload"))
|
||||
|
@ -186,13 +189,12 @@ func (d *dockerImageDestination) PutBlob(ctx context.Context, stream io.Reader,
|
|||
if err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
}
|
||||
computedDigest := digester.Digest()
|
||||
blobDigest := digester.Digest()
|
||||
|
||||
// FIXME: DELETE uploadLocation on failure (does not really work in docker/distribution servers, which incorrectly require the "delete" action in the token's scope)
|
||||
|
||||
locationQuery := uploadLocation.Query()
|
||||
// TODO: check inputInfo.Digest == computedDigest https://github.com/containers/image/pull/70#discussion_r77646717
|
||||
locationQuery.Set("digest", computedDigest.String())
|
||||
locationQuery.Set("digest", blobDigest.String())
|
||||
uploadLocation.RawQuery = locationQuery.Encode()
|
||||
res, err = d.c.makeRequestToResolvedURL(ctx, http.MethodPut, uploadLocation.String(), map[string][]string{"Content-Type": {"application/octet-stream"}}, nil, -1, v2Auth, nil)
|
||||
if err != nil {
|
||||
|
@ -204,9 +206,9 @@ func (d *dockerImageDestination) PutBlob(ctx context.Context, stream io.Reader,
|
|||
return types.BlobInfo{}, errors.Wrapf(registryHTTPResponseToError(res), "uploading layer to %s", uploadLocation)
|
||||
}
|
||||
|
||||
logrus.Debugf("Upload of layer %s complete", computedDigest)
|
||||
cache.RecordKnownLocation(d.ref.Transport(), bicTransportScope(d.ref), computedDigest, newBICLocationReference(d.ref))
|
||||
return types.BlobInfo{Digest: computedDigest, Size: sizeCounter.size}, nil
|
||||
logrus.Debugf("Upload of layer %s complete", blobDigest)
|
||||
cache.RecordKnownLocation(d.ref.Transport(), bicTransportScope(d.ref), blobDigest, newBICLocationReference(d.ref))
|
||||
return types.BlobInfo{Digest: blobDigest, Size: sizeCounter.size}, nil
|
||||
}
|
||||
|
||||
// blobExists returns true iff repo contains a blob with digest, and if so, also its size.
|
||||
|
@ -485,7 +487,7 @@ func (d *dockerImageDestination) PutSignatures(ctx context.Context, signatures [
|
|||
return nil
|
||||
}
|
||||
if instanceDigest == nil {
|
||||
if d.manifestDigest.String() == "" {
|
||||
if d.manifestDigest == "" {
|
||||
// This shouldn’t happen, ImageDestination users are required to call PutManifest before PutSignatures
|
||||
return errors.Errorf("Unknown manifest digest, can't add signatures")
|
||||
}
|
||||
|
|
|
@ -278,7 +278,78 @@ func (s *dockerImageSource) HasThreadSafeGetBlob() bool {
|
|||
return true
|
||||
}
|
||||
|
||||
// splitHTTP200ResponseToPartial splits a 200 response in multiple streams as specified by the chunks
|
||||
func splitHTTP200ResponseToPartial(streams chan io.ReadCloser, errs chan error, body io.ReadCloser, chunks []internalTypes.ImageSourceChunk) {
|
||||
defer close(streams)
|
||||
defer close(errs)
|
||||
currentOffset := uint64(0)
|
||||
|
||||
body = makeBufferedNetworkReader(body, 64, 16384)
|
||||
defer body.Close()
|
||||
for _, c := range chunks {
|
||||
if c.Offset != currentOffset {
|
||||
if c.Offset < currentOffset {
|
||||
errs <- fmt.Errorf("invalid chunk offset specified %v (expected >= %v)", c.Offset, currentOffset)
|
||||
break
|
||||
}
|
||||
toSkip := c.Offset - currentOffset
|
||||
if _, err := io.Copy(ioutil.Discard, io.LimitReader(body, int64(toSkip))); err != nil {
|
||||
errs <- err
|
||||
break
|
||||
}
|
||||
currentOffset += toSkip
|
||||
}
|
||||
s := signalCloseReader{
|
||||
closed: make(chan interface{}),
|
||||
stream: ioutil.NopCloser(io.LimitReader(body, int64(c.Length))),
|
||||
consumeStream: true,
|
||||
}
|
||||
streams <- s
|
||||
|
||||
// Wait until the stream is closed before going to the next chunk
|
||||
<-s.closed
|
||||
currentOffset += c.Length
|
||||
}
|
||||
}
|
||||
|
||||
// handle206Response reads a 206 response and send each part as a separate ReadCloser to the streams chan.
|
||||
func handle206Response(streams chan io.ReadCloser, errs chan error, body io.ReadCloser, chunks []internalTypes.ImageSourceChunk, mediaType string, params map[string]string) {
|
||||
defer close(streams)
|
||||
defer close(errs)
|
||||
if !strings.HasPrefix(mediaType, "multipart/") {
|
||||
streams <- body
|
||||
return
|
||||
}
|
||||
boundary, found := params["boundary"]
|
||||
if !found {
|
||||
errs <- errors.Errorf("could not find boundary")
|
||||
body.Close()
|
||||
return
|
||||
}
|
||||
buffered := makeBufferedNetworkReader(body, 64, 16384)
|
||||
defer buffered.Close()
|
||||
mr := multipart.NewReader(buffered, boundary)
|
||||
for {
|
||||
p, err := mr.NextPart()
|
||||
if err != nil {
|
||||
if err != io.EOF {
|
||||
errs <- err
|
||||
}
|
||||
return
|
||||
}
|
||||
s := signalCloseReader{
|
||||
closed: make(chan interface{}),
|
||||
stream: p,
|
||||
}
|
||||
streams <- s
|
||||
// NextPart() cannot be called while the current part
|
||||
// is being read, so wait until it is closed
|
||||
<-s.closed
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlobAt returns a stream for the specified blob.
|
||||
// The specified chunks must be not overlapping and sorted by their offset.
|
||||
func (s *dockerImageSource) GetBlobAt(ctx context.Context, info types.BlobInfo, chunks []internalTypes.ImageSourceChunk) (chan io.ReadCloser, chan error, error) {
|
||||
headers := make(map[string][]string)
|
||||
|
||||
|
@ -305,53 +376,30 @@ func (s *dockerImageSource) GetBlobAt(ctx context.Context, info types.BlobInfo,
|
|||
}
|
||||
return nil, nil, err
|
||||
}
|
||||
if res.StatusCode != http.StatusPartialContent {
|
||||
|
||||
switch res.StatusCode {
|
||||
case http.StatusOK:
|
||||
// if the server replied with a 200 status code, convert the full body response to a series of
|
||||
// streams as it would have been done with 206.
|
||||
streams := make(chan io.ReadCloser)
|
||||
errs := make(chan error)
|
||||
go splitHTTP200ResponseToPartial(streams, errs, res.Body, chunks)
|
||||
return streams, errs, nil
|
||||
case http.StatusPartialContent:
|
||||
mediaType, params, err := mime.ParseMediaType(res.Header.Get("Content-Type"))
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
streams := make(chan io.ReadCloser)
|
||||
errs := make(chan error)
|
||||
|
||||
go handle206Response(streams, errs, res.Body, chunks, mediaType, params)
|
||||
return streams, errs, nil
|
||||
default:
|
||||
res.Body.Close()
|
||||
return nil, nil, errors.Errorf("invalid status code returned when fetching blob %d (%s)", res.StatusCode, http.StatusText(res.StatusCode))
|
||||
}
|
||||
|
||||
mediaType, params, err := mime.ParseMediaType(res.Header.Get("Content-Type"))
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
streams := make(chan io.ReadCloser)
|
||||
errs := make(chan error)
|
||||
|
||||
go func() {
|
||||
defer close(streams)
|
||||
defer close(errs)
|
||||
if !strings.HasPrefix(mediaType, "multipart/") {
|
||||
streams <- res.Body
|
||||
return
|
||||
}
|
||||
boundary, found := params["boundary"]
|
||||
if !found {
|
||||
errs <- errors.Errorf("could not find boundary")
|
||||
return
|
||||
}
|
||||
buffered := makeBufferedNetworkReader(res.Body, 64, 16384)
|
||||
defer buffered.Close()
|
||||
mr := multipart.NewReader(buffered, boundary)
|
||||
for {
|
||||
p, err := mr.NextPart()
|
||||
if err != nil {
|
||||
if err != io.EOF {
|
||||
errs <- err
|
||||
}
|
||||
return
|
||||
}
|
||||
s := signalCloseReader{
|
||||
Closed: make(chan interface{}),
|
||||
Stream: p,
|
||||
}
|
||||
streams <- s
|
||||
// NextPart() cannot be called while the current part
|
||||
// is being read, so wait until it is closed
|
||||
<-s.Closed
|
||||
}
|
||||
}()
|
||||
return streams, errs, nil
|
||||
}
|
||||
|
||||
// GetBlob returns a stream for the specified blob, and the blob’s size (or -1 if unknown).
|
||||
|
@ -585,7 +633,7 @@ type bufferedNetworkReaderBuffer struct {
|
|||
}
|
||||
|
||||
type bufferedNetworkReader struct {
|
||||
stream io.Reader
|
||||
stream io.ReadCloser
|
||||
emptyBuffer chan *bufferedNetworkReaderBuffer
|
||||
readyBuffer chan *bufferedNetworkReaderBuffer
|
||||
terminate chan bool
|
||||
|
@ -611,9 +659,10 @@ func handleBufferedNetworkReader(br *bufferedNetworkReader) {
|
|||
}
|
||||
}
|
||||
|
||||
func (n *bufferedNetworkReader) Close() {
|
||||
func (n *bufferedNetworkReader) Close() error {
|
||||
close(n.terminate)
|
||||
close(n.emptyBuffer)
|
||||
return n.stream.Close()
|
||||
}
|
||||
|
||||
func (n *bufferedNetworkReader) read(p []byte) (int, error) {
|
||||
|
@ -657,7 +706,7 @@ func (n *bufferedNetworkReader) Read(p []byte) (int, error) {
|
|||
return n.read(p)
|
||||
}
|
||||
|
||||
func makeBufferedNetworkReader(stream io.Reader, nBuffers, bufferSize uint) *bufferedNetworkReader {
|
||||
func makeBufferedNetworkReader(stream io.ReadCloser, nBuffers, bufferSize uint) *bufferedNetworkReader {
|
||||
br := bufferedNetworkReader{
|
||||
stream: stream,
|
||||
emptyBuffer: make(chan *bufferedNetworkReaderBuffer, nBuffers),
|
||||
|
@ -680,15 +729,22 @@ func makeBufferedNetworkReader(stream io.Reader, nBuffers, bufferSize uint) *buf
|
|||
}
|
||||
|
||||
type signalCloseReader struct {
|
||||
Closed chan interface{}
|
||||
Stream io.ReadCloser
|
||||
closed chan interface{}
|
||||
stream io.ReadCloser
|
||||
consumeStream bool
|
||||
}
|
||||
|
||||
func (s signalCloseReader) Read(p []byte) (int, error) {
|
||||
return s.Stream.Read(p)
|
||||
return s.stream.Read(p)
|
||||
}
|
||||
|
||||
func (s signalCloseReader) Close() error {
|
||||
defer close(s.Closed)
|
||||
return s.Stream.Close()
|
||||
defer close(s.closed)
|
||||
if s.consumeStream {
|
||||
if _, err := io.Copy(ioutil.Discard, s.stream); err != nil {
|
||||
s.stream.Close()
|
||||
return err
|
||||
}
|
||||
}
|
||||
return s.stream.Close()
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/internal/iolimits"
|
||||
"github.com/containers/image/v5/internal/putblobdigest"
|
||||
"github.com/containers/image/v5/internal/tmpdir"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/image/v5/types"
|
||||
|
@ -86,7 +87,7 @@ func (d *Destination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// May update cache.
|
||||
// WARNING: The contents of stream are being verified on the fly. Until stream.Read() returns io.EOF, the contents of the data SHOULD NOT be available
|
||||
|
@ -95,7 +96,7 @@ func (d *Destination) HasThreadSafePutBlob() bool {
|
|||
func (d *Destination) PutBlob(ctx context.Context, stream io.Reader, inputInfo types.BlobInfo, cache types.BlobInfoCache, isConfig bool) (types.BlobInfo, error) {
|
||||
// Ouch, we need to stream the blob into a temporary file just to determine the size.
|
||||
// When the layer is decompressed, we also have to generate the digest on uncompressed data.
|
||||
if inputInfo.Size == -1 || inputInfo.Digest.String() == "" {
|
||||
if inputInfo.Size == -1 || inputInfo.Digest == "" {
|
||||
logrus.Debugf("docker tarfile: input with unknown size, streaming to disk first ...")
|
||||
streamCopy, err := ioutil.TempFile(tmpdir.TemporaryDirectoryForBigFiles(d.sysCtx), "docker-tarfile-blob")
|
||||
if err != nil {
|
||||
|
@ -104,10 +105,9 @@ func (d *Destination) PutBlob(ctx context.Context, stream io.Reader, inputInfo t
|
|||
defer os.Remove(streamCopy.Name())
|
||||
defer streamCopy.Close()
|
||||
|
||||
digester := digest.Canonical.Digester()
|
||||
tee := io.TeeReader(stream, digester.Hash())
|
||||
digester, stream2 := putblobdigest.DigestIfUnknown(stream, inputInfo)
|
||||
// TODO: This can take quite some time, and should ideally be cancellable using ctx.Done().
|
||||
size, err := io.Copy(streamCopy, tee)
|
||||
size, err := io.Copy(streamCopy, stream2)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
}
|
||||
|
@ -116,9 +116,7 @@ func (d *Destination) PutBlob(ctx context.Context, stream io.Reader, inputInfo t
|
|||
return types.BlobInfo{}, err
|
||||
}
|
||||
inputInfo.Size = size // inputInfo is a struct, so we are only modifying our copy.
|
||||
if inputInfo.Digest == "" {
|
||||
inputInfo.Digest = digester.Digest()
|
||||
}
|
||||
inputInfo.Digest = digester.Digest()
|
||||
stream = streamCopy
|
||||
logrus.Debugf("... streaming done")
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package keyctl
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
// Package keyctl is a Go interface to linux kernel keyrings (keyctl interface)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package keyctl
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package keyctl
|
||||
|
|
57
vendor/github.com/containers/image/v5/internal/putblobdigest/put_blob_digest.go
generated
vendored
Normal file
57
vendor/github.com/containers/image/v5/internal/putblobdigest/put_blob_digest.go
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
package putblobdigest
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/opencontainers/go-digest"
|
||||
)
|
||||
|
||||
// Digester computes a digest of the provided stream, if not known yet.
|
||||
type Digester struct {
|
||||
knownDigest digest.Digest // Or ""
|
||||
digester digest.Digester // Or nil
|
||||
}
|
||||
|
||||
// newDigester initiates computation of a digest.Canonical digest of stream,
|
||||
// if !validDigest; otherwise it just records knownDigest to be returned later.
|
||||
// The caller MUST use the returned stream instead of the original value.
|
||||
func newDigester(stream io.Reader, knownDigest digest.Digest, validDigest bool) (Digester, io.Reader) {
|
||||
if validDigest {
|
||||
return Digester{knownDigest: knownDigest}, stream
|
||||
} else {
|
||||
res := Digester{
|
||||
digester: digest.Canonical.Digester(),
|
||||
}
|
||||
stream = io.TeeReader(stream, res.digester.Hash())
|
||||
return res, stream
|
||||
}
|
||||
}
|
||||
|
||||
// DigestIfUnknown initiates computation of a digest.Canonical digest of stream,
|
||||
// if no digest is supplied in the provided blobInfo; otherwise blobInfo.Digest will
|
||||
// be used (accepting any algorithm).
|
||||
// The caller MUST use the returned stream instead of the original value.
|
||||
func DigestIfUnknown(stream io.Reader, blobInfo types.BlobInfo) (Digester, io.Reader) {
|
||||
d := blobInfo.Digest
|
||||
return newDigester(stream, d, d != "")
|
||||
}
|
||||
|
||||
// DigestIfCanonicalUnknown initiates computation of a digest.Canonical digest of stream,
|
||||
// if a digest.Canonical digest is not supplied in the provided blobInfo;
|
||||
// otherwise blobInfo.Digest will be used.
|
||||
// The caller MUST use the returned stream instead of the original value.
|
||||
func DigestIfCanonicalUnknown(stream io.Reader, blobInfo types.BlobInfo) (Digester, io.Reader) {
|
||||
d := blobInfo.Digest
|
||||
return newDigester(stream, d, d != "" && d.Algorithm() == digest.Canonical)
|
||||
}
|
||||
|
||||
// Digest() returns a digest value possibly computed by Digester.
|
||||
// This must be called only after all of the stream returned by a Digester constructor
|
||||
// has been successfully read.
|
||||
func (d Digester) Digest() digest.Digest {
|
||||
if d.digester != nil {
|
||||
return d.digester.Digest()
|
||||
}
|
||||
return d.knownDigest
|
||||
}
|
|
@ -70,6 +70,7 @@ type ImageSourceChunk struct {
|
|||
// This API is experimental and can be changed without bumping the major version number.
|
||||
type ImageSourceSeekable interface {
|
||||
// GetBlobAt returns a stream for the specified blob.
|
||||
// The specified chunks must be not overlapping and sorted by their offset.
|
||||
GetBlobAt(context.Context, publicTypes.BlobInfo, []ImageSourceChunk) (chan io.ReadCloser, chan error, error)
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ func (d *ociArchiveImageDestination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result.
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// inputInfo.MediaType describes the blob format, if known.
|
||||
// May update cache.
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/containers/image/v5/internal/putblobdigest"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/image/v5/types"
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
|
@ -115,7 +116,7 @@ func (d *ociImageDestination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result.
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// inputInfo.MediaType describes the blob format, if known.
|
||||
// May update cache.
|
||||
|
@ -138,17 +139,15 @@ func (d *ociImageDestination) PutBlob(ctx context.Context, stream io.Reader, inp
|
|||
}
|
||||
}()
|
||||
|
||||
digester := digest.Canonical.Digester()
|
||||
tee := io.TeeReader(stream, digester.Hash())
|
||||
|
||||
digester, stream := putblobdigest.DigestIfCanonicalUnknown(stream, inputInfo)
|
||||
// TODO: This can take quite some time, and should ideally be cancellable using ctx.Done().
|
||||
size, err := io.Copy(blobFile, tee)
|
||||
size, err := io.Copy(blobFile, stream)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
}
|
||||
computedDigest := digester.Digest()
|
||||
blobDigest := digester.Digest()
|
||||
if inputInfo.Size != -1 && size != inputInfo.Size {
|
||||
return types.BlobInfo{}, errors.Errorf("Size mismatch when copying %s, expected %d, got %d", computedDigest, inputInfo.Size, size)
|
||||
return types.BlobInfo{}, errors.Errorf("Size mismatch when copying %s, expected %d, got %d", blobDigest, inputInfo.Size, size)
|
||||
}
|
||||
if err := blobFile.Sync(); err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
|
@ -164,7 +163,7 @@ func (d *ociImageDestination) PutBlob(ctx context.Context, stream io.Reader, inp
|
|||
}
|
||||
}
|
||||
|
||||
blobPath, err := d.ref.blobPath(computedDigest, d.sharedBlobDir)
|
||||
blobPath, err := d.ref.blobPath(blobDigest, d.sharedBlobDir)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
}
|
||||
|
@ -179,7 +178,7 @@ func (d *ociImageDestination) PutBlob(ctx context.Context, stream io.Reader, inp
|
|||
return types.BlobInfo{}, err
|
||||
}
|
||||
succeeded = true
|
||||
return types.BlobInfo{Digest: computedDigest, Size: size}, nil
|
||||
return types.BlobInfo{Digest: blobDigest, Size: size}, nil
|
||||
}
|
||||
|
||||
// TryReusingBlob checks whether the transport already contains, or can efficiently reuse, a blob, and if so, applies it to the current destination
|
||||
|
|
|
@ -279,7 +279,7 @@ func getUserIdentificationPartialConfig(configAuthInfo clientcmdAuthInfo) (*rest
|
|||
}
|
||||
|
||||
// ConfirmUsable is a modified copy of k8s.io/kubernetes/pkg/client/unversioned/clientcmd.DirectClientConfig.ConfirmUsable.
|
||||
// ConfirmUsable looks a particular context and determines if that particular part of the config is useable. There might still be errors in the config,
|
||||
// ConfirmUsable looks a particular context and determines if that particular part of the config is usable. There might still be errors in the config,
|
||||
// but no errors in the sections requested or referenced. It does not return early so that it can find as many errors as possible.
|
||||
func (config *directClientConfig) ConfirmUsable() error {
|
||||
var validationErrors []error
|
||||
|
|
|
@ -395,7 +395,7 @@ func (d *openshiftImageDestination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result (with all data filled in).
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// May update cache.
|
||||
// WARNING: The contents of stream are being verified on the fly. Until stream.Read() returns io.EOF, the contents of the data SHOULD NOT be available
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build containers_image_ostree
|
||||
// +build containers_image_ostree
|
||||
|
||||
package ostree
|
||||
|
@ -20,6 +21,7 @@ import (
|
|||
"time"
|
||||
"unsafe"
|
||||
|
||||
"github.com/containers/image/v5/internal/putblobdigest"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
|
@ -138,7 +140,7 @@ func (d *ostreeImageDestination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result.
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// inputInfo.MediaType describes the blob format, if known.
|
||||
// May update cache.
|
||||
|
@ -158,25 +160,23 @@ func (d *ostreeImageDestination) PutBlob(ctx context.Context, stream io.Reader,
|
|||
}
|
||||
defer blobFile.Close()
|
||||
|
||||
digester := digest.Canonical.Digester()
|
||||
tee := io.TeeReader(stream, digester.Hash())
|
||||
|
||||
digester, stream := putblobdigest.DigestIfCanonicalUnknown(stream, inputInfo)
|
||||
// TODO: This can take quite some time, and should ideally be cancellable using ctx.Done().
|
||||
size, err := io.Copy(blobFile, tee)
|
||||
size, err := io.Copy(blobFile, stream)
|
||||
if err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
}
|
||||
computedDigest := digester.Digest()
|
||||
blobDigest := digester.Digest()
|
||||
if inputInfo.Size != -1 && size != inputInfo.Size {
|
||||
return types.BlobInfo{}, errors.Errorf("Size mismatch when copying %s, expected %d, got %d", computedDigest, inputInfo.Size, size)
|
||||
return types.BlobInfo{}, errors.Errorf("Size mismatch when copying %s, expected %d, got %d", blobDigest, inputInfo.Size, size)
|
||||
}
|
||||
if err := blobFile.Sync(); err != nil {
|
||||
return types.BlobInfo{}, err
|
||||
}
|
||||
|
||||
hash := computedDigest.Hex()
|
||||
d.blobs[hash] = &blobToImport{Size: size, Digest: computedDigest, BlobPath: blobPath}
|
||||
return types.BlobInfo{Digest: computedDigest, Size: size}, nil
|
||||
hash := blobDigest.Hex()
|
||||
d.blobs[hash] = &blobToImport{Size: size, Digest: blobDigest, BlobPath: blobPath}
|
||||
return types.BlobInfo{Digest: blobDigest, Size: size}, nil
|
||||
}
|
||||
|
||||
func fixFiles(selinuxHnd *C.struct_selabel_handle, root string, dir string, usermode bool) error {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build containers_image_ostree
|
||||
// +build containers_image_ostree
|
||||
|
||||
package ostree
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build containers_image_ostree
|
||||
// +build containers_image_ostree
|
||||
|
||||
package ostree
|
||||
|
|
|
@ -478,7 +478,7 @@ func listAuthsFromCredHelper(credHelper string) (map[string]string, error) {
|
|||
return helperclient.List(p)
|
||||
}
|
||||
|
||||
// getPathToAuth gets the path of the auth.json file used for reading and writting credentials
|
||||
// getPathToAuth gets the path of the auth.json file used for reading and writing credentials
|
||||
// returns the path, and a bool specifies whether the file is in legacy format
|
||||
func getPathToAuth(sys *types.SystemContext) (string, bool, error) {
|
||||
return getPathToAuthWithOS(sys, runtime.GOOS)
|
||||
|
@ -601,10 +601,18 @@ func getAuthFromCredHelper(credHelper, registry string) (types.DockerAuthConfig,
|
|||
if err != nil {
|
||||
return types.DockerAuthConfig{}, err
|
||||
}
|
||||
return types.DockerAuthConfig{
|
||||
Username: creds.Username,
|
||||
Password: creds.Secret,
|
||||
}, nil
|
||||
|
||||
switch creds.Username {
|
||||
case "<token>":
|
||||
return types.DockerAuthConfig{
|
||||
IdentityToken: creds.Secret,
|
||||
}, nil
|
||||
default:
|
||||
return types.DockerAuthConfig{
|
||||
Username: creds.Username,
|
||||
Password: creds.Secret,
|
||||
}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func setAuthToCredHelper(credHelper, registry, username, password string) error {
|
||||
|
|
|
@ -10,7 +10,7 @@ import (
|
|||
)
|
||||
|
||||
// NOTE: none of the functions here are currently used. If we ever want to
|
||||
// reenable keyring support, we should introduce a similar built-in credential
|
||||
// re-enable keyring support, we should introduce a similar built-in credential
|
||||
// helpers as for `sysregistriesv2.AuthenticationFileHelper`.
|
||||
|
||||
const keyDescribePrefix = "container-registry-login:" //nolint:deadcode,unused
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !linux && (!386 || !amd64)
|
||||
// +build !linux
|
||||
// +build !386 !amd64
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !containers_image_openpgp
|
||||
// +build !containers_image_openpgp
|
||||
|
||||
package signature
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build containers_image_openpgp
|
||||
// +build containers_image_openpgp
|
||||
|
||||
package signature
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !containers_image_storage_stub
|
||||
// +build !containers_image_storage_stub
|
||||
|
||||
package storage
|
||||
|
@ -17,13 +18,14 @@ import (
|
|||
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/image"
|
||||
"github.com/containers/image/v5/internal/putblobdigest"
|
||||
"github.com/containers/image/v5/internal/tmpdir"
|
||||
internalTypes "github.com/containers/image/v5/internal/types"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/image/v5/pkg/blobinfocache/none"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/containers/storage"
|
||||
"github.com/containers/storage/drivers"
|
||||
graphdriver "github.com/containers/storage/drivers"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/chunked"
|
||||
"github.com/containers/storage/pkg/ioutils"
|
||||
|
@ -34,8 +36,10 @@ import (
|
|||
)
|
||||
|
||||
var (
|
||||
// ErrBlobDigestMismatch is returned when PutBlob() is given a blob
|
||||
// ErrBlobDigestMismatch could potentially be returned when PutBlob() is given a blob
|
||||
// with a digest-based name that doesn't match its contents.
|
||||
// Deprecated: PutBlob() doesn't do this any more (it just accepts the caller’s value),
|
||||
// and there is no known user of this error.
|
||||
ErrBlobDigestMismatch = stderrors.New("blob digest mismatch")
|
||||
// ErrBlobSizeMismatch is returned when PutBlob() is given a blob
|
||||
// with an expected size that doesn't match the reader.
|
||||
|
@ -468,7 +472,7 @@ func (s *storageImageDestination) HasThreadSafePutBlob() bool {
|
|||
}
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result.
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// inputInfo.MediaType describes the blob format, if known.
|
||||
// May update cache.
|
||||
|
@ -482,26 +486,28 @@ func (s *storageImageDestination) PutBlob(ctx context.Context, stream io.Reader,
|
|||
Digest: "",
|
||||
Size: -1,
|
||||
}
|
||||
// Set up to digest the blob and count its size while saving it to a file.
|
||||
hasher := digest.Canonical.Digester()
|
||||
if blobinfo.Digest.Validate() == nil {
|
||||
if a := blobinfo.Digest.Algorithm(); a.Available() {
|
||||
hasher = a.Digester()
|
||||
if blobinfo.Digest != "" {
|
||||
if err := blobinfo.Digest.Validate(); err != nil {
|
||||
return errorBlobInfo, fmt.Errorf("invalid digest %#v: %w", blobinfo.Digest.String(), err)
|
||||
}
|
||||
}
|
||||
diffID := digest.Canonical.Digester()
|
||||
|
||||
// Set up to digest the blob if necessary, and count its size while saving it to a file.
|
||||
filename := s.computeNextBlobCacheFile()
|
||||
file, err := os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_WRONLY|os.O_EXCL, 0600)
|
||||
if err != nil {
|
||||
return errorBlobInfo, errors.Wrapf(err, "creating temporary file %q", filename)
|
||||
}
|
||||
defer file.Close()
|
||||
counter := ioutils.NewWriteCounter(hasher.Hash())
|
||||
reader := io.TeeReader(io.TeeReader(stream, counter), file)
|
||||
decompressed, err := archive.DecompressStream(reader)
|
||||
counter := ioutils.NewWriteCounter(file)
|
||||
stream = io.TeeReader(stream, counter)
|
||||
digester, stream := putblobdigest.DigestIfUnknown(stream, blobinfo)
|
||||
decompressed, err := archive.DecompressStream(stream)
|
||||
if err != nil {
|
||||
return errorBlobInfo, errors.Wrap(err, "setting up to decompress blob")
|
||||
}
|
||||
|
||||
diffID := digest.Canonical.Digester()
|
||||
// Copy the data to the file.
|
||||
// TODO: This can take quite some time, and should ideally be cancellable using ctx.Done().
|
||||
_, err = io.Copy(diffID.Hash(), decompressed)
|
||||
|
@ -509,28 +515,25 @@ func (s *storageImageDestination) PutBlob(ctx context.Context, stream io.Reader,
|
|||
if err != nil {
|
||||
return errorBlobInfo, errors.Wrapf(err, "storing blob to file %q", filename)
|
||||
}
|
||||
// Ensure that any information that we were given about the blob is correct.
|
||||
if blobinfo.Digest.Validate() == nil && blobinfo.Digest != hasher.Digest() {
|
||||
return errorBlobInfo, errors.WithStack(ErrBlobDigestMismatch)
|
||||
}
|
||||
if blobinfo.Size >= 0 && blobinfo.Size != counter.Count {
|
||||
return errorBlobInfo, errors.WithStack(ErrBlobSizeMismatch)
|
||||
}
|
||||
// Record information about the blob.
|
||||
s.lock.Lock()
|
||||
s.blobDiffIDs[hasher.Digest()] = diffID.Digest()
|
||||
s.fileSizes[hasher.Digest()] = counter.Count
|
||||
s.filenames[hasher.Digest()] = filename
|
||||
s.lock.Unlock()
|
||||
blobDigest := blobinfo.Digest
|
||||
if blobDigest.Validate() != nil {
|
||||
blobDigest = hasher.Digest()
|
||||
}
|
||||
|
||||
// Determine blob properties, and fail if information that we were given about the blob
|
||||
// is known to be incorrect.
|
||||
blobDigest := digester.Digest()
|
||||
blobSize := blobinfo.Size
|
||||
if blobSize < 0 {
|
||||
blobSize = counter.Count
|
||||
} else if blobinfo.Size != counter.Count {
|
||||
return errorBlobInfo, errors.WithStack(ErrBlobSizeMismatch)
|
||||
}
|
||||
// This is safe because we have just computed both values ourselves.
|
||||
|
||||
// Record information about the blob.
|
||||
s.lock.Lock()
|
||||
s.blobDiffIDs[blobDigest] = diffID.Digest()
|
||||
s.fileSizes[blobDigest] = counter.Count
|
||||
s.filenames[blobDigest] = filename
|
||||
s.lock.Unlock()
|
||||
// This is safe because we have just computed diffID, and blobDigest was either computed
|
||||
// by us, or validated by the caller (usually copy.digestingReader).
|
||||
cache.RecordDigestUncompressedPair(blobDigest, diffID.Digest())
|
||||
return types.BlobInfo{
|
||||
Digest: blobDigest,
|
||||
|
@ -813,7 +816,7 @@ func (s *storageImageDestination) queueOrCommit(ctx context.Context, blob types.
|
|||
//
|
||||
// The conceptual benefit of this design is that caller can continue
|
||||
// pulling layers after an early return. At any given time, only one
|
||||
// caller is the "worker" routine comitting layers. All other routines
|
||||
// caller is the "worker" routine committing layers. All other routines
|
||||
// can continue pulling and queuing in layers.
|
||||
s.lock.Lock()
|
||||
s.indexToPulledLayerInfo[index] = &manifest.LayerInfo{
|
||||
|
@ -852,7 +855,7 @@ func (s *storageImageDestination) queueOrCommit(ctx context.Context, blob types.
|
|||
// must guarantee that, at any given time, at most one goroutine may execute
|
||||
// `commitLayer()`.
|
||||
func (s *storageImageDestination) commitLayer(ctx context.Context, blob manifest.LayerInfo, index int) error {
|
||||
// Already commited? Return early.
|
||||
// Already committed? Return early.
|
||||
if _, alreadyCommitted := s.indexToStorageID[index]; alreadyCommitted {
|
||||
return nil
|
||||
}
|
||||
|
@ -1004,7 +1007,10 @@ func (s *storageImageDestination) commitLayer(ctx context.Context, blob manifest
|
|||
defer file.Close()
|
||||
// Build the new layer using the diff, regardless of where it came from.
|
||||
// TODO: This can take quite some time, and should ideally be cancellable using ctx.Done().
|
||||
layer, _, err := s.imageRef.transport.store.PutLayer(id, lastLayer, nil, "", false, nil, file)
|
||||
layer, _, err := s.imageRef.transport.store.PutLayer(id, lastLayer, nil, "", false, &storage.LayerOptions{
|
||||
OriginalDigest: blob.Digest,
|
||||
UncompressedDigest: diffID,
|
||||
}, file)
|
||||
if err != nil && errors.Cause(err) != storage.ErrDuplicateID {
|
||||
return errors.Wrapf(err, "adding layer with blob %q", blob.Digest)
|
||||
}
|
||||
|
@ -1065,7 +1071,7 @@ func (s *storageImageDestination) Commit(ctx context.Context, unparsedToplevel t
|
|||
if len(layerBlobs) > 0 { // Can happen when using caches
|
||||
prev := s.indexToStorageID[len(layerBlobs)-1]
|
||||
if prev == nil {
|
||||
return errors.Errorf("Internal error: StorageImageDestination.Commit(): previous layer %d hasn't been commited (lastLayer == nil)", len(layerBlobs)-1)
|
||||
return errors.Errorf("Internal error: StorageImageDestination.Commit(): previous layer %d hasn't been committed (lastLayer == nil)", len(layerBlobs)-1)
|
||||
}
|
||||
lastLayer = *prev
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !containers_image_storage_stub
|
||||
// +build !containers_image_storage_stub
|
||||
|
||||
package storage
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !containers_image_storage_stub
|
||||
// +build !containers_image_storage_stub
|
||||
|
||||
package storage
|
||||
|
|
1
vendor/github.com/containers/image/v5/transports/alltransports/docker_daemon.go
generated
vendored
1
vendor/github.com/containers/image/v5/transports/alltransports/docker_daemon.go
generated
vendored
|
@ -1,3 +1,4 @@
|
|||
//go:build !containers_image_docker_daemon_stub
|
||||
// +build !containers_image_docker_daemon_stub
|
||||
|
||||
package alltransports
|
||||
|
|
1
vendor/github.com/containers/image/v5/transports/alltransports/docker_daemon_stub.go
generated
vendored
1
vendor/github.com/containers/image/v5/transports/alltransports/docker_daemon_stub.go
generated
vendored
|
@ -1,3 +1,4 @@
|
|||
//go:build containers_image_docker_daemon_stub
|
||||
// +build containers_image_docker_daemon_stub
|
||||
|
||||
package alltransports
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build containers_image_ostree && linux
|
||||
// +build containers_image_ostree,linux
|
||||
|
||||
package alltransports
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !containers_image_ostree || !linux
|
||||
// +build !containers_image_ostree !linux
|
||||
|
||||
package alltransports
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !containers_image_storage_stub
|
||||
// +build !containers_image_storage_stub
|
||||
|
||||
package alltransports
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build containers_image_storage_stub
|
||||
// +build containers_image_storage_stub
|
||||
|
||||
package alltransports
|
||||
|
|
|
@ -299,7 +299,7 @@ type ImageDestination interface {
|
|||
IgnoresEmbeddedDockerReference() bool
|
||||
|
||||
// PutBlob writes contents of stream and returns data representing the result.
|
||||
// inputInfo.Digest can be optionally provided if known; it is not mandatory for the implementation to verify it.
|
||||
// inputInfo.Digest can be optionally provided if known; if provided, and stream is read to the end without error, the digest MUST match the stream contents.
|
||||
// inputInfo.Size is the expected length of stream, if known.
|
||||
// inputInfo.MediaType describes the blob format, if known.
|
||||
// May update cache.
|
||||
|
|
|
@ -6,9 +6,9 @@ const (
|
|||
// VersionMajor is for an API incompatible changes
|
||||
VersionMajor = 5
|
||||
// VersionMinor is for functionality in a backwards-compatible manner
|
||||
VersionMinor = 15
|
||||
VersionMinor = 16
|
||||
// VersionPatch is for backwards-compatible bug fixes
|
||||
VersionPatch = 2
|
||||
VersionPatch = 0
|
||||
|
||||
// VersionDev indicates development branch. Releases will be empty string.
|
||||
VersionDev = ""
|
||||
|
|
|
@ -1 +1 @@
|
|||
1.34.1
|
||||
1.35.0
|
||||
|
|
|
@ -16,7 +16,7 @@ require (
|
|||
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible
|
||||
github.com/moby/sys/mountinfo v0.4.1
|
||||
github.com/opencontainers/go-digest v1.0.0
|
||||
github.com/opencontainers/runc v1.0.1
|
||||
github.com/opencontainers/runc v1.0.2
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417
|
||||
github.com/opencontainers/selinux v1.8.4
|
||||
github.com/pkg/errors v0.9.1
|
||||
|
@ -25,8 +25,8 @@ require (
|
|||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635
|
||||
github.com/tchap/go-patricia v2.3.0+incompatible
|
||||
github.com/ulikunitz/xz v0.5.10
|
||||
github.com/vbatts/tar-split v0.11.1
|
||||
github.com/vbatts/tar-split v0.11.2
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110
|
||||
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887
|
||||
golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55
|
||||
gotest.tools v2.2.0+incompatible
|
||||
)
|
||||
|
|
|
@ -469,8 +469,8 @@ github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59P
|
|||
github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||
github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
|
||||
github.com/opencontainers/runc v1.0.1 h1:G18PGckGdAm3yVQRWDVQ1rLSLntiniKJ0cNRT2Tm5gs=
|
||||
github.com/opencontainers/runc v1.0.1/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
||||
github.com/opencontainers/runc v1.0.2 h1:opHZMaswlyxz1OuGpBE53Dwe4/xF7EZTY0A2L/FpCOg=
|
||||
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
||||
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
|
@ -585,8 +585,9 @@ github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/
|
|||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/vbatts/tar-split v0.11.1 h1:0Odu65rhcZ3JZaPHxl7tCI3V/C/Q9Zf82UFravl02dE=
|
||||
github.com/vbatts/tar-split v0.11.1/go.mod h1:LEuURwDEiWjRjwu46yU3KVGuUdVv/dcnpcEPSzR8z6g=
|
||||
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME=
|
||||
github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI=
|
||||
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
|
||||
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
|
||||
github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
|
||||
|
@ -770,8 +771,9 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887 h1:dXfMednGJh/SUUFjTLsWJz3P+TQt9qnR11GgeI3vWKs=
|
||||
golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55 h1:rw6UNGRMfarCepjI8qOepea/SXwIBVfTKjztZ5gBbq4=
|
||||
golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
|
|
@ -803,7 +803,7 @@ func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLab
|
|||
r.driver.Remove(id)
|
||||
return nil, -1, err
|
||||
}
|
||||
size, err = r.ApplyDiff(layer.ID, diff)
|
||||
size, err = r.applyDiffWithOptions(layer.ID, moreOptions, diff)
|
||||
if err != nil {
|
||||
if r.Delete(layer.ID) != nil {
|
||||
// Either a driver error or an error saving.
|
||||
|
@ -1505,6 +1505,10 @@ func (r *layerStore) DiffSize(from, to string) (size int64, err error) {
|
|||
}
|
||||
|
||||
func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error) {
|
||||
return r.applyDiffWithOptions(to, nil, diff)
|
||||
}
|
||||
|
||||
func (r *layerStore) applyDiffWithOptions(to string, layerOptions *LayerOptions, diff io.Reader) (size int64, err error) {
|
||||
if !r.IsReadWrite() {
|
||||
return -1, errors.Wrapf(ErrStoreIsReadOnly, "not allowed to modify layer contents at %q", r.layerspath())
|
||||
}
|
||||
|
@ -1519,11 +1523,33 @@ func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error
|
|||
if err != nil && err != io.EOF {
|
||||
return -1, err
|
||||
}
|
||||
|
||||
compression := archive.DetectCompression(header[:n])
|
||||
compressedDigest := digest.Canonical.Digester()
|
||||
compressedCounter := ioutils.NewWriteCounter(compressedDigest.Hash())
|
||||
defragmented := io.TeeReader(io.MultiReader(bytes.NewBuffer(header[:n]), diff), compressedCounter)
|
||||
defragmented := io.MultiReader(bytes.NewBuffer(header[:n]), diff)
|
||||
|
||||
// Decide if we need to compute digests
|
||||
var compressedDigest, uncompressedDigest digest.Digest // = ""
|
||||
var compressedDigester, uncompressedDigester digest.Digester // = nil
|
||||
if layerOptions != nil && layerOptions.OriginalDigest != "" &&
|
||||
layerOptions.OriginalDigest.Algorithm() == digest.Canonical {
|
||||
compressedDigest = layerOptions.OriginalDigest
|
||||
} else {
|
||||
compressedDigester = digest.Canonical.Digester()
|
||||
}
|
||||
if layerOptions != nil && layerOptions.UncompressedDigest != "" &&
|
||||
layerOptions.UncompressedDigest.Algorithm() == digest.Canonical {
|
||||
uncompressedDigest = layerOptions.UncompressedDigest
|
||||
} else {
|
||||
uncompressedDigester = digest.Canonical.Digester()
|
||||
}
|
||||
|
||||
var compressedWriter io.Writer
|
||||
if compressedDigester != nil {
|
||||
compressedWriter = compressedDigester.Hash()
|
||||
} else {
|
||||
compressedWriter = ioutil.Discard
|
||||
}
|
||||
compressedCounter := ioutils.NewWriteCounter(compressedWriter)
|
||||
defragmented = io.TeeReader(defragmented, compressedCounter)
|
||||
|
||||
tsdata := bytes.Buffer{}
|
||||
compressor, err := pgzip.NewWriterLevel(&tsdata, pgzip.BestSpeed)
|
||||
|
@ -1539,8 +1565,6 @@ func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error
|
|||
return -1, err
|
||||
}
|
||||
defer uncompressed.Close()
|
||||
uncompressedDigest := digest.Canonical.Digester()
|
||||
uncompressedCounter := ioutils.NewWriteCounter(uncompressedDigest.Hash())
|
||||
uidLog := make(map[uint32]struct{})
|
||||
gidLog := make(map[uint32]struct{})
|
||||
idLogger, err := tarlog.NewLogger(func(h *tar.Header) {
|
||||
|
@ -1553,7 +1577,12 @@ func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error
|
|||
return -1, err
|
||||
}
|
||||
defer idLogger.Close()
|
||||
payload, err := asm.NewInputTarStream(io.TeeReader(uncompressed, io.MultiWriter(uncompressedCounter, idLogger)), metadata, storage.NewDiscardFilePutter())
|
||||
uncompressedCounter := ioutils.NewWriteCounter(idLogger)
|
||||
uncompressedWriter := (io.Writer)(uncompressedCounter)
|
||||
if uncompressedDigester != nil {
|
||||
uncompressedWriter = io.MultiWriter(uncompressedWriter, uncompressedDigester.Hash())
|
||||
}
|
||||
payload, err := asm.NewInputTarStream(io.TeeReader(uncompressed, uncompressedWriter), metadata, storage.NewDiscardFilePutter())
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
|
@ -1575,6 +1604,12 @@ func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error
|
|||
return -1, err
|
||||
}
|
||||
}
|
||||
if compressedDigester != nil {
|
||||
compressedDigest = compressedDigester.Digest()
|
||||
}
|
||||
if uncompressedDigester != nil {
|
||||
uncompressedDigest = uncompressedDigester.Digest()
|
||||
}
|
||||
|
||||
updateDigestMap := func(m *map[digest.Digest][]string, oldvalue, newvalue digest.Digest, id string) {
|
||||
var newList []string
|
||||
|
@ -1594,11 +1629,11 @@ func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error
|
|||
(*m)[newvalue] = append((*m)[newvalue], id)
|
||||
}
|
||||
}
|
||||
updateDigestMap(&r.bycompressedsum, layer.CompressedDigest, compressedDigest.Digest(), layer.ID)
|
||||
layer.CompressedDigest = compressedDigest.Digest()
|
||||
updateDigestMap(&r.bycompressedsum, layer.CompressedDigest, compressedDigest, layer.ID)
|
||||
layer.CompressedDigest = compressedDigest
|
||||
layer.CompressedSize = compressedCounter.Count
|
||||
updateDigestMap(&r.byuncompressedsum, layer.UncompressedDigest, uncompressedDigest.Digest(), layer.ID)
|
||||
layer.UncompressedDigest = uncompressedDigest.Digest()
|
||||
updateDigestMap(&r.byuncompressedsum, layer.UncompressedDigest, uncompressedDigest, layer.ID)
|
||||
layer.UncompressedDigest = uncompressedDigest
|
||||
layer.UncompressedSize = uncompressedCounter.Count
|
||||
layer.CompressionType = compression
|
||||
layer.UIDs = make([]uint32, 0, len(uidLog))
|
||||
|
|
|
@ -32,7 +32,7 @@ import (
|
|||
|
||||
const (
|
||||
maxNumberMissingChunks = 1024
|
||||
newFileFlags = (unix.O_CREAT | unix.O_TRUNC | unix.O_WRONLY | unix.O_EXCL)
|
||||
newFileFlags = (unix.O_CREAT | unix.O_TRUNC | unix.O_EXCL | unix.O_WRONLY)
|
||||
containersOverrideXattr = "user.containers.override_stat"
|
||||
bigDataKey = "zstd-chunked-manifest"
|
||||
)
|
||||
|
@ -54,7 +54,8 @@ func timeToTimespec(time time.Time) (ts unix.Timespec) {
|
|||
return unix.NsecToTimespec(time.UnixNano())
|
||||
}
|
||||
|
||||
func copyFileContent(src, destFile, root string, dirfd int, missingDirsMode, mode os.FileMode) (*os.File, int64, error) {
|
||||
func copyFileContent(srcFd int, destFile string, dirfd int, mode os.FileMode, useHardLinks bool) (*os.File, int64, error) {
|
||||
src := fmt.Sprintf("/proc/self/fd/%d", srcFd)
|
||||
st, err := os.Stat(src)
|
||||
if err != nil {
|
||||
return nil, -1, err
|
||||
|
@ -62,8 +63,32 @@ func copyFileContent(src, destFile, root string, dirfd int, missingDirsMode, mod
|
|||
|
||||
copyWithFileRange, copyWithFileClone := true, true
|
||||
|
||||
if useHardLinks {
|
||||
destDirPath := filepath.Dir(destFile)
|
||||
destBase := filepath.Base(destFile)
|
||||
destDir, err := openFileUnderRoot(destDirPath, dirfd, 0, mode)
|
||||
if err == nil {
|
||||
defer destDir.Close()
|
||||
|
||||
doLink := func() error {
|
||||
return unix.Linkat(srcFd, "", int(destDir.Fd()), destBase, unix.AT_EMPTY_PATH)
|
||||
}
|
||||
|
||||
err := doLink()
|
||||
|
||||
// if the destination exists, unlink it first and try again
|
||||
if err != nil && os.IsExist(err) {
|
||||
unix.Unlinkat(int(destDir.Fd()), destBase, 0)
|
||||
err = doLink()
|
||||
}
|
||||
if err == nil {
|
||||
return nil, st.Size(), nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the destination file already exists, we shouldn't blow it away
|
||||
dstFile, err := openFileUnderRoot(destFile, root, dirfd, newFileFlags, mode)
|
||||
dstFile, err := openFileUnderRoot(destFile, dirfd, newFileFlags, mode)
|
||||
if err != nil {
|
||||
return nil, -1, err
|
||||
}
|
||||
|
@ -148,7 +173,39 @@ func makeZstdChunkedDiffer(ctx context.Context, store storage.Store, blobSize in
|
|||
}, nil
|
||||
}
|
||||
|
||||
func findFileInOtherLayers(file internal.ZstdFileMetadata, root string, dirfd int, layersMetadata map[string]map[string]*internal.ZstdFileMetadata, layersTarget map[string]string, missingDirsMode os.FileMode) (*os.File, int64, error) {
|
||||
// copyFileFromOtherLayer copies a file from another layer
|
||||
// file is the file to look for.
|
||||
// source is the path to the source layer checkout.
|
||||
// otherFile contains the metadata for the file.
|
||||
// dirfd is an open file descriptor to the destination root directory.
|
||||
// useHardLinks defines whether the deduplication can be performed using hard links.
|
||||
func copyFileFromOtherLayer(file internal.ZstdFileMetadata, source string, otherFile *internal.ZstdFileMetadata, dirfd int, useHardLinks bool) (bool, *os.File, int64, error) {
|
||||
srcDirfd, err := unix.Open(source, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return false, nil, 0, err
|
||||
}
|
||||
defer unix.Close(srcDirfd)
|
||||
|
||||
srcFile, err := openFileUnderRoot(otherFile.Name, srcDirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return false, nil, 0, err
|
||||
}
|
||||
defer srcFile.Close()
|
||||
|
||||
dstFile, written, err := copyFileContent(int(srcFile.Fd()), file.Name, dirfd, 0, useHardLinks)
|
||||
if err != nil {
|
||||
return false, nil, 0, err
|
||||
}
|
||||
return true, dstFile, written, err
|
||||
}
|
||||
|
||||
// findFileInOtherLayers finds the specified file in other layers.
|
||||
// file is the file to look for.
|
||||
// dirfd is an open file descriptor to the checkout root directory.
|
||||
// layersMetadata contains the metadata for each layer in the storage.
|
||||
// layersTarget maps each layer to its checkout on disk.
|
||||
// useHardLinks defines whether the deduplication can be performed using hard links.
|
||||
func findFileInOtherLayers(file internal.ZstdFileMetadata, dirfd int, layersMetadata map[string]map[string]*internal.ZstdFileMetadata, layersTarget map[string]string, useHardLinks bool) (bool, *os.File, int64, error) {
|
||||
// this is ugly, needs to be indexed
|
||||
for layerID, checksums := range layersMetadata {
|
||||
m, found := checksums[file.Digest]
|
||||
|
@ -161,27 +218,12 @@ func findFileInOtherLayers(file internal.ZstdFileMetadata, root string, dirfd in
|
|||
continue
|
||||
}
|
||||
|
||||
srcDirfd, err := unix.Open(source, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
continue
|
||||
found, dstFile, written, err := copyFileFromOtherLayer(file, source, m, dirfd, useHardLinks)
|
||||
if found && err == nil {
|
||||
return found, dstFile, written, err
|
||||
}
|
||||
defer unix.Close(srcDirfd)
|
||||
|
||||
srcFile, err := openFileUnderRoot(m.Name, source, srcDirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
defer srcFile.Close()
|
||||
|
||||
srcPath := fmt.Sprintf("/proc/self/fd/%d", srcFile.Fd())
|
||||
|
||||
dstFile, written, err := copyFileContent(srcPath, file.Name, root, dirfd, missingDirsMode, 0)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
return dstFile, written, nil
|
||||
}
|
||||
return nil, 0, nil
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
|
||||
func getFileDigest(f *os.File) (digest.Digest, error) {
|
||||
|
@ -195,25 +237,28 @@ func getFileDigest(f *os.File) (digest.Digest, error) {
|
|||
// findFileOnTheHost checks whether the requested file already exist on the host and copies the file content from there if possible.
|
||||
// It is currently implemented to look only at the file with the same path. Ideally it can detect the same content also at different
|
||||
// paths.
|
||||
func findFileOnTheHost(file internal.ZstdFileMetadata, root string, dirfd int, missingDirsMode os.FileMode) (*os.File, int64, error) {
|
||||
// file is the file to look for.
|
||||
// dirfd is an open fd to the destination checkout.
|
||||
// useHardLinks defines whether the deduplication can be performed using hard links.
|
||||
func findFileOnTheHost(file internal.ZstdFileMetadata, dirfd int, useHardLinks bool) (bool, *os.File, int64, error) {
|
||||
sourceFile := filepath.Clean(filepath.Join("/", file.Name))
|
||||
if !strings.HasPrefix(sourceFile, "/usr/") {
|
||||
// limit host deduplication to files under /usr.
|
||||
return nil, 0, nil
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
|
||||
st, err := os.Stat(sourceFile)
|
||||
if err != nil || !st.Mode().IsRegular() {
|
||||
return nil, 0, nil
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
|
||||
if st.Size() != file.Size {
|
||||
return nil, 0, nil
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
|
||||
fd, err := unix.Open(sourceFile, unix.O_RDONLY|unix.O_NONBLOCK, 0)
|
||||
if err != nil {
|
||||
return nil, 0, nil
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
|
||||
f := os.NewFile(uintptr(fd), "fd")
|
||||
|
@ -221,35 +266,38 @@ func findFileOnTheHost(file internal.ZstdFileMetadata, root string, dirfd int, m
|
|||
|
||||
manifestChecksum, err := digest.Parse(file.Digest)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
return false, nil, 0, err
|
||||
}
|
||||
|
||||
checksum, err := getFileDigest(f)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
return false, nil, 0, err
|
||||
}
|
||||
|
||||
if checksum != manifestChecksum {
|
||||
return nil, 0, nil
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
|
||||
dstFile, written, err := copyFileContent(fmt.Sprintf("/proc/self/fd/%d", fd), file.Name, root, dirfd, missingDirsMode, 0)
|
||||
dstFile, written, err := copyFileContent(fd, file.Name, dirfd, 0, useHardLinks)
|
||||
if err != nil {
|
||||
return nil, 0, nil
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
|
||||
// calculate the checksum again to make sure the file wasn't modified while it was copied
|
||||
if _, err := f.Seek(0, 0); err != nil {
|
||||
return nil, 0, err
|
||||
dstFile.Close()
|
||||
return false, nil, 0, err
|
||||
}
|
||||
checksum, err = getFileDigest(f)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
dstFile.Close()
|
||||
return false, nil, 0, err
|
||||
}
|
||||
if checksum != manifestChecksum {
|
||||
return nil, 0, nil
|
||||
dstFile.Close()
|
||||
return false, nil, 0, nil
|
||||
}
|
||||
return dstFile, written, nil
|
||||
return true, dstFile, written, nil
|
||||
}
|
||||
|
||||
func maybeDoIDRemap(manifest []internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
|
@ -292,6 +340,7 @@ type missingChunk struct {
|
|||
Files []missingFile
|
||||
}
|
||||
|
||||
// setFileAttrs sets the file attributes for file given metadata
|
||||
func setFileAttrs(file *os.File, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
if file == nil || file.Fd() < 0 {
|
||||
return errors.Errorf("invalid file")
|
||||
|
@ -333,7 +382,12 @@ func setFileAttrs(file *os.File, mode os.FileMode, metadata *internal.ZstdFileMe
|
|||
return nil
|
||||
}
|
||||
|
||||
func openFileUnderRoot(name, root string, dirfd int, flags uint64, mode os.FileMode) (*os.File, error) {
|
||||
// openFileUnderRoot safely opens a file under the specified root directory using openat2
|
||||
// name is the path to open relative to dirfd.
|
||||
// dirfd is an open file descriptor to the target checkout directory.
|
||||
// flags are the flags top pass to the open syscall.
|
||||
// mode specifies the mode to use for newly created files.
|
||||
func openFileUnderRoot(name string, dirfd int, flags uint64, mode os.FileMode) (*os.File, error) {
|
||||
how := unix.OpenHow{
|
||||
Flags: flags,
|
||||
Mode: uint64(mode & 07777),
|
||||
|
@ -347,8 +401,8 @@ func openFileUnderRoot(name, root string, dirfd int, flags uint64, mode os.FileM
|
|||
return os.NewFile(uintptr(fd), name), nil
|
||||
}
|
||||
|
||||
func createFileFromZstdStream(dest string, dirfd int, reader io.Reader, missingDirsMode, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) (err error) {
|
||||
file, err := openFileUnderRoot(metadata.Name, dest, dirfd, newFileFlags, 0)
|
||||
func createFileFromZstdStream(dest string, dirfd int, reader io.Reader, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) (err error) {
|
||||
file, err := openFileUnderRoot(metadata.Name, dirfd, newFileFlags, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -381,7 +435,7 @@ func createFileFromZstdStream(dest string, dirfd int, reader io.Reader, missingD
|
|||
return setFileAttrs(file, mode, metadata, options)
|
||||
}
|
||||
|
||||
func storeMissingFiles(streams chan io.ReadCloser, errs chan error, dest string, dirfd int, missingChunks []missingChunk, missingDirsMode os.FileMode, options *archive.TarOptions) error {
|
||||
func storeMissingFiles(streams chan io.ReadCloser, errs chan error, dest string, dirfd int, missingChunks []missingChunk, options *archive.TarOptions) error {
|
||||
for mc := 0; ; mc++ {
|
||||
var part io.ReadCloser
|
||||
select {
|
||||
|
@ -412,7 +466,7 @@ func storeMissingFiles(streams chan io.ReadCloser, errs chan error, dest string,
|
|||
|
||||
limitReader := io.LimitReader(part, mf.Length())
|
||||
|
||||
if err := createFileFromZstdStream(dest, dirfd, limitReader, missingDirsMode, os.FileMode(mf.File.Mode), mf.File, options); err != nil {
|
||||
if err := createFileFromZstdStream(dest, dirfd, limitReader, os.FileMode(mf.File.Mode), mf.File, options); err != nil {
|
||||
part.Close()
|
||||
return err
|
||||
}
|
||||
|
@ -462,7 +516,7 @@ func mergeMissingChunks(missingChunks []missingChunk, target int) []missingChunk
|
|||
return newMissingChunks
|
||||
}
|
||||
|
||||
func retrieveMissingFiles(input *chunkedZstdDiffer, dest string, dirfd int, missingChunks []missingChunk, missingDirsMode os.FileMode, options *archive.TarOptions) error {
|
||||
func retrieveMissingFiles(input *chunkedZstdDiffer, dest string, dirfd int, missingChunks []missingChunk, options *archive.TarOptions) error {
|
||||
var chunksToRequest []ImageSourceChunk
|
||||
for _, c := range missingChunks {
|
||||
chunksToRequest = append(chunksToRequest, c.RawChunk)
|
||||
|
@ -492,19 +546,19 @@ func retrieveMissingFiles(input *chunkedZstdDiffer, dest string, dirfd int, miss
|
|||
return err
|
||||
}
|
||||
|
||||
if err := storeMissingFiles(streams, errs, dest, dirfd, missingChunks, missingDirsMode, options); err != nil {
|
||||
if err := storeMissingFiles(streams, errs, dest, dirfd, missingChunks, options); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func safeMkdir(target string, dirfd int, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
func safeMkdir(dirfd int, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
parent := filepath.Dir(metadata.Name)
|
||||
base := filepath.Base(metadata.Name)
|
||||
|
||||
parentFd := dirfd
|
||||
if parent != "." {
|
||||
parentFile, err := openFileUnderRoot(parent, target, dirfd, unix.O_DIRECTORY|unix.O_PATH|unix.O_RDONLY, 0)
|
||||
parentFile, err := openFileUnderRoot(parent, dirfd, unix.O_DIRECTORY|unix.O_PATH|unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -518,7 +572,7 @@ func safeMkdir(target string, dirfd int, mode os.FileMode, metadata *internal.Zs
|
|||
}
|
||||
}
|
||||
|
||||
file, err := openFileUnderRoot(metadata.Name, target, dirfd, unix.O_RDONLY, 0)
|
||||
file, err := openFileUnderRoot(metadata.Name, dirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -527,8 +581,8 @@ func safeMkdir(target string, dirfd int, mode os.FileMode, metadata *internal.Zs
|
|||
return setFileAttrs(file, mode, metadata, options)
|
||||
}
|
||||
|
||||
func safeLink(target string, dirfd int, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
sourceFile, err := openFileUnderRoot(metadata.Linkname, target, dirfd, unix.O_RDONLY, 0)
|
||||
func safeLink(dirfd int, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
sourceFile, err := openFileUnderRoot(metadata.Linkname, dirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -537,7 +591,7 @@ func safeLink(target string, dirfd int, mode os.FileMode, metadata *internal.Zst
|
|||
destDir, destBase := filepath.Dir(metadata.Name), filepath.Base(metadata.Name)
|
||||
destDirFd := dirfd
|
||||
if destDir != "." {
|
||||
f, err := openFileUnderRoot(destDir, target, dirfd, unix.O_RDONLY, 0)
|
||||
f, err := openFileUnderRoot(destDir, dirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -550,7 +604,7 @@ func safeLink(target string, dirfd int, mode os.FileMode, metadata *internal.Zst
|
|||
return err
|
||||
}
|
||||
|
||||
newFile, err := openFileUnderRoot(metadata.Name, target, dirfd, unix.O_WRONLY, 0)
|
||||
newFile, err := openFileUnderRoot(metadata.Name, dirfd, unix.O_WRONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -559,11 +613,11 @@ func safeLink(target string, dirfd int, mode os.FileMode, metadata *internal.Zst
|
|||
return setFileAttrs(newFile, mode, metadata, options)
|
||||
}
|
||||
|
||||
func safeSymlink(target string, dirfd int, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
func safeSymlink(dirfd int, mode os.FileMode, metadata *internal.ZstdFileMetadata, options *archive.TarOptions) error {
|
||||
destDir, destBase := filepath.Dir(metadata.Name), filepath.Base(metadata.Name)
|
||||
destDirFd := dirfd
|
||||
if destDir != "." {
|
||||
f, err := openFileUnderRoot(destDir, target, dirfd, unix.O_RDONLY, 0)
|
||||
f, err := openFileUnderRoot(destDir, dirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -580,7 +634,7 @@ type whiteoutHandler struct {
|
|||
}
|
||||
|
||||
func (d whiteoutHandler) Setxattr(path, name string, value []byte) error {
|
||||
file, err := openFileUnderRoot(path, d.Root, d.Dirfd, unix.O_RDONLY, 0)
|
||||
file, err := openFileUnderRoot(path, d.Dirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -595,7 +649,7 @@ func (d whiteoutHandler) Mknod(path string, mode uint32, dev int) error {
|
|||
|
||||
dirfd := d.Dirfd
|
||||
if dir != "" {
|
||||
dir, err := openFileUnderRoot(dir, d.Root, d.Dirfd, unix.O_RDONLY, 0)
|
||||
dir, err := openFileUnderRoot(dir, d.Dirfd, unix.O_RDONLY, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -615,7 +669,7 @@ func checkChownErr(err error, name string, uid, gid int) error {
|
|||
}
|
||||
|
||||
func (d whiteoutHandler) Chown(path string, uid, gid int) error {
|
||||
file, err := openFileUnderRoot(path, d.Root, d.Dirfd, unix.O_PATH, 0)
|
||||
file, err := openFileUnderRoot(path, d.Dirfd, unix.O_PATH, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -640,6 +694,13 @@ type hardLinkToCreate struct {
|
|||
metadata *internal.ZstdFileMetadata
|
||||
}
|
||||
|
||||
func parseBooleanPullOption(storeOpts *storage.StoreOptions, name string, def bool) bool {
|
||||
if value, ok := storeOpts.PullOptions[name]; ok {
|
||||
return strings.ToLower(value) == "true"
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions) (graphdriver.DriverWithDifferOutput, error) {
|
||||
bigData := map[string][]byte{
|
||||
bigDataKey: d.manifest,
|
||||
|
@ -654,11 +715,16 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
return output, err
|
||||
}
|
||||
|
||||
enableHostDedup := false
|
||||
if value := storeOpts.PullOptions["enable_host_deduplication"]; strings.ToLower(value) == "true" {
|
||||
enableHostDedup = true
|
||||
if !parseBooleanPullOption(&storeOpts, "enable_partial_images", false) {
|
||||
return output, errors.New("enable_partial_images not configured")
|
||||
}
|
||||
|
||||
enableHostDedup := parseBooleanPullOption(&storeOpts, "enable_host_deduplication", false)
|
||||
|
||||
// When the hard links deduplication is used, file attributes are ignored because setting them
|
||||
// modifies the source file as well.
|
||||
useHardLinks := parseBooleanPullOption(&storeOpts, "use_hard_links", false)
|
||||
|
||||
// Generate the manifest
|
||||
var toc internal.ZstdTOC
|
||||
if err := json.Unmarshal(d.manifest, &toc); err != nil {
|
||||
|
@ -704,11 +770,6 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
|
||||
otherLayersCache := prepareOtherLayersCache(d.layersMetadata)
|
||||
|
||||
missingDirsMode := os.FileMode(0700)
|
||||
if options.ForceMask != nil {
|
||||
missingDirsMode = *options.ForceMask
|
||||
}
|
||||
|
||||
// hardlinks can point to missing files. So create them after all files
|
||||
// are retrieved
|
||||
var hardLinks []hardLinkToCreate
|
||||
|
@ -758,7 +819,7 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
if r.Size == 0 {
|
||||
// Used to have a scope for cleanup.
|
||||
createEmptyFile := func() error {
|
||||
file, err := openFileUnderRoot(r.Name, dest, dirfd, newFileFlags, 0)
|
||||
file, err := openFileUnderRoot(r.Name, dirfd, newFileFlags, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -775,7 +836,7 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
}
|
||||
|
||||
case tar.TypeDir:
|
||||
if err := safeMkdir(dest, dirfd, mode, &r, options); err != nil {
|
||||
if err := safeMkdir(dirfd, mode, &r, options); err != nil {
|
||||
return output, err
|
||||
}
|
||||
continue
|
||||
|
@ -794,7 +855,7 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
continue
|
||||
|
||||
case tar.TypeSymlink:
|
||||
if err := safeSymlink(dest, dirfd, mode, &r, options); err != nil {
|
||||
if err := safeSymlink(dirfd, mode, &r, options); err != nil {
|
||||
return output, err
|
||||
}
|
||||
continue
|
||||
|
@ -809,7 +870,7 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
|
||||
totalChunksSize += r.Size
|
||||
|
||||
dstFile, _, err := findFileInOtherLayers(r, dest, dirfd, otherLayersCache, d.layersTarget, missingDirsMode)
|
||||
found, dstFile, _, err := findFileInOtherLayers(r, dirfd, otherLayersCache, d.layersTarget, useHardLinks)
|
||||
if err != nil {
|
||||
return output, err
|
||||
}
|
||||
|
@ -819,11 +880,13 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
return output, err
|
||||
}
|
||||
dstFile.Close()
|
||||
}
|
||||
if found {
|
||||
continue
|
||||
}
|
||||
|
||||
if enableHostDedup {
|
||||
dstFile, _, err = findFileOnTheHost(r, dest, dirfd, missingDirsMode)
|
||||
found, dstFile, _, err = findFileOnTheHost(r, dirfd, useHardLinks)
|
||||
if err != nil {
|
||||
return output, err
|
||||
}
|
||||
|
@ -833,6 +896,8 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
return output, err
|
||||
}
|
||||
dstFile.Close()
|
||||
}
|
||||
if found {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
@ -857,13 +922,13 @@ func (d *chunkedZstdDiffer) ApplyDiff(dest string, options *archive.TarOptions)
|
|||
// There are some missing files. Prepare a multirange request for the missing chunks.
|
||||
if len(missingChunks) > 0 {
|
||||
missingChunks = mergeMissingChunks(missingChunks, maxNumberMissingChunks)
|
||||
if err := retrieveMissingFiles(d, dest, dirfd, missingChunks, missingDirsMode, options); err != nil {
|
||||
if err := retrieveMissingFiles(d, dest, dirfd, missingChunks, options); err != nil {
|
||||
return output, err
|
||||
}
|
||||
}
|
||||
|
||||
for _, m := range hardLinks {
|
||||
if err := safeLink(m.dest, m.dirfd, m.mode, m.metadata, options); err != nil {
|
||||
if err := safeLink(m.dirfd, m.mode, m.metadata, options); err != nil {
|
||||
return output, err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,25 @@ func (r *readCloserWrapper) Close() error {
|
|||
return r.closer()
|
||||
}
|
||||
|
||||
type readWriteToCloserWrapper struct {
|
||||
io.Reader
|
||||
io.WriterTo
|
||||
closer func() error
|
||||
}
|
||||
|
||||
func (r *readWriteToCloserWrapper) Close() error {
|
||||
return r.closer()
|
||||
}
|
||||
|
||||
// NewReadCloserWrapper returns a new io.ReadCloser.
|
||||
func NewReadCloserWrapper(r io.Reader, closer func() error) io.ReadCloser {
|
||||
if wt, ok := r.(io.WriterTo); ok {
|
||||
return &readWriteToCloserWrapper{
|
||||
Reader: r,
|
||||
WriterTo: wt,
|
||||
closer: closer,
|
||||
}
|
||||
}
|
||||
return &readCloserWrapper{
|
||||
Reader: r,
|
||||
closer: closer,
|
||||
|
|
|
@ -547,6 +547,15 @@ type LayerOptions struct {
|
|||
// initialize this layer. If set, it should be a child of the layer
|
||||
// which we want to use as the parent of the new layer.
|
||||
TemplateLayer string
|
||||
// OriginalDigest specifies a digest of the tarstream (diff), if one is
|
||||
// provided along with these LayerOptions, and reliably known by the caller.
|
||||
// Use the default "" if this fields is not applicable or the value is not known.
|
||||
OriginalDigest digest.Digest
|
||||
// UncompressedDigest specifies a digest of the uncompressed version (“DiffID”)
|
||||
// of the tarstream (diff), if one is provided along with these LayerOptions,
|
||||
// and reliably known by the caller.
|
||||
// Use the default "" if this fields is not applicable or the value is not known.
|
||||
UncompressedDigest digest.Digest
|
||||
}
|
||||
|
||||
// ImageOptions is used for passing options to a Store's CreateImage() method.
|
||||
|
@ -1031,20 +1040,21 @@ func (s *store) PutLayer(id, parent string, names []string, mountLabel string, w
|
|||
gidMap = s.gidMap
|
||||
}
|
||||
}
|
||||
var layerOptions *LayerOptions
|
||||
layerOptions := LayerOptions{
|
||||
OriginalDigest: options.OriginalDigest,
|
||||
UncompressedDigest: options.UncompressedDigest,
|
||||
}
|
||||
if s.canUseShifting(uidMap, gidMap) {
|
||||
layerOptions = &LayerOptions{IDMappingOptions: types.IDMappingOptions{HostUIDMapping: true, HostGIDMapping: true, UIDMap: nil, GIDMap: nil}}
|
||||
layerOptions.IDMappingOptions = types.IDMappingOptions{HostUIDMapping: true, HostGIDMapping: true, UIDMap: nil, GIDMap: nil}
|
||||
} else {
|
||||
layerOptions = &LayerOptions{
|
||||
IDMappingOptions: types.IDMappingOptions{
|
||||
HostUIDMapping: options.HostUIDMapping,
|
||||
HostGIDMapping: options.HostGIDMapping,
|
||||
UIDMap: copyIDMap(uidMap),
|
||||
GIDMap: copyIDMap(gidMap),
|
||||
},
|
||||
layerOptions.IDMappingOptions = types.IDMappingOptions{
|
||||
HostUIDMapping: options.HostUIDMapping,
|
||||
HostGIDMapping: options.HostGIDMapping,
|
||||
UIDMap: copyIDMap(uidMap),
|
||||
GIDMap: copyIDMap(gidMap),
|
||||
}
|
||||
}
|
||||
return rlstore.Put(id, parentLayer, names, mountLabel, nil, layerOptions, writeable, nil, diff)
|
||||
return rlstore.Put(id, parentLayer, names, mountLabel, nil, &layerOptions, writeable, nil, diff)
|
||||
}
|
||||
|
||||
func (s *store) CreateLayer(id, parent string, names []string, mountLabel string, writeable bool, options *LayerOptions) (*Layer, error) {
|
||||
|
|
|
@ -53,4 +53,10 @@ const (
|
|||
|
||||
// AnnotationDescription is the annotation key for the human-readable description of the software packaged in the image.
|
||||
AnnotationDescription = "org.opencontainers.image.description"
|
||||
|
||||
// AnnotationBaseImageDigest is the annotation key for the digest of the image's base image.
|
||||
AnnotationBaseImageDigest = "org.opencontainers.image.base.digest"
|
||||
|
||||
// AnnotationBaseImageName is the annotation key for the image reference of the image's base image.
|
||||
AnnotationBaseImageName = "org.opencontainers.image.base.name"
|
||||
)
|
||||
|
|
|
@ -89,9 +89,20 @@ type Image struct {
|
|||
// Architecture is the CPU architecture which the binaries in this image are built to run on.
|
||||
Architecture string `json:"architecture"`
|
||||
|
||||
// Variant is the variant of the specified CPU architecture which image binaries are intended to run on.
|
||||
Variant string `json:"variant,omitempty"`
|
||||
|
||||
// OS is the name of the operating system which the image is built to run on.
|
||||
OS string `json:"os"`
|
||||
|
||||
// OSVersion is an optional field specifying the operating system
|
||||
// version, for example on Windows `10.0.14393.1066`.
|
||||
OSVersion string `json:"os.version,omitempty"`
|
||||
|
||||
// OSFeatures is an optional field specifying an array of strings,
|
||||
// each listing a required OS feature (for example on Windows `win32k`).
|
||||
OSFeatures []string `json:"os.features,omitempty"`
|
||||
|
||||
// Config defines the execution parameters which should be used as a base when running a container using the image.
|
||||
Config ImageConfig `json:"config,omitempty"`
|
||||
|
||||
|
|
|
@ -92,11 +92,12 @@ func NewDiscardFilePutter() FilePutter {
|
|||
}
|
||||
|
||||
type bitBucketFilePutter struct {
|
||||
buffer [32 * 1024]byte // 32 kB is the buffer size currently used by io.Copy, as of August 2021.
|
||||
}
|
||||
|
||||
func (bbfp *bitBucketFilePutter) Put(name string, r io.Reader) (int64, []byte, error) {
|
||||
c := crc64.New(CRCTable)
|
||||
i, err := io.Copy(c, r)
|
||||
i, err := io.CopyBuffer(c, r, bbfp.buffer[:])
|
||||
return i, c.Sum(nil), err
|
||||
}
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ func main() {
|
|||
// replace ETA decorator with "done" message, OnComplete event
|
||||
decor.OnComplete(
|
||||
// ETA decorator with ewma age of 60
|
||||
decor.EwmaETA(decor.ET_STYLE_GO, 60), "done",
|
||||
decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WCSyncWidth), "done",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
|
@ -20,21 +20,18 @@ type Bar struct {
|
|||
priority int // used by heap
|
||||
index int // used by heap
|
||||
|
||||
extendedLines int
|
||||
toShutdown bool
|
||||
toDrop bool
|
||||
noPop bool
|
||||
hasEwmaDecorators bool
|
||||
operateState chan func(*bState)
|
||||
frameCh chan io.Reader
|
||||
syncTableCh chan [][]chan int
|
||||
completed chan bool
|
||||
frameCh chan *frame
|
||||
|
||||
// cancel is called either by user or on complete event
|
||||
cancel func()
|
||||
// done is closed after cacheState is assigned
|
||||
done chan struct{}
|
||||
// cacheState is populated, right after close(shutdown)
|
||||
// cacheState is populated, right after close(b.done)
|
||||
cacheState *bState
|
||||
|
||||
container *Progress
|
||||
|
@ -77,6 +74,11 @@ type bState struct {
|
|||
debugOut io.Writer
|
||||
}
|
||||
|
||||
type frame struct {
|
||||
reader io.Reader
|
||||
lines int
|
||||
}
|
||||
|
||||
func newBar(container *Progress, bs *bState) *Bar {
|
||||
logPrefix := fmt.Sprintf("%sbar#%02d ", container.dlogger.Prefix(), bs.id)
|
||||
ctx, cancel := context.WithCancel(container.ctx)
|
||||
|
@ -87,9 +89,7 @@ func newBar(container *Progress, bs *bState) *Bar {
|
|||
toDrop: bs.dropOnComplete,
|
||||
noPop: bs.noPop,
|
||||
operateState: make(chan func(*bState)),
|
||||
frameCh: make(chan io.Reader, 1),
|
||||
syncTableCh: make(chan [][]chan int, 1),
|
||||
completed: make(chan bool, 1),
|
||||
frameCh: make(chan *frame, 1),
|
||||
done: make(chan struct{}),
|
||||
cancel: cancel,
|
||||
dlogger: log.New(bs.debugOut, logPrefix, log.Lshortfile),
|
||||
|
@ -145,6 +145,7 @@ func (b *Bar) SetRefill(amount int64) {
|
|||
|
||||
// TraverseDecorators traverses all available decorators and calls cb func on each.
|
||||
func (b *Bar) TraverseDecorators(cb func(decor.Decorator)) {
|
||||
done := make(chan struct{})
|
||||
select {
|
||||
case b.operateState <- func(s *bState) {
|
||||
for _, decorators := range [...][]decor.Decorator{
|
||||
|
@ -155,7 +156,9 @@ func (b *Bar) TraverseDecorators(cb func(decor.Decorator)) {
|
|||
cb(extractBaseDecorator(d))
|
||||
}
|
||||
}
|
||||
close(done)
|
||||
}:
|
||||
<-done
|
||||
case <-b.done:
|
||||
}
|
||||
}
|
||||
|
@ -174,7 +177,7 @@ func (b *Bar) SetTotal(total int64, triggerComplete bool) {
|
|||
if s.triggerComplete && !s.completed {
|
||||
s.current = s.total
|
||||
s.completed = true
|
||||
go b.refreshTillShutdown()
|
||||
go b.forceRefreshIfLastUncompleted()
|
||||
}
|
||||
}:
|
||||
case <-b.done:
|
||||
|
@ -192,7 +195,7 @@ func (b *Bar) SetCurrent(current int64) {
|
|||
if s.triggerComplete && s.current >= s.total {
|
||||
s.current = s.total
|
||||
s.completed = true
|
||||
go b.refreshTillShutdown()
|
||||
go b.forceRefreshIfLastUncompleted()
|
||||
}
|
||||
}:
|
||||
case <-b.done:
|
||||
|
@ -219,7 +222,7 @@ func (b *Bar) IncrInt64(n int64) {
|
|||
if s.triggerComplete && s.current >= s.total {
|
||||
s.current = s.total
|
||||
s.completed = true
|
||||
go b.refreshTillShutdown()
|
||||
go b.forceRefreshIfLastUncompleted()
|
||||
}
|
||||
}:
|
||||
case <-b.done:
|
||||
|
@ -258,32 +261,49 @@ func (b *Bar) DecoratorAverageAdjust(start time.Time) {
|
|||
// priority, i.e. bar will be on top. If you don't need to set priority
|
||||
// dynamically, better use BarPriority option.
|
||||
func (b *Bar) SetPriority(priority int) {
|
||||
select {
|
||||
case <-b.done:
|
||||
default:
|
||||
b.container.setBarPriority(b, priority)
|
||||
}
|
||||
b.container.UpdateBarPriority(b, priority)
|
||||
}
|
||||
|
||||
// Abort interrupts bar's running goroutine. Call this, if you'd like
|
||||
// to stop/remove bar before completion event. It has no effect after
|
||||
// completion event. If drop is true bar will be removed as well.
|
||||
// Abort interrupts bar's running goroutine. Abort won't be engaged
|
||||
// if bar is already in complete state. If drop is true bar will be
|
||||
// removed as well.
|
||||
func (b *Bar) Abort(drop bool) {
|
||||
select {
|
||||
case <-b.done:
|
||||
default:
|
||||
case b.operateState <- func(s *bState) {
|
||||
if s.completed == true {
|
||||
return
|
||||
}
|
||||
if drop {
|
||||
b.container.dropBar(b)
|
||||
b.cancel()
|
||||
return
|
||||
}
|
||||
b.cancel()
|
||||
go func() {
|
||||
var uncompleted int
|
||||
b.container.traverseBars(func(bar *Bar) bool {
|
||||
if b != bar && !bar.Completed() {
|
||||
uncompleted++
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
if uncompleted == 0 {
|
||||
b.container.refreshCh <- time.Now()
|
||||
}
|
||||
b.cancel()
|
||||
}()
|
||||
}:
|
||||
<-b.done
|
||||
case <-b.done:
|
||||
}
|
||||
}
|
||||
|
||||
// Completed reports whether the bar is in completed state.
|
||||
func (b *Bar) Completed() bool {
|
||||
result := make(chan bool)
|
||||
select {
|
||||
case b.operateState <- func(s *bState) { b.completed <- s.completed }:
|
||||
return <-b.completed
|
||||
case b.operateState <- func(s *bState) { result <- s.completed }:
|
||||
return <-result
|
||||
case <-b.done:
|
||||
return true
|
||||
}
|
||||
|
@ -296,12 +316,12 @@ func (b *Bar) serve(ctx context.Context, s *bState) {
|
|||
case op := <-b.operateState:
|
||||
op(s)
|
||||
case <-ctx.Done():
|
||||
b.cacheState = s
|
||||
close(b.done)
|
||||
// Notifying decorators about shutdown event
|
||||
for _, sl := range s.shutdownListeners {
|
||||
sl.Shutdown()
|
||||
}
|
||||
b.cacheState = s
|
||||
close(b.done)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -319,17 +339,15 @@ func (b *Bar) render(tw int) {
|
|||
b.toShutdown = !b.toShutdown
|
||||
b.recoveredPanic = p
|
||||
}
|
||||
frame, lines := s.extender(nil, s.reqWidth, stat)
|
||||
b.extendedLines = lines
|
||||
b.frameCh <- frame
|
||||
reader, lines := s.extender(nil, s.reqWidth, stat)
|
||||
b.frameCh <- &frame{reader, lines + 1}
|
||||
b.dlogger.Println(p)
|
||||
}
|
||||
s.completeFlushed = s.completed
|
||||
}()
|
||||
frame, lines := s.extender(s.draw(stat), s.reqWidth, stat)
|
||||
b.extendedLines = lines
|
||||
reader, lines := s.extender(s.draw(stat), s.reqWidth, stat)
|
||||
b.toShutdown = s.completed && !s.completeFlushed
|
||||
b.frameCh <- frame
|
||||
b.frameCh <- &frame{reader, lines + 1}
|
||||
}:
|
||||
case <-b.done:
|
||||
s := b.cacheState
|
||||
|
@ -338,9 +356,8 @@ func (b *Bar) render(tw int) {
|
|||
if b.recoveredPanic == nil {
|
||||
r = s.draw(stat)
|
||||
}
|
||||
frame, lines := s.extender(r, s.reqWidth, stat)
|
||||
b.extendedLines = lines
|
||||
b.frameCh <- frame
|
||||
reader, lines := s.extender(r, s.reqWidth, stat)
|
||||
b.frameCh <- &frame{reader, lines + 1}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,31 +376,42 @@ func (b *Bar) subscribeDecorators() {
|
|||
shutdownListeners = append(shutdownListeners, d)
|
||||
}
|
||||
})
|
||||
b.hasEwmaDecorators = len(ewmaDecorators) != 0
|
||||
select {
|
||||
case b.operateState <- func(s *bState) {
|
||||
s.averageDecorators = averageDecorators
|
||||
s.ewmaDecorators = ewmaDecorators
|
||||
s.shutdownListeners = shutdownListeners
|
||||
}:
|
||||
b.hasEwmaDecorators = len(ewmaDecorators) != 0
|
||||
case <-b.done:
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bar) refreshTillShutdown() {
|
||||
for {
|
||||
select {
|
||||
case b.container.refreshCh <- time.Now():
|
||||
case <-b.done:
|
||||
return
|
||||
func (b *Bar) forceRefreshIfLastUncompleted() {
|
||||
var uncompleted int
|
||||
b.container.traverseBars(func(bar *Bar) bool {
|
||||
if b != bar && !bar.Completed() {
|
||||
uncompleted++
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
if uncompleted == 0 {
|
||||
for {
|
||||
select {
|
||||
case b.container.refreshCh <- time.Now():
|
||||
case <-b.done:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bar) wSyncTable() [][]chan int {
|
||||
result := make(chan [][]chan int)
|
||||
select {
|
||||
case b.operateState <- func(s *bState) { b.syncTableCh <- s.wSyncTable() }:
|
||||
return <-b.syncTableCh
|
||||
case b.operateState <- func(s *bState) { result <- s.wSyncTable() }:
|
||||
return <-result
|
||||
case <-b.done:
|
||||
return b.cacheState.wSyncTable()
|
||||
}
|
||||
|
|
|
@ -26,15 +26,17 @@ type BarStyleComposer interface {
|
|||
Filler(string) BarStyleComposer
|
||||
Refiller(string) BarStyleComposer
|
||||
Padding(string) BarStyleComposer
|
||||
Tip(...string) BarStyleComposer
|
||||
TipOnComplete(string) BarStyleComposer
|
||||
Tip(frames ...string) BarStyleComposer
|
||||
Reverse() BarStyleComposer
|
||||
}
|
||||
|
||||
type bFiller struct {
|
||||
components [components]*component
|
||||
tip struct {
|
||||
count uint
|
||||
frames []*component
|
||||
count uint
|
||||
onComplete *component
|
||||
frames []*component
|
||||
}
|
||||
flush func(dst io.Writer, filling, padding [][]byte)
|
||||
}
|
||||
|
@ -45,25 +47,26 @@ type component struct {
|
|||
}
|
||||
|
||||
type barStyle struct {
|
||||
lbound string
|
||||
rbound string
|
||||
filler string
|
||||
refiller string
|
||||
padding string
|
||||
tip []string
|
||||
rev bool
|
||||
lbound string
|
||||
rbound string
|
||||
filler string
|
||||
refiller string
|
||||
padding string
|
||||
tipOnComplete string
|
||||
tipFrames []string
|
||||
rev bool
|
||||
}
|
||||
|
||||
// BarStyle constructs default bar style which can be altered via
|
||||
// BarStyleComposer interface.
|
||||
func BarStyle() BarStyleComposer {
|
||||
return &barStyle{
|
||||
lbound: "[",
|
||||
rbound: "]",
|
||||
filler: "=",
|
||||
refiller: "+",
|
||||
padding: "-",
|
||||
tip: []string{">"},
|
||||
lbound: "[",
|
||||
rbound: "]",
|
||||
filler: "=",
|
||||
refiller: "+",
|
||||
padding: "-",
|
||||
tipFrames: []string{">"},
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -92,9 +95,14 @@ func (s *barStyle) Padding(padding string) BarStyleComposer {
|
|||
return s
|
||||
}
|
||||
|
||||
func (s *barStyle) Tip(tip ...string) BarStyleComposer {
|
||||
if len(tip) != 0 {
|
||||
s.tip = append(s.tip[:0], tip...)
|
||||
func (s *barStyle) TipOnComplete(tip string) BarStyleComposer {
|
||||
s.tipOnComplete = tip
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *barStyle) Tip(frames ...string) BarStyleComposer {
|
||||
if len(frames) != 0 {
|
||||
s.tipFrames = append(s.tipFrames[:0], frames...)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
@ -133,8 +141,12 @@ func (s *barStyle) Build() BarFiller {
|
|||
width: runewidth.StringWidth(stripansi.Strip(s.padding)),
|
||||
bytes: []byte(s.padding),
|
||||
}
|
||||
bf.tip.frames = make([]*component, len(s.tip))
|
||||
for i, t := range s.tip {
|
||||
bf.tip.onComplete = &component{
|
||||
width: runewidth.StringWidth(stripansi.Strip(s.tipOnComplete)),
|
||||
bytes: []byte(s.tipOnComplete),
|
||||
}
|
||||
bf.tip.frames = make([]*component, len(s.tipFrames))
|
||||
for i, t := range s.tipFrames {
|
||||
bf.tip.frames[i] = &component{
|
||||
width: runewidth.StringWidth(stripansi.Strip(t)),
|
||||
bytes: []byte(t),
|
||||
|
@ -146,64 +158,82 @@ func (s *barStyle) Build() BarFiller {
|
|||
func (s *bFiller) Fill(w io.Writer, width int, stat decor.Statistics) {
|
||||
width = internal.CheckRequestedWidth(width, stat.AvailableWidth)
|
||||
brackets := s.components[iLbound].width + s.components[iRbound].width
|
||||
if width < brackets {
|
||||
return
|
||||
}
|
||||
// don't count brackets as progress
|
||||
width -= brackets
|
||||
if width < 0 {
|
||||
return
|
||||
}
|
||||
|
||||
w.Write(s.components[iLbound].bytes)
|
||||
defer w.Write(s.components[iRbound].bytes)
|
||||
|
||||
curWidth := int(internal.PercentageRound(stat.Total, stat.Current, width))
|
||||
refWidth, filled := 0, curWidth
|
||||
filling := make([][]byte, 0, curWidth)
|
||||
if width == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
if curWidth > 0 && curWidth != width {
|
||||
tipFrame := s.tip.frames[s.tip.count%uint(len(s.tip.frames))]
|
||||
filling = append(filling, tipFrame.bytes)
|
||||
curWidth -= tipFrame.width
|
||||
var filling [][]byte
|
||||
var padding [][]byte
|
||||
var tip *component
|
||||
var filled int
|
||||
var refWidth int
|
||||
curWidth := int(internal.PercentageRound(stat.Total, stat.Current, uint(width)))
|
||||
|
||||
if stat.Current >= stat.Total {
|
||||
tip = s.tip.onComplete
|
||||
} else {
|
||||
tip = s.tip.frames[s.tip.count%uint(len(s.tip.frames))]
|
||||
}
|
||||
|
||||
if curWidth > 0 {
|
||||
filling = append(filling, tip.bytes)
|
||||
filled += tip.width
|
||||
s.tip.count++
|
||||
}
|
||||
|
||||
if stat.Refill > 0 && curWidth > 0 {
|
||||
refWidth = int(internal.PercentageRound(stat.Total, int64(stat.Refill), width))
|
||||
if refWidth > curWidth {
|
||||
refWidth = curWidth
|
||||
}
|
||||
if stat.Refill > 0 {
|
||||
refWidth = int(internal.PercentageRound(stat.Total, stat.Refill, uint(width)))
|
||||
curWidth -= refWidth
|
||||
refWidth += curWidth
|
||||
}
|
||||
|
||||
for curWidth > 0 && curWidth >= s.components[iFiller].width {
|
||||
filling = append(filling, s.components[iFiller].bytes)
|
||||
curWidth -= s.components[iFiller].width
|
||||
if s.components[iFiller].width == 0 {
|
||||
break
|
||||
for filled < curWidth {
|
||||
if curWidth-filled >= s.components[iFiller].width {
|
||||
filling = append(filling, s.components[iFiller].bytes)
|
||||
if s.components[iFiller].width == 0 {
|
||||
break
|
||||
}
|
||||
filled += s.components[iFiller].width
|
||||
} else {
|
||||
filling = append(filling, []byte("…"))
|
||||
filled++
|
||||
}
|
||||
}
|
||||
|
||||
for refWidth > 0 && refWidth >= s.components[iRefiller].width {
|
||||
filling = append(filling, s.components[iRefiller].bytes)
|
||||
refWidth -= s.components[iRefiller].width
|
||||
if s.components[iRefiller].width == 0 {
|
||||
break
|
||||
for filled < refWidth {
|
||||
if refWidth-filled >= s.components[iRefiller].width {
|
||||
filling = append(filling, s.components[iRefiller].bytes)
|
||||
if s.components[iRefiller].width == 0 {
|
||||
break
|
||||
}
|
||||
filled += s.components[iRefiller].width
|
||||
} else {
|
||||
filling = append(filling, []byte("…"))
|
||||
filled++
|
||||
}
|
||||
}
|
||||
|
||||
filled -= curWidth + refWidth
|
||||
padWidth := width - filled
|
||||
padding := make([][]byte, 0, padWidth)
|
||||
for padWidth > 0 && padWidth >= s.components[iPadding].width {
|
||||
padding = append(padding, s.components[iPadding].bytes)
|
||||
padWidth -= s.components[iPadding].width
|
||||
if s.components[iPadding].width == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for padWidth > 0 {
|
||||
padding = append(padding, []byte("…"))
|
||||
padWidth--
|
||||
if padWidth >= s.components[iPadding].width {
|
||||
padding = append(padding, s.components[iPadding].bytes)
|
||||
if s.components[iPadding].width == 0 {
|
||||
break
|
||||
}
|
||||
padWidth -= s.components[iPadding].width
|
||||
} else {
|
||||
padding = append(padding, []byte("…"))
|
||||
padWidth--
|
||||
}
|
||||
}
|
||||
|
||||
s.flush(w, filling, padding)
|
||||
|
|
|
@ -62,7 +62,11 @@ func WithRenderDelay(ch <-chan struct{}) ContainerOption {
|
|||
// have been rendered.
|
||||
func WithShutdownNotifier(ch chan struct{}) ContainerOption {
|
||||
return func(s *pState) {
|
||||
s.shutdownNotifier = ch
|
||||
select {
|
||||
case <-ch:
|
||||
default:
|
||||
s.shutdownNotifier = ch
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ const (
|
|||
type Writer struct {
|
||||
out io.Writer
|
||||
buf bytes.Buffer
|
||||
lineCount int
|
||||
lines int
|
||||
fd int
|
||||
isTerminal bool
|
||||
}
|
||||
|
@ -38,15 +38,15 @@ func New(out io.Writer) *Writer {
|
|||
}
|
||||
|
||||
// Flush flushes the underlying buffer.
|
||||
func (w *Writer) Flush(lineCount int) (err error) {
|
||||
func (w *Writer) Flush(lines int) (err error) {
|
||||
// some terminals interpret 'cursor up 0' as 'cursor up 1'
|
||||
if w.lineCount > 0 {
|
||||
if w.lines > 0 {
|
||||
err = w.clearLines()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
w.lineCount = lineCount
|
||||
w.lines = lines
|
||||
_, err = w.buf.WriteTo(w.out)
|
||||
return
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ func (w *Writer) GetWidth() (int, error) {
|
|||
|
||||
func (w *Writer) ansiCuuAndEd() (err error) {
|
||||
buf := make([]byte, 8)
|
||||
buf = strconv.AppendInt(buf[:copy(buf, escOpen)], int64(w.lineCount), 10)
|
||||
buf = strconv.AppendInt(buf[:copy(buf, escOpen)], int64(w.lines), 10)
|
||||
_, err = w.out.Write(append(buf, cuuAndEd...))
|
||||
return
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ func (w *Writer) clearLines() error {
|
|||
return err
|
||||
}
|
||||
|
||||
info.CursorPosition.Y -= int16(w.lineCount)
|
||||
info.CursorPosition.Y -= int16(w.lines)
|
||||
if info.CursorPosition.Y < 0 {
|
||||
info.CursorPosition.Y = 0
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ func (w *Writer) clearLines() error {
|
|||
X: info.Window.Left,
|
||||
Y: info.CursorPosition.Y,
|
||||
}
|
||||
count := uint32(info.Size.X) * uint32(w.lineCount)
|
||||
count := uint32(info.Size.X) * uint32(w.lines)
|
||||
_, _, _ = procFillConsoleOutputCharacter.Call(
|
||||
uintptr(w.fd),
|
||||
uintptr(' '),
|
||||
|
|
|
@ -4,7 +4,7 @@ require (
|
|||
github.com/VividCortex/ewma v1.2.0
|
||||
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
|
||||
github.com/mattn/go-runewidth v0.0.13
|
||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22
|
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e
|
||||
)
|
||||
|
||||
go 1.14
|
||||
|
|
|
@ -6,5 +6,5 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4
|
|||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22 h1:RqytpXGR1iVNX7psjB3ff8y7sNFinVFvkx1c8SjBkio=
|
||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e h1:WUoyKPm6nCo1BnNUvPGnFG3T5DUVem42yDJZZ4CNxMA=
|
||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
|
|
|
@ -3,7 +3,7 @@ package internal
|
|||
import "math"
|
||||
|
||||
// Percentage is a helper function, to calculate percentage.
|
||||
func Percentage(total, current int64, width int) float64 {
|
||||
func Percentage(total, current int64, width uint) float64 {
|
||||
if total <= 0 {
|
||||
return 0
|
||||
}
|
||||
|
@ -14,6 +14,6 @@ func Percentage(total, current int64, width int) float64 {
|
|||
}
|
||||
|
||||
// PercentageRound same as Percentage but with math.Round.
|
||||
func PercentageRound(total, current int64, width int) float64 {
|
||||
func PercentageRound(total, current int64, width uint) float64 {
|
||||
return math.Round(Percentage(total, current, width))
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ import (
|
|||
|
||||
const (
|
||||
// default RefreshRate
|
||||
prr = 120 * time.Millisecond
|
||||
prr = 150 * time.Millisecond
|
||||
)
|
||||
|
||||
// Progress represents a container that renders one or more progress
|
||||
|
@ -157,7 +157,25 @@ func (p *Progress) dropBar(b *Bar) {
|
|||
}
|
||||
}
|
||||
|
||||
func (p *Progress) setBarPriority(b *Bar, priority int) {
|
||||
func (p *Progress) traverseBars(cb func(b *Bar) bool) {
|
||||
done := make(chan struct{})
|
||||
select {
|
||||
case p.operateState <- func(s *pState) {
|
||||
for i := 0; i < s.bHeap.Len(); i++ {
|
||||
bar := s.bHeap[i]
|
||||
if !cb(bar) {
|
||||
break
|
||||
}
|
||||
}
|
||||
close(done)
|
||||
}:
|
||||
<-done
|
||||
case <-p.done:
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateBarPriority same as *Bar.SetPriority(int).
|
||||
func (p *Progress) UpdateBarPriority(b *Bar, priority int) {
|
||||
select {
|
||||
case p.operateState <- func(s *pState) {
|
||||
if b.index < 0 {
|
||||
|
@ -170,14 +188,9 @@ func (p *Progress) setBarPriority(b *Bar, priority int) {
|
|||
}
|
||||
}
|
||||
|
||||
// UpdateBarPriority same as *Bar.SetPriority(int).
|
||||
func (p *Progress) UpdateBarPriority(b *Bar, priority int) {
|
||||
p.setBarPriority(b, priority)
|
||||
}
|
||||
|
||||
// BarCount returns bars count.
|
||||
func (p *Progress) BarCount() int {
|
||||
result := make(chan int, 1)
|
||||
result := make(chan int)
|
||||
select {
|
||||
case p.operateState <- func(s *pState) { result <- s.bHeap.Len() }:
|
||||
return <-result
|
||||
|
@ -222,7 +235,7 @@ func (p *Progress) serve(s *pState, cw *cwriter.Writer) {
|
|||
p.dlogger.Println(err)
|
||||
}
|
||||
case <-s.shutdownNotifier:
|
||||
if s.heapUpdated {
|
||||
for s.heapUpdated {
|
||||
if err := s.render(cw); err != nil {
|
||||
p.dlogger.Println(err)
|
||||
}
|
||||
|
@ -291,11 +304,12 @@ func (s *pState) render(cw *cwriter.Writer) error {
|
|||
}
|
||||
|
||||
func (s *pState) flush(cw *cwriter.Writer) error {
|
||||
var lineCount int
|
||||
bm := make(map[*Bar]struct{}, s.bHeap.Len())
|
||||
var totalLines int
|
||||
bm := make(map[*Bar]int, s.bHeap.Len())
|
||||
for s.bHeap.Len() > 0 {
|
||||
b := heap.Pop(&s.bHeap).(*Bar)
|
||||
cw.ReadFrom(<-b.frameCh)
|
||||
frame := <-b.frameCh
|
||||
cw.ReadFrom(frame.reader)
|
||||
if b.toShutdown {
|
||||
if b.recoveredPanic != nil {
|
||||
s.barShutdownQueue = append(s.barShutdownQueue, b)
|
||||
|
@ -308,8 +322,8 @@ func (s *pState) flush(cw *cwriter.Writer) error {
|
|||
}()
|
||||
}
|
||||
}
|
||||
lineCount += b.extendedLines + 1
|
||||
bm[b] = struct{}{}
|
||||
bm[b] = frame.lines
|
||||
totalLines += frame.lines
|
||||
}
|
||||
|
||||
for _, b := range s.barShutdownQueue {
|
||||
|
@ -320,7 +334,7 @@ func (s *pState) flush(cw *cwriter.Writer) error {
|
|||
b.toDrop = true
|
||||
}
|
||||
if s.popCompleted && !b.noPop {
|
||||
lineCount -= b.extendedLines + 1
|
||||
totalLines -= bm[b]
|
||||
b.toDrop = true
|
||||
}
|
||||
if b.toDrop {
|
||||
|
@ -335,7 +349,7 @@ func (s *pState) flush(cw *cwriter.Writer) error {
|
|||
heap.Push(&s.bHeap, b)
|
||||
}
|
||||
|
||||
return cw.Flush(lineCount)
|
||||
return cw.Flush(totalLines)
|
||||
}
|
||||
|
||||
func (s *pState) updateSyncMatrix() {
|
||||
|
|
|
@ -0,0 +1,149 @@
|
|||
// Copyright 2021 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package unix
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// Helpers for dealing with ifreq since it contains a union and thus requires a
|
||||
// lot of unsafe.Pointer casts to use properly.
|
||||
|
||||
// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq
|
||||
// contains an interface name and a union of arbitrary data which can be
|
||||
// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq
|
||||
// function.
|
||||
//
|
||||
// Use the Name method to access the stored interface name. The union data
|
||||
// fields can be get and set using the following methods:
|
||||
// - Uint16/SetUint16: flags
|
||||
// - Uint32/SetUint32: ifindex, metric, mtu
|
||||
type Ifreq struct{ raw ifreq }
|
||||
|
||||
// NewIfreq creates an Ifreq with the input network interface name after
|
||||
// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required)
|
||||
// bytes.
|
||||
func NewIfreq(name string) (*Ifreq, error) {
|
||||
// Leave room for terminating NULL byte.
|
||||
if len(name) >= IFNAMSIZ {
|
||||
return nil, EINVAL
|
||||
}
|
||||
|
||||
var ifr ifreq
|
||||
copy(ifr.Ifrn[:], name)
|
||||
|
||||
return &Ifreq{raw: ifr}, nil
|
||||
}
|
||||
|
||||
// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc.
|
||||
|
||||
// Name returns the interface name associated with the Ifreq.
|
||||
func (ifr *Ifreq) Name() string {
|
||||
// BytePtrToString requires a NULL terminator or the program may crash. If
|
||||
// one is not present, just return the empty string.
|
||||
if !bytes.Contains(ifr.raw.Ifrn[:], []byte{0x00}) {
|
||||
return ""
|
||||
}
|
||||
|
||||
return BytePtrToString(&ifr.raw.Ifrn[0])
|
||||
}
|
||||
|
||||
// According to netdevice(7), only AF_INET addresses are returned for numerous
|
||||
// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port
|
||||
// field and other data is always empty.
|
||||
|
||||
// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C
|
||||
// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not
|
||||
// AF_INET, an error is returned.
|
||||
func (ifr *Ifreq) Inet4Addr() ([]byte, error) {
|
||||
raw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]))
|
||||
if raw.Family != AF_INET {
|
||||
// Cannot safely interpret raw.Addr bytes as an IPv4 address.
|
||||
return nil, EINVAL
|
||||
}
|
||||
|
||||
return raw.Addr[:], nil
|
||||
}
|
||||
|
||||
// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an
|
||||
// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length
|
||||
// or an error will be returned.
|
||||
func (ifr *Ifreq) SetInet4Addr(v []byte) error {
|
||||
if len(v) != 4 {
|
||||
return EINVAL
|
||||
}
|
||||
|
||||
var addr [4]byte
|
||||
copy(addr[:], v)
|
||||
|
||||
ifr.clear()
|
||||
*(*RawSockaddrInet4)(
|
||||
unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]),
|
||||
) = RawSockaddrInet4{
|
||||
// Always set IP family as ioctls would require it anyway.
|
||||
Family: AF_INET,
|
||||
Addr: addr,
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Uint16 returns the Ifreq union data as a C short/Go uint16 value.
|
||||
func (ifr *Ifreq) Uint16() uint16 {
|
||||
return *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0]))
|
||||
}
|
||||
|
||||
// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data.
|
||||
func (ifr *Ifreq) SetUint16(v uint16) {
|
||||
ifr.clear()
|
||||
*(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v
|
||||
}
|
||||
|
||||
// Uint32 returns the Ifreq union data as a C int/Go uint32 value.
|
||||
func (ifr *Ifreq) Uint32() uint32 {
|
||||
return *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0]))
|
||||
}
|
||||
|
||||
// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data.
|
||||
func (ifr *Ifreq) SetUint32(v uint32) {
|
||||
ifr.clear()
|
||||
*(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v
|
||||
}
|
||||
|
||||
// clear zeroes the ifreq's union field to prevent trailing garbage data from
|
||||
// being sent to the kernel if an ifreq is reused.
|
||||
func (ifr *Ifreq) clear() {
|
||||
for i := range ifr.raw.Ifru {
|
||||
ifr.raw.Ifru[i] = 0
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as
|
||||
// IoctlGetEthtoolDrvinfo which use these APIs under the hood.
|
||||
|
||||
// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData,
|
||||
// use the Ifreq.withData method.
|
||||
type ifreqData struct {
|
||||
name [IFNAMSIZ]byte
|
||||
// A type separate from ifreq is required in order to comply with the
|
||||
// unsafe.Pointer rules since the "pointer-ness" of data would not be
|
||||
// preserved if it were cast into the byte array of a raw ifreq.
|
||||
data unsafe.Pointer
|
||||
// Pad to the same size as ifreq.
|
||||
_ [len(ifreq{}.Ifru) - SizeofPtr]byte
|
||||
}
|
||||
|
||||
// withData produces an ifreqData with the pointer p set for ioctls which require
|
||||
// arbitrary pointer data.
|
||||
func (ifr Ifreq) withData(p unsafe.Pointer) ifreqData {
|
||||
return ifreqData{
|
||||
name: ifr.raw.Ifrn,
|
||||
data: p,
|
||||
}
|
||||
}
|
|
@ -5,7 +5,6 @@
|
|||
package unix
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
|
@ -22,56 +21,42 @@ func IoctlRetInt(fd int, req uint) (int, error) {
|
|||
|
||||
func IoctlGetUint32(fd int, req uint) (uint32, error) {
|
||||
var value uint32
|
||||
err := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))
|
||||
err := ioctlPtr(fd, req, unsafe.Pointer(&value))
|
||||
return value, err
|
||||
}
|
||||
|
||||
func IoctlGetRTCTime(fd int) (*RTCTime, error) {
|
||||
var value RTCTime
|
||||
err := ioctl(fd, RTC_RD_TIME, uintptr(unsafe.Pointer(&value)))
|
||||
err := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value))
|
||||
return &value, err
|
||||
}
|
||||
|
||||
func IoctlSetRTCTime(fd int, value *RTCTime) error {
|
||||
err := ioctl(fd, RTC_SET_TIME, uintptr(unsafe.Pointer(value)))
|
||||
runtime.KeepAlive(value)
|
||||
return err
|
||||
return ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value))
|
||||
}
|
||||
|
||||
func IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {
|
||||
var value RTCWkAlrm
|
||||
err := ioctl(fd, RTC_WKALM_RD, uintptr(unsafe.Pointer(&value)))
|
||||
err := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value))
|
||||
return &value, err
|
||||
}
|
||||
|
||||
func IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {
|
||||
err := ioctl(fd, RTC_WKALM_SET, uintptr(unsafe.Pointer(value)))
|
||||
runtime.KeepAlive(value)
|
||||
return err
|
||||
}
|
||||
|
||||
type ifreqEthtool struct {
|
||||
name [IFNAMSIZ]byte
|
||||
data unsafe.Pointer
|
||||
return ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value))
|
||||
}
|
||||
|
||||
// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network
|
||||
// device specified by ifname.
|
||||
func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
|
||||
// Leave room for terminating NULL byte.
|
||||
if len(ifname) >= IFNAMSIZ {
|
||||
return nil, EINVAL
|
||||
ifr, err := NewIfreq(ifname)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
value := EthtoolDrvinfo{
|
||||
Cmd: ETHTOOL_GDRVINFO,
|
||||
}
|
||||
ifreq := ifreqEthtool{
|
||||
data: unsafe.Pointer(&value),
|
||||
}
|
||||
copy(ifreq.name[:], ifname)
|
||||
err := ioctl(fd, SIOCETHTOOL, uintptr(unsafe.Pointer(&ifreq)))
|
||||
runtime.KeepAlive(ifreq)
|
||||
value := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO}
|
||||
ifrd := ifr.withData(unsafe.Pointer(&value))
|
||||
|
||||
err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)
|
||||
return &value, err
|
||||
}
|
||||
|
||||
|
@ -80,7 +65,7 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {
|
|||
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
||||
func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {
|
||||
var value WatchdogInfo
|
||||
err := ioctl(fd, WDIOC_GETSUPPORT, uintptr(unsafe.Pointer(&value)))
|
||||
err := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value))
|
||||
return &value, err
|
||||
}
|
||||
|
||||
|
@ -88,6 +73,7 @@ func IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {
|
|||
// more information, see:
|
||||
// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.
|
||||
func IoctlWatchdogKeepalive(fd int) error {
|
||||
// arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr.
|
||||
return ioctl(fd, WDIOC_KEEPALIVE, 0)
|
||||
}
|
||||
|
||||
|
@ -95,9 +81,7 @@ func IoctlWatchdogKeepalive(fd int) error {
|
|||
// range of data conveyed in value to the file associated with the file
|
||||
// descriptor destFd. See the ioctl_ficlonerange(2) man page for details.
|
||||
func IoctlFileCloneRange(destFd int, value *FileCloneRange) error {
|
||||
err := ioctl(destFd, FICLONERANGE, uintptr(unsafe.Pointer(value)))
|
||||
runtime.KeepAlive(value)
|
||||
return err
|
||||
return ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value))
|
||||
}
|
||||
|
||||
// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file
|
||||
|
@ -148,7 +132,7 @@ func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {
|
|||
rawinfo.Reserved = value.Info[i].Reserved
|
||||
}
|
||||
|
||||
err := ioctl(srcFd, FIDEDUPERANGE, uintptr(unsafe.Pointer(&buf[0])))
|
||||
err := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0]))
|
||||
|
||||
// Output
|
||||
for i := range value.Info {
|
||||
|
@ -166,31 +150,47 @@ func IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {
|
|||
}
|
||||
|
||||
func IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error {
|
||||
err := ioctl(fd, HIDIOCGRDESC, uintptr(unsafe.Pointer(value)))
|
||||
runtime.KeepAlive(value)
|
||||
return err
|
||||
return ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value))
|
||||
}
|
||||
|
||||
func IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) {
|
||||
var value HIDRawDevInfo
|
||||
err := ioctl(fd, HIDIOCGRAWINFO, uintptr(unsafe.Pointer(&value)))
|
||||
err := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value))
|
||||
return &value, err
|
||||
}
|
||||
|
||||
func IoctlHIDGetRawName(fd int) (string, error) {
|
||||
var value [_HIDIOCGRAWNAME_LEN]byte
|
||||
err := ioctl(fd, _HIDIOCGRAWNAME, uintptr(unsafe.Pointer(&value[0])))
|
||||
err := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0]))
|
||||
return ByteSliceToString(value[:]), err
|
||||
}
|
||||
|
||||
func IoctlHIDGetRawPhys(fd int) (string, error) {
|
||||
var value [_HIDIOCGRAWPHYS_LEN]byte
|
||||
err := ioctl(fd, _HIDIOCGRAWPHYS, uintptr(unsafe.Pointer(&value[0])))
|
||||
err := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0]))
|
||||
return ByteSliceToString(value[:]), err
|
||||
}
|
||||
|
||||
func IoctlHIDGetRawUniq(fd int) (string, error) {
|
||||
var value [_HIDIOCGRAWUNIQ_LEN]byte
|
||||
err := ioctl(fd, _HIDIOCGRAWUNIQ, uintptr(unsafe.Pointer(&value[0])))
|
||||
err := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0]))
|
||||
return ByteSliceToString(value[:]), err
|
||||
}
|
||||
|
||||
// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or
|
||||
// output. See the netdevice(7) man page for details.
|
||||
func IoctlIfreq(fd int, req uint, value *Ifreq) error {
|
||||
// It is possible we will add more fields to *Ifreq itself later to prevent
|
||||
// misuse, so pass the raw *ifreq directly.
|
||||
return ioctlPtr(fd, req, unsafe.Pointer(&value.raw))
|
||||
}
|
||||
|
||||
// TODO(mdlayher): export if and when IfreqData is exported.
|
||||
|
||||
// ioctlIfreqData performs an ioctl using an ifreqData structure for input
|
||||
// and/or output. See the netdevice(7) man page for details.
|
||||
func ioctlIfreqData(fd int, req uint, value *ifreqData) error {
|
||||
// The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are
|
||||
// identical so pass *IfreqData directly.
|
||||
return ioctlPtr(fd, req, unsafe.Pointer(value))
|
||||
}
|
||||
|
|
|
@ -217,8 +217,6 @@ struct ltchars {
|
|||
#include <linux/genetlink.h>
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/hidraw.h>
|
||||
#include <linux/icmp.h>
|
||||
#include <linux/icmpv6.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_addr.h>
|
||||
#include <linux/if_alg.h>
|
||||
|
@ -502,7 +500,7 @@ ccflags="$@"
|
|||
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
||||
$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||
|
||||
$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||
|
||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL)_/ ||
|
||||
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT)_/ ||
|
||||
$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||
|
||||
$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||
|
||||
$2 ~ /^RAW_PAYLOAD_/ ||
|
||||
|
|
|
@ -66,11 +66,18 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
|
|||
return fchmodat(dirfd, path, mode)
|
||||
}
|
||||
|
||||
//sys ioctl(fd int, req uint, arg uintptr) (err error)
|
||||
//sys ioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL
|
||||
//sys ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL
|
||||
|
||||
// ioctl itself should not be exposed directly, but additional get/set
|
||||
// functions for specific types are permissible.
|
||||
// These are defined in ioctl.go and ioctl_linux.go.
|
||||
// ioctl itself should not be exposed directly, but additional get/set functions
|
||||
// for specific types are permissible. These are defined in ioctl.go and
|
||||
// ioctl_linux.go.
|
||||
//
|
||||
// The third argument to ioctl is often a pointer but sometimes an integer.
|
||||
// Callers should use ioctlPtr when the third argument is a pointer and ioctl
|
||||
// when the third argument is an integer.
|
||||
//
|
||||
// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr.
|
||||
|
||||
//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
||||
|
||||
|
@ -1348,6 +1355,13 @@ func SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {
|
|||
return setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))
|
||||
}
|
||||
|
||||
func SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) {
|
||||
if len(o) == 0 {
|
||||
return EINVAL
|
||||
}
|
||||
return setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o)))
|
||||
}
|
||||
|
||||
// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)
|
||||
|
||||
// KeyctlInt calls keyctl commands in which each argument is an int.
|
||||
|
@ -1859,7 +1873,7 @@ func Getpgrp() (pid int) {
|
|||
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
||||
//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
|
||||
//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
|
||||
//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
|
||||
//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
|
||||
//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
|
||||
//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6
|
||||
//sys read(fd int, p []byte) (n int, err error)
|
||||
|
|
|
@ -105,7 +105,7 @@ const rlimInf32 = ^uint32(0)
|
|||
const rlimInf64 = ^uint64(0)
|
||||
|
||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, nil, rlim)
|
||||
err = Prlimit(0, resource, nil, rlim)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
|||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||
|
||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, rlim, nil)
|
||||
err = Prlimit(0, resource, rlim, nil)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -184,7 +184,7 @@ const rlimInf32 = ^uint32(0)
|
|||
const rlimInf64 = ^uint64(0)
|
||||
|
||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, nil, rlim)
|
||||
err = Prlimit(0, resource, nil, rlim)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
@ -212,7 +212,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
|||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||
|
||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, rlim, nil)
|
||||
err = Prlimit(0, resource, rlim, nil)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -171,7 +171,7 @@ func Pipe2(p []int, flags int) (err error) {
|
|||
|
||||
// Getrlimit prefers the prlimit64 system call. See issue 38604.
|
||||
func Getrlimit(resource int, rlim *Rlimit) error {
|
||||
err := prlimit(0, resource, nil, rlim)
|
||||
err := Prlimit(0, resource, nil, rlim)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
@ -180,7 +180,7 @@ func Getrlimit(resource int, rlim *Rlimit) error {
|
|||
|
||||
// Setrlimit prefers the prlimit64 system call. See issue 38604.
|
||||
func Setrlimit(resource int, rlim *Rlimit) error {
|
||||
err := prlimit(0, resource, rlim, nil)
|
||||
err := Prlimit(0, resource, rlim, nil)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -157,7 +157,7 @@ type rlimit32 struct {
|
|||
//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT
|
||||
|
||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, nil, rlim)
|
||||
err = Prlimit(0, resource, nil, rlim)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
@ -185,7 +185,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
|||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||
|
||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, rlim, nil)
|
||||
err = Prlimit(0, resource, rlim, nil)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux && ppc
|
||||
// +build linux
|
||||
// +build ppc
|
||||
// +build linux,ppc
|
||||
|
||||
package unix
|
||||
|
||||
|
@ -143,7 +142,7 @@ const rlimInf32 = ^uint32(0)
|
|||
const rlimInf64 = ^uint64(0)
|
||||
|
||||
func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, nil, rlim)
|
||||
err = Prlimit(0, resource, nil, rlim)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
@ -171,7 +170,7 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
|
|||
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
|
||||
|
||||
func Setrlimit(resource int, rlim *Rlimit) (err error) {
|
||||
err = prlimit(0, resource, rlim, nil)
|
||||
err = Prlimit(0, resource, rlim, nil)
|
||||
if err != ENOSYS {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -13,7 +13,10 @@
|
|||
package unix
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"runtime"
|
||||
"sync"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
@ -744,3 +747,240 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e
|
|||
func Munmap(b []byte) (err error) {
|
||||
return mapper.Munmap(b)
|
||||
}
|
||||
|
||||
// Event Ports
|
||||
|
||||
type fileObjCookie struct {
|
||||
fobj *fileObj
|
||||
cookie interface{}
|
||||
}
|
||||
|
||||
// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports.
|
||||
type EventPort struct {
|
||||
port int
|
||||
mu sync.Mutex
|
||||
fds map[uintptr]interface{}
|
||||
paths map[string]*fileObjCookie
|
||||
}
|
||||
|
||||
// PortEvent is an abstraction of the port_event C struct.
|
||||
// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD
|
||||
// to see if Path or Fd was the event source. The other will be
|
||||
// uninitialized.
|
||||
type PortEvent struct {
|
||||
Cookie interface{}
|
||||
Events int32
|
||||
Fd uintptr
|
||||
Path string
|
||||
Source uint16
|
||||
fobj *fileObj
|
||||
}
|
||||
|
||||
// NewEventPort creates a new EventPort including the
|
||||
// underlying call to port_create(3c).
|
||||
func NewEventPort() (*EventPort, error) {
|
||||
port, err := port_create()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
e := &EventPort{
|
||||
port: port,
|
||||
fds: make(map[uintptr]interface{}),
|
||||
paths: make(map[string]*fileObjCookie),
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
|
||||
//sys port_create() (n int, err error)
|
||||
//sys port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error)
|
||||
//sys port_dissociate(port int, source int, object uintptr) (n int, err error)
|
||||
//sys port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error)
|
||||
//sys port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error)
|
||||
|
||||
// Close closes the event port.
|
||||
func (e *EventPort) Close() error {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
e.fds = nil
|
||||
e.paths = nil
|
||||
return Close(e.port)
|
||||
}
|
||||
|
||||
// PathIsWatched checks to see if path is associated with this EventPort.
|
||||
func (e *EventPort) PathIsWatched(path string) bool {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
_, found := e.paths[path]
|
||||
return found
|
||||
}
|
||||
|
||||
// FdIsWatched checks to see if fd is associated with this EventPort.
|
||||
func (e *EventPort) FdIsWatched(fd uintptr) bool {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
_, found := e.fds[fd]
|
||||
return found
|
||||
}
|
||||
|
||||
// AssociatePath wraps port_associate(3c) for a filesystem path including
|
||||
// creating the necessary file_obj from the provided stat information.
|
||||
func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
if _, found := e.paths[path]; found {
|
||||
return fmt.Errorf("%v is already associated with this Event Port", path)
|
||||
}
|
||||
fobj, err := createFileObj(path, stat)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fCookie := &fileObjCookie{fobj, cookie}
|
||||
_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.paths[path] = fCookie
|
||||
return nil
|
||||
}
|
||||
|
||||
// DissociatePath wraps port_dissociate(3c) for a filesystem path.
|
||||
func (e *EventPort) DissociatePath(path string) error {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
f, ok := e.paths[path]
|
||||
if !ok {
|
||||
return fmt.Errorf("%v is not associated with this Event Port", path)
|
||||
}
|
||||
_, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
delete(e.paths, path)
|
||||
return nil
|
||||
}
|
||||
|
||||
// AssociateFd wraps calls to port_associate(3c) on file descriptors.
|
||||
func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
if _, found := e.fds[fd]; found {
|
||||
return fmt.Errorf("%v is already associated with this Event Port", fd)
|
||||
}
|
||||
pcookie := &cookie
|
||||
_, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(pcookie)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
e.fds[fd] = pcookie
|
||||
return nil
|
||||
}
|
||||
|
||||
// DissociateFd wraps calls to port_dissociate(3c) on file descriptors.
|
||||
func (e *EventPort) DissociateFd(fd uintptr) error {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
_, ok := e.fds[fd]
|
||||
if !ok {
|
||||
return fmt.Errorf("%v is not associated with this Event Port", fd)
|
||||
}
|
||||
_, err := port_dissociate(e.port, PORT_SOURCE_FD, fd)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
delete(e.fds, fd)
|
||||
return nil
|
||||
}
|
||||
|
||||
func createFileObj(name string, stat os.FileInfo) (*fileObj, error) {
|
||||
fobj := new(fileObj)
|
||||
bs, err := ByteSliceFromString(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
|
||||
s := stat.Sys().(*syscall.Stat_t)
|
||||
fobj.Atim.Sec = s.Atim.Sec
|
||||
fobj.Atim.Nsec = s.Atim.Nsec
|
||||
fobj.Mtim.Sec = s.Mtim.Sec
|
||||
fobj.Mtim.Nsec = s.Mtim.Nsec
|
||||
fobj.Ctim.Sec = s.Ctim.Sec
|
||||
fobj.Ctim.Nsec = s.Ctim.Nsec
|
||||
return fobj, nil
|
||||
}
|
||||
|
||||
// GetOne wraps port_get(3c) and returns a single PortEvent.
|
||||
func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {
|
||||
pe := new(portEvent)
|
||||
_, err := port_get(e.port, pe, t)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
p := new(PortEvent)
|
||||
p.Events = pe.Events
|
||||
p.Source = pe.Source
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
switch pe.Source {
|
||||
case PORT_SOURCE_FD:
|
||||
p.Fd = uintptr(pe.Object)
|
||||
cookie := (*interface{})(unsafe.Pointer(pe.User))
|
||||
p.Cookie = *cookie
|
||||
delete(e.fds, p.Fd)
|
||||
case PORT_SOURCE_FILE:
|
||||
p.fobj = (*fileObj)(unsafe.Pointer(uintptr(pe.Object)))
|
||||
p.Path = BytePtrToString((*byte)(unsafe.Pointer(p.fobj.Name)))
|
||||
cookie := (*interface{})(unsafe.Pointer(pe.User))
|
||||
p.Cookie = *cookie
|
||||
delete(e.paths, p.Path)
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// Pending wraps port_getn(3c) and returns how many events are pending.
|
||||
func (e *EventPort) Pending() (int, error) {
|
||||
var n uint32 = 0
|
||||
_, err := port_getn(e.port, nil, 0, &n, nil)
|
||||
return int(n), err
|
||||
}
|
||||
|
||||
// Get wraps port_getn(3c) and fills a slice of PortEvent.
|
||||
// It will block until either min events have been received
|
||||
// or the timeout has been exceeded. It will return how many
|
||||
// events were actually received along with any error information.
|
||||
func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) {
|
||||
if min == 0 {
|
||||
return 0, fmt.Errorf("need to request at least one event or use Pending() instead")
|
||||
}
|
||||
if len(s) < min {
|
||||
return 0, fmt.Errorf("len(s) (%d) is less than min events requested (%d)", len(s), min)
|
||||
}
|
||||
got := uint32(min)
|
||||
max := uint32(len(s))
|
||||
var err error
|
||||
ps := make([]portEvent, max, max)
|
||||
_, err = port_getn(e.port, &ps[0], max, &got, timeout)
|
||||
// got will be trustworthy with ETIME, but not any other error.
|
||||
if err != nil && err != ETIME {
|
||||
return 0, err
|
||||
}
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
for i := 0; i < int(got); i++ {
|
||||
s[i].Events = ps[i].Events
|
||||
s[i].Source = ps[i].Source
|
||||
switch ps[i].Source {
|
||||
case PORT_SOURCE_FD:
|
||||
s[i].Fd = uintptr(ps[i].Object)
|
||||
cookie := (*interface{})(unsafe.Pointer(ps[i].User))
|
||||
s[i].Cookie = *cookie
|
||||
delete(e.fds, s[i].Fd)
|
||||
case PORT_SOURCE_FILE:
|
||||
s[i].fobj = (*fileObj)(unsafe.Pointer(uintptr(ps[i].Object)))
|
||||
s[i].Path = BytePtrToString((*byte)(unsafe.Pointer(s[i].fobj.Name)))
|
||||
cookie := (*interface{})(unsafe.Pointer(ps[i].User))
|
||||
s[i].Cookie = *cookie
|
||||
delete(e.paths, s[i].Path)
|
||||
}
|
||||
}
|
||||
return int(got), err
|
||||
}
|
||||
|
|
|
@ -313,6 +313,10 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func Send(s int, buf []byte, flags int) (err error) {
|
||||
return sendto(s, buf, flags, nil, 0)
|
||||
}
|
||||
|
||||
func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
|
||||
ptr, n, err := to.sockaddr()
|
||||
if err != nil {
|
||||
|
|
|
@ -1206,6 +1206,7 @@ const (
|
|||
RTF_DONE = 0x40
|
||||
RTF_DYNAMIC = 0x10
|
||||
RTF_GATEWAY = 0x2
|
||||
RTF_GLOBAL = 0x40000000
|
||||
RTF_HOST = 0x4
|
||||
RTF_IFREF = 0x4000000
|
||||
RTF_IFSCOPE = 0x1000000
|
||||
|
|
|
@ -1206,6 +1206,7 @@ const (
|
|||
RTF_DONE = 0x40
|
||||
RTF_DYNAMIC = 0x10
|
||||
RTF_GATEWAY = 0x2
|
||||
RTF_GLOBAL = 0x40000000
|
||||
RTF_HOST = 0x4
|
||||
RTF_IFREF = 0x4000000
|
||||
RTF_IFSCOPE = 0x1000000
|
||||
|
|
|
@ -228,6 +228,8 @@ const (
|
|||
BPF_OR = 0x40
|
||||
BPF_PSEUDO_BTF_ID = 0x3
|
||||
BPF_PSEUDO_CALL = 0x1
|
||||
BPF_PSEUDO_FUNC = 0x4
|
||||
BPF_PSEUDO_KFUNC_CALL = 0x2
|
||||
BPF_PSEUDO_MAP_FD = 0x1
|
||||
BPF_PSEUDO_MAP_VALUE = 0x2
|
||||
BPF_RET = 0x6
|
||||
|
@ -475,6 +477,8 @@ const (
|
|||
DM_LIST_VERSIONS = 0xc138fd0d
|
||||
DM_MAX_TYPE_NAME = 0x10
|
||||
DM_NAME_LEN = 0x80
|
||||
DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID = 0x2
|
||||
DM_NAME_LIST_FLAG_HAS_UUID = 0x1
|
||||
DM_NOFLUSH_FLAG = 0x800
|
||||
DM_PERSISTENT_DEV_FLAG = 0x8
|
||||
DM_QUERY_INACTIVE_TABLE_FLAG = 0x1000
|
||||
|
@ -494,9 +498,9 @@ const (
|
|||
DM_UUID_FLAG = 0x4000
|
||||
DM_UUID_LEN = 0x81
|
||||
DM_VERSION = 0xc138fd00
|
||||
DM_VERSION_EXTRA = "-ioctl (2021-02-01)"
|
||||
DM_VERSION_EXTRA = "-ioctl (2021-03-22)"
|
||||
DM_VERSION_MAJOR = 0x4
|
||||
DM_VERSION_MINOR = 0x2c
|
||||
DM_VERSION_MINOR = 0x2d
|
||||
DM_VERSION_PATCHLEVEL = 0x0
|
||||
DT_BLK = 0x6
|
||||
DT_CHR = 0x2
|
||||
|
@ -981,12 +985,6 @@ const (
|
|||
HPFS_SUPER_MAGIC = 0xf995e849
|
||||
HUGETLBFS_MAGIC = 0x958458f6
|
||||
IBSHIFT = 0x10
|
||||
ICMPV6_FILTER = 0x1
|
||||
ICMPV6_FILTER_BLOCK = 0x1
|
||||
ICMPV6_FILTER_BLOCKOTHERS = 0x3
|
||||
ICMPV6_FILTER_PASS = 0x2
|
||||
ICMPV6_FILTER_PASSONLY = 0x4
|
||||
ICMP_FILTER = 0x1
|
||||
ICRNL = 0x100
|
||||
IFA_F_DADFAILED = 0x8
|
||||
IFA_F_DEPRECATED = 0x20
|
||||
|
@ -1257,6 +1255,7 @@ const (
|
|||
KEXEC_ARCH_PARISC = 0xf0000
|
||||
KEXEC_ARCH_PPC = 0x140000
|
||||
KEXEC_ARCH_PPC64 = 0x150000
|
||||
KEXEC_ARCH_RISCV = 0xf30000
|
||||
KEXEC_ARCH_S390 = 0x160000
|
||||
KEXEC_ARCH_SH = 0x2a0000
|
||||
KEXEC_ARCH_X86_64 = 0x3e0000
|
||||
|
@ -1756,14 +1755,19 @@ const (
|
|||
PERF_ATTR_SIZE_VER4 = 0x68
|
||||
PERF_ATTR_SIZE_VER5 = 0x70
|
||||
PERF_ATTR_SIZE_VER6 = 0x78
|
||||
PERF_ATTR_SIZE_VER7 = 0x80
|
||||
PERF_AUX_FLAG_COLLISION = 0x8
|
||||
PERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT = 0x0
|
||||
PERF_AUX_FLAG_CORESIGHT_FORMAT_RAW = 0x100
|
||||
PERF_AUX_FLAG_OVERWRITE = 0x2
|
||||
PERF_AUX_FLAG_PARTIAL = 0x4
|
||||
PERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK = 0xff00
|
||||
PERF_AUX_FLAG_TRUNCATED = 0x1
|
||||
PERF_FLAG_FD_CLOEXEC = 0x8
|
||||
PERF_FLAG_FD_NO_GROUP = 0x1
|
||||
PERF_FLAG_FD_OUTPUT = 0x2
|
||||
PERF_FLAG_PID_CGROUP = 0x4
|
||||
PERF_HW_EVENT_MASK = 0xffffffff
|
||||
PERF_MAX_CONTEXTS_PER_STACK = 0x8
|
||||
PERF_MAX_STACK_DEPTH = 0x7f
|
||||
PERF_MEM_BLK_ADDR = 0x4
|
||||
|
@ -1822,6 +1826,7 @@ const (
|
|||
PERF_MEM_TLB_OS = 0x40
|
||||
PERF_MEM_TLB_SHIFT = 0x1a
|
||||
PERF_MEM_TLB_WK = 0x20
|
||||
PERF_PMU_TYPE_SHIFT = 0x20
|
||||
PERF_RECORD_KSYMBOL_FLAGS_UNREGISTER = 0x1
|
||||
PERF_RECORD_MISC_COMM_EXEC = 0x2000
|
||||
PERF_RECORD_MISC_CPUMODE_MASK = 0x7
|
||||
|
@ -1921,7 +1926,9 @@ const (
|
|||
PR_PAC_APGAKEY = 0x10
|
||||
PR_PAC_APIAKEY = 0x1
|
||||
PR_PAC_APIBKEY = 0x2
|
||||
PR_PAC_GET_ENABLED_KEYS = 0x3d
|
||||
PR_PAC_RESET_KEYS = 0x36
|
||||
PR_PAC_SET_ENABLED_KEYS = 0x3c
|
||||
PR_SET_CHILD_SUBREAPER = 0x24
|
||||
PR_SET_DUMPABLE = 0x4
|
||||
PR_SET_ENDIAN = 0x14
|
||||
|
@ -2003,6 +2010,7 @@ const (
|
|||
PTRACE_GETREGSET = 0x4204
|
||||
PTRACE_GETSIGINFO = 0x4202
|
||||
PTRACE_GETSIGMASK = 0x420a
|
||||
PTRACE_GET_RSEQ_CONFIGURATION = 0x420f
|
||||
PTRACE_GET_SYSCALL_INFO = 0x420e
|
||||
PTRACE_INTERRUPT = 0x4207
|
||||
PTRACE_KILL = 0x8
|
||||
|
@ -2163,6 +2171,7 @@ const (
|
|||
RTM_DELNEIGH = 0x1d
|
||||
RTM_DELNETCONF = 0x51
|
||||
RTM_DELNEXTHOP = 0x69
|
||||
RTM_DELNEXTHOPBUCKET = 0x75
|
||||
RTM_DELNSID = 0x59
|
||||
RTM_DELQDISC = 0x25
|
||||
RTM_DELROUTE = 0x19
|
||||
|
@ -2193,6 +2202,7 @@ const (
|
|||
RTM_GETNEIGHTBL = 0x42
|
||||
RTM_GETNETCONF = 0x52
|
||||
RTM_GETNEXTHOP = 0x6a
|
||||
RTM_GETNEXTHOPBUCKET = 0x76
|
||||
RTM_GETNSID = 0x5a
|
||||
RTM_GETQDISC = 0x26
|
||||
RTM_GETROUTE = 0x1a
|
||||
|
@ -2201,7 +2211,7 @@ const (
|
|||
RTM_GETTCLASS = 0x2a
|
||||
RTM_GETTFILTER = 0x2e
|
||||
RTM_GETVLAN = 0x72
|
||||
RTM_MAX = 0x73
|
||||
RTM_MAX = 0x77
|
||||
RTM_NEWACTION = 0x30
|
||||
RTM_NEWADDR = 0x14
|
||||
RTM_NEWADDRLABEL = 0x48
|
||||
|
@ -2215,6 +2225,7 @@ const (
|
|||
RTM_NEWNEIGHTBL = 0x40
|
||||
RTM_NEWNETCONF = 0x50
|
||||
RTM_NEWNEXTHOP = 0x68
|
||||
RTM_NEWNEXTHOPBUCKET = 0x74
|
||||
RTM_NEWNSID = 0x58
|
||||
RTM_NEWNVLAN = 0x70
|
||||
RTM_NEWPREFIX = 0x34
|
||||
|
@ -2224,8 +2235,8 @@ const (
|
|||
RTM_NEWSTATS = 0x5c
|
||||
RTM_NEWTCLASS = 0x28
|
||||
RTM_NEWTFILTER = 0x2c
|
||||
RTM_NR_FAMILIES = 0x19
|
||||
RTM_NR_MSGTYPES = 0x64
|
||||
RTM_NR_FAMILIES = 0x1a
|
||||
RTM_NR_MSGTYPES = 0x68
|
||||
RTM_SETDCB = 0x4f
|
||||
RTM_SETLINK = 0x13
|
||||
RTM_SETNEIGHTBL = 0x43
|
||||
|
@ -2253,6 +2264,7 @@ const (
|
|||
RTPROT_MROUTED = 0x11
|
||||
RTPROT_MRT = 0xa
|
||||
RTPROT_NTK = 0xf
|
||||
RTPROT_OPENR = 0x63
|
||||
RTPROT_OSPF = 0xbc
|
||||
RTPROT_RA = 0x9
|
||||
RTPROT_REDIRECT = 0x1
|
||||
|
@ -2536,6 +2548,14 @@ const (
|
|||
TCOFLUSH = 0x1
|
||||
TCOOFF = 0x0
|
||||
TCOON = 0x1
|
||||
TCPOPT_EOL = 0x0
|
||||
TCPOPT_MAXSEG = 0x2
|
||||
TCPOPT_NOP = 0x1
|
||||
TCPOPT_SACK = 0x5
|
||||
TCPOPT_SACK_PERMITTED = 0x4
|
||||
TCPOPT_TIMESTAMP = 0x8
|
||||
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||
TCPOPT_WINDOW = 0x3
|
||||
TCP_CC_INFO = 0x1a
|
||||
TCP_CM_INQ = 0x24
|
||||
TCP_CONGESTION = 0xd
|
||||
|
|
|
@ -147,6 +147,7 @@ const (
|
|||
NS_GET_USERNS = 0xb701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x400c4d19
|
||||
OTPGETREGIONCOUNT = 0x40044d0e
|
||||
OTPGETREGIONINFO = 0x400c4d0f
|
||||
OTPLOCK = 0x800c4d10
|
||||
|
|
|
@ -147,6 +147,7 @@ const (
|
|||
NS_GET_USERNS = 0xb701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x400c4d19
|
||||
OTPGETREGIONCOUNT = 0x40044d0e
|
||||
OTPGETREGIONINFO = 0x400c4d0f
|
||||
OTPLOCK = 0x800c4d10
|
||||
|
|
|
@ -145,6 +145,7 @@ const (
|
|||
NS_GET_USERNS = 0xb701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x400c4d19
|
||||
OTPGETREGIONCOUNT = 0x40044d0e
|
||||
OTPGETREGIONINFO = 0x400c4d0f
|
||||
OTPLOCK = 0x800c4d10
|
||||
|
|
|
@ -148,6 +148,7 @@ const (
|
|||
NS_GET_USERNS = 0xb701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x400c4d19
|
||||
OTPGETREGIONCOUNT = 0x40044d0e
|
||||
OTPGETREGIONINFO = 0x400c4d0f
|
||||
OTPLOCK = 0x800c4d10
|
||||
|
|
|
@ -145,6 +145,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -145,6 +145,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -145,6 +145,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -145,6 +145,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -147,6 +147,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x4
|
||||
ONLCR = 0x2
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -147,6 +147,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x4
|
||||
ONLCR = 0x2
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -147,6 +147,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x4
|
||||
ONLCR = 0x2
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -145,6 +145,7 @@ const (
|
|||
NS_GET_USERNS = 0xb701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x400c4d19
|
||||
OTPGETREGIONCOUNT = 0x40044d0e
|
||||
OTPGETREGIONINFO = 0x400c4d0f
|
||||
OTPLOCK = 0x800c4d10
|
||||
|
|
|
@ -145,6 +145,7 @@ const (
|
|||
NS_GET_USERNS = 0xb701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x400c4d19
|
||||
OTPGETREGIONCOUNT = 0x40044d0e
|
||||
OTPGETREGIONINFO = 0x400c4d0f
|
||||
OTPLOCK = 0x800c4d10
|
||||
|
|
|
@ -150,6 +150,7 @@ const (
|
|||
NS_GET_USERNS = 0x2000b701
|
||||
OLCUC = 0x2
|
||||
ONLCR = 0x4
|
||||
OTPERASE = 0x800c4d19
|
||||
OTPGETREGIONCOUNT = 0x80044d0e
|
||||
OTPGETREGIONINFO = 0x800c4d0f
|
||||
OTPLOCK = 0x400c4d10
|
||||
|
|
|
@ -1020,7 +1020,10 @@ const (
|
|||
RLIMIT_CPU = 0x0
|
||||
RLIMIT_DATA = 0x2
|
||||
RLIMIT_FSIZE = 0x1
|
||||
RLIMIT_MEMLOCK = 0x6
|
||||
RLIMIT_NOFILE = 0x8
|
||||
RLIMIT_NPROC = 0x7
|
||||
RLIMIT_RSS = 0x5
|
||||
RLIMIT_STACK = 0x3
|
||||
RLIM_INFINITY = 0x7fffffffffffffff
|
||||
RTAX_AUTHOR = 0x6
|
||||
|
|
|
@ -1020,7 +1020,10 @@ const (
|
|||
RLIMIT_CPU = 0x0
|
||||
RLIMIT_DATA = 0x2
|
||||
RLIMIT_FSIZE = 0x1
|
||||
RLIMIT_MEMLOCK = 0x6
|
||||
RLIMIT_NOFILE = 0x8
|
||||
RLIMIT_NPROC = 0x7
|
||||
RLIMIT_RSS = 0x5
|
||||
RLIMIT_STACK = 0x3
|
||||
RLIM_INFINITY = 0x7fffffffffffffff
|
||||
RTAX_AUTHOR = 0x6
|
||||
|
|
|
@ -48,6 +48,16 @@ func ioctl(fd int, req uint, arg uintptr) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
|
||||
_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(oldpath)
|
||||
|
@ -1201,7 +1211,7 @@ func PivotRoot(newroot string, putold string) (err error) {
|
|||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
|
||||
func Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {
|
||||
_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
|
|
|
@ -141,6 +141,11 @@ import (
|
|||
//go:cgo_import_dynamic libc_getpeername getpeername "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_port_create port_create "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_get port_get "libc.so"
|
||||
//go:cgo_import_dynamic libc_port_getn port_getn "libc.so"
|
||||
|
||||
//go:linkname procpipe libc_pipe
|
||||
//go:linkname procpipe2 libc_pipe2
|
||||
|
@ -272,6 +277,11 @@ import (
|
|||
//go:linkname procgetpeername libc_getpeername
|
||||
//go:linkname procsetsockopt libc_setsockopt
|
||||
//go:linkname procrecvfrom libc_recvfrom
|
||||
//go:linkname procport_create libc_port_create
|
||||
//go:linkname procport_associate libc_port_associate
|
||||
//go:linkname procport_dissociate libc_port_dissociate
|
||||
//go:linkname procport_get libc_port_get
|
||||
//go:linkname procport_getn libc_port_getn
|
||||
|
||||
var (
|
||||
procpipe,
|
||||
|
@ -403,7 +413,12 @@ var (
|
|||
proc__xnet_getsockopt,
|
||||
procgetpeername,
|
||||
procsetsockopt,
|
||||
procrecvfrom syscallFunc
|
||||
procrecvfrom,
|
||||
procport_create,
|
||||
procport_associate,
|
||||
procport_dissociate,
|
||||
procport_get,
|
||||
procport_getn syscallFunc
|
||||
)
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
@ -1981,3 +1996,58 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
|
|||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func port_create() (n int, err error) {
|
||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = e1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) {
|
||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = e1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func port_dissociate(port int, source int, object uintptr) (n int, err error) {
|
||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = e1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) {
|
||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = e1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) {
|
||||
r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = e1
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
@ -439,4 +439,7 @@ const (
|
|||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||
SYS_LANDLOCK_ADD_RULE = 445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||
)
|
||||
|
|
|
@ -7,358 +7,361 @@
|
|||
package unix
|
||||
|
||||
const (
|
||||
SYS_READ = 0
|
||||
SYS_WRITE = 1
|
||||
SYS_OPEN = 2
|
||||
SYS_CLOSE = 3
|
||||
SYS_STAT = 4
|
||||
SYS_FSTAT = 5
|
||||
SYS_LSTAT = 6
|
||||
SYS_POLL = 7
|
||||
SYS_LSEEK = 8
|
||||
SYS_MMAP = 9
|
||||
SYS_MPROTECT = 10
|
||||
SYS_MUNMAP = 11
|
||||
SYS_BRK = 12
|
||||
SYS_RT_SIGACTION = 13
|
||||
SYS_RT_SIGPROCMASK = 14
|
||||
SYS_RT_SIGRETURN = 15
|
||||
SYS_IOCTL = 16
|
||||
SYS_PREAD64 = 17
|
||||
SYS_PWRITE64 = 18
|
||||
SYS_READV = 19
|
||||
SYS_WRITEV = 20
|
||||
SYS_ACCESS = 21
|
||||
SYS_PIPE = 22
|
||||
SYS_SELECT = 23
|
||||
SYS_SCHED_YIELD = 24
|
||||
SYS_MREMAP = 25
|
||||
SYS_MSYNC = 26
|
||||
SYS_MINCORE = 27
|
||||
SYS_MADVISE = 28
|
||||
SYS_SHMGET = 29
|
||||
SYS_SHMAT = 30
|
||||
SYS_SHMCTL = 31
|
||||
SYS_DUP = 32
|
||||
SYS_DUP2 = 33
|
||||
SYS_PAUSE = 34
|
||||
SYS_NANOSLEEP = 35
|
||||
SYS_GETITIMER = 36
|
||||
SYS_ALARM = 37
|
||||
SYS_SETITIMER = 38
|
||||
SYS_GETPID = 39
|
||||
SYS_SENDFILE = 40
|
||||
SYS_SOCKET = 41
|
||||
SYS_CONNECT = 42
|
||||
SYS_ACCEPT = 43
|
||||
SYS_SENDTO = 44
|
||||
SYS_RECVFROM = 45
|
||||
SYS_SENDMSG = 46
|
||||
SYS_RECVMSG = 47
|
||||
SYS_SHUTDOWN = 48
|
||||
SYS_BIND = 49
|
||||
SYS_LISTEN = 50
|
||||
SYS_GETSOCKNAME = 51
|
||||
SYS_GETPEERNAME = 52
|
||||
SYS_SOCKETPAIR = 53
|
||||
SYS_SETSOCKOPT = 54
|
||||
SYS_GETSOCKOPT = 55
|
||||
SYS_CLONE = 56
|
||||
SYS_FORK = 57
|
||||
SYS_VFORK = 58
|
||||
SYS_EXECVE = 59
|
||||
SYS_EXIT = 60
|
||||
SYS_WAIT4 = 61
|
||||
SYS_KILL = 62
|
||||
SYS_UNAME = 63
|
||||
SYS_SEMGET = 64
|
||||
SYS_SEMOP = 65
|
||||
SYS_SEMCTL = 66
|
||||
SYS_SHMDT = 67
|
||||
SYS_MSGGET = 68
|
||||
SYS_MSGSND = 69
|
||||
SYS_MSGRCV = 70
|
||||
SYS_MSGCTL = 71
|
||||
SYS_FCNTL = 72
|
||||
SYS_FLOCK = 73
|
||||
SYS_FSYNC = 74
|
||||
SYS_FDATASYNC = 75
|
||||
SYS_TRUNCATE = 76
|
||||
SYS_FTRUNCATE = 77
|
||||
SYS_GETDENTS = 78
|
||||
SYS_GETCWD = 79
|
||||
SYS_CHDIR = 80
|
||||
SYS_FCHDIR = 81
|
||||
SYS_RENAME = 82
|
||||
SYS_MKDIR = 83
|
||||
SYS_RMDIR = 84
|
||||
SYS_CREAT = 85
|
||||
SYS_LINK = 86
|
||||
SYS_UNLINK = 87
|
||||
SYS_SYMLINK = 88
|
||||
SYS_READLINK = 89
|
||||
SYS_CHMOD = 90
|
||||
SYS_FCHMOD = 91
|
||||
SYS_CHOWN = 92
|
||||
SYS_FCHOWN = 93
|
||||
SYS_LCHOWN = 94
|
||||
SYS_UMASK = 95
|
||||
SYS_GETTIMEOFDAY = 96
|
||||
SYS_GETRLIMIT = 97
|
||||
SYS_GETRUSAGE = 98
|
||||
SYS_SYSINFO = 99
|
||||
SYS_TIMES = 100
|
||||
SYS_PTRACE = 101
|
||||
SYS_GETUID = 102
|
||||
SYS_SYSLOG = 103
|
||||
SYS_GETGID = 104
|
||||
SYS_SETUID = 105
|
||||
SYS_SETGID = 106
|
||||
SYS_GETEUID = 107
|
||||
SYS_GETEGID = 108
|
||||
SYS_SETPGID = 109
|
||||
SYS_GETPPID = 110
|
||||
SYS_GETPGRP = 111
|
||||
SYS_SETSID = 112
|
||||
SYS_SETREUID = 113
|
||||
SYS_SETREGID = 114
|
||||
SYS_GETGROUPS = 115
|
||||
SYS_SETGROUPS = 116
|
||||
SYS_SETRESUID = 117
|
||||
SYS_GETRESUID = 118
|
||||
SYS_SETRESGID = 119
|
||||
SYS_GETRESGID = 120
|
||||
SYS_GETPGID = 121
|
||||
SYS_SETFSUID = 122
|
||||
SYS_SETFSGID = 123
|
||||
SYS_GETSID = 124
|
||||
SYS_CAPGET = 125
|
||||
SYS_CAPSET = 126
|
||||
SYS_RT_SIGPENDING = 127
|
||||
SYS_RT_SIGTIMEDWAIT = 128
|
||||
SYS_RT_SIGQUEUEINFO = 129
|
||||
SYS_RT_SIGSUSPEND = 130
|
||||
SYS_SIGALTSTACK = 131
|
||||
SYS_UTIME = 132
|
||||
SYS_MKNOD = 133
|
||||
SYS_USELIB = 134
|
||||
SYS_PERSONALITY = 135
|
||||
SYS_USTAT = 136
|
||||
SYS_STATFS = 137
|
||||
SYS_FSTATFS = 138
|
||||
SYS_SYSFS = 139
|
||||
SYS_GETPRIORITY = 140
|
||||
SYS_SETPRIORITY = 141
|
||||
SYS_SCHED_SETPARAM = 142
|
||||
SYS_SCHED_GETPARAM = 143
|
||||
SYS_SCHED_SETSCHEDULER = 144
|
||||
SYS_SCHED_GETSCHEDULER = 145
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 146
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 147
|
||||
SYS_SCHED_RR_GET_INTERVAL = 148
|
||||
SYS_MLOCK = 149
|
||||
SYS_MUNLOCK = 150
|
||||
SYS_MLOCKALL = 151
|
||||
SYS_MUNLOCKALL = 152
|
||||
SYS_VHANGUP = 153
|
||||
SYS_MODIFY_LDT = 154
|
||||
SYS_PIVOT_ROOT = 155
|
||||
SYS__SYSCTL = 156
|
||||
SYS_PRCTL = 157
|
||||
SYS_ARCH_PRCTL = 158
|
||||
SYS_ADJTIMEX = 159
|
||||
SYS_SETRLIMIT = 160
|
||||
SYS_CHROOT = 161
|
||||
SYS_SYNC = 162
|
||||
SYS_ACCT = 163
|
||||
SYS_SETTIMEOFDAY = 164
|
||||
SYS_MOUNT = 165
|
||||
SYS_UMOUNT2 = 166
|
||||
SYS_SWAPON = 167
|
||||
SYS_SWAPOFF = 168
|
||||
SYS_REBOOT = 169
|
||||
SYS_SETHOSTNAME = 170
|
||||
SYS_SETDOMAINNAME = 171
|
||||
SYS_IOPL = 172
|
||||
SYS_IOPERM = 173
|
||||
SYS_CREATE_MODULE = 174
|
||||
SYS_INIT_MODULE = 175
|
||||
SYS_DELETE_MODULE = 176
|
||||
SYS_GET_KERNEL_SYMS = 177
|
||||
SYS_QUERY_MODULE = 178
|
||||
SYS_QUOTACTL = 179
|
||||
SYS_NFSSERVCTL = 180
|
||||
SYS_GETPMSG = 181
|
||||
SYS_PUTPMSG = 182
|
||||
SYS_AFS_SYSCALL = 183
|
||||
SYS_TUXCALL = 184
|
||||
SYS_SECURITY = 185
|
||||
SYS_GETTID = 186
|
||||
SYS_READAHEAD = 187
|
||||
SYS_SETXATTR = 188
|
||||
SYS_LSETXATTR = 189
|
||||
SYS_FSETXATTR = 190
|
||||
SYS_GETXATTR = 191
|
||||
SYS_LGETXATTR = 192
|
||||
SYS_FGETXATTR = 193
|
||||
SYS_LISTXATTR = 194
|
||||
SYS_LLISTXATTR = 195
|
||||
SYS_FLISTXATTR = 196
|
||||
SYS_REMOVEXATTR = 197
|
||||
SYS_LREMOVEXATTR = 198
|
||||
SYS_FREMOVEXATTR = 199
|
||||
SYS_TKILL = 200
|
||||
SYS_TIME = 201
|
||||
SYS_FUTEX = 202
|
||||
SYS_SCHED_SETAFFINITY = 203
|
||||
SYS_SCHED_GETAFFINITY = 204
|
||||
SYS_SET_THREAD_AREA = 205
|
||||
SYS_IO_SETUP = 206
|
||||
SYS_IO_DESTROY = 207
|
||||
SYS_IO_GETEVENTS = 208
|
||||
SYS_IO_SUBMIT = 209
|
||||
SYS_IO_CANCEL = 210
|
||||
SYS_GET_THREAD_AREA = 211
|
||||
SYS_LOOKUP_DCOOKIE = 212
|
||||
SYS_EPOLL_CREATE = 213
|
||||
SYS_EPOLL_CTL_OLD = 214
|
||||
SYS_EPOLL_WAIT_OLD = 215
|
||||
SYS_REMAP_FILE_PAGES = 216
|
||||
SYS_GETDENTS64 = 217
|
||||
SYS_SET_TID_ADDRESS = 218
|
||||
SYS_RESTART_SYSCALL = 219
|
||||
SYS_SEMTIMEDOP = 220
|
||||
SYS_FADVISE64 = 221
|
||||
SYS_TIMER_CREATE = 222
|
||||
SYS_TIMER_SETTIME = 223
|
||||
SYS_TIMER_GETTIME = 224
|
||||
SYS_TIMER_GETOVERRUN = 225
|
||||
SYS_TIMER_DELETE = 226
|
||||
SYS_CLOCK_SETTIME = 227
|
||||
SYS_CLOCK_GETTIME = 228
|
||||
SYS_CLOCK_GETRES = 229
|
||||
SYS_CLOCK_NANOSLEEP = 230
|
||||
SYS_EXIT_GROUP = 231
|
||||
SYS_EPOLL_WAIT = 232
|
||||
SYS_EPOLL_CTL = 233
|
||||
SYS_TGKILL = 234
|
||||
SYS_UTIMES = 235
|
||||
SYS_VSERVER = 236
|
||||
SYS_MBIND = 237
|
||||
SYS_SET_MEMPOLICY = 238
|
||||
SYS_GET_MEMPOLICY = 239
|
||||
SYS_MQ_OPEN = 240
|
||||
SYS_MQ_UNLINK = 241
|
||||
SYS_MQ_TIMEDSEND = 242
|
||||
SYS_MQ_TIMEDRECEIVE = 243
|
||||
SYS_MQ_NOTIFY = 244
|
||||
SYS_MQ_GETSETATTR = 245
|
||||
SYS_KEXEC_LOAD = 246
|
||||
SYS_WAITID = 247
|
||||
SYS_ADD_KEY = 248
|
||||
SYS_REQUEST_KEY = 249
|
||||
SYS_KEYCTL = 250
|
||||
SYS_IOPRIO_SET = 251
|
||||
SYS_IOPRIO_GET = 252
|
||||
SYS_INOTIFY_INIT = 253
|
||||
SYS_INOTIFY_ADD_WATCH = 254
|
||||
SYS_INOTIFY_RM_WATCH = 255
|
||||
SYS_MIGRATE_PAGES = 256
|
||||
SYS_OPENAT = 257
|
||||
SYS_MKDIRAT = 258
|
||||
SYS_MKNODAT = 259
|
||||
SYS_FCHOWNAT = 260
|
||||
SYS_FUTIMESAT = 261
|
||||
SYS_NEWFSTATAT = 262
|
||||
SYS_UNLINKAT = 263
|
||||
SYS_RENAMEAT = 264
|
||||
SYS_LINKAT = 265
|
||||
SYS_SYMLINKAT = 266
|
||||
SYS_READLINKAT = 267
|
||||
SYS_FCHMODAT = 268
|
||||
SYS_FACCESSAT = 269
|
||||
SYS_PSELECT6 = 270
|
||||
SYS_PPOLL = 271
|
||||
SYS_UNSHARE = 272
|
||||
SYS_SET_ROBUST_LIST = 273
|
||||
SYS_GET_ROBUST_LIST = 274
|
||||
SYS_SPLICE = 275
|
||||
SYS_TEE = 276
|
||||
SYS_SYNC_FILE_RANGE = 277
|
||||
SYS_VMSPLICE = 278
|
||||
SYS_MOVE_PAGES = 279
|
||||
SYS_UTIMENSAT = 280
|
||||
SYS_EPOLL_PWAIT = 281
|
||||
SYS_SIGNALFD = 282
|
||||
SYS_TIMERFD_CREATE = 283
|
||||
SYS_EVENTFD = 284
|
||||
SYS_FALLOCATE = 285
|
||||
SYS_TIMERFD_SETTIME = 286
|
||||
SYS_TIMERFD_GETTIME = 287
|
||||
SYS_ACCEPT4 = 288
|
||||
SYS_SIGNALFD4 = 289
|
||||
SYS_EVENTFD2 = 290
|
||||
SYS_EPOLL_CREATE1 = 291
|
||||
SYS_DUP3 = 292
|
||||
SYS_PIPE2 = 293
|
||||
SYS_INOTIFY_INIT1 = 294
|
||||
SYS_PREADV = 295
|
||||
SYS_PWRITEV = 296
|
||||
SYS_RT_TGSIGQUEUEINFO = 297
|
||||
SYS_PERF_EVENT_OPEN = 298
|
||||
SYS_RECVMMSG = 299
|
||||
SYS_FANOTIFY_INIT = 300
|
||||
SYS_FANOTIFY_MARK = 301
|
||||
SYS_PRLIMIT64 = 302
|
||||
SYS_NAME_TO_HANDLE_AT = 303
|
||||
SYS_OPEN_BY_HANDLE_AT = 304
|
||||
SYS_CLOCK_ADJTIME = 305
|
||||
SYS_SYNCFS = 306
|
||||
SYS_SENDMMSG = 307
|
||||
SYS_SETNS = 308
|
||||
SYS_GETCPU = 309
|
||||
SYS_PROCESS_VM_READV = 310
|
||||
SYS_PROCESS_VM_WRITEV = 311
|
||||
SYS_KCMP = 312
|
||||
SYS_FINIT_MODULE = 313
|
||||
SYS_SCHED_SETATTR = 314
|
||||
SYS_SCHED_GETATTR = 315
|
||||
SYS_RENAMEAT2 = 316
|
||||
SYS_SECCOMP = 317
|
||||
SYS_GETRANDOM = 318
|
||||
SYS_MEMFD_CREATE = 319
|
||||
SYS_KEXEC_FILE_LOAD = 320
|
||||
SYS_BPF = 321
|
||||
SYS_EXECVEAT = 322
|
||||
SYS_USERFAULTFD = 323
|
||||
SYS_MEMBARRIER = 324
|
||||
SYS_MLOCK2 = 325
|
||||
SYS_COPY_FILE_RANGE = 326
|
||||
SYS_PREADV2 = 327
|
||||
SYS_PWRITEV2 = 328
|
||||
SYS_PKEY_MPROTECT = 329
|
||||
SYS_PKEY_ALLOC = 330
|
||||
SYS_PKEY_FREE = 331
|
||||
SYS_STATX = 332
|
||||
SYS_IO_PGETEVENTS = 333
|
||||
SYS_RSEQ = 334
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_READ = 0
|
||||
SYS_WRITE = 1
|
||||
SYS_OPEN = 2
|
||||
SYS_CLOSE = 3
|
||||
SYS_STAT = 4
|
||||
SYS_FSTAT = 5
|
||||
SYS_LSTAT = 6
|
||||
SYS_POLL = 7
|
||||
SYS_LSEEK = 8
|
||||
SYS_MMAP = 9
|
||||
SYS_MPROTECT = 10
|
||||
SYS_MUNMAP = 11
|
||||
SYS_BRK = 12
|
||||
SYS_RT_SIGACTION = 13
|
||||
SYS_RT_SIGPROCMASK = 14
|
||||
SYS_RT_SIGRETURN = 15
|
||||
SYS_IOCTL = 16
|
||||
SYS_PREAD64 = 17
|
||||
SYS_PWRITE64 = 18
|
||||
SYS_READV = 19
|
||||
SYS_WRITEV = 20
|
||||
SYS_ACCESS = 21
|
||||
SYS_PIPE = 22
|
||||
SYS_SELECT = 23
|
||||
SYS_SCHED_YIELD = 24
|
||||
SYS_MREMAP = 25
|
||||
SYS_MSYNC = 26
|
||||
SYS_MINCORE = 27
|
||||
SYS_MADVISE = 28
|
||||
SYS_SHMGET = 29
|
||||
SYS_SHMAT = 30
|
||||
SYS_SHMCTL = 31
|
||||
SYS_DUP = 32
|
||||
SYS_DUP2 = 33
|
||||
SYS_PAUSE = 34
|
||||
SYS_NANOSLEEP = 35
|
||||
SYS_GETITIMER = 36
|
||||
SYS_ALARM = 37
|
||||
SYS_SETITIMER = 38
|
||||
SYS_GETPID = 39
|
||||
SYS_SENDFILE = 40
|
||||
SYS_SOCKET = 41
|
||||
SYS_CONNECT = 42
|
||||
SYS_ACCEPT = 43
|
||||
SYS_SENDTO = 44
|
||||
SYS_RECVFROM = 45
|
||||
SYS_SENDMSG = 46
|
||||
SYS_RECVMSG = 47
|
||||
SYS_SHUTDOWN = 48
|
||||
SYS_BIND = 49
|
||||
SYS_LISTEN = 50
|
||||
SYS_GETSOCKNAME = 51
|
||||
SYS_GETPEERNAME = 52
|
||||
SYS_SOCKETPAIR = 53
|
||||
SYS_SETSOCKOPT = 54
|
||||
SYS_GETSOCKOPT = 55
|
||||
SYS_CLONE = 56
|
||||
SYS_FORK = 57
|
||||
SYS_VFORK = 58
|
||||
SYS_EXECVE = 59
|
||||
SYS_EXIT = 60
|
||||
SYS_WAIT4 = 61
|
||||
SYS_KILL = 62
|
||||
SYS_UNAME = 63
|
||||
SYS_SEMGET = 64
|
||||
SYS_SEMOP = 65
|
||||
SYS_SEMCTL = 66
|
||||
SYS_SHMDT = 67
|
||||
SYS_MSGGET = 68
|
||||
SYS_MSGSND = 69
|
||||
SYS_MSGRCV = 70
|
||||
SYS_MSGCTL = 71
|
||||
SYS_FCNTL = 72
|
||||
SYS_FLOCK = 73
|
||||
SYS_FSYNC = 74
|
||||
SYS_FDATASYNC = 75
|
||||
SYS_TRUNCATE = 76
|
||||
SYS_FTRUNCATE = 77
|
||||
SYS_GETDENTS = 78
|
||||
SYS_GETCWD = 79
|
||||
SYS_CHDIR = 80
|
||||
SYS_FCHDIR = 81
|
||||
SYS_RENAME = 82
|
||||
SYS_MKDIR = 83
|
||||
SYS_RMDIR = 84
|
||||
SYS_CREAT = 85
|
||||
SYS_LINK = 86
|
||||
SYS_UNLINK = 87
|
||||
SYS_SYMLINK = 88
|
||||
SYS_READLINK = 89
|
||||
SYS_CHMOD = 90
|
||||
SYS_FCHMOD = 91
|
||||
SYS_CHOWN = 92
|
||||
SYS_FCHOWN = 93
|
||||
SYS_LCHOWN = 94
|
||||
SYS_UMASK = 95
|
||||
SYS_GETTIMEOFDAY = 96
|
||||
SYS_GETRLIMIT = 97
|
||||
SYS_GETRUSAGE = 98
|
||||
SYS_SYSINFO = 99
|
||||
SYS_TIMES = 100
|
||||
SYS_PTRACE = 101
|
||||
SYS_GETUID = 102
|
||||
SYS_SYSLOG = 103
|
||||
SYS_GETGID = 104
|
||||
SYS_SETUID = 105
|
||||
SYS_SETGID = 106
|
||||
SYS_GETEUID = 107
|
||||
SYS_GETEGID = 108
|
||||
SYS_SETPGID = 109
|
||||
SYS_GETPPID = 110
|
||||
SYS_GETPGRP = 111
|
||||
SYS_SETSID = 112
|
||||
SYS_SETREUID = 113
|
||||
SYS_SETREGID = 114
|
||||
SYS_GETGROUPS = 115
|
||||
SYS_SETGROUPS = 116
|
||||
SYS_SETRESUID = 117
|
||||
SYS_GETRESUID = 118
|
||||
SYS_SETRESGID = 119
|
||||
SYS_GETRESGID = 120
|
||||
SYS_GETPGID = 121
|
||||
SYS_SETFSUID = 122
|
||||
SYS_SETFSGID = 123
|
||||
SYS_GETSID = 124
|
||||
SYS_CAPGET = 125
|
||||
SYS_CAPSET = 126
|
||||
SYS_RT_SIGPENDING = 127
|
||||
SYS_RT_SIGTIMEDWAIT = 128
|
||||
SYS_RT_SIGQUEUEINFO = 129
|
||||
SYS_RT_SIGSUSPEND = 130
|
||||
SYS_SIGALTSTACK = 131
|
||||
SYS_UTIME = 132
|
||||
SYS_MKNOD = 133
|
||||
SYS_USELIB = 134
|
||||
SYS_PERSONALITY = 135
|
||||
SYS_USTAT = 136
|
||||
SYS_STATFS = 137
|
||||
SYS_FSTATFS = 138
|
||||
SYS_SYSFS = 139
|
||||
SYS_GETPRIORITY = 140
|
||||
SYS_SETPRIORITY = 141
|
||||
SYS_SCHED_SETPARAM = 142
|
||||
SYS_SCHED_GETPARAM = 143
|
||||
SYS_SCHED_SETSCHEDULER = 144
|
||||
SYS_SCHED_GETSCHEDULER = 145
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 146
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 147
|
||||
SYS_SCHED_RR_GET_INTERVAL = 148
|
||||
SYS_MLOCK = 149
|
||||
SYS_MUNLOCK = 150
|
||||
SYS_MLOCKALL = 151
|
||||
SYS_MUNLOCKALL = 152
|
||||
SYS_VHANGUP = 153
|
||||
SYS_MODIFY_LDT = 154
|
||||
SYS_PIVOT_ROOT = 155
|
||||
SYS__SYSCTL = 156
|
||||
SYS_PRCTL = 157
|
||||
SYS_ARCH_PRCTL = 158
|
||||
SYS_ADJTIMEX = 159
|
||||
SYS_SETRLIMIT = 160
|
||||
SYS_CHROOT = 161
|
||||
SYS_SYNC = 162
|
||||
SYS_ACCT = 163
|
||||
SYS_SETTIMEOFDAY = 164
|
||||
SYS_MOUNT = 165
|
||||
SYS_UMOUNT2 = 166
|
||||
SYS_SWAPON = 167
|
||||
SYS_SWAPOFF = 168
|
||||
SYS_REBOOT = 169
|
||||
SYS_SETHOSTNAME = 170
|
||||
SYS_SETDOMAINNAME = 171
|
||||
SYS_IOPL = 172
|
||||
SYS_IOPERM = 173
|
||||
SYS_CREATE_MODULE = 174
|
||||
SYS_INIT_MODULE = 175
|
||||
SYS_DELETE_MODULE = 176
|
||||
SYS_GET_KERNEL_SYMS = 177
|
||||
SYS_QUERY_MODULE = 178
|
||||
SYS_QUOTACTL = 179
|
||||
SYS_NFSSERVCTL = 180
|
||||
SYS_GETPMSG = 181
|
||||
SYS_PUTPMSG = 182
|
||||
SYS_AFS_SYSCALL = 183
|
||||
SYS_TUXCALL = 184
|
||||
SYS_SECURITY = 185
|
||||
SYS_GETTID = 186
|
||||
SYS_READAHEAD = 187
|
||||
SYS_SETXATTR = 188
|
||||
SYS_LSETXATTR = 189
|
||||
SYS_FSETXATTR = 190
|
||||
SYS_GETXATTR = 191
|
||||
SYS_LGETXATTR = 192
|
||||
SYS_FGETXATTR = 193
|
||||
SYS_LISTXATTR = 194
|
||||
SYS_LLISTXATTR = 195
|
||||
SYS_FLISTXATTR = 196
|
||||
SYS_REMOVEXATTR = 197
|
||||
SYS_LREMOVEXATTR = 198
|
||||
SYS_FREMOVEXATTR = 199
|
||||
SYS_TKILL = 200
|
||||
SYS_TIME = 201
|
||||
SYS_FUTEX = 202
|
||||
SYS_SCHED_SETAFFINITY = 203
|
||||
SYS_SCHED_GETAFFINITY = 204
|
||||
SYS_SET_THREAD_AREA = 205
|
||||
SYS_IO_SETUP = 206
|
||||
SYS_IO_DESTROY = 207
|
||||
SYS_IO_GETEVENTS = 208
|
||||
SYS_IO_SUBMIT = 209
|
||||
SYS_IO_CANCEL = 210
|
||||
SYS_GET_THREAD_AREA = 211
|
||||
SYS_LOOKUP_DCOOKIE = 212
|
||||
SYS_EPOLL_CREATE = 213
|
||||
SYS_EPOLL_CTL_OLD = 214
|
||||
SYS_EPOLL_WAIT_OLD = 215
|
||||
SYS_REMAP_FILE_PAGES = 216
|
||||
SYS_GETDENTS64 = 217
|
||||
SYS_SET_TID_ADDRESS = 218
|
||||
SYS_RESTART_SYSCALL = 219
|
||||
SYS_SEMTIMEDOP = 220
|
||||
SYS_FADVISE64 = 221
|
||||
SYS_TIMER_CREATE = 222
|
||||
SYS_TIMER_SETTIME = 223
|
||||
SYS_TIMER_GETTIME = 224
|
||||
SYS_TIMER_GETOVERRUN = 225
|
||||
SYS_TIMER_DELETE = 226
|
||||
SYS_CLOCK_SETTIME = 227
|
||||
SYS_CLOCK_GETTIME = 228
|
||||
SYS_CLOCK_GETRES = 229
|
||||
SYS_CLOCK_NANOSLEEP = 230
|
||||
SYS_EXIT_GROUP = 231
|
||||
SYS_EPOLL_WAIT = 232
|
||||
SYS_EPOLL_CTL = 233
|
||||
SYS_TGKILL = 234
|
||||
SYS_UTIMES = 235
|
||||
SYS_VSERVER = 236
|
||||
SYS_MBIND = 237
|
||||
SYS_SET_MEMPOLICY = 238
|
||||
SYS_GET_MEMPOLICY = 239
|
||||
SYS_MQ_OPEN = 240
|
||||
SYS_MQ_UNLINK = 241
|
||||
SYS_MQ_TIMEDSEND = 242
|
||||
SYS_MQ_TIMEDRECEIVE = 243
|
||||
SYS_MQ_NOTIFY = 244
|
||||
SYS_MQ_GETSETATTR = 245
|
||||
SYS_KEXEC_LOAD = 246
|
||||
SYS_WAITID = 247
|
||||
SYS_ADD_KEY = 248
|
||||
SYS_REQUEST_KEY = 249
|
||||
SYS_KEYCTL = 250
|
||||
SYS_IOPRIO_SET = 251
|
||||
SYS_IOPRIO_GET = 252
|
||||
SYS_INOTIFY_INIT = 253
|
||||
SYS_INOTIFY_ADD_WATCH = 254
|
||||
SYS_INOTIFY_RM_WATCH = 255
|
||||
SYS_MIGRATE_PAGES = 256
|
||||
SYS_OPENAT = 257
|
||||
SYS_MKDIRAT = 258
|
||||
SYS_MKNODAT = 259
|
||||
SYS_FCHOWNAT = 260
|
||||
SYS_FUTIMESAT = 261
|
||||
SYS_NEWFSTATAT = 262
|
||||
SYS_UNLINKAT = 263
|
||||
SYS_RENAMEAT = 264
|
||||
SYS_LINKAT = 265
|
||||
SYS_SYMLINKAT = 266
|
||||
SYS_READLINKAT = 267
|
||||
SYS_FCHMODAT = 268
|
||||
SYS_FACCESSAT = 269
|
||||
SYS_PSELECT6 = 270
|
||||
SYS_PPOLL = 271
|
||||
SYS_UNSHARE = 272
|
||||
SYS_SET_ROBUST_LIST = 273
|
||||
SYS_GET_ROBUST_LIST = 274
|
||||
SYS_SPLICE = 275
|
||||
SYS_TEE = 276
|
||||
SYS_SYNC_FILE_RANGE = 277
|
||||
SYS_VMSPLICE = 278
|
||||
SYS_MOVE_PAGES = 279
|
||||
SYS_UTIMENSAT = 280
|
||||
SYS_EPOLL_PWAIT = 281
|
||||
SYS_SIGNALFD = 282
|
||||
SYS_TIMERFD_CREATE = 283
|
||||
SYS_EVENTFD = 284
|
||||
SYS_FALLOCATE = 285
|
||||
SYS_TIMERFD_SETTIME = 286
|
||||
SYS_TIMERFD_GETTIME = 287
|
||||
SYS_ACCEPT4 = 288
|
||||
SYS_SIGNALFD4 = 289
|
||||
SYS_EVENTFD2 = 290
|
||||
SYS_EPOLL_CREATE1 = 291
|
||||
SYS_DUP3 = 292
|
||||
SYS_PIPE2 = 293
|
||||
SYS_INOTIFY_INIT1 = 294
|
||||
SYS_PREADV = 295
|
||||
SYS_PWRITEV = 296
|
||||
SYS_RT_TGSIGQUEUEINFO = 297
|
||||
SYS_PERF_EVENT_OPEN = 298
|
||||
SYS_RECVMMSG = 299
|
||||
SYS_FANOTIFY_INIT = 300
|
||||
SYS_FANOTIFY_MARK = 301
|
||||
SYS_PRLIMIT64 = 302
|
||||
SYS_NAME_TO_HANDLE_AT = 303
|
||||
SYS_OPEN_BY_HANDLE_AT = 304
|
||||
SYS_CLOCK_ADJTIME = 305
|
||||
SYS_SYNCFS = 306
|
||||
SYS_SENDMMSG = 307
|
||||
SYS_SETNS = 308
|
||||
SYS_GETCPU = 309
|
||||
SYS_PROCESS_VM_READV = 310
|
||||
SYS_PROCESS_VM_WRITEV = 311
|
||||
SYS_KCMP = 312
|
||||
SYS_FINIT_MODULE = 313
|
||||
SYS_SCHED_SETATTR = 314
|
||||
SYS_SCHED_GETATTR = 315
|
||||
SYS_RENAMEAT2 = 316
|
||||
SYS_SECCOMP = 317
|
||||
SYS_GETRANDOM = 318
|
||||
SYS_MEMFD_CREATE = 319
|
||||
SYS_KEXEC_FILE_LOAD = 320
|
||||
SYS_BPF = 321
|
||||
SYS_EXECVEAT = 322
|
||||
SYS_USERFAULTFD = 323
|
||||
SYS_MEMBARRIER = 324
|
||||
SYS_MLOCK2 = 325
|
||||
SYS_COPY_FILE_RANGE = 326
|
||||
SYS_PREADV2 = 327
|
||||
SYS_PWRITEV2 = 328
|
||||
SYS_PKEY_MPROTECT = 329
|
||||
SYS_PKEY_ALLOC = 330
|
||||
SYS_PKEY_FREE = 331
|
||||
SYS_STATX = 332
|
||||
SYS_IO_PGETEVENTS = 333
|
||||
SYS_RSEQ = 334
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||
SYS_LANDLOCK_ADD_RULE = 445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||
)
|
||||
|
|
|
@ -403,4 +403,7 @@ const (
|
|||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||
SYS_LANDLOCK_ADD_RULE = 445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||
)
|
||||
|
|
|
@ -7,303 +7,306 @@
|
|||
package unix
|
||||
|
||||
const (
|
||||
SYS_IO_SETUP = 0
|
||||
SYS_IO_DESTROY = 1
|
||||
SYS_IO_SUBMIT = 2
|
||||
SYS_IO_CANCEL = 3
|
||||
SYS_IO_GETEVENTS = 4
|
||||
SYS_SETXATTR = 5
|
||||
SYS_LSETXATTR = 6
|
||||
SYS_FSETXATTR = 7
|
||||
SYS_GETXATTR = 8
|
||||
SYS_LGETXATTR = 9
|
||||
SYS_FGETXATTR = 10
|
||||
SYS_LISTXATTR = 11
|
||||
SYS_LLISTXATTR = 12
|
||||
SYS_FLISTXATTR = 13
|
||||
SYS_REMOVEXATTR = 14
|
||||
SYS_LREMOVEXATTR = 15
|
||||
SYS_FREMOVEXATTR = 16
|
||||
SYS_GETCWD = 17
|
||||
SYS_LOOKUP_DCOOKIE = 18
|
||||
SYS_EVENTFD2 = 19
|
||||
SYS_EPOLL_CREATE1 = 20
|
||||
SYS_EPOLL_CTL = 21
|
||||
SYS_EPOLL_PWAIT = 22
|
||||
SYS_DUP = 23
|
||||
SYS_DUP3 = 24
|
||||
SYS_FCNTL = 25
|
||||
SYS_INOTIFY_INIT1 = 26
|
||||
SYS_INOTIFY_ADD_WATCH = 27
|
||||
SYS_INOTIFY_RM_WATCH = 28
|
||||
SYS_IOCTL = 29
|
||||
SYS_IOPRIO_SET = 30
|
||||
SYS_IOPRIO_GET = 31
|
||||
SYS_FLOCK = 32
|
||||
SYS_MKNODAT = 33
|
||||
SYS_MKDIRAT = 34
|
||||
SYS_UNLINKAT = 35
|
||||
SYS_SYMLINKAT = 36
|
||||
SYS_LINKAT = 37
|
||||
SYS_RENAMEAT = 38
|
||||
SYS_UMOUNT2 = 39
|
||||
SYS_MOUNT = 40
|
||||
SYS_PIVOT_ROOT = 41
|
||||
SYS_NFSSERVCTL = 42
|
||||
SYS_STATFS = 43
|
||||
SYS_FSTATFS = 44
|
||||
SYS_TRUNCATE = 45
|
||||
SYS_FTRUNCATE = 46
|
||||
SYS_FALLOCATE = 47
|
||||
SYS_FACCESSAT = 48
|
||||
SYS_CHDIR = 49
|
||||
SYS_FCHDIR = 50
|
||||
SYS_CHROOT = 51
|
||||
SYS_FCHMOD = 52
|
||||
SYS_FCHMODAT = 53
|
||||
SYS_FCHOWNAT = 54
|
||||
SYS_FCHOWN = 55
|
||||
SYS_OPENAT = 56
|
||||
SYS_CLOSE = 57
|
||||
SYS_VHANGUP = 58
|
||||
SYS_PIPE2 = 59
|
||||
SYS_QUOTACTL = 60
|
||||
SYS_GETDENTS64 = 61
|
||||
SYS_LSEEK = 62
|
||||
SYS_READ = 63
|
||||
SYS_WRITE = 64
|
||||
SYS_READV = 65
|
||||
SYS_WRITEV = 66
|
||||
SYS_PREAD64 = 67
|
||||
SYS_PWRITE64 = 68
|
||||
SYS_PREADV = 69
|
||||
SYS_PWRITEV = 70
|
||||
SYS_SENDFILE = 71
|
||||
SYS_PSELECT6 = 72
|
||||
SYS_PPOLL = 73
|
||||
SYS_SIGNALFD4 = 74
|
||||
SYS_VMSPLICE = 75
|
||||
SYS_SPLICE = 76
|
||||
SYS_TEE = 77
|
||||
SYS_READLINKAT = 78
|
||||
SYS_FSTATAT = 79
|
||||
SYS_FSTAT = 80
|
||||
SYS_SYNC = 81
|
||||
SYS_FSYNC = 82
|
||||
SYS_FDATASYNC = 83
|
||||
SYS_SYNC_FILE_RANGE = 84
|
||||
SYS_TIMERFD_CREATE = 85
|
||||
SYS_TIMERFD_SETTIME = 86
|
||||
SYS_TIMERFD_GETTIME = 87
|
||||
SYS_UTIMENSAT = 88
|
||||
SYS_ACCT = 89
|
||||
SYS_CAPGET = 90
|
||||
SYS_CAPSET = 91
|
||||
SYS_PERSONALITY = 92
|
||||
SYS_EXIT = 93
|
||||
SYS_EXIT_GROUP = 94
|
||||
SYS_WAITID = 95
|
||||
SYS_SET_TID_ADDRESS = 96
|
||||
SYS_UNSHARE = 97
|
||||
SYS_FUTEX = 98
|
||||
SYS_SET_ROBUST_LIST = 99
|
||||
SYS_GET_ROBUST_LIST = 100
|
||||
SYS_NANOSLEEP = 101
|
||||
SYS_GETITIMER = 102
|
||||
SYS_SETITIMER = 103
|
||||
SYS_KEXEC_LOAD = 104
|
||||
SYS_INIT_MODULE = 105
|
||||
SYS_DELETE_MODULE = 106
|
||||
SYS_TIMER_CREATE = 107
|
||||
SYS_TIMER_GETTIME = 108
|
||||
SYS_TIMER_GETOVERRUN = 109
|
||||
SYS_TIMER_SETTIME = 110
|
||||
SYS_TIMER_DELETE = 111
|
||||
SYS_CLOCK_SETTIME = 112
|
||||
SYS_CLOCK_GETTIME = 113
|
||||
SYS_CLOCK_GETRES = 114
|
||||
SYS_CLOCK_NANOSLEEP = 115
|
||||
SYS_SYSLOG = 116
|
||||
SYS_PTRACE = 117
|
||||
SYS_SCHED_SETPARAM = 118
|
||||
SYS_SCHED_SETSCHEDULER = 119
|
||||
SYS_SCHED_GETSCHEDULER = 120
|
||||
SYS_SCHED_GETPARAM = 121
|
||||
SYS_SCHED_SETAFFINITY = 122
|
||||
SYS_SCHED_GETAFFINITY = 123
|
||||
SYS_SCHED_YIELD = 124
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 125
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 126
|
||||
SYS_SCHED_RR_GET_INTERVAL = 127
|
||||
SYS_RESTART_SYSCALL = 128
|
||||
SYS_KILL = 129
|
||||
SYS_TKILL = 130
|
||||
SYS_TGKILL = 131
|
||||
SYS_SIGALTSTACK = 132
|
||||
SYS_RT_SIGSUSPEND = 133
|
||||
SYS_RT_SIGACTION = 134
|
||||
SYS_RT_SIGPROCMASK = 135
|
||||
SYS_RT_SIGPENDING = 136
|
||||
SYS_RT_SIGTIMEDWAIT = 137
|
||||
SYS_RT_SIGQUEUEINFO = 138
|
||||
SYS_RT_SIGRETURN = 139
|
||||
SYS_SETPRIORITY = 140
|
||||
SYS_GETPRIORITY = 141
|
||||
SYS_REBOOT = 142
|
||||
SYS_SETREGID = 143
|
||||
SYS_SETGID = 144
|
||||
SYS_SETREUID = 145
|
||||
SYS_SETUID = 146
|
||||
SYS_SETRESUID = 147
|
||||
SYS_GETRESUID = 148
|
||||
SYS_SETRESGID = 149
|
||||
SYS_GETRESGID = 150
|
||||
SYS_SETFSUID = 151
|
||||
SYS_SETFSGID = 152
|
||||
SYS_TIMES = 153
|
||||
SYS_SETPGID = 154
|
||||
SYS_GETPGID = 155
|
||||
SYS_GETSID = 156
|
||||
SYS_SETSID = 157
|
||||
SYS_GETGROUPS = 158
|
||||
SYS_SETGROUPS = 159
|
||||
SYS_UNAME = 160
|
||||
SYS_SETHOSTNAME = 161
|
||||
SYS_SETDOMAINNAME = 162
|
||||
SYS_GETRLIMIT = 163
|
||||
SYS_SETRLIMIT = 164
|
||||
SYS_GETRUSAGE = 165
|
||||
SYS_UMASK = 166
|
||||
SYS_PRCTL = 167
|
||||
SYS_GETCPU = 168
|
||||
SYS_GETTIMEOFDAY = 169
|
||||
SYS_SETTIMEOFDAY = 170
|
||||
SYS_ADJTIMEX = 171
|
||||
SYS_GETPID = 172
|
||||
SYS_GETPPID = 173
|
||||
SYS_GETUID = 174
|
||||
SYS_GETEUID = 175
|
||||
SYS_GETGID = 176
|
||||
SYS_GETEGID = 177
|
||||
SYS_GETTID = 178
|
||||
SYS_SYSINFO = 179
|
||||
SYS_MQ_OPEN = 180
|
||||
SYS_MQ_UNLINK = 181
|
||||
SYS_MQ_TIMEDSEND = 182
|
||||
SYS_MQ_TIMEDRECEIVE = 183
|
||||
SYS_MQ_NOTIFY = 184
|
||||
SYS_MQ_GETSETATTR = 185
|
||||
SYS_MSGGET = 186
|
||||
SYS_MSGCTL = 187
|
||||
SYS_MSGRCV = 188
|
||||
SYS_MSGSND = 189
|
||||
SYS_SEMGET = 190
|
||||
SYS_SEMCTL = 191
|
||||
SYS_SEMTIMEDOP = 192
|
||||
SYS_SEMOP = 193
|
||||
SYS_SHMGET = 194
|
||||
SYS_SHMCTL = 195
|
||||
SYS_SHMAT = 196
|
||||
SYS_SHMDT = 197
|
||||
SYS_SOCKET = 198
|
||||
SYS_SOCKETPAIR = 199
|
||||
SYS_BIND = 200
|
||||
SYS_LISTEN = 201
|
||||
SYS_ACCEPT = 202
|
||||
SYS_CONNECT = 203
|
||||
SYS_GETSOCKNAME = 204
|
||||
SYS_GETPEERNAME = 205
|
||||
SYS_SENDTO = 206
|
||||
SYS_RECVFROM = 207
|
||||
SYS_SETSOCKOPT = 208
|
||||
SYS_GETSOCKOPT = 209
|
||||
SYS_SHUTDOWN = 210
|
||||
SYS_SENDMSG = 211
|
||||
SYS_RECVMSG = 212
|
||||
SYS_READAHEAD = 213
|
||||
SYS_BRK = 214
|
||||
SYS_MUNMAP = 215
|
||||
SYS_MREMAP = 216
|
||||
SYS_ADD_KEY = 217
|
||||
SYS_REQUEST_KEY = 218
|
||||
SYS_KEYCTL = 219
|
||||
SYS_CLONE = 220
|
||||
SYS_EXECVE = 221
|
||||
SYS_MMAP = 222
|
||||
SYS_FADVISE64 = 223
|
||||
SYS_SWAPON = 224
|
||||
SYS_SWAPOFF = 225
|
||||
SYS_MPROTECT = 226
|
||||
SYS_MSYNC = 227
|
||||
SYS_MLOCK = 228
|
||||
SYS_MUNLOCK = 229
|
||||
SYS_MLOCKALL = 230
|
||||
SYS_MUNLOCKALL = 231
|
||||
SYS_MINCORE = 232
|
||||
SYS_MADVISE = 233
|
||||
SYS_REMAP_FILE_PAGES = 234
|
||||
SYS_MBIND = 235
|
||||
SYS_GET_MEMPOLICY = 236
|
||||
SYS_SET_MEMPOLICY = 237
|
||||
SYS_MIGRATE_PAGES = 238
|
||||
SYS_MOVE_PAGES = 239
|
||||
SYS_RT_TGSIGQUEUEINFO = 240
|
||||
SYS_PERF_EVENT_OPEN = 241
|
||||
SYS_ACCEPT4 = 242
|
||||
SYS_RECVMMSG = 243
|
||||
SYS_ARCH_SPECIFIC_SYSCALL = 244
|
||||
SYS_WAIT4 = 260
|
||||
SYS_PRLIMIT64 = 261
|
||||
SYS_FANOTIFY_INIT = 262
|
||||
SYS_FANOTIFY_MARK = 263
|
||||
SYS_NAME_TO_HANDLE_AT = 264
|
||||
SYS_OPEN_BY_HANDLE_AT = 265
|
||||
SYS_CLOCK_ADJTIME = 266
|
||||
SYS_SYNCFS = 267
|
||||
SYS_SETNS = 268
|
||||
SYS_SENDMMSG = 269
|
||||
SYS_PROCESS_VM_READV = 270
|
||||
SYS_PROCESS_VM_WRITEV = 271
|
||||
SYS_KCMP = 272
|
||||
SYS_FINIT_MODULE = 273
|
||||
SYS_SCHED_SETATTR = 274
|
||||
SYS_SCHED_GETATTR = 275
|
||||
SYS_RENAMEAT2 = 276
|
||||
SYS_SECCOMP = 277
|
||||
SYS_GETRANDOM = 278
|
||||
SYS_MEMFD_CREATE = 279
|
||||
SYS_BPF = 280
|
||||
SYS_EXECVEAT = 281
|
||||
SYS_USERFAULTFD = 282
|
||||
SYS_MEMBARRIER = 283
|
||||
SYS_MLOCK2 = 284
|
||||
SYS_COPY_FILE_RANGE = 285
|
||||
SYS_PREADV2 = 286
|
||||
SYS_PWRITEV2 = 287
|
||||
SYS_PKEY_MPROTECT = 288
|
||||
SYS_PKEY_ALLOC = 289
|
||||
SYS_PKEY_FREE = 290
|
||||
SYS_STATX = 291
|
||||
SYS_IO_PGETEVENTS = 292
|
||||
SYS_RSEQ = 293
|
||||
SYS_KEXEC_FILE_LOAD = 294
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_IO_SETUP = 0
|
||||
SYS_IO_DESTROY = 1
|
||||
SYS_IO_SUBMIT = 2
|
||||
SYS_IO_CANCEL = 3
|
||||
SYS_IO_GETEVENTS = 4
|
||||
SYS_SETXATTR = 5
|
||||
SYS_LSETXATTR = 6
|
||||
SYS_FSETXATTR = 7
|
||||
SYS_GETXATTR = 8
|
||||
SYS_LGETXATTR = 9
|
||||
SYS_FGETXATTR = 10
|
||||
SYS_LISTXATTR = 11
|
||||
SYS_LLISTXATTR = 12
|
||||
SYS_FLISTXATTR = 13
|
||||
SYS_REMOVEXATTR = 14
|
||||
SYS_LREMOVEXATTR = 15
|
||||
SYS_FREMOVEXATTR = 16
|
||||
SYS_GETCWD = 17
|
||||
SYS_LOOKUP_DCOOKIE = 18
|
||||
SYS_EVENTFD2 = 19
|
||||
SYS_EPOLL_CREATE1 = 20
|
||||
SYS_EPOLL_CTL = 21
|
||||
SYS_EPOLL_PWAIT = 22
|
||||
SYS_DUP = 23
|
||||
SYS_DUP3 = 24
|
||||
SYS_FCNTL = 25
|
||||
SYS_INOTIFY_INIT1 = 26
|
||||
SYS_INOTIFY_ADD_WATCH = 27
|
||||
SYS_INOTIFY_RM_WATCH = 28
|
||||
SYS_IOCTL = 29
|
||||
SYS_IOPRIO_SET = 30
|
||||
SYS_IOPRIO_GET = 31
|
||||
SYS_FLOCK = 32
|
||||
SYS_MKNODAT = 33
|
||||
SYS_MKDIRAT = 34
|
||||
SYS_UNLINKAT = 35
|
||||
SYS_SYMLINKAT = 36
|
||||
SYS_LINKAT = 37
|
||||
SYS_RENAMEAT = 38
|
||||
SYS_UMOUNT2 = 39
|
||||
SYS_MOUNT = 40
|
||||
SYS_PIVOT_ROOT = 41
|
||||
SYS_NFSSERVCTL = 42
|
||||
SYS_STATFS = 43
|
||||
SYS_FSTATFS = 44
|
||||
SYS_TRUNCATE = 45
|
||||
SYS_FTRUNCATE = 46
|
||||
SYS_FALLOCATE = 47
|
||||
SYS_FACCESSAT = 48
|
||||
SYS_CHDIR = 49
|
||||
SYS_FCHDIR = 50
|
||||
SYS_CHROOT = 51
|
||||
SYS_FCHMOD = 52
|
||||
SYS_FCHMODAT = 53
|
||||
SYS_FCHOWNAT = 54
|
||||
SYS_FCHOWN = 55
|
||||
SYS_OPENAT = 56
|
||||
SYS_CLOSE = 57
|
||||
SYS_VHANGUP = 58
|
||||
SYS_PIPE2 = 59
|
||||
SYS_QUOTACTL = 60
|
||||
SYS_GETDENTS64 = 61
|
||||
SYS_LSEEK = 62
|
||||
SYS_READ = 63
|
||||
SYS_WRITE = 64
|
||||
SYS_READV = 65
|
||||
SYS_WRITEV = 66
|
||||
SYS_PREAD64 = 67
|
||||
SYS_PWRITE64 = 68
|
||||
SYS_PREADV = 69
|
||||
SYS_PWRITEV = 70
|
||||
SYS_SENDFILE = 71
|
||||
SYS_PSELECT6 = 72
|
||||
SYS_PPOLL = 73
|
||||
SYS_SIGNALFD4 = 74
|
||||
SYS_VMSPLICE = 75
|
||||
SYS_SPLICE = 76
|
||||
SYS_TEE = 77
|
||||
SYS_READLINKAT = 78
|
||||
SYS_FSTATAT = 79
|
||||
SYS_FSTAT = 80
|
||||
SYS_SYNC = 81
|
||||
SYS_FSYNC = 82
|
||||
SYS_FDATASYNC = 83
|
||||
SYS_SYNC_FILE_RANGE = 84
|
||||
SYS_TIMERFD_CREATE = 85
|
||||
SYS_TIMERFD_SETTIME = 86
|
||||
SYS_TIMERFD_GETTIME = 87
|
||||
SYS_UTIMENSAT = 88
|
||||
SYS_ACCT = 89
|
||||
SYS_CAPGET = 90
|
||||
SYS_CAPSET = 91
|
||||
SYS_PERSONALITY = 92
|
||||
SYS_EXIT = 93
|
||||
SYS_EXIT_GROUP = 94
|
||||
SYS_WAITID = 95
|
||||
SYS_SET_TID_ADDRESS = 96
|
||||
SYS_UNSHARE = 97
|
||||
SYS_FUTEX = 98
|
||||
SYS_SET_ROBUST_LIST = 99
|
||||
SYS_GET_ROBUST_LIST = 100
|
||||
SYS_NANOSLEEP = 101
|
||||
SYS_GETITIMER = 102
|
||||
SYS_SETITIMER = 103
|
||||
SYS_KEXEC_LOAD = 104
|
||||
SYS_INIT_MODULE = 105
|
||||
SYS_DELETE_MODULE = 106
|
||||
SYS_TIMER_CREATE = 107
|
||||
SYS_TIMER_GETTIME = 108
|
||||
SYS_TIMER_GETOVERRUN = 109
|
||||
SYS_TIMER_SETTIME = 110
|
||||
SYS_TIMER_DELETE = 111
|
||||
SYS_CLOCK_SETTIME = 112
|
||||
SYS_CLOCK_GETTIME = 113
|
||||
SYS_CLOCK_GETRES = 114
|
||||
SYS_CLOCK_NANOSLEEP = 115
|
||||
SYS_SYSLOG = 116
|
||||
SYS_PTRACE = 117
|
||||
SYS_SCHED_SETPARAM = 118
|
||||
SYS_SCHED_SETSCHEDULER = 119
|
||||
SYS_SCHED_GETSCHEDULER = 120
|
||||
SYS_SCHED_GETPARAM = 121
|
||||
SYS_SCHED_SETAFFINITY = 122
|
||||
SYS_SCHED_GETAFFINITY = 123
|
||||
SYS_SCHED_YIELD = 124
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 125
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 126
|
||||
SYS_SCHED_RR_GET_INTERVAL = 127
|
||||
SYS_RESTART_SYSCALL = 128
|
||||
SYS_KILL = 129
|
||||
SYS_TKILL = 130
|
||||
SYS_TGKILL = 131
|
||||
SYS_SIGALTSTACK = 132
|
||||
SYS_RT_SIGSUSPEND = 133
|
||||
SYS_RT_SIGACTION = 134
|
||||
SYS_RT_SIGPROCMASK = 135
|
||||
SYS_RT_SIGPENDING = 136
|
||||
SYS_RT_SIGTIMEDWAIT = 137
|
||||
SYS_RT_SIGQUEUEINFO = 138
|
||||
SYS_RT_SIGRETURN = 139
|
||||
SYS_SETPRIORITY = 140
|
||||
SYS_GETPRIORITY = 141
|
||||
SYS_REBOOT = 142
|
||||
SYS_SETREGID = 143
|
||||
SYS_SETGID = 144
|
||||
SYS_SETREUID = 145
|
||||
SYS_SETUID = 146
|
||||
SYS_SETRESUID = 147
|
||||
SYS_GETRESUID = 148
|
||||
SYS_SETRESGID = 149
|
||||
SYS_GETRESGID = 150
|
||||
SYS_SETFSUID = 151
|
||||
SYS_SETFSGID = 152
|
||||
SYS_TIMES = 153
|
||||
SYS_SETPGID = 154
|
||||
SYS_GETPGID = 155
|
||||
SYS_GETSID = 156
|
||||
SYS_SETSID = 157
|
||||
SYS_GETGROUPS = 158
|
||||
SYS_SETGROUPS = 159
|
||||
SYS_UNAME = 160
|
||||
SYS_SETHOSTNAME = 161
|
||||
SYS_SETDOMAINNAME = 162
|
||||
SYS_GETRLIMIT = 163
|
||||
SYS_SETRLIMIT = 164
|
||||
SYS_GETRUSAGE = 165
|
||||
SYS_UMASK = 166
|
||||
SYS_PRCTL = 167
|
||||
SYS_GETCPU = 168
|
||||
SYS_GETTIMEOFDAY = 169
|
||||
SYS_SETTIMEOFDAY = 170
|
||||
SYS_ADJTIMEX = 171
|
||||
SYS_GETPID = 172
|
||||
SYS_GETPPID = 173
|
||||
SYS_GETUID = 174
|
||||
SYS_GETEUID = 175
|
||||
SYS_GETGID = 176
|
||||
SYS_GETEGID = 177
|
||||
SYS_GETTID = 178
|
||||
SYS_SYSINFO = 179
|
||||
SYS_MQ_OPEN = 180
|
||||
SYS_MQ_UNLINK = 181
|
||||
SYS_MQ_TIMEDSEND = 182
|
||||
SYS_MQ_TIMEDRECEIVE = 183
|
||||
SYS_MQ_NOTIFY = 184
|
||||
SYS_MQ_GETSETATTR = 185
|
||||
SYS_MSGGET = 186
|
||||
SYS_MSGCTL = 187
|
||||
SYS_MSGRCV = 188
|
||||
SYS_MSGSND = 189
|
||||
SYS_SEMGET = 190
|
||||
SYS_SEMCTL = 191
|
||||
SYS_SEMTIMEDOP = 192
|
||||
SYS_SEMOP = 193
|
||||
SYS_SHMGET = 194
|
||||
SYS_SHMCTL = 195
|
||||
SYS_SHMAT = 196
|
||||
SYS_SHMDT = 197
|
||||
SYS_SOCKET = 198
|
||||
SYS_SOCKETPAIR = 199
|
||||
SYS_BIND = 200
|
||||
SYS_LISTEN = 201
|
||||
SYS_ACCEPT = 202
|
||||
SYS_CONNECT = 203
|
||||
SYS_GETSOCKNAME = 204
|
||||
SYS_GETPEERNAME = 205
|
||||
SYS_SENDTO = 206
|
||||
SYS_RECVFROM = 207
|
||||
SYS_SETSOCKOPT = 208
|
||||
SYS_GETSOCKOPT = 209
|
||||
SYS_SHUTDOWN = 210
|
||||
SYS_SENDMSG = 211
|
||||
SYS_RECVMSG = 212
|
||||
SYS_READAHEAD = 213
|
||||
SYS_BRK = 214
|
||||
SYS_MUNMAP = 215
|
||||
SYS_MREMAP = 216
|
||||
SYS_ADD_KEY = 217
|
||||
SYS_REQUEST_KEY = 218
|
||||
SYS_KEYCTL = 219
|
||||
SYS_CLONE = 220
|
||||
SYS_EXECVE = 221
|
||||
SYS_MMAP = 222
|
||||
SYS_FADVISE64 = 223
|
||||
SYS_SWAPON = 224
|
||||
SYS_SWAPOFF = 225
|
||||
SYS_MPROTECT = 226
|
||||
SYS_MSYNC = 227
|
||||
SYS_MLOCK = 228
|
||||
SYS_MUNLOCK = 229
|
||||
SYS_MLOCKALL = 230
|
||||
SYS_MUNLOCKALL = 231
|
||||
SYS_MINCORE = 232
|
||||
SYS_MADVISE = 233
|
||||
SYS_REMAP_FILE_PAGES = 234
|
||||
SYS_MBIND = 235
|
||||
SYS_GET_MEMPOLICY = 236
|
||||
SYS_SET_MEMPOLICY = 237
|
||||
SYS_MIGRATE_PAGES = 238
|
||||
SYS_MOVE_PAGES = 239
|
||||
SYS_RT_TGSIGQUEUEINFO = 240
|
||||
SYS_PERF_EVENT_OPEN = 241
|
||||
SYS_ACCEPT4 = 242
|
||||
SYS_RECVMMSG = 243
|
||||
SYS_ARCH_SPECIFIC_SYSCALL = 244
|
||||
SYS_WAIT4 = 260
|
||||
SYS_PRLIMIT64 = 261
|
||||
SYS_FANOTIFY_INIT = 262
|
||||
SYS_FANOTIFY_MARK = 263
|
||||
SYS_NAME_TO_HANDLE_AT = 264
|
||||
SYS_OPEN_BY_HANDLE_AT = 265
|
||||
SYS_CLOCK_ADJTIME = 266
|
||||
SYS_SYNCFS = 267
|
||||
SYS_SETNS = 268
|
||||
SYS_SENDMMSG = 269
|
||||
SYS_PROCESS_VM_READV = 270
|
||||
SYS_PROCESS_VM_WRITEV = 271
|
||||
SYS_KCMP = 272
|
||||
SYS_FINIT_MODULE = 273
|
||||
SYS_SCHED_SETATTR = 274
|
||||
SYS_SCHED_GETATTR = 275
|
||||
SYS_RENAMEAT2 = 276
|
||||
SYS_SECCOMP = 277
|
||||
SYS_GETRANDOM = 278
|
||||
SYS_MEMFD_CREATE = 279
|
||||
SYS_BPF = 280
|
||||
SYS_EXECVEAT = 281
|
||||
SYS_USERFAULTFD = 282
|
||||
SYS_MEMBARRIER = 283
|
||||
SYS_MLOCK2 = 284
|
||||
SYS_COPY_FILE_RANGE = 285
|
||||
SYS_PREADV2 = 286
|
||||
SYS_PWRITEV2 = 287
|
||||
SYS_PKEY_MPROTECT = 288
|
||||
SYS_PKEY_ALLOC = 289
|
||||
SYS_PKEY_FREE = 290
|
||||
SYS_STATX = 291
|
||||
SYS_IO_PGETEVENTS = 292
|
||||
SYS_RSEQ = 293
|
||||
SYS_KEXEC_FILE_LOAD = 294
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||
SYS_LANDLOCK_ADD_RULE = 445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||
)
|
||||
|
|
|
@ -424,4 +424,7 @@ const (
|
|||
SYS_PROCESS_MADVISE = 4440
|
||||
SYS_EPOLL_PWAIT2 = 4441
|
||||
SYS_MOUNT_SETATTR = 4442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 4444
|
||||
SYS_LANDLOCK_ADD_RULE = 4445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 4446
|
||||
)
|
||||
|
|
|
@ -7,351 +7,354 @@
|
|||
package unix
|
||||
|
||||
const (
|
||||
SYS_READ = 5000
|
||||
SYS_WRITE = 5001
|
||||
SYS_OPEN = 5002
|
||||
SYS_CLOSE = 5003
|
||||
SYS_STAT = 5004
|
||||
SYS_FSTAT = 5005
|
||||
SYS_LSTAT = 5006
|
||||
SYS_POLL = 5007
|
||||
SYS_LSEEK = 5008
|
||||
SYS_MMAP = 5009
|
||||
SYS_MPROTECT = 5010
|
||||
SYS_MUNMAP = 5011
|
||||
SYS_BRK = 5012
|
||||
SYS_RT_SIGACTION = 5013
|
||||
SYS_RT_SIGPROCMASK = 5014
|
||||
SYS_IOCTL = 5015
|
||||
SYS_PREAD64 = 5016
|
||||
SYS_PWRITE64 = 5017
|
||||
SYS_READV = 5018
|
||||
SYS_WRITEV = 5019
|
||||
SYS_ACCESS = 5020
|
||||
SYS_PIPE = 5021
|
||||
SYS__NEWSELECT = 5022
|
||||
SYS_SCHED_YIELD = 5023
|
||||
SYS_MREMAP = 5024
|
||||
SYS_MSYNC = 5025
|
||||
SYS_MINCORE = 5026
|
||||
SYS_MADVISE = 5027
|
||||
SYS_SHMGET = 5028
|
||||
SYS_SHMAT = 5029
|
||||
SYS_SHMCTL = 5030
|
||||
SYS_DUP = 5031
|
||||
SYS_DUP2 = 5032
|
||||
SYS_PAUSE = 5033
|
||||
SYS_NANOSLEEP = 5034
|
||||
SYS_GETITIMER = 5035
|
||||
SYS_SETITIMER = 5036
|
||||
SYS_ALARM = 5037
|
||||
SYS_GETPID = 5038
|
||||
SYS_SENDFILE = 5039
|
||||
SYS_SOCKET = 5040
|
||||
SYS_CONNECT = 5041
|
||||
SYS_ACCEPT = 5042
|
||||
SYS_SENDTO = 5043
|
||||
SYS_RECVFROM = 5044
|
||||
SYS_SENDMSG = 5045
|
||||
SYS_RECVMSG = 5046
|
||||
SYS_SHUTDOWN = 5047
|
||||
SYS_BIND = 5048
|
||||
SYS_LISTEN = 5049
|
||||
SYS_GETSOCKNAME = 5050
|
||||
SYS_GETPEERNAME = 5051
|
||||
SYS_SOCKETPAIR = 5052
|
||||
SYS_SETSOCKOPT = 5053
|
||||
SYS_GETSOCKOPT = 5054
|
||||
SYS_CLONE = 5055
|
||||
SYS_FORK = 5056
|
||||
SYS_EXECVE = 5057
|
||||
SYS_EXIT = 5058
|
||||
SYS_WAIT4 = 5059
|
||||
SYS_KILL = 5060
|
||||
SYS_UNAME = 5061
|
||||
SYS_SEMGET = 5062
|
||||
SYS_SEMOP = 5063
|
||||
SYS_SEMCTL = 5064
|
||||
SYS_SHMDT = 5065
|
||||
SYS_MSGGET = 5066
|
||||
SYS_MSGSND = 5067
|
||||
SYS_MSGRCV = 5068
|
||||
SYS_MSGCTL = 5069
|
||||
SYS_FCNTL = 5070
|
||||
SYS_FLOCK = 5071
|
||||
SYS_FSYNC = 5072
|
||||
SYS_FDATASYNC = 5073
|
||||
SYS_TRUNCATE = 5074
|
||||
SYS_FTRUNCATE = 5075
|
||||
SYS_GETDENTS = 5076
|
||||
SYS_GETCWD = 5077
|
||||
SYS_CHDIR = 5078
|
||||
SYS_FCHDIR = 5079
|
||||
SYS_RENAME = 5080
|
||||
SYS_MKDIR = 5081
|
||||
SYS_RMDIR = 5082
|
||||
SYS_CREAT = 5083
|
||||
SYS_LINK = 5084
|
||||
SYS_UNLINK = 5085
|
||||
SYS_SYMLINK = 5086
|
||||
SYS_READLINK = 5087
|
||||
SYS_CHMOD = 5088
|
||||
SYS_FCHMOD = 5089
|
||||
SYS_CHOWN = 5090
|
||||
SYS_FCHOWN = 5091
|
||||
SYS_LCHOWN = 5092
|
||||
SYS_UMASK = 5093
|
||||
SYS_GETTIMEOFDAY = 5094
|
||||
SYS_GETRLIMIT = 5095
|
||||
SYS_GETRUSAGE = 5096
|
||||
SYS_SYSINFO = 5097
|
||||
SYS_TIMES = 5098
|
||||
SYS_PTRACE = 5099
|
||||
SYS_GETUID = 5100
|
||||
SYS_SYSLOG = 5101
|
||||
SYS_GETGID = 5102
|
||||
SYS_SETUID = 5103
|
||||
SYS_SETGID = 5104
|
||||
SYS_GETEUID = 5105
|
||||
SYS_GETEGID = 5106
|
||||
SYS_SETPGID = 5107
|
||||
SYS_GETPPID = 5108
|
||||
SYS_GETPGRP = 5109
|
||||
SYS_SETSID = 5110
|
||||
SYS_SETREUID = 5111
|
||||
SYS_SETREGID = 5112
|
||||
SYS_GETGROUPS = 5113
|
||||
SYS_SETGROUPS = 5114
|
||||
SYS_SETRESUID = 5115
|
||||
SYS_GETRESUID = 5116
|
||||
SYS_SETRESGID = 5117
|
||||
SYS_GETRESGID = 5118
|
||||
SYS_GETPGID = 5119
|
||||
SYS_SETFSUID = 5120
|
||||
SYS_SETFSGID = 5121
|
||||
SYS_GETSID = 5122
|
||||
SYS_CAPGET = 5123
|
||||
SYS_CAPSET = 5124
|
||||
SYS_RT_SIGPENDING = 5125
|
||||
SYS_RT_SIGTIMEDWAIT = 5126
|
||||
SYS_RT_SIGQUEUEINFO = 5127
|
||||
SYS_RT_SIGSUSPEND = 5128
|
||||
SYS_SIGALTSTACK = 5129
|
||||
SYS_UTIME = 5130
|
||||
SYS_MKNOD = 5131
|
||||
SYS_PERSONALITY = 5132
|
||||
SYS_USTAT = 5133
|
||||
SYS_STATFS = 5134
|
||||
SYS_FSTATFS = 5135
|
||||
SYS_SYSFS = 5136
|
||||
SYS_GETPRIORITY = 5137
|
||||
SYS_SETPRIORITY = 5138
|
||||
SYS_SCHED_SETPARAM = 5139
|
||||
SYS_SCHED_GETPARAM = 5140
|
||||
SYS_SCHED_SETSCHEDULER = 5141
|
||||
SYS_SCHED_GETSCHEDULER = 5142
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 5143
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 5144
|
||||
SYS_SCHED_RR_GET_INTERVAL = 5145
|
||||
SYS_MLOCK = 5146
|
||||
SYS_MUNLOCK = 5147
|
||||
SYS_MLOCKALL = 5148
|
||||
SYS_MUNLOCKALL = 5149
|
||||
SYS_VHANGUP = 5150
|
||||
SYS_PIVOT_ROOT = 5151
|
||||
SYS__SYSCTL = 5152
|
||||
SYS_PRCTL = 5153
|
||||
SYS_ADJTIMEX = 5154
|
||||
SYS_SETRLIMIT = 5155
|
||||
SYS_CHROOT = 5156
|
||||
SYS_SYNC = 5157
|
||||
SYS_ACCT = 5158
|
||||
SYS_SETTIMEOFDAY = 5159
|
||||
SYS_MOUNT = 5160
|
||||
SYS_UMOUNT2 = 5161
|
||||
SYS_SWAPON = 5162
|
||||
SYS_SWAPOFF = 5163
|
||||
SYS_REBOOT = 5164
|
||||
SYS_SETHOSTNAME = 5165
|
||||
SYS_SETDOMAINNAME = 5166
|
||||
SYS_CREATE_MODULE = 5167
|
||||
SYS_INIT_MODULE = 5168
|
||||
SYS_DELETE_MODULE = 5169
|
||||
SYS_GET_KERNEL_SYMS = 5170
|
||||
SYS_QUERY_MODULE = 5171
|
||||
SYS_QUOTACTL = 5172
|
||||
SYS_NFSSERVCTL = 5173
|
||||
SYS_GETPMSG = 5174
|
||||
SYS_PUTPMSG = 5175
|
||||
SYS_AFS_SYSCALL = 5176
|
||||
SYS_RESERVED177 = 5177
|
||||
SYS_GETTID = 5178
|
||||
SYS_READAHEAD = 5179
|
||||
SYS_SETXATTR = 5180
|
||||
SYS_LSETXATTR = 5181
|
||||
SYS_FSETXATTR = 5182
|
||||
SYS_GETXATTR = 5183
|
||||
SYS_LGETXATTR = 5184
|
||||
SYS_FGETXATTR = 5185
|
||||
SYS_LISTXATTR = 5186
|
||||
SYS_LLISTXATTR = 5187
|
||||
SYS_FLISTXATTR = 5188
|
||||
SYS_REMOVEXATTR = 5189
|
||||
SYS_LREMOVEXATTR = 5190
|
||||
SYS_FREMOVEXATTR = 5191
|
||||
SYS_TKILL = 5192
|
||||
SYS_RESERVED193 = 5193
|
||||
SYS_FUTEX = 5194
|
||||
SYS_SCHED_SETAFFINITY = 5195
|
||||
SYS_SCHED_GETAFFINITY = 5196
|
||||
SYS_CACHEFLUSH = 5197
|
||||
SYS_CACHECTL = 5198
|
||||
SYS_SYSMIPS = 5199
|
||||
SYS_IO_SETUP = 5200
|
||||
SYS_IO_DESTROY = 5201
|
||||
SYS_IO_GETEVENTS = 5202
|
||||
SYS_IO_SUBMIT = 5203
|
||||
SYS_IO_CANCEL = 5204
|
||||
SYS_EXIT_GROUP = 5205
|
||||
SYS_LOOKUP_DCOOKIE = 5206
|
||||
SYS_EPOLL_CREATE = 5207
|
||||
SYS_EPOLL_CTL = 5208
|
||||
SYS_EPOLL_WAIT = 5209
|
||||
SYS_REMAP_FILE_PAGES = 5210
|
||||
SYS_RT_SIGRETURN = 5211
|
||||
SYS_SET_TID_ADDRESS = 5212
|
||||
SYS_RESTART_SYSCALL = 5213
|
||||
SYS_SEMTIMEDOP = 5214
|
||||
SYS_FADVISE64 = 5215
|
||||
SYS_TIMER_CREATE = 5216
|
||||
SYS_TIMER_SETTIME = 5217
|
||||
SYS_TIMER_GETTIME = 5218
|
||||
SYS_TIMER_GETOVERRUN = 5219
|
||||
SYS_TIMER_DELETE = 5220
|
||||
SYS_CLOCK_SETTIME = 5221
|
||||
SYS_CLOCK_GETTIME = 5222
|
||||
SYS_CLOCK_GETRES = 5223
|
||||
SYS_CLOCK_NANOSLEEP = 5224
|
||||
SYS_TGKILL = 5225
|
||||
SYS_UTIMES = 5226
|
||||
SYS_MBIND = 5227
|
||||
SYS_GET_MEMPOLICY = 5228
|
||||
SYS_SET_MEMPOLICY = 5229
|
||||
SYS_MQ_OPEN = 5230
|
||||
SYS_MQ_UNLINK = 5231
|
||||
SYS_MQ_TIMEDSEND = 5232
|
||||
SYS_MQ_TIMEDRECEIVE = 5233
|
||||
SYS_MQ_NOTIFY = 5234
|
||||
SYS_MQ_GETSETATTR = 5235
|
||||
SYS_VSERVER = 5236
|
||||
SYS_WAITID = 5237
|
||||
SYS_ADD_KEY = 5239
|
||||
SYS_REQUEST_KEY = 5240
|
||||
SYS_KEYCTL = 5241
|
||||
SYS_SET_THREAD_AREA = 5242
|
||||
SYS_INOTIFY_INIT = 5243
|
||||
SYS_INOTIFY_ADD_WATCH = 5244
|
||||
SYS_INOTIFY_RM_WATCH = 5245
|
||||
SYS_MIGRATE_PAGES = 5246
|
||||
SYS_OPENAT = 5247
|
||||
SYS_MKDIRAT = 5248
|
||||
SYS_MKNODAT = 5249
|
||||
SYS_FCHOWNAT = 5250
|
||||
SYS_FUTIMESAT = 5251
|
||||
SYS_NEWFSTATAT = 5252
|
||||
SYS_UNLINKAT = 5253
|
||||
SYS_RENAMEAT = 5254
|
||||
SYS_LINKAT = 5255
|
||||
SYS_SYMLINKAT = 5256
|
||||
SYS_READLINKAT = 5257
|
||||
SYS_FCHMODAT = 5258
|
||||
SYS_FACCESSAT = 5259
|
||||
SYS_PSELECT6 = 5260
|
||||
SYS_PPOLL = 5261
|
||||
SYS_UNSHARE = 5262
|
||||
SYS_SPLICE = 5263
|
||||
SYS_SYNC_FILE_RANGE = 5264
|
||||
SYS_TEE = 5265
|
||||
SYS_VMSPLICE = 5266
|
||||
SYS_MOVE_PAGES = 5267
|
||||
SYS_SET_ROBUST_LIST = 5268
|
||||
SYS_GET_ROBUST_LIST = 5269
|
||||
SYS_KEXEC_LOAD = 5270
|
||||
SYS_GETCPU = 5271
|
||||
SYS_EPOLL_PWAIT = 5272
|
||||
SYS_IOPRIO_SET = 5273
|
||||
SYS_IOPRIO_GET = 5274
|
||||
SYS_UTIMENSAT = 5275
|
||||
SYS_SIGNALFD = 5276
|
||||
SYS_TIMERFD = 5277
|
||||
SYS_EVENTFD = 5278
|
||||
SYS_FALLOCATE = 5279
|
||||
SYS_TIMERFD_CREATE = 5280
|
||||
SYS_TIMERFD_GETTIME = 5281
|
||||
SYS_TIMERFD_SETTIME = 5282
|
||||
SYS_SIGNALFD4 = 5283
|
||||
SYS_EVENTFD2 = 5284
|
||||
SYS_EPOLL_CREATE1 = 5285
|
||||
SYS_DUP3 = 5286
|
||||
SYS_PIPE2 = 5287
|
||||
SYS_INOTIFY_INIT1 = 5288
|
||||
SYS_PREADV = 5289
|
||||
SYS_PWRITEV = 5290
|
||||
SYS_RT_TGSIGQUEUEINFO = 5291
|
||||
SYS_PERF_EVENT_OPEN = 5292
|
||||
SYS_ACCEPT4 = 5293
|
||||
SYS_RECVMMSG = 5294
|
||||
SYS_FANOTIFY_INIT = 5295
|
||||
SYS_FANOTIFY_MARK = 5296
|
||||
SYS_PRLIMIT64 = 5297
|
||||
SYS_NAME_TO_HANDLE_AT = 5298
|
||||
SYS_OPEN_BY_HANDLE_AT = 5299
|
||||
SYS_CLOCK_ADJTIME = 5300
|
||||
SYS_SYNCFS = 5301
|
||||
SYS_SENDMMSG = 5302
|
||||
SYS_SETNS = 5303
|
||||
SYS_PROCESS_VM_READV = 5304
|
||||
SYS_PROCESS_VM_WRITEV = 5305
|
||||
SYS_KCMP = 5306
|
||||
SYS_FINIT_MODULE = 5307
|
||||
SYS_GETDENTS64 = 5308
|
||||
SYS_SCHED_SETATTR = 5309
|
||||
SYS_SCHED_GETATTR = 5310
|
||||
SYS_RENAMEAT2 = 5311
|
||||
SYS_SECCOMP = 5312
|
||||
SYS_GETRANDOM = 5313
|
||||
SYS_MEMFD_CREATE = 5314
|
||||
SYS_BPF = 5315
|
||||
SYS_EXECVEAT = 5316
|
||||
SYS_USERFAULTFD = 5317
|
||||
SYS_MEMBARRIER = 5318
|
||||
SYS_MLOCK2 = 5319
|
||||
SYS_COPY_FILE_RANGE = 5320
|
||||
SYS_PREADV2 = 5321
|
||||
SYS_PWRITEV2 = 5322
|
||||
SYS_PKEY_MPROTECT = 5323
|
||||
SYS_PKEY_ALLOC = 5324
|
||||
SYS_PKEY_FREE = 5325
|
||||
SYS_STATX = 5326
|
||||
SYS_RSEQ = 5327
|
||||
SYS_IO_PGETEVENTS = 5328
|
||||
SYS_PIDFD_SEND_SIGNAL = 5424
|
||||
SYS_IO_URING_SETUP = 5425
|
||||
SYS_IO_URING_ENTER = 5426
|
||||
SYS_IO_URING_REGISTER = 5427
|
||||
SYS_OPEN_TREE = 5428
|
||||
SYS_MOVE_MOUNT = 5429
|
||||
SYS_FSOPEN = 5430
|
||||
SYS_FSCONFIG = 5431
|
||||
SYS_FSMOUNT = 5432
|
||||
SYS_FSPICK = 5433
|
||||
SYS_PIDFD_OPEN = 5434
|
||||
SYS_CLONE3 = 5435
|
||||
SYS_CLOSE_RANGE = 5436
|
||||
SYS_OPENAT2 = 5437
|
||||
SYS_PIDFD_GETFD = 5438
|
||||
SYS_FACCESSAT2 = 5439
|
||||
SYS_PROCESS_MADVISE = 5440
|
||||
SYS_EPOLL_PWAIT2 = 5441
|
||||
SYS_MOUNT_SETATTR = 5442
|
||||
SYS_READ = 5000
|
||||
SYS_WRITE = 5001
|
||||
SYS_OPEN = 5002
|
||||
SYS_CLOSE = 5003
|
||||
SYS_STAT = 5004
|
||||
SYS_FSTAT = 5005
|
||||
SYS_LSTAT = 5006
|
||||
SYS_POLL = 5007
|
||||
SYS_LSEEK = 5008
|
||||
SYS_MMAP = 5009
|
||||
SYS_MPROTECT = 5010
|
||||
SYS_MUNMAP = 5011
|
||||
SYS_BRK = 5012
|
||||
SYS_RT_SIGACTION = 5013
|
||||
SYS_RT_SIGPROCMASK = 5014
|
||||
SYS_IOCTL = 5015
|
||||
SYS_PREAD64 = 5016
|
||||
SYS_PWRITE64 = 5017
|
||||
SYS_READV = 5018
|
||||
SYS_WRITEV = 5019
|
||||
SYS_ACCESS = 5020
|
||||
SYS_PIPE = 5021
|
||||
SYS__NEWSELECT = 5022
|
||||
SYS_SCHED_YIELD = 5023
|
||||
SYS_MREMAP = 5024
|
||||
SYS_MSYNC = 5025
|
||||
SYS_MINCORE = 5026
|
||||
SYS_MADVISE = 5027
|
||||
SYS_SHMGET = 5028
|
||||
SYS_SHMAT = 5029
|
||||
SYS_SHMCTL = 5030
|
||||
SYS_DUP = 5031
|
||||
SYS_DUP2 = 5032
|
||||
SYS_PAUSE = 5033
|
||||
SYS_NANOSLEEP = 5034
|
||||
SYS_GETITIMER = 5035
|
||||
SYS_SETITIMER = 5036
|
||||
SYS_ALARM = 5037
|
||||
SYS_GETPID = 5038
|
||||
SYS_SENDFILE = 5039
|
||||
SYS_SOCKET = 5040
|
||||
SYS_CONNECT = 5041
|
||||
SYS_ACCEPT = 5042
|
||||
SYS_SENDTO = 5043
|
||||
SYS_RECVFROM = 5044
|
||||
SYS_SENDMSG = 5045
|
||||
SYS_RECVMSG = 5046
|
||||
SYS_SHUTDOWN = 5047
|
||||
SYS_BIND = 5048
|
||||
SYS_LISTEN = 5049
|
||||
SYS_GETSOCKNAME = 5050
|
||||
SYS_GETPEERNAME = 5051
|
||||
SYS_SOCKETPAIR = 5052
|
||||
SYS_SETSOCKOPT = 5053
|
||||
SYS_GETSOCKOPT = 5054
|
||||
SYS_CLONE = 5055
|
||||
SYS_FORK = 5056
|
||||
SYS_EXECVE = 5057
|
||||
SYS_EXIT = 5058
|
||||
SYS_WAIT4 = 5059
|
||||
SYS_KILL = 5060
|
||||
SYS_UNAME = 5061
|
||||
SYS_SEMGET = 5062
|
||||
SYS_SEMOP = 5063
|
||||
SYS_SEMCTL = 5064
|
||||
SYS_SHMDT = 5065
|
||||
SYS_MSGGET = 5066
|
||||
SYS_MSGSND = 5067
|
||||
SYS_MSGRCV = 5068
|
||||
SYS_MSGCTL = 5069
|
||||
SYS_FCNTL = 5070
|
||||
SYS_FLOCK = 5071
|
||||
SYS_FSYNC = 5072
|
||||
SYS_FDATASYNC = 5073
|
||||
SYS_TRUNCATE = 5074
|
||||
SYS_FTRUNCATE = 5075
|
||||
SYS_GETDENTS = 5076
|
||||
SYS_GETCWD = 5077
|
||||
SYS_CHDIR = 5078
|
||||
SYS_FCHDIR = 5079
|
||||
SYS_RENAME = 5080
|
||||
SYS_MKDIR = 5081
|
||||
SYS_RMDIR = 5082
|
||||
SYS_CREAT = 5083
|
||||
SYS_LINK = 5084
|
||||
SYS_UNLINK = 5085
|
||||
SYS_SYMLINK = 5086
|
||||
SYS_READLINK = 5087
|
||||
SYS_CHMOD = 5088
|
||||
SYS_FCHMOD = 5089
|
||||
SYS_CHOWN = 5090
|
||||
SYS_FCHOWN = 5091
|
||||
SYS_LCHOWN = 5092
|
||||
SYS_UMASK = 5093
|
||||
SYS_GETTIMEOFDAY = 5094
|
||||
SYS_GETRLIMIT = 5095
|
||||
SYS_GETRUSAGE = 5096
|
||||
SYS_SYSINFO = 5097
|
||||
SYS_TIMES = 5098
|
||||
SYS_PTRACE = 5099
|
||||
SYS_GETUID = 5100
|
||||
SYS_SYSLOG = 5101
|
||||
SYS_GETGID = 5102
|
||||
SYS_SETUID = 5103
|
||||
SYS_SETGID = 5104
|
||||
SYS_GETEUID = 5105
|
||||
SYS_GETEGID = 5106
|
||||
SYS_SETPGID = 5107
|
||||
SYS_GETPPID = 5108
|
||||
SYS_GETPGRP = 5109
|
||||
SYS_SETSID = 5110
|
||||
SYS_SETREUID = 5111
|
||||
SYS_SETREGID = 5112
|
||||
SYS_GETGROUPS = 5113
|
||||
SYS_SETGROUPS = 5114
|
||||
SYS_SETRESUID = 5115
|
||||
SYS_GETRESUID = 5116
|
||||
SYS_SETRESGID = 5117
|
||||
SYS_GETRESGID = 5118
|
||||
SYS_GETPGID = 5119
|
||||
SYS_SETFSUID = 5120
|
||||
SYS_SETFSGID = 5121
|
||||
SYS_GETSID = 5122
|
||||
SYS_CAPGET = 5123
|
||||
SYS_CAPSET = 5124
|
||||
SYS_RT_SIGPENDING = 5125
|
||||
SYS_RT_SIGTIMEDWAIT = 5126
|
||||
SYS_RT_SIGQUEUEINFO = 5127
|
||||
SYS_RT_SIGSUSPEND = 5128
|
||||
SYS_SIGALTSTACK = 5129
|
||||
SYS_UTIME = 5130
|
||||
SYS_MKNOD = 5131
|
||||
SYS_PERSONALITY = 5132
|
||||
SYS_USTAT = 5133
|
||||
SYS_STATFS = 5134
|
||||
SYS_FSTATFS = 5135
|
||||
SYS_SYSFS = 5136
|
||||
SYS_GETPRIORITY = 5137
|
||||
SYS_SETPRIORITY = 5138
|
||||
SYS_SCHED_SETPARAM = 5139
|
||||
SYS_SCHED_GETPARAM = 5140
|
||||
SYS_SCHED_SETSCHEDULER = 5141
|
||||
SYS_SCHED_GETSCHEDULER = 5142
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 5143
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 5144
|
||||
SYS_SCHED_RR_GET_INTERVAL = 5145
|
||||
SYS_MLOCK = 5146
|
||||
SYS_MUNLOCK = 5147
|
||||
SYS_MLOCKALL = 5148
|
||||
SYS_MUNLOCKALL = 5149
|
||||
SYS_VHANGUP = 5150
|
||||
SYS_PIVOT_ROOT = 5151
|
||||
SYS__SYSCTL = 5152
|
||||
SYS_PRCTL = 5153
|
||||
SYS_ADJTIMEX = 5154
|
||||
SYS_SETRLIMIT = 5155
|
||||
SYS_CHROOT = 5156
|
||||
SYS_SYNC = 5157
|
||||
SYS_ACCT = 5158
|
||||
SYS_SETTIMEOFDAY = 5159
|
||||
SYS_MOUNT = 5160
|
||||
SYS_UMOUNT2 = 5161
|
||||
SYS_SWAPON = 5162
|
||||
SYS_SWAPOFF = 5163
|
||||
SYS_REBOOT = 5164
|
||||
SYS_SETHOSTNAME = 5165
|
||||
SYS_SETDOMAINNAME = 5166
|
||||
SYS_CREATE_MODULE = 5167
|
||||
SYS_INIT_MODULE = 5168
|
||||
SYS_DELETE_MODULE = 5169
|
||||
SYS_GET_KERNEL_SYMS = 5170
|
||||
SYS_QUERY_MODULE = 5171
|
||||
SYS_QUOTACTL = 5172
|
||||
SYS_NFSSERVCTL = 5173
|
||||
SYS_GETPMSG = 5174
|
||||
SYS_PUTPMSG = 5175
|
||||
SYS_AFS_SYSCALL = 5176
|
||||
SYS_RESERVED177 = 5177
|
||||
SYS_GETTID = 5178
|
||||
SYS_READAHEAD = 5179
|
||||
SYS_SETXATTR = 5180
|
||||
SYS_LSETXATTR = 5181
|
||||
SYS_FSETXATTR = 5182
|
||||
SYS_GETXATTR = 5183
|
||||
SYS_LGETXATTR = 5184
|
||||
SYS_FGETXATTR = 5185
|
||||
SYS_LISTXATTR = 5186
|
||||
SYS_LLISTXATTR = 5187
|
||||
SYS_FLISTXATTR = 5188
|
||||
SYS_REMOVEXATTR = 5189
|
||||
SYS_LREMOVEXATTR = 5190
|
||||
SYS_FREMOVEXATTR = 5191
|
||||
SYS_TKILL = 5192
|
||||
SYS_RESERVED193 = 5193
|
||||
SYS_FUTEX = 5194
|
||||
SYS_SCHED_SETAFFINITY = 5195
|
||||
SYS_SCHED_GETAFFINITY = 5196
|
||||
SYS_CACHEFLUSH = 5197
|
||||
SYS_CACHECTL = 5198
|
||||
SYS_SYSMIPS = 5199
|
||||
SYS_IO_SETUP = 5200
|
||||
SYS_IO_DESTROY = 5201
|
||||
SYS_IO_GETEVENTS = 5202
|
||||
SYS_IO_SUBMIT = 5203
|
||||
SYS_IO_CANCEL = 5204
|
||||
SYS_EXIT_GROUP = 5205
|
||||
SYS_LOOKUP_DCOOKIE = 5206
|
||||
SYS_EPOLL_CREATE = 5207
|
||||
SYS_EPOLL_CTL = 5208
|
||||
SYS_EPOLL_WAIT = 5209
|
||||
SYS_REMAP_FILE_PAGES = 5210
|
||||
SYS_RT_SIGRETURN = 5211
|
||||
SYS_SET_TID_ADDRESS = 5212
|
||||
SYS_RESTART_SYSCALL = 5213
|
||||
SYS_SEMTIMEDOP = 5214
|
||||
SYS_FADVISE64 = 5215
|
||||
SYS_TIMER_CREATE = 5216
|
||||
SYS_TIMER_SETTIME = 5217
|
||||
SYS_TIMER_GETTIME = 5218
|
||||
SYS_TIMER_GETOVERRUN = 5219
|
||||
SYS_TIMER_DELETE = 5220
|
||||
SYS_CLOCK_SETTIME = 5221
|
||||
SYS_CLOCK_GETTIME = 5222
|
||||
SYS_CLOCK_GETRES = 5223
|
||||
SYS_CLOCK_NANOSLEEP = 5224
|
||||
SYS_TGKILL = 5225
|
||||
SYS_UTIMES = 5226
|
||||
SYS_MBIND = 5227
|
||||
SYS_GET_MEMPOLICY = 5228
|
||||
SYS_SET_MEMPOLICY = 5229
|
||||
SYS_MQ_OPEN = 5230
|
||||
SYS_MQ_UNLINK = 5231
|
||||
SYS_MQ_TIMEDSEND = 5232
|
||||
SYS_MQ_TIMEDRECEIVE = 5233
|
||||
SYS_MQ_NOTIFY = 5234
|
||||
SYS_MQ_GETSETATTR = 5235
|
||||
SYS_VSERVER = 5236
|
||||
SYS_WAITID = 5237
|
||||
SYS_ADD_KEY = 5239
|
||||
SYS_REQUEST_KEY = 5240
|
||||
SYS_KEYCTL = 5241
|
||||
SYS_SET_THREAD_AREA = 5242
|
||||
SYS_INOTIFY_INIT = 5243
|
||||
SYS_INOTIFY_ADD_WATCH = 5244
|
||||
SYS_INOTIFY_RM_WATCH = 5245
|
||||
SYS_MIGRATE_PAGES = 5246
|
||||
SYS_OPENAT = 5247
|
||||
SYS_MKDIRAT = 5248
|
||||
SYS_MKNODAT = 5249
|
||||
SYS_FCHOWNAT = 5250
|
||||
SYS_FUTIMESAT = 5251
|
||||
SYS_NEWFSTATAT = 5252
|
||||
SYS_UNLINKAT = 5253
|
||||
SYS_RENAMEAT = 5254
|
||||
SYS_LINKAT = 5255
|
||||
SYS_SYMLINKAT = 5256
|
||||
SYS_READLINKAT = 5257
|
||||
SYS_FCHMODAT = 5258
|
||||
SYS_FACCESSAT = 5259
|
||||
SYS_PSELECT6 = 5260
|
||||
SYS_PPOLL = 5261
|
||||
SYS_UNSHARE = 5262
|
||||
SYS_SPLICE = 5263
|
||||
SYS_SYNC_FILE_RANGE = 5264
|
||||
SYS_TEE = 5265
|
||||
SYS_VMSPLICE = 5266
|
||||
SYS_MOVE_PAGES = 5267
|
||||
SYS_SET_ROBUST_LIST = 5268
|
||||
SYS_GET_ROBUST_LIST = 5269
|
||||
SYS_KEXEC_LOAD = 5270
|
||||
SYS_GETCPU = 5271
|
||||
SYS_EPOLL_PWAIT = 5272
|
||||
SYS_IOPRIO_SET = 5273
|
||||
SYS_IOPRIO_GET = 5274
|
||||
SYS_UTIMENSAT = 5275
|
||||
SYS_SIGNALFD = 5276
|
||||
SYS_TIMERFD = 5277
|
||||
SYS_EVENTFD = 5278
|
||||
SYS_FALLOCATE = 5279
|
||||
SYS_TIMERFD_CREATE = 5280
|
||||
SYS_TIMERFD_GETTIME = 5281
|
||||
SYS_TIMERFD_SETTIME = 5282
|
||||
SYS_SIGNALFD4 = 5283
|
||||
SYS_EVENTFD2 = 5284
|
||||
SYS_EPOLL_CREATE1 = 5285
|
||||
SYS_DUP3 = 5286
|
||||
SYS_PIPE2 = 5287
|
||||
SYS_INOTIFY_INIT1 = 5288
|
||||
SYS_PREADV = 5289
|
||||
SYS_PWRITEV = 5290
|
||||
SYS_RT_TGSIGQUEUEINFO = 5291
|
||||
SYS_PERF_EVENT_OPEN = 5292
|
||||
SYS_ACCEPT4 = 5293
|
||||
SYS_RECVMMSG = 5294
|
||||
SYS_FANOTIFY_INIT = 5295
|
||||
SYS_FANOTIFY_MARK = 5296
|
||||
SYS_PRLIMIT64 = 5297
|
||||
SYS_NAME_TO_HANDLE_AT = 5298
|
||||
SYS_OPEN_BY_HANDLE_AT = 5299
|
||||
SYS_CLOCK_ADJTIME = 5300
|
||||
SYS_SYNCFS = 5301
|
||||
SYS_SENDMMSG = 5302
|
||||
SYS_SETNS = 5303
|
||||
SYS_PROCESS_VM_READV = 5304
|
||||
SYS_PROCESS_VM_WRITEV = 5305
|
||||
SYS_KCMP = 5306
|
||||
SYS_FINIT_MODULE = 5307
|
||||
SYS_GETDENTS64 = 5308
|
||||
SYS_SCHED_SETATTR = 5309
|
||||
SYS_SCHED_GETATTR = 5310
|
||||
SYS_RENAMEAT2 = 5311
|
||||
SYS_SECCOMP = 5312
|
||||
SYS_GETRANDOM = 5313
|
||||
SYS_MEMFD_CREATE = 5314
|
||||
SYS_BPF = 5315
|
||||
SYS_EXECVEAT = 5316
|
||||
SYS_USERFAULTFD = 5317
|
||||
SYS_MEMBARRIER = 5318
|
||||
SYS_MLOCK2 = 5319
|
||||
SYS_COPY_FILE_RANGE = 5320
|
||||
SYS_PREADV2 = 5321
|
||||
SYS_PWRITEV2 = 5322
|
||||
SYS_PKEY_MPROTECT = 5323
|
||||
SYS_PKEY_ALLOC = 5324
|
||||
SYS_PKEY_FREE = 5325
|
||||
SYS_STATX = 5326
|
||||
SYS_RSEQ = 5327
|
||||
SYS_IO_PGETEVENTS = 5328
|
||||
SYS_PIDFD_SEND_SIGNAL = 5424
|
||||
SYS_IO_URING_SETUP = 5425
|
||||
SYS_IO_URING_ENTER = 5426
|
||||
SYS_IO_URING_REGISTER = 5427
|
||||
SYS_OPEN_TREE = 5428
|
||||
SYS_MOVE_MOUNT = 5429
|
||||
SYS_FSOPEN = 5430
|
||||
SYS_FSCONFIG = 5431
|
||||
SYS_FSMOUNT = 5432
|
||||
SYS_FSPICK = 5433
|
||||
SYS_PIDFD_OPEN = 5434
|
||||
SYS_CLONE3 = 5435
|
||||
SYS_CLOSE_RANGE = 5436
|
||||
SYS_OPENAT2 = 5437
|
||||
SYS_PIDFD_GETFD = 5438
|
||||
SYS_FACCESSAT2 = 5439
|
||||
SYS_PROCESS_MADVISE = 5440
|
||||
SYS_EPOLL_PWAIT2 = 5441
|
||||
SYS_MOUNT_SETATTR = 5442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 5444
|
||||
SYS_LANDLOCK_ADD_RULE = 5445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 5446
|
||||
)
|
||||
|
|
|
@ -7,351 +7,354 @@
|
|||
package unix
|
||||
|
||||
const (
|
||||
SYS_READ = 5000
|
||||
SYS_WRITE = 5001
|
||||
SYS_OPEN = 5002
|
||||
SYS_CLOSE = 5003
|
||||
SYS_STAT = 5004
|
||||
SYS_FSTAT = 5005
|
||||
SYS_LSTAT = 5006
|
||||
SYS_POLL = 5007
|
||||
SYS_LSEEK = 5008
|
||||
SYS_MMAP = 5009
|
||||
SYS_MPROTECT = 5010
|
||||
SYS_MUNMAP = 5011
|
||||
SYS_BRK = 5012
|
||||
SYS_RT_SIGACTION = 5013
|
||||
SYS_RT_SIGPROCMASK = 5014
|
||||
SYS_IOCTL = 5015
|
||||
SYS_PREAD64 = 5016
|
||||
SYS_PWRITE64 = 5017
|
||||
SYS_READV = 5018
|
||||
SYS_WRITEV = 5019
|
||||
SYS_ACCESS = 5020
|
||||
SYS_PIPE = 5021
|
||||
SYS__NEWSELECT = 5022
|
||||
SYS_SCHED_YIELD = 5023
|
||||
SYS_MREMAP = 5024
|
||||
SYS_MSYNC = 5025
|
||||
SYS_MINCORE = 5026
|
||||
SYS_MADVISE = 5027
|
||||
SYS_SHMGET = 5028
|
||||
SYS_SHMAT = 5029
|
||||
SYS_SHMCTL = 5030
|
||||
SYS_DUP = 5031
|
||||
SYS_DUP2 = 5032
|
||||
SYS_PAUSE = 5033
|
||||
SYS_NANOSLEEP = 5034
|
||||
SYS_GETITIMER = 5035
|
||||
SYS_SETITIMER = 5036
|
||||
SYS_ALARM = 5037
|
||||
SYS_GETPID = 5038
|
||||
SYS_SENDFILE = 5039
|
||||
SYS_SOCKET = 5040
|
||||
SYS_CONNECT = 5041
|
||||
SYS_ACCEPT = 5042
|
||||
SYS_SENDTO = 5043
|
||||
SYS_RECVFROM = 5044
|
||||
SYS_SENDMSG = 5045
|
||||
SYS_RECVMSG = 5046
|
||||
SYS_SHUTDOWN = 5047
|
||||
SYS_BIND = 5048
|
||||
SYS_LISTEN = 5049
|
||||
SYS_GETSOCKNAME = 5050
|
||||
SYS_GETPEERNAME = 5051
|
||||
SYS_SOCKETPAIR = 5052
|
||||
SYS_SETSOCKOPT = 5053
|
||||
SYS_GETSOCKOPT = 5054
|
||||
SYS_CLONE = 5055
|
||||
SYS_FORK = 5056
|
||||
SYS_EXECVE = 5057
|
||||
SYS_EXIT = 5058
|
||||
SYS_WAIT4 = 5059
|
||||
SYS_KILL = 5060
|
||||
SYS_UNAME = 5061
|
||||
SYS_SEMGET = 5062
|
||||
SYS_SEMOP = 5063
|
||||
SYS_SEMCTL = 5064
|
||||
SYS_SHMDT = 5065
|
||||
SYS_MSGGET = 5066
|
||||
SYS_MSGSND = 5067
|
||||
SYS_MSGRCV = 5068
|
||||
SYS_MSGCTL = 5069
|
||||
SYS_FCNTL = 5070
|
||||
SYS_FLOCK = 5071
|
||||
SYS_FSYNC = 5072
|
||||
SYS_FDATASYNC = 5073
|
||||
SYS_TRUNCATE = 5074
|
||||
SYS_FTRUNCATE = 5075
|
||||
SYS_GETDENTS = 5076
|
||||
SYS_GETCWD = 5077
|
||||
SYS_CHDIR = 5078
|
||||
SYS_FCHDIR = 5079
|
||||
SYS_RENAME = 5080
|
||||
SYS_MKDIR = 5081
|
||||
SYS_RMDIR = 5082
|
||||
SYS_CREAT = 5083
|
||||
SYS_LINK = 5084
|
||||
SYS_UNLINK = 5085
|
||||
SYS_SYMLINK = 5086
|
||||
SYS_READLINK = 5087
|
||||
SYS_CHMOD = 5088
|
||||
SYS_FCHMOD = 5089
|
||||
SYS_CHOWN = 5090
|
||||
SYS_FCHOWN = 5091
|
||||
SYS_LCHOWN = 5092
|
||||
SYS_UMASK = 5093
|
||||
SYS_GETTIMEOFDAY = 5094
|
||||
SYS_GETRLIMIT = 5095
|
||||
SYS_GETRUSAGE = 5096
|
||||
SYS_SYSINFO = 5097
|
||||
SYS_TIMES = 5098
|
||||
SYS_PTRACE = 5099
|
||||
SYS_GETUID = 5100
|
||||
SYS_SYSLOG = 5101
|
||||
SYS_GETGID = 5102
|
||||
SYS_SETUID = 5103
|
||||
SYS_SETGID = 5104
|
||||
SYS_GETEUID = 5105
|
||||
SYS_GETEGID = 5106
|
||||
SYS_SETPGID = 5107
|
||||
SYS_GETPPID = 5108
|
||||
SYS_GETPGRP = 5109
|
||||
SYS_SETSID = 5110
|
||||
SYS_SETREUID = 5111
|
||||
SYS_SETREGID = 5112
|
||||
SYS_GETGROUPS = 5113
|
||||
SYS_SETGROUPS = 5114
|
||||
SYS_SETRESUID = 5115
|
||||
SYS_GETRESUID = 5116
|
||||
SYS_SETRESGID = 5117
|
||||
SYS_GETRESGID = 5118
|
||||
SYS_GETPGID = 5119
|
||||
SYS_SETFSUID = 5120
|
||||
SYS_SETFSGID = 5121
|
||||
SYS_GETSID = 5122
|
||||
SYS_CAPGET = 5123
|
||||
SYS_CAPSET = 5124
|
||||
SYS_RT_SIGPENDING = 5125
|
||||
SYS_RT_SIGTIMEDWAIT = 5126
|
||||
SYS_RT_SIGQUEUEINFO = 5127
|
||||
SYS_RT_SIGSUSPEND = 5128
|
||||
SYS_SIGALTSTACK = 5129
|
||||
SYS_UTIME = 5130
|
||||
SYS_MKNOD = 5131
|
||||
SYS_PERSONALITY = 5132
|
||||
SYS_USTAT = 5133
|
||||
SYS_STATFS = 5134
|
||||
SYS_FSTATFS = 5135
|
||||
SYS_SYSFS = 5136
|
||||
SYS_GETPRIORITY = 5137
|
||||
SYS_SETPRIORITY = 5138
|
||||
SYS_SCHED_SETPARAM = 5139
|
||||
SYS_SCHED_GETPARAM = 5140
|
||||
SYS_SCHED_SETSCHEDULER = 5141
|
||||
SYS_SCHED_GETSCHEDULER = 5142
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 5143
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 5144
|
||||
SYS_SCHED_RR_GET_INTERVAL = 5145
|
||||
SYS_MLOCK = 5146
|
||||
SYS_MUNLOCK = 5147
|
||||
SYS_MLOCKALL = 5148
|
||||
SYS_MUNLOCKALL = 5149
|
||||
SYS_VHANGUP = 5150
|
||||
SYS_PIVOT_ROOT = 5151
|
||||
SYS__SYSCTL = 5152
|
||||
SYS_PRCTL = 5153
|
||||
SYS_ADJTIMEX = 5154
|
||||
SYS_SETRLIMIT = 5155
|
||||
SYS_CHROOT = 5156
|
||||
SYS_SYNC = 5157
|
||||
SYS_ACCT = 5158
|
||||
SYS_SETTIMEOFDAY = 5159
|
||||
SYS_MOUNT = 5160
|
||||
SYS_UMOUNT2 = 5161
|
||||
SYS_SWAPON = 5162
|
||||
SYS_SWAPOFF = 5163
|
||||
SYS_REBOOT = 5164
|
||||
SYS_SETHOSTNAME = 5165
|
||||
SYS_SETDOMAINNAME = 5166
|
||||
SYS_CREATE_MODULE = 5167
|
||||
SYS_INIT_MODULE = 5168
|
||||
SYS_DELETE_MODULE = 5169
|
||||
SYS_GET_KERNEL_SYMS = 5170
|
||||
SYS_QUERY_MODULE = 5171
|
||||
SYS_QUOTACTL = 5172
|
||||
SYS_NFSSERVCTL = 5173
|
||||
SYS_GETPMSG = 5174
|
||||
SYS_PUTPMSG = 5175
|
||||
SYS_AFS_SYSCALL = 5176
|
||||
SYS_RESERVED177 = 5177
|
||||
SYS_GETTID = 5178
|
||||
SYS_READAHEAD = 5179
|
||||
SYS_SETXATTR = 5180
|
||||
SYS_LSETXATTR = 5181
|
||||
SYS_FSETXATTR = 5182
|
||||
SYS_GETXATTR = 5183
|
||||
SYS_LGETXATTR = 5184
|
||||
SYS_FGETXATTR = 5185
|
||||
SYS_LISTXATTR = 5186
|
||||
SYS_LLISTXATTR = 5187
|
||||
SYS_FLISTXATTR = 5188
|
||||
SYS_REMOVEXATTR = 5189
|
||||
SYS_LREMOVEXATTR = 5190
|
||||
SYS_FREMOVEXATTR = 5191
|
||||
SYS_TKILL = 5192
|
||||
SYS_RESERVED193 = 5193
|
||||
SYS_FUTEX = 5194
|
||||
SYS_SCHED_SETAFFINITY = 5195
|
||||
SYS_SCHED_GETAFFINITY = 5196
|
||||
SYS_CACHEFLUSH = 5197
|
||||
SYS_CACHECTL = 5198
|
||||
SYS_SYSMIPS = 5199
|
||||
SYS_IO_SETUP = 5200
|
||||
SYS_IO_DESTROY = 5201
|
||||
SYS_IO_GETEVENTS = 5202
|
||||
SYS_IO_SUBMIT = 5203
|
||||
SYS_IO_CANCEL = 5204
|
||||
SYS_EXIT_GROUP = 5205
|
||||
SYS_LOOKUP_DCOOKIE = 5206
|
||||
SYS_EPOLL_CREATE = 5207
|
||||
SYS_EPOLL_CTL = 5208
|
||||
SYS_EPOLL_WAIT = 5209
|
||||
SYS_REMAP_FILE_PAGES = 5210
|
||||
SYS_RT_SIGRETURN = 5211
|
||||
SYS_SET_TID_ADDRESS = 5212
|
||||
SYS_RESTART_SYSCALL = 5213
|
||||
SYS_SEMTIMEDOP = 5214
|
||||
SYS_FADVISE64 = 5215
|
||||
SYS_TIMER_CREATE = 5216
|
||||
SYS_TIMER_SETTIME = 5217
|
||||
SYS_TIMER_GETTIME = 5218
|
||||
SYS_TIMER_GETOVERRUN = 5219
|
||||
SYS_TIMER_DELETE = 5220
|
||||
SYS_CLOCK_SETTIME = 5221
|
||||
SYS_CLOCK_GETTIME = 5222
|
||||
SYS_CLOCK_GETRES = 5223
|
||||
SYS_CLOCK_NANOSLEEP = 5224
|
||||
SYS_TGKILL = 5225
|
||||
SYS_UTIMES = 5226
|
||||
SYS_MBIND = 5227
|
||||
SYS_GET_MEMPOLICY = 5228
|
||||
SYS_SET_MEMPOLICY = 5229
|
||||
SYS_MQ_OPEN = 5230
|
||||
SYS_MQ_UNLINK = 5231
|
||||
SYS_MQ_TIMEDSEND = 5232
|
||||
SYS_MQ_TIMEDRECEIVE = 5233
|
||||
SYS_MQ_NOTIFY = 5234
|
||||
SYS_MQ_GETSETATTR = 5235
|
||||
SYS_VSERVER = 5236
|
||||
SYS_WAITID = 5237
|
||||
SYS_ADD_KEY = 5239
|
||||
SYS_REQUEST_KEY = 5240
|
||||
SYS_KEYCTL = 5241
|
||||
SYS_SET_THREAD_AREA = 5242
|
||||
SYS_INOTIFY_INIT = 5243
|
||||
SYS_INOTIFY_ADD_WATCH = 5244
|
||||
SYS_INOTIFY_RM_WATCH = 5245
|
||||
SYS_MIGRATE_PAGES = 5246
|
||||
SYS_OPENAT = 5247
|
||||
SYS_MKDIRAT = 5248
|
||||
SYS_MKNODAT = 5249
|
||||
SYS_FCHOWNAT = 5250
|
||||
SYS_FUTIMESAT = 5251
|
||||
SYS_NEWFSTATAT = 5252
|
||||
SYS_UNLINKAT = 5253
|
||||
SYS_RENAMEAT = 5254
|
||||
SYS_LINKAT = 5255
|
||||
SYS_SYMLINKAT = 5256
|
||||
SYS_READLINKAT = 5257
|
||||
SYS_FCHMODAT = 5258
|
||||
SYS_FACCESSAT = 5259
|
||||
SYS_PSELECT6 = 5260
|
||||
SYS_PPOLL = 5261
|
||||
SYS_UNSHARE = 5262
|
||||
SYS_SPLICE = 5263
|
||||
SYS_SYNC_FILE_RANGE = 5264
|
||||
SYS_TEE = 5265
|
||||
SYS_VMSPLICE = 5266
|
||||
SYS_MOVE_PAGES = 5267
|
||||
SYS_SET_ROBUST_LIST = 5268
|
||||
SYS_GET_ROBUST_LIST = 5269
|
||||
SYS_KEXEC_LOAD = 5270
|
||||
SYS_GETCPU = 5271
|
||||
SYS_EPOLL_PWAIT = 5272
|
||||
SYS_IOPRIO_SET = 5273
|
||||
SYS_IOPRIO_GET = 5274
|
||||
SYS_UTIMENSAT = 5275
|
||||
SYS_SIGNALFD = 5276
|
||||
SYS_TIMERFD = 5277
|
||||
SYS_EVENTFD = 5278
|
||||
SYS_FALLOCATE = 5279
|
||||
SYS_TIMERFD_CREATE = 5280
|
||||
SYS_TIMERFD_GETTIME = 5281
|
||||
SYS_TIMERFD_SETTIME = 5282
|
||||
SYS_SIGNALFD4 = 5283
|
||||
SYS_EVENTFD2 = 5284
|
||||
SYS_EPOLL_CREATE1 = 5285
|
||||
SYS_DUP3 = 5286
|
||||
SYS_PIPE2 = 5287
|
||||
SYS_INOTIFY_INIT1 = 5288
|
||||
SYS_PREADV = 5289
|
||||
SYS_PWRITEV = 5290
|
||||
SYS_RT_TGSIGQUEUEINFO = 5291
|
||||
SYS_PERF_EVENT_OPEN = 5292
|
||||
SYS_ACCEPT4 = 5293
|
||||
SYS_RECVMMSG = 5294
|
||||
SYS_FANOTIFY_INIT = 5295
|
||||
SYS_FANOTIFY_MARK = 5296
|
||||
SYS_PRLIMIT64 = 5297
|
||||
SYS_NAME_TO_HANDLE_AT = 5298
|
||||
SYS_OPEN_BY_HANDLE_AT = 5299
|
||||
SYS_CLOCK_ADJTIME = 5300
|
||||
SYS_SYNCFS = 5301
|
||||
SYS_SENDMMSG = 5302
|
||||
SYS_SETNS = 5303
|
||||
SYS_PROCESS_VM_READV = 5304
|
||||
SYS_PROCESS_VM_WRITEV = 5305
|
||||
SYS_KCMP = 5306
|
||||
SYS_FINIT_MODULE = 5307
|
||||
SYS_GETDENTS64 = 5308
|
||||
SYS_SCHED_SETATTR = 5309
|
||||
SYS_SCHED_GETATTR = 5310
|
||||
SYS_RENAMEAT2 = 5311
|
||||
SYS_SECCOMP = 5312
|
||||
SYS_GETRANDOM = 5313
|
||||
SYS_MEMFD_CREATE = 5314
|
||||
SYS_BPF = 5315
|
||||
SYS_EXECVEAT = 5316
|
||||
SYS_USERFAULTFD = 5317
|
||||
SYS_MEMBARRIER = 5318
|
||||
SYS_MLOCK2 = 5319
|
||||
SYS_COPY_FILE_RANGE = 5320
|
||||
SYS_PREADV2 = 5321
|
||||
SYS_PWRITEV2 = 5322
|
||||
SYS_PKEY_MPROTECT = 5323
|
||||
SYS_PKEY_ALLOC = 5324
|
||||
SYS_PKEY_FREE = 5325
|
||||
SYS_STATX = 5326
|
||||
SYS_RSEQ = 5327
|
||||
SYS_IO_PGETEVENTS = 5328
|
||||
SYS_PIDFD_SEND_SIGNAL = 5424
|
||||
SYS_IO_URING_SETUP = 5425
|
||||
SYS_IO_URING_ENTER = 5426
|
||||
SYS_IO_URING_REGISTER = 5427
|
||||
SYS_OPEN_TREE = 5428
|
||||
SYS_MOVE_MOUNT = 5429
|
||||
SYS_FSOPEN = 5430
|
||||
SYS_FSCONFIG = 5431
|
||||
SYS_FSMOUNT = 5432
|
||||
SYS_FSPICK = 5433
|
||||
SYS_PIDFD_OPEN = 5434
|
||||
SYS_CLONE3 = 5435
|
||||
SYS_CLOSE_RANGE = 5436
|
||||
SYS_OPENAT2 = 5437
|
||||
SYS_PIDFD_GETFD = 5438
|
||||
SYS_FACCESSAT2 = 5439
|
||||
SYS_PROCESS_MADVISE = 5440
|
||||
SYS_EPOLL_PWAIT2 = 5441
|
||||
SYS_MOUNT_SETATTR = 5442
|
||||
SYS_READ = 5000
|
||||
SYS_WRITE = 5001
|
||||
SYS_OPEN = 5002
|
||||
SYS_CLOSE = 5003
|
||||
SYS_STAT = 5004
|
||||
SYS_FSTAT = 5005
|
||||
SYS_LSTAT = 5006
|
||||
SYS_POLL = 5007
|
||||
SYS_LSEEK = 5008
|
||||
SYS_MMAP = 5009
|
||||
SYS_MPROTECT = 5010
|
||||
SYS_MUNMAP = 5011
|
||||
SYS_BRK = 5012
|
||||
SYS_RT_SIGACTION = 5013
|
||||
SYS_RT_SIGPROCMASK = 5014
|
||||
SYS_IOCTL = 5015
|
||||
SYS_PREAD64 = 5016
|
||||
SYS_PWRITE64 = 5017
|
||||
SYS_READV = 5018
|
||||
SYS_WRITEV = 5019
|
||||
SYS_ACCESS = 5020
|
||||
SYS_PIPE = 5021
|
||||
SYS__NEWSELECT = 5022
|
||||
SYS_SCHED_YIELD = 5023
|
||||
SYS_MREMAP = 5024
|
||||
SYS_MSYNC = 5025
|
||||
SYS_MINCORE = 5026
|
||||
SYS_MADVISE = 5027
|
||||
SYS_SHMGET = 5028
|
||||
SYS_SHMAT = 5029
|
||||
SYS_SHMCTL = 5030
|
||||
SYS_DUP = 5031
|
||||
SYS_DUP2 = 5032
|
||||
SYS_PAUSE = 5033
|
||||
SYS_NANOSLEEP = 5034
|
||||
SYS_GETITIMER = 5035
|
||||
SYS_SETITIMER = 5036
|
||||
SYS_ALARM = 5037
|
||||
SYS_GETPID = 5038
|
||||
SYS_SENDFILE = 5039
|
||||
SYS_SOCKET = 5040
|
||||
SYS_CONNECT = 5041
|
||||
SYS_ACCEPT = 5042
|
||||
SYS_SENDTO = 5043
|
||||
SYS_RECVFROM = 5044
|
||||
SYS_SENDMSG = 5045
|
||||
SYS_RECVMSG = 5046
|
||||
SYS_SHUTDOWN = 5047
|
||||
SYS_BIND = 5048
|
||||
SYS_LISTEN = 5049
|
||||
SYS_GETSOCKNAME = 5050
|
||||
SYS_GETPEERNAME = 5051
|
||||
SYS_SOCKETPAIR = 5052
|
||||
SYS_SETSOCKOPT = 5053
|
||||
SYS_GETSOCKOPT = 5054
|
||||
SYS_CLONE = 5055
|
||||
SYS_FORK = 5056
|
||||
SYS_EXECVE = 5057
|
||||
SYS_EXIT = 5058
|
||||
SYS_WAIT4 = 5059
|
||||
SYS_KILL = 5060
|
||||
SYS_UNAME = 5061
|
||||
SYS_SEMGET = 5062
|
||||
SYS_SEMOP = 5063
|
||||
SYS_SEMCTL = 5064
|
||||
SYS_SHMDT = 5065
|
||||
SYS_MSGGET = 5066
|
||||
SYS_MSGSND = 5067
|
||||
SYS_MSGRCV = 5068
|
||||
SYS_MSGCTL = 5069
|
||||
SYS_FCNTL = 5070
|
||||
SYS_FLOCK = 5071
|
||||
SYS_FSYNC = 5072
|
||||
SYS_FDATASYNC = 5073
|
||||
SYS_TRUNCATE = 5074
|
||||
SYS_FTRUNCATE = 5075
|
||||
SYS_GETDENTS = 5076
|
||||
SYS_GETCWD = 5077
|
||||
SYS_CHDIR = 5078
|
||||
SYS_FCHDIR = 5079
|
||||
SYS_RENAME = 5080
|
||||
SYS_MKDIR = 5081
|
||||
SYS_RMDIR = 5082
|
||||
SYS_CREAT = 5083
|
||||
SYS_LINK = 5084
|
||||
SYS_UNLINK = 5085
|
||||
SYS_SYMLINK = 5086
|
||||
SYS_READLINK = 5087
|
||||
SYS_CHMOD = 5088
|
||||
SYS_FCHMOD = 5089
|
||||
SYS_CHOWN = 5090
|
||||
SYS_FCHOWN = 5091
|
||||
SYS_LCHOWN = 5092
|
||||
SYS_UMASK = 5093
|
||||
SYS_GETTIMEOFDAY = 5094
|
||||
SYS_GETRLIMIT = 5095
|
||||
SYS_GETRUSAGE = 5096
|
||||
SYS_SYSINFO = 5097
|
||||
SYS_TIMES = 5098
|
||||
SYS_PTRACE = 5099
|
||||
SYS_GETUID = 5100
|
||||
SYS_SYSLOG = 5101
|
||||
SYS_GETGID = 5102
|
||||
SYS_SETUID = 5103
|
||||
SYS_SETGID = 5104
|
||||
SYS_GETEUID = 5105
|
||||
SYS_GETEGID = 5106
|
||||
SYS_SETPGID = 5107
|
||||
SYS_GETPPID = 5108
|
||||
SYS_GETPGRP = 5109
|
||||
SYS_SETSID = 5110
|
||||
SYS_SETREUID = 5111
|
||||
SYS_SETREGID = 5112
|
||||
SYS_GETGROUPS = 5113
|
||||
SYS_SETGROUPS = 5114
|
||||
SYS_SETRESUID = 5115
|
||||
SYS_GETRESUID = 5116
|
||||
SYS_SETRESGID = 5117
|
||||
SYS_GETRESGID = 5118
|
||||
SYS_GETPGID = 5119
|
||||
SYS_SETFSUID = 5120
|
||||
SYS_SETFSGID = 5121
|
||||
SYS_GETSID = 5122
|
||||
SYS_CAPGET = 5123
|
||||
SYS_CAPSET = 5124
|
||||
SYS_RT_SIGPENDING = 5125
|
||||
SYS_RT_SIGTIMEDWAIT = 5126
|
||||
SYS_RT_SIGQUEUEINFO = 5127
|
||||
SYS_RT_SIGSUSPEND = 5128
|
||||
SYS_SIGALTSTACK = 5129
|
||||
SYS_UTIME = 5130
|
||||
SYS_MKNOD = 5131
|
||||
SYS_PERSONALITY = 5132
|
||||
SYS_USTAT = 5133
|
||||
SYS_STATFS = 5134
|
||||
SYS_FSTATFS = 5135
|
||||
SYS_SYSFS = 5136
|
||||
SYS_GETPRIORITY = 5137
|
||||
SYS_SETPRIORITY = 5138
|
||||
SYS_SCHED_SETPARAM = 5139
|
||||
SYS_SCHED_GETPARAM = 5140
|
||||
SYS_SCHED_SETSCHEDULER = 5141
|
||||
SYS_SCHED_GETSCHEDULER = 5142
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 5143
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 5144
|
||||
SYS_SCHED_RR_GET_INTERVAL = 5145
|
||||
SYS_MLOCK = 5146
|
||||
SYS_MUNLOCK = 5147
|
||||
SYS_MLOCKALL = 5148
|
||||
SYS_MUNLOCKALL = 5149
|
||||
SYS_VHANGUP = 5150
|
||||
SYS_PIVOT_ROOT = 5151
|
||||
SYS__SYSCTL = 5152
|
||||
SYS_PRCTL = 5153
|
||||
SYS_ADJTIMEX = 5154
|
||||
SYS_SETRLIMIT = 5155
|
||||
SYS_CHROOT = 5156
|
||||
SYS_SYNC = 5157
|
||||
SYS_ACCT = 5158
|
||||
SYS_SETTIMEOFDAY = 5159
|
||||
SYS_MOUNT = 5160
|
||||
SYS_UMOUNT2 = 5161
|
||||
SYS_SWAPON = 5162
|
||||
SYS_SWAPOFF = 5163
|
||||
SYS_REBOOT = 5164
|
||||
SYS_SETHOSTNAME = 5165
|
||||
SYS_SETDOMAINNAME = 5166
|
||||
SYS_CREATE_MODULE = 5167
|
||||
SYS_INIT_MODULE = 5168
|
||||
SYS_DELETE_MODULE = 5169
|
||||
SYS_GET_KERNEL_SYMS = 5170
|
||||
SYS_QUERY_MODULE = 5171
|
||||
SYS_QUOTACTL = 5172
|
||||
SYS_NFSSERVCTL = 5173
|
||||
SYS_GETPMSG = 5174
|
||||
SYS_PUTPMSG = 5175
|
||||
SYS_AFS_SYSCALL = 5176
|
||||
SYS_RESERVED177 = 5177
|
||||
SYS_GETTID = 5178
|
||||
SYS_READAHEAD = 5179
|
||||
SYS_SETXATTR = 5180
|
||||
SYS_LSETXATTR = 5181
|
||||
SYS_FSETXATTR = 5182
|
||||
SYS_GETXATTR = 5183
|
||||
SYS_LGETXATTR = 5184
|
||||
SYS_FGETXATTR = 5185
|
||||
SYS_LISTXATTR = 5186
|
||||
SYS_LLISTXATTR = 5187
|
||||
SYS_FLISTXATTR = 5188
|
||||
SYS_REMOVEXATTR = 5189
|
||||
SYS_LREMOVEXATTR = 5190
|
||||
SYS_FREMOVEXATTR = 5191
|
||||
SYS_TKILL = 5192
|
||||
SYS_RESERVED193 = 5193
|
||||
SYS_FUTEX = 5194
|
||||
SYS_SCHED_SETAFFINITY = 5195
|
||||
SYS_SCHED_GETAFFINITY = 5196
|
||||
SYS_CACHEFLUSH = 5197
|
||||
SYS_CACHECTL = 5198
|
||||
SYS_SYSMIPS = 5199
|
||||
SYS_IO_SETUP = 5200
|
||||
SYS_IO_DESTROY = 5201
|
||||
SYS_IO_GETEVENTS = 5202
|
||||
SYS_IO_SUBMIT = 5203
|
||||
SYS_IO_CANCEL = 5204
|
||||
SYS_EXIT_GROUP = 5205
|
||||
SYS_LOOKUP_DCOOKIE = 5206
|
||||
SYS_EPOLL_CREATE = 5207
|
||||
SYS_EPOLL_CTL = 5208
|
||||
SYS_EPOLL_WAIT = 5209
|
||||
SYS_REMAP_FILE_PAGES = 5210
|
||||
SYS_RT_SIGRETURN = 5211
|
||||
SYS_SET_TID_ADDRESS = 5212
|
||||
SYS_RESTART_SYSCALL = 5213
|
||||
SYS_SEMTIMEDOP = 5214
|
||||
SYS_FADVISE64 = 5215
|
||||
SYS_TIMER_CREATE = 5216
|
||||
SYS_TIMER_SETTIME = 5217
|
||||
SYS_TIMER_GETTIME = 5218
|
||||
SYS_TIMER_GETOVERRUN = 5219
|
||||
SYS_TIMER_DELETE = 5220
|
||||
SYS_CLOCK_SETTIME = 5221
|
||||
SYS_CLOCK_GETTIME = 5222
|
||||
SYS_CLOCK_GETRES = 5223
|
||||
SYS_CLOCK_NANOSLEEP = 5224
|
||||
SYS_TGKILL = 5225
|
||||
SYS_UTIMES = 5226
|
||||
SYS_MBIND = 5227
|
||||
SYS_GET_MEMPOLICY = 5228
|
||||
SYS_SET_MEMPOLICY = 5229
|
||||
SYS_MQ_OPEN = 5230
|
||||
SYS_MQ_UNLINK = 5231
|
||||
SYS_MQ_TIMEDSEND = 5232
|
||||
SYS_MQ_TIMEDRECEIVE = 5233
|
||||
SYS_MQ_NOTIFY = 5234
|
||||
SYS_MQ_GETSETATTR = 5235
|
||||
SYS_VSERVER = 5236
|
||||
SYS_WAITID = 5237
|
||||
SYS_ADD_KEY = 5239
|
||||
SYS_REQUEST_KEY = 5240
|
||||
SYS_KEYCTL = 5241
|
||||
SYS_SET_THREAD_AREA = 5242
|
||||
SYS_INOTIFY_INIT = 5243
|
||||
SYS_INOTIFY_ADD_WATCH = 5244
|
||||
SYS_INOTIFY_RM_WATCH = 5245
|
||||
SYS_MIGRATE_PAGES = 5246
|
||||
SYS_OPENAT = 5247
|
||||
SYS_MKDIRAT = 5248
|
||||
SYS_MKNODAT = 5249
|
||||
SYS_FCHOWNAT = 5250
|
||||
SYS_FUTIMESAT = 5251
|
||||
SYS_NEWFSTATAT = 5252
|
||||
SYS_UNLINKAT = 5253
|
||||
SYS_RENAMEAT = 5254
|
||||
SYS_LINKAT = 5255
|
||||
SYS_SYMLINKAT = 5256
|
||||
SYS_READLINKAT = 5257
|
||||
SYS_FCHMODAT = 5258
|
||||
SYS_FACCESSAT = 5259
|
||||
SYS_PSELECT6 = 5260
|
||||
SYS_PPOLL = 5261
|
||||
SYS_UNSHARE = 5262
|
||||
SYS_SPLICE = 5263
|
||||
SYS_SYNC_FILE_RANGE = 5264
|
||||
SYS_TEE = 5265
|
||||
SYS_VMSPLICE = 5266
|
||||
SYS_MOVE_PAGES = 5267
|
||||
SYS_SET_ROBUST_LIST = 5268
|
||||
SYS_GET_ROBUST_LIST = 5269
|
||||
SYS_KEXEC_LOAD = 5270
|
||||
SYS_GETCPU = 5271
|
||||
SYS_EPOLL_PWAIT = 5272
|
||||
SYS_IOPRIO_SET = 5273
|
||||
SYS_IOPRIO_GET = 5274
|
||||
SYS_UTIMENSAT = 5275
|
||||
SYS_SIGNALFD = 5276
|
||||
SYS_TIMERFD = 5277
|
||||
SYS_EVENTFD = 5278
|
||||
SYS_FALLOCATE = 5279
|
||||
SYS_TIMERFD_CREATE = 5280
|
||||
SYS_TIMERFD_GETTIME = 5281
|
||||
SYS_TIMERFD_SETTIME = 5282
|
||||
SYS_SIGNALFD4 = 5283
|
||||
SYS_EVENTFD2 = 5284
|
||||
SYS_EPOLL_CREATE1 = 5285
|
||||
SYS_DUP3 = 5286
|
||||
SYS_PIPE2 = 5287
|
||||
SYS_INOTIFY_INIT1 = 5288
|
||||
SYS_PREADV = 5289
|
||||
SYS_PWRITEV = 5290
|
||||
SYS_RT_TGSIGQUEUEINFO = 5291
|
||||
SYS_PERF_EVENT_OPEN = 5292
|
||||
SYS_ACCEPT4 = 5293
|
||||
SYS_RECVMMSG = 5294
|
||||
SYS_FANOTIFY_INIT = 5295
|
||||
SYS_FANOTIFY_MARK = 5296
|
||||
SYS_PRLIMIT64 = 5297
|
||||
SYS_NAME_TO_HANDLE_AT = 5298
|
||||
SYS_OPEN_BY_HANDLE_AT = 5299
|
||||
SYS_CLOCK_ADJTIME = 5300
|
||||
SYS_SYNCFS = 5301
|
||||
SYS_SENDMMSG = 5302
|
||||
SYS_SETNS = 5303
|
||||
SYS_PROCESS_VM_READV = 5304
|
||||
SYS_PROCESS_VM_WRITEV = 5305
|
||||
SYS_KCMP = 5306
|
||||
SYS_FINIT_MODULE = 5307
|
||||
SYS_GETDENTS64 = 5308
|
||||
SYS_SCHED_SETATTR = 5309
|
||||
SYS_SCHED_GETATTR = 5310
|
||||
SYS_RENAMEAT2 = 5311
|
||||
SYS_SECCOMP = 5312
|
||||
SYS_GETRANDOM = 5313
|
||||
SYS_MEMFD_CREATE = 5314
|
||||
SYS_BPF = 5315
|
||||
SYS_EXECVEAT = 5316
|
||||
SYS_USERFAULTFD = 5317
|
||||
SYS_MEMBARRIER = 5318
|
||||
SYS_MLOCK2 = 5319
|
||||
SYS_COPY_FILE_RANGE = 5320
|
||||
SYS_PREADV2 = 5321
|
||||
SYS_PWRITEV2 = 5322
|
||||
SYS_PKEY_MPROTECT = 5323
|
||||
SYS_PKEY_ALLOC = 5324
|
||||
SYS_PKEY_FREE = 5325
|
||||
SYS_STATX = 5326
|
||||
SYS_RSEQ = 5327
|
||||
SYS_IO_PGETEVENTS = 5328
|
||||
SYS_PIDFD_SEND_SIGNAL = 5424
|
||||
SYS_IO_URING_SETUP = 5425
|
||||
SYS_IO_URING_ENTER = 5426
|
||||
SYS_IO_URING_REGISTER = 5427
|
||||
SYS_OPEN_TREE = 5428
|
||||
SYS_MOVE_MOUNT = 5429
|
||||
SYS_FSOPEN = 5430
|
||||
SYS_FSCONFIG = 5431
|
||||
SYS_FSMOUNT = 5432
|
||||
SYS_FSPICK = 5433
|
||||
SYS_PIDFD_OPEN = 5434
|
||||
SYS_CLONE3 = 5435
|
||||
SYS_CLOSE_RANGE = 5436
|
||||
SYS_OPENAT2 = 5437
|
||||
SYS_PIDFD_GETFD = 5438
|
||||
SYS_FACCESSAT2 = 5439
|
||||
SYS_PROCESS_MADVISE = 5440
|
||||
SYS_EPOLL_PWAIT2 = 5441
|
||||
SYS_MOUNT_SETATTR = 5442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 5444
|
||||
SYS_LANDLOCK_ADD_RULE = 5445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 5446
|
||||
)
|
||||
|
|
|
@ -424,4 +424,7 @@ const (
|
|||
SYS_PROCESS_MADVISE = 4440
|
||||
SYS_EPOLL_PWAIT2 = 4441
|
||||
SYS_MOUNT_SETATTR = 4442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 4444
|
||||
SYS_LANDLOCK_ADD_RULE = 4445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 4446
|
||||
)
|
||||
|
|
|
@ -431,4 +431,7 @@ const (
|
|||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||
SYS_LANDLOCK_ADD_RULE = 445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||
)
|
||||
|
|
|
@ -7,400 +7,403 @@
|
|||
package unix
|
||||
|
||||
const (
|
||||
SYS_RESTART_SYSCALL = 0
|
||||
SYS_EXIT = 1
|
||||
SYS_FORK = 2
|
||||
SYS_READ = 3
|
||||
SYS_WRITE = 4
|
||||
SYS_OPEN = 5
|
||||
SYS_CLOSE = 6
|
||||
SYS_WAITPID = 7
|
||||
SYS_CREAT = 8
|
||||
SYS_LINK = 9
|
||||
SYS_UNLINK = 10
|
||||
SYS_EXECVE = 11
|
||||
SYS_CHDIR = 12
|
||||
SYS_TIME = 13
|
||||
SYS_MKNOD = 14
|
||||
SYS_CHMOD = 15
|
||||
SYS_LCHOWN = 16
|
||||
SYS_BREAK = 17
|
||||
SYS_OLDSTAT = 18
|
||||
SYS_LSEEK = 19
|
||||
SYS_GETPID = 20
|
||||
SYS_MOUNT = 21
|
||||
SYS_UMOUNT = 22
|
||||
SYS_SETUID = 23
|
||||
SYS_GETUID = 24
|
||||
SYS_STIME = 25
|
||||
SYS_PTRACE = 26
|
||||
SYS_ALARM = 27
|
||||
SYS_OLDFSTAT = 28
|
||||
SYS_PAUSE = 29
|
||||
SYS_UTIME = 30
|
||||
SYS_STTY = 31
|
||||
SYS_GTTY = 32
|
||||
SYS_ACCESS = 33
|
||||
SYS_NICE = 34
|
||||
SYS_FTIME = 35
|
||||
SYS_SYNC = 36
|
||||
SYS_KILL = 37
|
||||
SYS_RENAME = 38
|
||||
SYS_MKDIR = 39
|
||||
SYS_RMDIR = 40
|
||||
SYS_DUP = 41
|
||||
SYS_PIPE = 42
|
||||
SYS_TIMES = 43
|
||||
SYS_PROF = 44
|
||||
SYS_BRK = 45
|
||||
SYS_SETGID = 46
|
||||
SYS_GETGID = 47
|
||||
SYS_SIGNAL = 48
|
||||
SYS_GETEUID = 49
|
||||
SYS_GETEGID = 50
|
||||
SYS_ACCT = 51
|
||||
SYS_UMOUNT2 = 52
|
||||
SYS_LOCK = 53
|
||||
SYS_IOCTL = 54
|
||||
SYS_FCNTL = 55
|
||||
SYS_MPX = 56
|
||||
SYS_SETPGID = 57
|
||||
SYS_ULIMIT = 58
|
||||
SYS_OLDOLDUNAME = 59
|
||||
SYS_UMASK = 60
|
||||
SYS_CHROOT = 61
|
||||
SYS_USTAT = 62
|
||||
SYS_DUP2 = 63
|
||||
SYS_GETPPID = 64
|
||||
SYS_GETPGRP = 65
|
||||
SYS_SETSID = 66
|
||||
SYS_SIGACTION = 67
|
||||
SYS_SGETMASK = 68
|
||||
SYS_SSETMASK = 69
|
||||
SYS_SETREUID = 70
|
||||
SYS_SETREGID = 71
|
||||
SYS_SIGSUSPEND = 72
|
||||
SYS_SIGPENDING = 73
|
||||
SYS_SETHOSTNAME = 74
|
||||
SYS_SETRLIMIT = 75
|
||||
SYS_GETRLIMIT = 76
|
||||
SYS_GETRUSAGE = 77
|
||||
SYS_GETTIMEOFDAY = 78
|
||||
SYS_SETTIMEOFDAY = 79
|
||||
SYS_GETGROUPS = 80
|
||||
SYS_SETGROUPS = 81
|
||||
SYS_SELECT = 82
|
||||
SYS_SYMLINK = 83
|
||||
SYS_OLDLSTAT = 84
|
||||
SYS_READLINK = 85
|
||||
SYS_USELIB = 86
|
||||
SYS_SWAPON = 87
|
||||
SYS_REBOOT = 88
|
||||
SYS_READDIR = 89
|
||||
SYS_MMAP = 90
|
||||
SYS_MUNMAP = 91
|
||||
SYS_TRUNCATE = 92
|
||||
SYS_FTRUNCATE = 93
|
||||
SYS_FCHMOD = 94
|
||||
SYS_FCHOWN = 95
|
||||
SYS_GETPRIORITY = 96
|
||||
SYS_SETPRIORITY = 97
|
||||
SYS_PROFIL = 98
|
||||
SYS_STATFS = 99
|
||||
SYS_FSTATFS = 100
|
||||
SYS_IOPERM = 101
|
||||
SYS_SOCKETCALL = 102
|
||||
SYS_SYSLOG = 103
|
||||
SYS_SETITIMER = 104
|
||||
SYS_GETITIMER = 105
|
||||
SYS_STAT = 106
|
||||
SYS_LSTAT = 107
|
||||
SYS_FSTAT = 108
|
||||
SYS_OLDUNAME = 109
|
||||
SYS_IOPL = 110
|
||||
SYS_VHANGUP = 111
|
||||
SYS_IDLE = 112
|
||||
SYS_VM86 = 113
|
||||
SYS_WAIT4 = 114
|
||||
SYS_SWAPOFF = 115
|
||||
SYS_SYSINFO = 116
|
||||
SYS_IPC = 117
|
||||
SYS_FSYNC = 118
|
||||
SYS_SIGRETURN = 119
|
||||
SYS_CLONE = 120
|
||||
SYS_SETDOMAINNAME = 121
|
||||
SYS_UNAME = 122
|
||||
SYS_MODIFY_LDT = 123
|
||||
SYS_ADJTIMEX = 124
|
||||
SYS_MPROTECT = 125
|
||||
SYS_SIGPROCMASK = 126
|
||||
SYS_CREATE_MODULE = 127
|
||||
SYS_INIT_MODULE = 128
|
||||
SYS_DELETE_MODULE = 129
|
||||
SYS_GET_KERNEL_SYMS = 130
|
||||
SYS_QUOTACTL = 131
|
||||
SYS_GETPGID = 132
|
||||
SYS_FCHDIR = 133
|
||||
SYS_BDFLUSH = 134
|
||||
SYS_SYSFS = 135
|
||||
SYS_PERSONALITY = 136
|
||||
SYS_AFS_SYSCALL = 137
|
||||
SYS_SETFSUID = 138
|
||||
SYS_SETFSGID = 139
|
||||
SYS__LLSEEK = 140
|
||||
SYS_GETDENTS = 141
|
||||
SYS__NEWSELECT = 142
|
||||
SYS_FLOCK = 143
|
||||
SYS_MSYNC = 144
|
||||
SYS_READV = 145
|
||||
SYS_WRITEV = 146
|
||||
SYS_GETSID = 147
|
||||
SYS_FDATASYNC = 148
|
||||
SYS__SYSCTL = 149
|
||||
SYS_MLOCK = 150
|
||||
SYS_MUNLOCK = 151
|
||||
SYS_MLOCKALL = 152
|
||||
SYS_MUNLOCKALL = 153
|
||||
SYS_SCHED_SETPARAM = 154
|
||||
SYS_SCHED_GETPARAM = 155
|
||||
SYS_SCHED_SETSCHEDULER = 156
|
||||
SYS_SCHED_GETSCHEDULER = 157
|
||||
SYS_SCHED_YIELD = 158
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 159
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 160
|
||||
SYS_SCHED_RR_GET_INTERVAL = 161
|
||||
SYS_NANOSLEEP = 162
|
||||
SYS_MREMAP = 163
|
||||
SYS_SETRESUID = 164
|
||||
SYS_GETRESUID = 165
|
||||
SYS_QUERY_MODULE = 166
|
||||
SYS_POLL = 167
|
||||
SYS_NFSSERVCTL = 168
|
||||
SYS_SETRESGID = 169
|
||||
SYS_GETRESGID = 170
|
||||
SYS_PRCTL = 171
|
||||
SYS_RT_SIGRETURN = 172
|
||||
SYS_RT_SIGACTION = 173
|
||||
SYS_RT_SIGPROCMASK = 174
|
||||
SYS_RT_SIGPENDING = 175
|
||||
SYS_RT_SIGTIMEDWAIT = 176
|
||||
SYS_RT_SIGQUEUEINFO = 177
|
||||
SYS_RT_SIGSUSPEND = 178
|
||||
SYS_PREAD64 = 179
|
||||
SYS_PWRITE64 = 180
|
||||
SYS_CHOWN = 181
|
||||
SYS_GETCWD = 182
|
||||
SYS_CAPGET = 183
|
||||
SYS_CAPSET = 184
|
||||
SYS_SIGALTSTACK = 185
|
||||
SYS_SENDFILE = 186
|
||||
SYS_GETPMSG = 187
|
||||
SYS_PUTPMSG = 188
|
||||
SYS_VFORK = 189
|
||||
SYS_UGETRLIMIT = 190
|
||||
SYS_READAHEAD = 191
|
||||
SYS_PCICONFIG_READ = 198
|
||||
SYS_PCICONFIG_WRITE = 199
|
||||
SYS_PCICONFIG_IOBASE = 200
|
||||
SYS_MULTIPLEXER = 201
|
||||
SYS_GETDENTS64 = 202
|
||||
SYS_PIVOT_ROOT = 203
|
||||
SYS_MADVISE = 205
|
||||
SYS_MINCORE = 206
|
||||
SYS_GETTID = 207
|
||||
SYS_TKILL = 208
|
||||
SYS_SETXATTR = 209
|
||||
SYS_LSETXATTR = 210
|
||||
SYS_FSETXATTR = 211
|
||||
SYS_GETXATTR = 212
|
||||
SYS_LGETXATTR = 213
|
||||
SYS_FGETXATTR = 214
|
||||
SYS_LISTXATTR = 215
|
||||
SYS_LLISTXATTR = 216
|
||||
SYS_FLISTXATTR = 217
|
||||
SYS_REMOVEXATTR = 218
|
||||
SYS_LREMOVEXATTR = 219
|
||||
SYS_FREMOVEXATTR = 220
|
||||
SYS_FUTEX = 221
|
||||
SYS_SCHED_SETAFFINITY = 222
|
||||
SYS_SCHED_GETAFFINITY = 223
|
||||
SYS_TUXCALL = 225
|
||||
SYS_IO_SETUP = 227
|
||||
SYS_IO_DESTROY = 228
|
||||
SYS_IO_GETEVENTS = 229
|
||||
SYS_IO_SUBMIT = 230
|
||||
SYS_IO_CANCEL = 231
|
||||
SYS_SET_TID_ADDRESS = 232
|
||||
SYS_FADVISE64 = 233
|
||||
SYS_EXIT_GROUP = 234
|
||||
SYS_LOOKUP_DCOOKIE = 235
|
||||
SYS_EPOLL_CREATE = 236
|
||||
SYS_EPOLL_CTL = 237
|
||||
SYS_EPOLL_WAIT = 238
|
||||
SYS_REMAP_FILE_PAGES = 239
|
||||
SYS_TIMER_CREATE = 240
|
||||
SYS_TIMER_SETTIME = 241
|
||||
SYS_TIMER_GETTIME = 242
|
||||
SYS_TIMER_GETOVERRUN = 243
|
||||
SYS_TIMER_DELETE = 244
|
||||
SYS_CLOCK_SETTIME = 245
|
||||
SYS_CLOCK_GETTIME = 246
|
||||
SYS_CLOCK_GETRES = 247
|
||||
SYS_CLOCK_NANOSLEEP = 248
|
||||
SYS_SWAPCONTEXT = 249
|
||||
SYS_TGKILL = 250
|
||||
SYS_UTIMES = 251
|
||||
SYS_STATFS64 = 252
|
||||
SYS_FSTATFS64 = 253
|
||||
SYS_RTAS = 255
|
||||
SYS_SYS_DEBUG_SETCONTEXT = 256
|
||||
SYS_MIGRATE_PAGES = 258
|
||||
SYS_MBIND = 259
|
||||
SYS_GET_MEMPOLICY = 260
|
||||
SYS_SET_MEMPOLICY = 261
|
||||
SYS_MQ_OPEN = 262
|
||||
SYS_MQ_UNLINK = 263
|
||||
SYS_MQ_TIMEDSEND = 264
|
||||
SYS_MQ_TIMEDRECEIVE = 265
|
||||
SYS_MQ_NOTIFY = 266
|
||||
SYS_MQ_GETSETATTR = 267
|
||||
SYS_KEXEC_LOAD = 268
|
||||
SYS_ADD_KEY = 269
|
||||
SYS_REQUEST_KEY = 270
|
||||
SYS_KEYCTL = 271
|
||||
SYS_WAITID = 272
|
||||
SYS_IOPRIO_SET = 273
|
||||
SYS_IOPRIO_GET = 274
|
||||
SYS_INOTIFY_INIT = 275
|
||||
SYS_INOTIFY_ADD_WATCH = 276
|
||||
SYS_INOTIFY_RM_WATCH = 277
|
||||
SYS_SPU_RUN = 278
|
||||
SYS_SPU_CREATE = 279
|
||||
SYS_PSELECT6 = 280
|
||||
SYS_PPOLL = 281
|
||||
SYS_UNSHARE = 282
|
||||
SYS_SPLICE = 283
|
||||
SYS_TEE = 284
|
||||
SYS_VMSPLICE = 285
|
||||
SYS_OPENAT = 286
|
||||
SYS_MKDIRAT = 287
|
||||
SYS_MKNODAT = 288
|
||||
SYS_FCHOWNAT = 289
|
||||
SYS_FUTIMESAT = 290
|
||||
SYS_NEWFSTATAT = 291
|
||||
SYS_UNLINKAT = 292
|
||||
SYS_RENAMEAT = 293
|
||||
SYS_LINKAT = 294
|
||||
SYS_SYMLINKAT = 295
|
||||
SYS_READLINKAT = 296
|
||||
SYS_FCHMODAT = 297
|
||||
SYS_FACCESSAT = 298
|
||||
SYS_GET_ROBUST_LIST = 299
|
||||
SYS_SET_ROBUST_LIST = 300
|
||||
SYS_MOVE_PAGES = 301
|
||||
SYS_GETCPU = 302
|
||||
SYS_EPOLL_PWAIT = 303
|
||||
SYS_UTIMENSAT = 304
|
||||
SYS_SIGNALFD = 305
|
||||
SYS_TIMERFD_CREATE = 306
|
||||
SYS_EVENTFD = 307
|
||||
SYS_SYNC_FILE_RANGE2 = 308
|
||||
SYS_FALLOCATE = 309
|
||||
SYS_SUBPAGE_PROT = 310
|
||||
SYS_TIMERFD_SETTIME = 311
|
||||
SYS_TIMERFD_GETTIME = 312
|
||||
SYS_SIGNALFD4 = 313
|
||||
SYS_EVENTFD2 = 314
|
||||
SYS_EPOLL_CREATE1 = 315
|
||||
SYS_DUP3 = 316
|
||||
SYS_PIPE2 = 317
|
||||
SYS_INOTIFY_INIT1 = 318
|
||||
SYS_PERF_EVENT_OPEN = 319
|
||||
SYS_PREADV = 320
|
||||
SYS_PWRITEV = 321
|
||||
SYS_RT_TGSIGQUEUEINFO = 322
|
||||
SYS_FANOTIFY_INIT = 323
|
||||
SYS_FANOTIFY_MARK = 324
|
||||
SYS_PRLIMIT64 = 325
|
||||
SYS_SOCKET = 326
|
||||
SYS_BIND = 327
|
||||
SYS_CONNECT = 328
|
||||
SYS_LISTEN = 329
|
||||
SYS_ACCEPT = 330
|
||||
SYS_GETSOCKNAME = 331
|
||||
SYS_GETPEERNAME = 332
|
||||
SYS_SOCKETPAIR = 333
|
||||
SYS_SEND = 334
|
||||
SYS_SENDTO = 335
|
||||
SYS_RECV = 336
|
||||
SYS_RECVFROM = 337
|
||||
SYS_SHUTDOWN = 338
|
||||
SYS_SETSOCKOPT = 339
|
||||
SYS_GETSOCKOPT = 340
|
||||
SYS_SENDMSG = 341
|
||||
SYS_RECVMSG = 342
|
||||
SYS_RECVMMSG = 343
|
||||
SYS_ACCEPT4 = 344
|
||||
SYS_NAME_TO_HANDLE_AT = 345
|
||||
SYS_OPEN_BY_HANDLE_AT = 346
|
||||
SYS_CLOCK_ADJTIME = 347
|
||||
SYS_SYNCFS = 348
|
||||
SYS_SENDMMSG = 349
|
||||
SYS_SETNS = 350
|
||||
SYS_PROCESS_VM_READV = 351
|
||||
SYS_PROCESS_VM_WRITEV = 352
|
||||
SYS_FINIT_MODULE = 353
|
||||
SYS_KCMP = 354
|
||||
SYS_SCHED_SETATTR = 355
|
||||
SYS_SCHED_GETATTR = 356
|
||||
SYS_RENAMEAT2 = 357
|
||||
SYS_SECCOMP = 358
|
||||
SYS_GETRANDOM = 359
|
||||
SYS_MEMFD_CREATE = 360
|
||||
SYS_BPF = 361
|
||||
SYS_EXECVEAT = 362
|
||||
SYS_SWITCH_ENDIAN = 363
|
||||
SYS_USERFAULTFD = 364
|
||||
SYS_MEMBARRIER = 365
|
||||
SYS_MLOCK2 = 378
|
||||
SYS_COPY_FILE_RANGE = 379
|
||||
SYS_PREADV2 = 380
|
||||
SYS_PWRITEV2 = 381
|
||||
SYS_KEXEC_FILE_LOAD = 382
|
||||
SYS_STATX = 383
|
||||
SYS_PKEY_ALLOC = 384
|
||||
SYS_PKEY_FREE = 385
|
||||
SYS_PKEY_MPROTECT = 386
|
||||
SYS_RSEQ = 387
|
||||
SYS_IO_PGETEVENTS = 388
|
||||
SYS_SEMTIMEDOP = 392
|
||||
SYS_SEMGET = 393
|
||||
SYS_SEMCTL = 394
|
||||
SYS_SHMGET = 395
|
||||
SYS_SHMCTL = 396
|
||||
SYS_SHMAT = 397
|
||||
SYS_SHMDT = 398
|
||||
SYS_MSGGET = 399
|
||||
SYS_MSGSND = 400
|
||||
SYS_MSGRCV = 401
|
||||
SYS_MSGCTL = 402
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_RESTART_SYSCALL = 0
|
||||
SYS_EXIT = 1
|
||||
SYS_FORK = 2
|
||||
SYS_READ = 3
|
||||
SYS_WRITE = 4
|
||||
SYS_OPEN = 5
|
||||
SYS_CLOSE = 6
|
||||
SYS_WAITPID = 7
|
||||
SYS_CREAT = 8
|
||||
SYS_LINK = 9
|
||||
SYS_UNLINK = 10
|
||||
SYS_EXECVE = 11
|
||||
SYS_CHDIR = 12
|
||||
SYS_TIME = 13
|
||||
SYS_MKNOD = 14
|
||||
SYS_CHMOD = 15
|
||||
SYS_LCHOWN = 16
|
||||
SYS_BREAK = 17
|
||||
SYS_OLDSTAT = 18
|
||||
SYS_LSEEK = 19
|
||||
SYS_GETPID = 20
|
||||
SYS_MOUNT = 21
|
||||
SYS_UMOUNT = 22
|
||||
SYS_SETUID = 23
|
||||
SYS_GETUID = 24
|
||||
SYS_STIME = 25
|
||||
SYS_PTRACE = 26
|
||||
SYS_ALARM = 27
|
||||
SYS_OLDFSTAT = 28
|
||||
SYS_PAUSE = 29
|
||||
SYS_UTIME = 30
|
||||
SYS_STTY = 31
|
||||
SYS_GTTY = 32
|
||||
SYS_ACCESS = 33
|
||||
SYS_NICE = 34
|
||||
SYS_FTIME = 35
|
||||
SYS_SYNC = 36
|
||||
SYS_KILL = 37
|
||||
SYS_RENAME = 38
|
||||
SYS_MKDIR = 39
|
||||
SYS_RMDIR = 40
|
||||
SYS_DUP = 41
|
||||
SYS_PIPE = 42
|
||||
SYS_TIMES = 43
|
||||
SYS_PROF = 44
|
||||
SYS_BRK = 45
|
||||
SYS_SETGID = 46
|
||||
SYS_GETGID = 47
|
||||
SYS_SIGNAL = 48
|
||||
SYS_GETEUID = 49
|
||||
SYS_GETEGID = 50
|
||||
SYS_ACCT = 51
|
||||
SYS_UMOUNT2 = 52
|
||||
SYS_LOCK = 53
|
||||
SYS_IOCTL = 54
|
||||
SYS_FCNTL = 55
|
||||
SYS_MPX = 56
|
||||
SYS_SETPGID = 57
|
||||
SYS_ULIMIT = 58
|
||||
SYS_OLDOLDUNAME = 59
|
||||
SYS_UMASK = 60
|
||||
SYS_CHROOT = 61
|
||||
SYS_USTAT = 62
|
||||
SYS_DUP2 = 63
|
||||
SYS_GETPPID = 64
|
||||
SYS_GETPGRP = 65
|
||||
SYS_SETSID = 66
|
||||
SYS_SIGACTION = 67
|
||||
SYS_SGETMASK = 68
|
||||
SYS_SSETMASK = 69
|
||||
SYS_SETREUID = 70
|
||||
SYS_SETREGID = 71
|
||||
SYS_SIGSUSPEND = 72
|
||||
SYS_SIGPENDING = 73
|
||||
SYS_SETHOSTNAME = 74
|
||||
SYS_SETRLIMIT = 75
|
||||
SYS_GETRLIMIT = 76
|
||||
SYS_GETRUSAGE = 77
|
||||
SYS_GETTIMEOFDAY = 78
|
||||
SYS_SETTIMEOFDAY = 79
|
||||
SYS_GETGROUPS = 80
|
||||
SYS_SETGROUPS = 81
|
||||
SYS_SELECT = 82
|
||||
SYS_SYMLINK = 83
|
||||
SYS_OLDLSTAT = 84
|
||||
SYS_READLINK = 85
|
||||
SYS_USELIB = 86
|
||||
SYS_SWAPON = 87
|
||||
SYS_REBOOT = 88
|
||||
SYS_READDIR = 89
|
||||
SYS_MMAP = 90
|
||||
SYS_MUNMAP = 91
|
||||
SYS_TRUNCATE = 92
|
||||
SYS_FTRUNCATE = 93
|
||||
SYS_FCHMOD = 94
|
||||
SYS_FCHOWN = 95
|
||||
SYS_GETPRIORITY = 96
|
||||
SYS_SETPRIORITY = 97
|
||||
SYS_PROFIL = 98
|
||||
SYS_STATFS = 99
|
||||
SYS_FSTATFS = 100
|
||||
SYS_IOPERM = 101
|
||||
SYS_SOCKETCALL = 102
|
||||
SYS_SYSLOG = 103
|
||||
SYS_SETITIMER = 104
|
||||
SYS_GETITIMER = 105
|
||||
SYS_STAT = 106
|
||||
SYS_LSTAT = 107
|
||||
SYS_FSTAT = 108
|
||||
SYS_OLDUNAME = 109
|
||||
SYS_IOPL = 110
|
||||
SYS_VHANGUP = 111
|
||||
SYS_IDLE = 112
|
||||
SYS_VM86 = 113
|
||||
SYS_WAIT4 = 114
|
||||
SYS_SWAPOFF = 115
|
||||
SYS_SYSINFO = 116
|
||||
SYS_IPC = 117
|
||||
SYS_FSYNC = 118
|
||||
SYS_SIGRETURN = 119
|
||||
SYS_CLONE = 120
|
||||
SYS_SETDOMAINNAME = 121
|
||||
SYS_UNAME = 122
|
||||
SYS_MODIFY_LDT = 123
|
||||
SYS_ADJTIMEX = 124
|
||||
SYS_MPROTECT = 125
|
||||
SYS_SIGPROCMASK = 126
|
||||
SYS_CREATE_MODULE = 127
|
||||
SYS_INIT_MODULE = 128
|
||||
SYS_DELETE_MODULE = 129
|
||||
SYS_GET_KERNEL_SYMS = 130
|
||||
SYS_QUOTACTL = 131
|
||||
SYS_GETPGID = 132
|
||||
SYS_FCHDIR = 133
|
||||
SYS_BDFLUSH = 134
|
||||
SYS_SYSFS = 135
|
||||
SYS_PERSONALITY = 136
|
||||
SYS_AFS_SYSCALL = 137
|
||||
SYS_SETFSUID = 138
|
||||
SYS_SETFSGID = 139
|
||||
SYS__LLSEEK = 140
|
||||
SYS_GETDENTS = 141
|
||||
SYS__NEWSELECT = 142
|
||||
SYS_FLOCK = 143
|
||||
SYS_MSYNC = 144
|
||||
SYS_READV = 145
|
||||
SYS_WRITEV = 146
|
||||
SYS_GETSID = 147
|
||||
SYS_FDATASYNC = 148
|
||||
SYS__SYSCTL = 149
|
||||
SYS_MLOCK = 150
|
||||
SYS_MUNLOCK = 151
|
||||
SYS_MLOCKALL = 152
|
||||
SYS_MUNLOCKALL = 153
|
||||
SYS_SCHED_SETPARAM = 154
|
||||
SYS_SCHED_GETPARAM = 155
|
||||
SYS_SCHED_SETSCHEDULER = 156
|
||||
SYS_SCHED_GETSCHEDULER = 157
|
||||
SYS_SCHED_YIELD = 158
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 159
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 160
|
||||
SYS_SCHED_RR_GET_INTERVAL = 161
|
||||
SYS_NANOSLEEP = 162
|
||||
SYS_MREMAP = 163
|
||||
SYS_SETRESUID = 164
|
||||
SYS_GETRESUID = 165
|
||||
SYS_QUERY_MODULE = 166
|
||||
SYS_POLL = 167
|
||||
SYS_NFSSERVCTL = 168
|
||||
SYS_SETRESGID = 169
|
||||
SYS_GETRESGID = 170
|
||||
SYS_PRCTL = 171
|
||||
SYS_RT_SIGRETURN = 172
|
||||
SYS_RT_SIGACTION = 173
|
||||
SYS_RT_SIGPROCMASK = 174
|
||||
SYS_RT_SIGPENDING = 175
|
||||
SYS_RT_SIGTIMEDWAIT = 176
|
||||
SYS_RT_SIGQUEUEINFO = 177
|
||||
SYS_RT_SIGSUSPEND = 178
|
||||
SYS_PREAD64 = 179
|
||||
SYS_PWRITE64 = 180
|
||||
SYS_CHOWN = 181
|
||||
SYS_GETCWD = 182
|
||||
SYS_CAPGET = 183
|
||||
SYS_CAPSET = 184
|
||||
SYS_SIGALTSTACK = 185
|
||||
SYS_SENDFILE = 186
|
||||
SYS_GETPMSG = 187
|
||||
SYS_PUTPMSG = 188
|
||||
SYS_VFORK = 189
|
||||
SYS_UGETRLIMIT = 190
|
||||
SYS_READAHEAD = 191
|
||||
SYS_PCICONFIG_READ = 198
|
||||
SYS_PCICONFIG_WRITE = 199
|
||||
SYS_PCICONFIG_IOBASE = 200
|
||||
SYS_MULTIPLEXER = 201
|
||||
SYS_GETDENTS64 = 202
|
||||
SYS_PIVOT_ROOT = 203
|
||||
SYS_MADVISE = 205
|
||||
SYS_MINCORE = 206
|
||||
SYS_GETTID = 207
|
||||
SYS_TKILL = 208
|
||||
SYS_SETXATTR = 209
|
||||
SYS_LSETXATTR = 210
|
||||
SYS_FSETXATTR = 211
|
||||
SYS_GETXATTR = 212
|
||||
SYS_LGETXATTR = 213
|
||||
SYS_FGETXATTR = 214
|
||||
SYS_LISTXATTR = 215
|
||||
SYS_LLISTXATTR = 216
|
||||
SYS_FLISTXATTR = 217
|
||||
SYS_REMOVEXATTR = 218
|
||||
SYS_LREMOVEXATTR = 219
|
||||
SYS_FREMOVEXATTR = 220
|
||||
SYS_FUTEX = 221
|
||||
SYS_SCHED_SETAFFINITY = 222
|
||||
SYS_SCHED_GETAFFINITY = 223
|
||||
SYS_TUXCALL = 225
|
||||
SYS_IO_SETUP = 227
|
||||
SYS_IO_DESTROY = 228
|
||||
SYS_IO_GETEVENTS = 229
|
||||
SYS_IO_SUBMIT = 230
|
||||
SYS_IO_CANCEL = 231
|
||||
SYS_SET_TID_ADDRESS = 232
|
||||
SYS_FADVISE64 = 233
|
||||
SYS_EXIT_GROUP = 234
|
||||
SYS_LOOKUP_DCOOKIE = 235
|
||||
SYS_EPOLL_CREATE = 236
|
||||
SYS_EPOLL_CTL = 237
|
||||
SYS_EPOLL_WAIT = 238
|
||||
SYS_REMAP_FILE_PAGES = 239
|
||||
SYS_TIMER_CREATE = 240
|
||||
SYS_TIMER_SETTIME = 241
|
||||
SYS_TIMER_GETTIME = 242
|
||||
SYS_TIMER_GETOVERRUN = 243
|
||||
SYS_TIMER_DELETE = 244
|
||||
SYS_CLOCK_SETTIME = 245
|
||||
SYS_CLOCK_GETTIME = 246
|
||||
SYS_CLOCK_GETRES = 247
|
||||
SYS_CLOCK_NANOSLEEP = 248
|
||||
SYS_SWAPCONTEXT = 249
|
||||
SYS_TGKILL = 250
|
||||
SYS_UTIMES = 251
|
||||
SYS_STATFS64 = 252
|
||||
SYS_FSTATFS64 = 253
|
||||
SYS_RTAS = 255
|
||||
SYS_SYS_DEBUG_SETCONTEXT = 256
|
||||
SYS_MIGRATE_PAGES = 258
|
||||
SYS_MBIND = 259
|
||||
SYS_GET_MEMPOLICY = 260
|
||||
SYS_SET_MEMPOLICY = 261
|
||||
SYS_MQ_OPEN = 262
|
||||
SYS_MQ_UNLINK = 263
|
||||
SYS_MQ_TIMEDSEND = 264
|
||||
SYS_MQ_TIMEDRECEIVE = 265
|
||||
SYS_MQ_NOTIFY = 266
|
||||
SYS_MQ_GETSETATTR = 267
|
||||
SYS_KEXEC_LOAD = 268
|
||||
SYS_ADD_KEY = 269
|
||||
SYS_REQUEST_KEY = 270
|
||||
SYS_KEYCTL = 271
|
||||
SYS_WAITID = 272
|
||||
SYS_IOPRIO_SET = 273
|
||||
SYS_IOPRIO_GET = 274
|
||||
SYS_INOTIFY_INIT = 275
|
||||
SYS_INOTIFY_ADD_WATCH = 276
|
||||
SYS_INOTIFY_RM_WATCH = 277
|
||||
SYS_SPU_RUN = 278
|
||||
SYS_SPU_CREATE = 279
|
||||
SYS_PSELECT6 = 280
|
||||
SYS_PPOLL = 281
|
||||
SYS_UNSHARE = 282
|
||||
SYS_SPLICE = 283
|
||||
SYS_TEE = 284
|
||||
SYS_VMSPLICE = 285
|
||||
SYS_OPENAT = 286
|
||||
SYS_MKDIRAT = 287
|
||||
SYS_MKNODAT = 288
|
||||
SYS_FCHOWNAT = 289
|
||||
SYS_FUTIMESAT = 290
|
||||
SYS_NEWFSTATAT = 291
|
||||
SYS_UNLINKAT = 292
|
||||
SYS_RENAMEAT = 293
|
||||
SYS_LINKAT = 294
|
||||
SYS_SYMLINKAT = 295
|
||||
SYS_READLINKAT = 296
|
||||
SYS_FCHMODAT = 297
|
||||
SYS_FACCESSAT = 298
|
||||
SYS_GET_ROBUST_LIST = 299
|
||||
SYS_SET_ROBUST_LIST = 300
|
||||
SYS_MOVE_PAGES = 301
|
||||
SYS_GETCPU = 302
|
||||
SYS_EPOLL_PWAIT = 303
|
||||
SYS_UTIMENSAT = 304
|
||||
SYS_SIGNALFD = 305
|
||||
SYS_TIMERFD_CREATE = 306
|
||||
SYS_EVENTFD = 307
|
||||
SYS_SYNC_FILE_RANGE2 = 308
|
||||
SYS_FALLOCATE = 309
|
||||
SYS_SUBPAGE_PROT = 310
|
||||
SYS_TIMERFD_SETTIME = 311
|
||||
SYS_TIMERFD_GETTIME = 312
|
||||
SYS_SIGNALFD4 = 313
|
||||
SYS_EVENTFD2 = 314
|
||||
SYS_EPOLL_CREATE1 = 315
|
||||
SYS_DUP3 = 316
|
||||
SYS_PIPE2 = 317
|
||||
SYS_INOTIFY_INIT1 = 318
|
||||
SYS_PERF_EVENT_OPEN = 319
|
||||
SYS_PREADV = 320
|
||||
SYS_PWRITEV = 321
|
||||
SYS_RT_TGSIGQUEUEINFO = 322
|
||||
SYS_FANOTIFY_INIT = 323
|
||||
SYS_FANOTIFY_MARK = 324
|
||||
SYS_PRLIMIT64 = 325
|
||||
SYS_SOCKET = 326
|
||||
SYS_BIND = 327
|
||||
SYS_CONNECT = 328
|
||||
SYS_LISTEN = 329
|
||||
SYS_ACCEPT = 330
|
||||
SYS_GETSOCKNAME = 331
|
||||
SYS_GETPEERNAME = 332
|
||||
SYS_SOCKETPAIR = 333
|
||||
SYS_SEND = 334
|
||||
SYS_SENDTO = 335
|
||||
SYS_RECV = 336
|
||||
SYS_RECVFROM = 337
|
||||
SYS_SHUTDOWN = 338
|
||||
SYS_SETSOCKOPT = 339
|
||||
SYS_GETSOCKOPT = 340
|
||||
SYS_SENDMSG = 341
|
||||
SYS_RECVMSG = 342
|
||||
SYS_RECVMMSG = 343
|
||||
SYS_ACCEPT4 = 344
|
||||
SYS_NAME_TO_HANDLE_AT = 345
|
||||
SYS_OPEN_BY_HANDLE_AT = 346
|
||||
SYS_CLOCK_ADJTIME = 347
|
||||
SYS_SYNCFS = 348
|
||||
SYS_SENDMMSG = 349
|
||||
SYS_SETNS = 350
|
||||
SYS_PROCESS_VM_READV = 351
|
||||
SYS_PROCESS_VM_WRITEV = 352
|
||||
SYS_FINIT_MODULE = 353
|
||||
SYS_KCMP = 354
|
||||
SYS_SCHED_SETATTR = 355
|
||||
SYS_SCHED_GETATTR = 356
|
||||
SYS_RENAMEAT2 = 357
|
||||
SYS_SECCOMP = 358
|
||||
SYS_GETRANDOM = 359
|
||||
SYS_MEMFD_CREATE = 360
|
||||
SYS_BPF = 361
|
||||
SYS_EXECVEAT = 362
|
||||
SYS_SWITCH_ENDIAN = 363
|
||||
SYS_USERFAULTFD = 364
|
||||
SYS_MEMBARRIER = 365
|
||||
SYS_MLOCK2 = 378
|
||||
SYS_COPY_FILE_RANGE = 379
|
||||
SYS_PREADV2 = 380
|
||||
SYS_PWRITEV2 = 381
|
||||
SYS_KEXEC_FILE_LOAD = 382
|
||||
SYS_STATX = 383
|
||||
SYS_PKEY_ALLOC = 384
|
||||
SYS_PKEY_FREE = 385
|
||||
SYS_PKEY_MPROTECT = 386
|
||||
SYS_RSEQ = 387
|
||||
SYS_IO_PGETEVENTS = 388
|
||||
SYS_SEMTIMEDOP = 392
|
||||
SYS_SEMGET = 393
|
||||
SYS_SEMCTL = 394
|
||||
SYS_SHMGET = 395
|
||||
SYS_SHMCTL = 396
|
||||
SYS_SHMAT = 397
|
||||
SYS_SHMDT = 398
|
||||
SYS_MSGGET = 399
|
||||
SYS_MSGSND = 400
|
||||
SYS_MSGRCV = 401
|
||||
SYS_MSGCTL = 402
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||
SYS_LANDLOCK_ADD_RULE = 445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||
)
|
||||
|
|
|
@ -7,400 +7,403 @@
|
|||
package unix
|
||||
|
||||
const (
|
||||
SYS_RESTART_SYSCALL = 0
|
||||
SYS_EXIT = 1
|
||||
SYS_FORK = 2
|
||||
SYS_READ = 3
|
||||
SYS_WRITE = 4
|
||||
SYS_OPEN = 5
|
||||
SYS_CLOSE = 6
|
||||
SYS_WAITPID = 7
|
||||
SYS_CREAT = 8
|
||||
SYS_LINK = 9
|
||||
SYS_UNLINK = 10
|
||||
SYS_EXECVE = 11
|
||||
SYS_CHDIR = 12
|
||||
SYS_TIME = 13
|
||||
SYS_MKNOD = 14
|
||||
SYS_CHMOD = 15
|
||||
SYS_LCHOWN = 16
|
||||
SYS_BREAK = 17
|
||||
SYS_OLDSTAT = 18
|
||||
SYS_LSEEK = 19
|
||||
SYS_GETPID = 20
|
||||
SYS_MOUNT = 21
|
||||
SYS_UMOUNT = 22
|
||||
SYS_SETUID = 23
|
||||
SYS_GETUID = 24
|
||||
SYS_STIME = 25
|
||||
SYS_PTRACE = 26
|
||||
SYS_ALARM = 27
|
||||
SYS_OLDFSTAT = 28
|
||||
SYS_PAUSE = 29
|
||||
SYS_UTIME = 30
|
||||
SYS_STTY = 31
|
||||
SYS_GTTY = 32
|
||||
SYS_ACCESS = 33
|
||||
SYS_NICE = 34
|
||||
SYS_FTIME = 35
|
||||
SYS_SYNC = 36
|
||||
SYS_KILL = 37
|
||||
SYS_RENAME = 38
|
||||
SYS_MKDIR = 39
|
||||
SYS_RMDIR = 40
|
||||
SYS_DUP = 41
|
||||
SYS_PIPE = 42
|
||||
SYS_TIMES = 43
|
||||
SYS_PROF = 44
|
||||
SYS_BRK = 45
|
||||
SYS_SETGID = 46
|
||||
SYS_GETGID = 47
|
||||
SYS_SIGNAL = 48
|
||||
SYS_GETEUID = 49
|
||||
SYS_GETEGID = 50
|
||||
SYS_ACCT = 51
|
||||
SYS_UMOUNT2 = 52
|
||||
SYS_LOCK = 53
|
||||
SYS_IOCTL = 54
|
||||
SYS_FCNTL = 55
|
||||
SYS_MPX = 56
|
||||
SYS_SETPGID = 57
|
||||
SYS_ULIMIT = 58
|
||||
SYS_OLDOLDUNAME = 59
|
||||
SYS_UMASK = 60
|
||||
SYS_CHROOT = 61
|
||||
SYS_USTAT = 62
|
||||
SYS_DUP2 = 63
|
||||
SYS_GETPPID = 64
|
||||
SYS_GETPGRP = 65
|
||||
SYS_SETSID = 66
|
||||
SYS_SIGACTION = 67
|
||||
SYS_SGETMASK = 68
|
||||
SYS_SSETMASK = 69
|
||||
SYS_SETREUID = 70
|
||||
SYS_SETREGID = 71
|
||||
SYS_SIGSUSPEND = 72
|
||||
SYS_SIGPENDING = 73
|
||||
SYS_SETHOSTNAME = 74
|
||||
SYS_SETRLIMIT = 75
|
||||
SYS_GETRLIMIT = 76
|
||||
SYS_GETRUSAGE = 77
|
||||
SYS_GETTIMEOFDAY = 78
|
||||
SYS_SETTIMEOFDAY = 79
|
||||
SYS_GETGROUPS = 80
|
||||
SYS_SETGROUPS = 81
|
||||
SYS_SELECT = 82
|
||||
SYS_SYMLINK = 83
|
||||
SYS_OLDLSTAT = 84
|
||||
SYS_READLINK = 85
|
||||
SYS_USELIB = 86
|
||||
SYS_SWAPON = 87
|
||||
SYS_REBOOT = 88
|
||||
SYS_READDIR = 89
|
||||
SYS_MMAP = 90
|
||||
SYS_MUNMAP = 91
|
||||
SYS_TRUNCATE = 92
|
||||
SYS_FTRUNCATE = 93
|
||||
SYS_FCHMOD = 94
|
||||
SYS_FCHOWN = 95
|
||||
SYS_GETPRIORITY = 96
|
||||
SYS_SETPRIORITY = 97
|
||||
SYS_PROFIL = 98
|
||||
SYS_STATFS = 99
|
||||
SYS_FSTATFS = 100
|
||||
SYS_IOPERM = 101
|
||||
SYS_SOCKETCALL = 102
|
||||
SYS_SYSLOG = 103
|
||||
SYS_SETITIMER = 104
|
||||
SYS_GETITIMER = 105
|
||||
SYS_STAT = 106
|
||||
SYS_LSTAT = 107
|
||||
SYS_FSTAT = 108
|
||||
SYS_OLDUNAME = 109
|
||||
SYS_IOPL = 110
|
||||
SYS_VHANGUP = 111
|
||||
SYS_IDLE = 112
|
||||
SYS_VM86 = 113
|
||||
SYS_WAIT4 = 114
|
||||
SYS_SWAPOFF = 115
|
||||
SYS_SYSINFO = 116
|
||||
SYS_IPC = 117
|
||||
SYS_FSYNC = 118
|
||||
SYS_SIGRETURN = 119
|
||||
SYS_CLONE = 120
|
||||
SYS_SETDOMAINNAME = 121
|
||||
SYS_UNAME = 122
|
||||
SYS_MODIFY_LDT = 123
|
||||
SYS_ADJTIMEX = 124
|
||||
SYS_MPROTECT = 125
|
||||
SYS_SIGPROCMASK = 126
|
||||
SYS_CREATE_MODULE = 127
|
||||
SYS_INIT_MODULE = 128
|
||||
SYS_DELETE_MODULE = 129
|
||||
SYS_GET_KERNEL_SYMS = 130
|
||||
SYS_QUOTACTL = 131
|
||||
SYS_GETPGID = 132
|
||||
SYS_FCHDIR = 133
|
||||
SYS_BDFLUSH = 134
|
||||
SYS_SYSFS = 135
|
||||
SYS_PERSONALITY = 136
|
||||
SYS_AFS_SYSCALL = 137
|
||||
SYS_SETFSUID = 138
|
||||
SYS_SETFSGID = 139
|
||||
SYS__LLSEEK = 140
|
||||
SYS_GETDENTS = 141
|
||||
SYS__NEWSELECT = 142
|
||||
SYS_FLOCK = 143
|
||||
SYS_MSYNC = 144
|
||||
SYS_READV = 145
|
||||
SYS_WRITEV = 146
|
||||
SYS_GETSID = 147
|
||||
SYS_FDATASYNC = 148
|
||||
SYS__SYSCTL = 149
|
||||
SYS_MLOCK = 150
|
||||
SYS_MUNLOCK = 151
|
||||
SYS_MLOCKALL = 152
|
||||
SYS_MUNLOCKALL = 153
|
||||
SYS_SCHED_SETPARAM = 154
|
||||
SYS_SCHED_GETPARAM = 155
|
||||
SYS_SCHED_SETSCHEDULER = 156
|
||||
SYS_SCHED_GETSCHEDULER = 157
|
||||
SYS_SCHED_YIELD = 158
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 159
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 160
|
||||
SYS_SCHED_RR_GET_INTERVAL = 161
|
||||
SYS_NANOSLEEP = 162
|
||||
SYS_MREMAP = 163
|
||||
SYS_SETRESUID = 164
|
||||
SYS_GETRESUID = 165
|
||||
SYS_QUERY_MODULE = 166
|
||||
SYS_POLL = 167
|
||||
SYS_NFSSERVCTL = 168
|
||||
SYS_SETRESGID = 169
|
||||
SYS_GETRESGID = 170
|
||||
SYS_PRCTL = 171
|
||||
SYS_RT_SIGRETURN = 172
|
||||
SYS_RT_SIGACTION = 173
|
||||
SYS_RT_SIGPROCMASK = 174
|
||||
SYS_RT_SIGPENDING = 175
|
||||
SYS_RT_SIGTIMEDWAIT = 176
|
||||
SYS_RT_SIGQUEUEINFO = 177
|
||||
SYS_RT_SIGSUSPEND = 178
|
||||
SYS_PREAD64 = 179
|
||||
SYS_PWRITE64 = 180
|
||||
SYS_CHOWN = 181
|
||||
SYS_GETCWD = 182
|
||||
SYS_CAPGET = 183
|
||||
SYS_CAPSET = 184
|
||||
SYS_SIGALTSTACK = 185
|
||||
SYS_SENDFILE = 186
|
||||
SYS_GETPMSG = 187
|
||||
SYS_PUTPMSG = 188
|
||||
SYS_VFORK = 189
|
||||
SYS_UGETRLIMIT = 190
|
||||
SYS_READAHEAD = 191
|
||||
SYS_PCICONFIG_READ = 198
|
||||
SYS_PCICONFIG_WRITE = 199
|
||||
SYS_PCICONFIG_IOBASE = 200
|
||||
SYS_MULTIPLEXER = 201
|
||||
SYS_GETDENTS64 = 202
|
||||
SYS_PIVOT_ROOT = 203
|
||||
SYS_MADVISE = 205
|
||||
SYS_MINCORE = 206
|
||||
SYS_GETTID = 207
|
||||
SYS_TKILL = 208
|
||||
SYS_SETXATTR = 209
|
||||
SYS_LSETXATTR = 210
|
||||
SYS_FSETXATTR = 211
|
||||
SYS_GETXATTR = 212
|
||||
SYS_LGETXATTR = 213
|
||||
SYS_FGETXATTR = 214
|
||||
SYS_LISTXATTR = 215
|
||||
SYS_LLISTXATTR = 216
|
||||
SYS_FLISTXATTR = 217
|
||||
SYS_REMOVEXATTR = 218
|
||||
SYS_LREMOVEXATTR = 219
|
||||
SYS_FREMOVEXATTR = 220
|
||||
SYS_FUTEX = 221
|
||||
SYS_SCHED_SETAFFINITY = 222
|
||||
SYS_SCHED_GETAFFINITY = 223
|
||||
SYS_TUXCALL = 225
|
||||
SYS_IO_SETUP = 227
|
||||
SYS_IO_DESTROY = 228
|
||||
SYS_IO_GETEVENTS = 229
|
||||
SYS_IO_SUBMIT = 230
|
||||
SYS_IO_CANCEL = 231
|
||||
SYS_SET_TID_ADDRESS = 232
|
||||
SYS_FADVISE64 = 233
|
||||
SYS_EXIT_GROUP = 234
|
||||
SYS_LOOKUP_DCOOKIE = 235
|
||||
SYS_EPOLL_CREATE = 236
|
||||
SYS_EPOLL_CTL = 237
|
||||
SYS_EPOLL_WAIT = 238
|
||||
SYS_REMAP_FILE_PAGES = 239
|
||||
SYS_TIMER_CREATE = 240
|
||||
SYS_TIMER_SETTIME = 241
|
||||
SYS_TIMER_GETTIME = 242
|
||||
SYS_TIMER_GETOVERRUN = 243
|
||||
SYS_TIMER_DELETE = 244
|
||||
SYS_CLOCK_SETTIME = 245
|
||||
SYS_CLOCK_GETTIME = 246
|
||||
SYS_CLOCK_GETRES = 247
|
||||
SYS_CLOCK_NANOSLEEP = 248
|
||||
SYS_SWAPCONTEXT = 249
|
||||
SYS_TGKILL = 250
|
||||
SYS_UTIMES = 251
|
||||
SYS_STATFS64 = 252
|
||||
SYS_FSTATFS64 = 253
|
||||
SYS_RTAS = 255
|
||||
SYS_SYS_DEBUG_SETCONTEXT = 256
|
||||
SYS_MIGRATE_PAGES = 258
|
||||
SYS_MBIND = 259
|
||||
SYS_GET_MEMPOLICY = 260
|
||||
SYS_SET_MEMPOLICY = 261
|
||||
SYS_MQ_OPEN = 262
|
||||
SYS_MQ_UNLINK = 263
|
||||
SYS_MQ_TIMEDSEND = 264
|
||||
SYS_MQ_TIMEDRECEIVE = 265
|
||||
SYS_MQ_NOTIFY = 266
|
||||
SYS_MQ_GETSETATTR = 267
|
||||
SYS_KEXEC_LOAD = 268
|
||||
SYS_ADD_KEY = 269
|
||||
SYS_REQUEST_KEY = 270
|
||||
SYS_KEYCTL = 271
|
||||
SYS_WAITID = 272
|
||||
SYS_IOPRIO_SET = 273
|
||||
SYS_IOPRIO_GET = 274
|
||||
SYS_INOTIFY_INIT = 275
|
||||
SYS_INOTIFY_ADD_WATCH = 276
|
||||
SYS_INOTIFY_RM_WATCH = 277
|
||||
SYS_SPU_RUN = 278
|
||||
SYS_SPU_CREATE = 279
|
||||
SYS_PSELECT6 = 280
|
||||
SYS_PPOLL = 281
|
||||
SYS_UNSHARE = 282
|
||||
SYS_SPLICE = 283
|
||||
SYS_TEE = 284
|
||||
SYS_VMSPLICE = 285
|
||||
SYS_OPENAT = 286
|
||||
SYS_MKDIRAT = 287
|
||||
SYS_MKNODAT = 288
|
||||
SYS_FCHOWNAT = 289
|
||||
SYS_FUTIMESAT = 290
|
||||
SYS_NEWFSTATAT = 291
|
||||
SYS_UNLINKAT = 292
|
||||
SYS_RENAMEAT = 293
|
||||
SYS_LINKAT = 294
|
||||
SYS_SYMLINKAT = 295
|
||||
SYS_READLINKAT = 296
|
||||
SYS_FCHMODAT = 297
|
||||
SYS_FACCESSAT = 298
|
||||
SYS_GET_ROBUST_LIST = 299
|
||||
SYS_SET_ROBUST_LIST = 300
|
||||
SYS_MOVE_PAGES = 301
|
||||
SYS_GETCPU = 302
|
||||
SYS_EPOLL_PWAIT = 303
|
||||
SYS_UTIMENSAT = 304
|
||||
SYS_SIGNALFD = 305
|
||||
SYS_TIMERFD_CREATE = 306
|
||||
SYS_EVENTFD = 307
|
||||
SYS_SYNC_FILE_RANGE2 = 308
|
||||
SYS_FALLOCATE = 309
|
||||
SYS_SUBPAGE_PROT = 310
|
||||
SYS_TIMERFD_SETTIME = 311
|
||||
SYS_TIMERFD_GETTIME = 312
|
||||
SYS_SIGNALFD4 = 313
|
||||
SYS_EVENTFD2 = 314
|
||||
SYS_EPOLL_CREATE1 = 315
|
||||
SYS_DUP3 = 316
|
||||
SYS_PIPE2 = 317
|
||||
SYS_INOTIFY_INIT1 = 318
|
||||
SYS_PERF_EVENT_OPEN = 319
|
||||
SYS_PREADV = 320
|
||||
SYS_PWRITEV = 321
|
||||
SYS_RT_TGSIGQUEUEINFO = 322
|
||||
SYS_FANOTIFY_INIT = 323
|
||||
SYS_FANOTIFY_MARK = 324
|
||||
SYS_PRLIMIT64 = 325
|
||||
SYS_SOCKET = 326
|
||||
SYS_BIND = 327
|
||||
SYS_CONNECT = 328
|
||||
SYS_LISTEN = 329
|
||||
SYS_ACCEPT = 330
|
||||
SYS_GETSOCKNAME = 331
|
||||
SYS_GETPEERNAME = 332
|
||||
SYS_SOCKETPAIR = 333
|
||||
SYS_SEND = 334
|
||||
SYS_SENDTO = 335
|
||||
SYS_RECV = 336
|
||||
SYS_RECVFROM = 337
|
||||
SYS_SHUTDOWN = 338
|
||||
SYS_SETSOCKOPT = 339
|
||||
SYS_GETSOCKOPT = 340
|
||||
SYS_SENDMSG = 341
|
||||
SYS_RECVMSG = 342
|
||||
SYS_RECVMMSG = 343
|
||||
SYS_ACCEPT4 = 344
|
||||
SYS_NAME_TO_HANDLE_AT = 345
|
||||
SYS_OPEN_BY_HANDLE_AT = 346
|
||||
SYS_CLOCK_ADJTIME = 347
|
||||
SYS_SYNCFS = 348
|
||||
SYS_SENDMMSG = 349
|
||||
SYS_SETNS = 350
|
||||
SYS_PROCESS_VM_READV = 351
|
||||
SYS_PROCESS_VM_WRITEV = 352
|
||||
SYS_FINIT_MODULE = 353
|
||||
SYS_KCMP = 354
|
||||
SYS_SCHED_SETATTR = 355
|
||||
SYS_SCHED_GETATTR = 356
|
||||
SYS_RENAMEAT2 = 357
|
||||
SYS_SECCOMP = 358
|
||||
SYS_GETRANDOM = 359
|
||||
SYS_MEMFD_CREATE = 360
|
||||
SYS_BPF = 361
|
||||
SYS_EXECVEAT = 362
|
||||
SYS_SWITCH_ENDIAN = 363
|
||||
SYS_USERFAULTFD = 364
|
||||
SYS_MEMBARRIER = 365
|
||||
SYS_MLOCK2 = 378
|
||||
SYS_COPY_FILE_RANGE = 379
|
||||
SYS_PREADV2 = 380
|
||||
SYS_PWRITEV2 = 381
|
||||
SYS_KEXEC_FILE_LOAD = 382
|
||||
SYS_STATX = 383
|
||||
SYS_PKEY_ALLOC = 384
|
||||
SYS_PKEY_FREE = 385
|
||||
SYS_PKEY_MPROTECT = 386
|
||||
SYS_RSEQ = 387
|
||||
SYS_IO_PGETEVENTS = 388
|
||||
SYS_SEMTIMEDOP = 392
|
||||
SYS_SEMGET = 393
|
||||
SYS_SEMCTL = 394
|
||||
SYS_SHMGET = 395
|
||||
SYS_SHMCTL = 396
|
||||
SYS_SHMAT = 397
|
||||
SYS_SHMDT = 398
|
||||
SYS_MSGGET = 399
|
||||
SYS_MSGSND = 400
|
||||
SYS_MSGRCV = 401
|
||||
SYS_MSGCTL = 402
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_RESTART_SYSCALL = 0
|
||||
SYS_EXIT = 1
|
||||
SYS_FORK = 2
|
||||
SYS_READ = 3
|
||||
SYS_WRITE = 4
|
||||
SYS_OPEN = 5
|
||||
SYS_CLOSE = 6
|
||||
SYS_WAITPID = 7
|
||||
SYS_CREAT = 8
|
||||
SYS_LINK = 9
|
||||
SYS_UNLINK = 10
|
||||
SYS_EXECVE = 11
|
||||
SYS_CHDIR = 12
|
||||
SYS_TIME = 13
|
||||
SYS_MKNOD = 14
|
||||
SYS_CHMOD = 15
|
||||
SYS_LCHOWN = 16
|
||||
SYS_BREAK = 17
|
||||
SYS_OLDSTAT = 18
|
||||
SYS_LSEEK = 19
|
||||
SYS_GETPID = 20
|
||||
SYS_MOUNT = 21
|
||||
SYS_UMOUNT = 22
|
||||
SYS_SETUID = 23
|
||||
SYS_GETUID = 24
|
||||
SYS_STIME = 25
|
||||
SYS_PTRACE = 26
|
||||
SYS_ALARM = 27
|
||||
SYS_OLDFSTAT = 28
|
||||
SYS_PAUSE = 29
|
||||
SYS_UTIME = 30
|
||||
SYS_STTY = 31
|
||||
SYS_GTTY = 32
|
||||
SYS_ACCESS = 33
|
||||
SYS_NICE = 34
|
||||
SYS_FTIME = 35
|
||||
SYS_SYNC = 36
|
||||
SYS_KILL = 37
|
||||
SYS_RENAME = 38
|
||||
SYS_MKDIR = 39
|
||||
SYS_RMDIR = 40
|
||||
SYS_DUP = 41
|
||||
SYS_PIPE = 42
|
||||
SYS_TIMES = 43
|
||||
SYS_PROF = 44
|
||||
SYS_BRK = 45
|
||||
SYS_SETGID = 46
|
||||
SYS_GETGID = 47
|
||||
SYS_SIGNAL = 48
|
||||
SYS_GETEUID = 49
|
||||
SYS_GETEGID = 50
|
||||
SYS_ACCT = 51
|
||||
SYS_UMOUNT2 = 52
|
||||
SYS_LOCK = 53
|
||||
SYS_IOCTL = 54
|
||||
SYS_FCNTL = 55
|
||||
SYS_MPX = 56
|
||||
SYS_SETPGID = 57
|
||||
SYS_ULIMIT = 58
|
||||
SYS_OLDOLDUNAME = 59
|
||||
SYS_UMASK = 60
|
||||
SYS_CHROOT = 61
|
||||
SYS_USTAT = 62
|
||||
SYS_DUP2 = 63
|
||||
SYS_GETPPID = 64
|
||||
SYS_GETPGRP = 65
|
||||
SYS_SETSID = 66
|
||||
SYS_SIGACTION = 67
|
||||
SYS_SGETMASK = 68
|
||||
SYS_SSETMASK = 69
|
||||
SYS_SETREUID = 70
|
||||
SYS_SETREGID = 71
|
||||
SYS_SIGSUSPEND = 72
|
||||
SYS_SIGPENDING = 73
|
||||
SYS_SETHOSTNAME = 74
|
||||
SYS_SETRLIMIT = 75
|
||||
SYS_GETRLIMIT = 76
|
||||
SYS_GETRUSAGE = 77
|
||||
SYS_GETTIMEOFDAY = 78
|
||||
SYS_SETTIMEOFDAY = 79
|
||||
SYS_GETGROUPS = 80
|
||||
SYS_SETGROUPS = 81
|
||||
SYS_SELECT = 82
|
||||
SYS_SYMLINK = 83
|
||||
SYS_OLDLSTAT = 84
|
||||
SYS_READLINK = 85
|
||||
SYS_USELIB = 86
|
||||
SYS_SWAPON = 87
|
||||
SYS_REBOOT = 88
|
||||
SYS_READDIR = 89
|
||||
SYS_MMAP = 90
|
||||
SYS_MUNMAP = 91
|
||||
SYS_TRUNCATE = 92
|
||||
SYS_FTRUNCATE = 93
|
||||
SYS_FCHMOD = 94
|
||||
SYS_FCHOWN = 95
|
||||
SYS_GETPRIORITY = 96
|
||||
SYS_SETPRIORITY = 97
|
||||
SYS_PROFIL = 98
|
||||
SYS_STATFS = 99
|
||||
SYS_FSTATFS = 100
|
||||
SYS_IOPERM = 101
|
||||
SYS_SOCKETCALL = 102
|
||||
SYS_SYSLOG = 103
|
||||
SYS_SETITIMER = 104
|
||||
SYS_GETITIMER = 105
|
||||
SYS_STAT = 106
|
||||
SYS_LSTAT = 107
|
||||
SYS_FSTAT = 108
|
||||
SYS_OLDUNAME = 109
|
||||
SYS_IOPL = 110
|
||||
SYS_VHANGUP = 111
|
||||
SYS_IDLE = 112
|
||||
SYS_VM86 = 113
|
||||
SYS_WAIT4 = 114
|
||||
SYS_SWAPOFF = 115
|
||||
SYS_SYSINFO = 116
|
||||
SYS_IPC = 117
|
||||
SYS_FSYNC = 118
|
||||
SYS_SIGRETURN = 119
|
||||
SYS_CLONE = 120
|
||||
SYS_SETDOMAINNAME = 121
|
||||
SYS_UNAME = 122
|
||||
SYS_MODIFY_LDT = 123
|
||||
SYS_ADJTIMEX = 124
|
||||
SYS_MPROTECT = 125
|
||||
SYS_SIGPROCMASK = 126
|
||||
SYS_CREATE_MODULE = 127
|
||||
SYS_INIT_MODULE = 128
|
||||
SYS_DELETE_MODULE = 129
|
||||
SYS_GET_KERNEL_SYMS = 130
|
||||
SYS_QUOTACTL = 131
|
||||
SYS_GETPGID = 132
|
||||
SYS_FCHDIR = 133
|
||||
SYS_BDFLUSH = 134
|
||||
SYS_SYSFS = 135
|
||||
SYS_PERSONALITY = 136
|
||||
SYS_AFS_SYSCALL = 137
|
||||
SYS_SETFSUID = 138
|
||||
SYS_SETFSGID = 139
|
||||
SYS__LLSEEK = 140
|
||||
SYS_GETDENTS = 141
|
||||
SYS__NEWSELECT = 142
|
||||
SYS_FLOCK = 143
|
||||
SYS_MSYNC = 144
|
||||
SYS_READV = 145
|
||||
SYS_WRITEV = 146
|
||||
SYS_GETSID = 147
|
||||
SYS_FDATASYNC = 148
|
||||
SYS__SYSCTL = 149
|
||||
SYS_MLOCK = 150
|
||||
SYS_MUNLOCK = 151
|
||||
SYS_MLOCKALL = 152
|
||||
SYS_MUNLOCKALL = 153
|
||||
SYS_SCHED_SETPARAM = 154
|
||||
SYS_SCHED_GETPARAM = 155
|
||||
SYS_SCHED_SETSCHEDULER = 156
|
||||
SYS_SCHED_GETSCHEDULER = 157
|
||||
SYS_SCHED_YIELD = 158
|
||||
SYS_SCHED_GET_PRIORITY_MAX = 159
|
||||
SYS_SCHED_GET_PRIORITY_MIN = 160
|
||||
SYS_SCHED_RR_GET_INTERVAL = 161
|
||||
SYS_NANOSLEEP = 162
|
||||
SYS_MREMAP = 163
|
||||
SYS_SETRESUID = 164
|
||||
SYS_GETRESUID = 165
|
||||
SYS_QUERY_MODULE = 166
|
||||
SYS_POLL = 167
|
||||
SYS_NFSSERVCTL = 168
|
||||
SYS_SETRESGID = 169
|
||||
SYS_GETRESGID = 170
|
||||
SYS_PRCTL = 171
|
||||
SYS_RT_SIGRETURN = 172
|
||||
SYS_RT_SIGACTION = 173
|
||||
SYS_RT_SIGPROCMASK = 174
|
||||
SYS_RT_SIGPENDING = 175
|
||||
SYS_RT_SIGTIMEDWAIT = 176
|
||||
SYS_RT_SIGQUEUEINFO = 177
|
||||
SYS_RT_SIGSUSPEND = 178
|
||||
SYS_PREAD64 = 179
|
||||
SYS_PWRITE64 = 180
|
||||
SYS_CHOWN = 181
|
||||
SYS_GETCWD = 182
|
||||
SYS_CAPGET = 183
|
||||
SYS_CAPSET = 184
|
||||
SYS_SIGALTSTACK = 185
|
||||
SYS_SENDFILE = 186
|
||||
SYS_GETPMSG = 187
|
||||
SYS_PUTPMSG = 188
|
||||
SYS_VFORK = 189
|
||||
SYS_UGETRLIMIT = 190
|
||||
SYS_READAHEAD = 191
|
||||
SYS_PCICONFIG_READ = 198
|
||||
SYS_PCICONFIG_WRITE = 199
|
||||
SYS_PCICONFIG_IOBASE = 200
|
||||
SYS_MULTIPLEXER = 201
|
||||
SYS_GETDENTS64 = 202
|
||||
SYS_PIVOT_ROOT = 203
|
||||
SYS_MADVISE = 205
|
||||
SYS_MINCORE = 206
|
||||
SYS_GETTID = 207
|
||||
SYS_TKILL = 208
|
||||
SYS_SETXATTR = 209
|
||||
SYS_LSETXATTR = 210
|
||||
SYS_FSETXATTR = 211
|
||||
SYS_GETXATTR = 212
|
||||
SYS_LGETXATTR = 213
|
||||
SYS_FGETXATTR = 214
|
||||
SYS_LISTXATTR = 215
|
||||
SYS_LLISTXATTR = 216
|
||||
SYS_FLISTXATTR = 217
|
||||
SYS_REMOVEXATTR = 218
|
||||
SYS_LREMOVEXATTR = 219
|
||||
SYS_FREMOVEXATTR = 220
|
||||
SYS_FUTEX = 221
|
||||
SYS_SCHED_SETAFFINITY = 222
|
||||
SYS_SCHED_GETAFFINITY = 223
|
||||
SYS_TUXCALL = 225
|
||||
SYS_IO_SETUP = 227
|
||||
SYS_IO_DESTROY = 228
|
||||
SYS_IO_GETEVENTS = 229
|
||||
SYS_IO_SUBMIT = 230
|
||||
SYS_IO_CANCEL = 231
|
||||
SYS_SET_TID_ADDRESS = 232
|
||||
SYS_FADVISE64 = 233
|
||||
SYS_EXIT_GROUP = 234
|
||||
SYS_LOOKUP_DCOOKIE = 235
|
||||
SYS_EPOLL_CREATE = 236
|
||||
SYS_EPOLL_CTL = 237
|
||||
SYS_EPOLL_WAIT = 238
|
||||
SYS_REMAP_FILE_PAGES = 239
|
||||
SYS_TIMER_CREATE = 240
|
||||
SYS_TIMER_SETTIME = 241
|
||||
SYS_TIMER_GETTIME = 242
|
||||
SYS_TIMER_GETOVERRUN = 243
|
||||
SYS_TIMER_DELETE = 244
|
||||
SYS_CLOCK_SETTIME = 245
|
||||
SYS_CLOCK_GETTIME = 246
|
||||
SYS_CLOCK_GETRES = 247
|
||||
SYS_CLOCK_NANOSLEEP = 248
|
||||
SYS_SWAPCONTEXT = 249
|
||||
SYS_TGKILL = 250
|
||||
SYS_UTIMES = 251
|
||||
SYS_STATFS64 = 252
|
||||
SYS_FSTATFS64 = 253
|
||||
SYS_RTAS = 255
|
||||
SYS_SYS_DEBUG_SETCONTEXT = 256
|
||||
SYS_MIGRATE_PAGES = 258
|
||||
SYS_MBIND = 259
|
||||
SYS_GET_MEMPOLICY = 260
|
||||
SYS_SET_MEMPOLICY = 261
|
||||
SYS_MQ_OPEN = 262
|
||||
SYS_MQ_UNLINK = 263
|
||||
SYS_MQ_TIMEDSEND = 264
|
||||
SYS_MQ_TIMEDRECEIVE = 265
|
||||
SYS_MQ_NOTIFY = 266
|
||||
SYS_MQ_GETSETATTR = 267
|
||||
SYS_KEXEC_LOAD = 268
|
||||
SYS_ADD_KEY = 269
|
||||
SYS_REQUEST_KEY = 270
|
||||
SYS_KEYCTL = 271
|
||||
SYS_WAITID = 272
|
||||
SYS_IOPRIO_SET = 273
|
||||
SYS_IOPRIO_GET = 274
|
||||
SYS_INOTIFY_INIT = 275
|
||||
SYS_INOTIFY_ADD_WATCH = 276
|
||||
SYS_INOTIFY_RM_WATCH = 277
|
||||
SYS_SPU_RUN = 278
|
||||
SYS_SPU_CREATE = 279
|
||||
SYS_PSELECT6 = 280
|
||||
SYS_PPOLL = 281
|
||||
SYS_UNSHARE = 282
|
||||
SYS_SPLICE = 283
|
||||
SYS_TEE = 284
|
||||
SYS_VMSPLICE = 285
|
||||
SYS_OPENAT = 286
|
||||
SYS_MKDIRAT = 287
|
||||
SYS_MKNODAT = 288
|
||||
SYS_FCHOWNAT = 289
|
||||
SYS_FUTIMESAT = 290
|
||||
SYS_NEWFSTATAT = 291
|
||||
SYS_UNLINKAT = 292
|
||||
SYS_RENAMEAT = 293
|
||||
SYS_LINKAT = 294
|
||||
SYS_SYMLINKAT = 295
|
||||
SYS_READLINKAT = 296
|
||||
SYS_FCHMODAT = 297
|
||||
SYS_FACCESSAT = 298
|
||||
SYS_GET_ROBUST_LIST = 299
|
||||
SYS_SET_ROBUST_LIST = 300
|
||||
SYS_MOVE_PAGES = 301
|
||||
SYS_GETCPU = 302
|
||||
SYS_EPOLL_PWAIT = 303
|
||||
SYS_UTIMENSAT = 304
|
||||
SYS_SIGNALFD = 305
|
||||
SYS_TIMERFD_CREATE = 306
|
||||
SYS_EVENTFD = 307
|
||||
SYS_SYNC_FILE_RANGE2 = 308
|
||||
SYS_FALLOCATE = 309
|
||||
SYS_SUBPAGE_PROT = 310
|
||||
SYS_TIMERFD_SETTIME = 311
|
||||
SYS_TIMERFD_GETTIME = 312
|
||||
SYS_SIGNALFD4 = 313
|
||||
SYS_EVENTFD2 = 314
|
||||
SYS_EPOLL_CREATE1 = 315
|
||||
SYS_DUP3 = 316
|
||||
SYS_PIPE2 = 317
|
||||
SYS_INOTIFY_INIT1 = 318
|
||||
SYS_PERF_EVENT_OPEN = 319
|
||||
SYS_PREADV = 320
|
||||
SYS_PWRITEV = 321
|
||||
SYS_RT_TGSIGQUEUEINFO = 322
|
||||
SYS_FANOTIFY_INIT = 323
|
||||
SYS_FANOTIFY_MARK = 324
|
||||
SYS_PRLIMIT64 = 325
|
||||
SYS_SOCKET = 326
|
||||
SYS_BIND = 327
|
||||
SYS_CONNECT = 328
|
||||
SYS_LISTEN = 329
|
||||
SYS_ACCEPT = 330
|
||||
SYS_GETSOCKNAME = 331
|
||||
SYS_GETPEERNAME = 332
|
||||
SYS_SOCKETPAIR = 333
|
||||
SYS_SEND = 334
|
||||
SYS_SENDTO = 335
|
||||
SYS_RECV = 336
|
||||
SYS_RECVFROM = 337
|
||||
SYS_SHUTDOWN = 338
|
||||
SYS_SETSOCKOPT = 339
|
||||
SYS_GETSOCKOPT = 340
|
||||
SYS_SENDMSG = 341
|
||||
SYS_RECVMSG = 342
|
||||
SYS_RECVMMSG = 343
|
||||
SYS_ACCEPT4 = 344
|
||||
SYS_NAME_TO_HANDLE_AT = 345
|
||||
SYS_OPEN_BY_HANDLE_AT = 346
|
||||
SYS_CLOCK_ADJTIME = 347
|
||||
SYS_SYNCFS = 348
|
||||
SYS_SENDMMSG = 349
|
||||
SYS_SETNS = 350
|
||||
SYS_PROCESS_VM_READV = 351
|
||||
SYS_PROCESS_VM_WRITEV = 352
|
||||
SYS_FINIT_MODULE = 353
|
||||
SYS_KCMP = 354
|
||||
SYS_SCHED_SETATTR = 355
|
||||
SYS_SCHED_GETATTR = 356
|
||||
SYS_RENAMEAT2 = 357
|
||||
SYS_SECCOMP = 358
|
||||
SYS_GETRANDOM = 359
|
||||
SYS_MEMFD_CREATE = 360
|
||||
SYS_BPF = 361
|
||||
SYS_EXECVEAT = 362
|
||||
SYS_SWITCH_ENDIAN = 363
|
||||
SYS_USERFAULTFD = 364
|
||||
SYS_MEMBARRIER = 365
|
||||
SYS_MLOCK2 = 378
|
||||
SYS_COPY_FILE_RANGE = 379
|
||||
SYS_PREADV2 = 380
|
||||
SYS_PWRITEV2 = 381
|
||||
SYS_KEXEC_FILE_LOAD = 382
|
||||
SYS_STATX = 383
|
||||
SYS_PKEY_ALLOC = 384
|
||||
SYS_PKEY_FREE = 385
|
||||
SYS_PKEY_MPROTECT = 386
|
||||
SYS_RSEQ = 387
|
||||
SYS_IO_PGETEVENTS = 388
|
||||
SYS_SEMTIMEDOP = 392
|
||||
SYS_SEMGET = 393
|
||||
SYS_SEMCTL = 394
|
||||
SYS_SHMGET = 395
|
||||
SYS_SHMCTL = 396
|
||||
SYS_SHMAT = 397
|
||||
SYS_SHMDT = 398
|
||||
SYS_MSGGET = 399
|
||||
SYS_MSGSND = 400
|
||||
SYS_MSGRCV = 401
|
||||
SYS_MSGCTL = 402
|
||||
SYS_PIDFD_SEND_SIGNAL = 424
|
||||
SYS_IO_URING_SETUP = 425
|
||||
SYS_IO_URING_ENTER = 426
|
||||
SYS_IO_URING_REGISTER = 427
|
||||
SYS_OPEN_TREE = 428
|
||||
SYS_MOVE_MOUNT = 429
|
||||
SYS_FSOPEN = 430
|
||||
SYS_FSCONFIG = 431
|
||||
SYS_FSMOUNT = 432
|
||||
SYS_FSPICK = 433
|
||||
SYS_PIDFD_OPEN = 434
|
||||
SYS_CLONE3 = 435
|
||||
SYS_CLOSE_RANGE = 436
|
||||
SYS_OPENAT2 = 437
|
||||
SYS_PIDFD_GETFD = 438
|
||||
SYS_FACCESSAT2 = 439
|
||||
SYS_PROCESS_MADVISE = 440
|
||||
SYS_EPOLL_PWAIT2 = 441
|
||||
SYS_MOUNT_SETATTR = 442
|
||||
SYS_LANDLOCK_CREATE_RULESET = 444
|
||||
SYS_LANDLOCK_ADD_RULE = 445
|
||||
SYS_LANDLOCK_RESTRICT_SELF = 446
|
||||
)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue