Compare commits
	
		
			40 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 90d73c9e88 | |||
|   | a3c777afd1 | ||
|   | 890953d3c6 | ||
|   | f660f4424f | ||
|   | ba6b205d0f | ||
|   | 676ba43ad3 | ||
|   | b9ab7a3f49 | ||
|   | fb4c30d4ed | ||
|   | d60230c0a2 | ||
|   | 5bcf0a95e3 | ||
|   | 4838f33f7e | ||
|   | a8082cd60d | ||
|   | ab513cdec2 | ||
|   | 58b715ad8d | ||
|   | b4a53e8264 | ||
|   | 4bcf472de6 | ||
|   | ea7be04cb4 | ||
|   | ebd9a50325 | ||
|   | ff47757ae4 | ||
|   | b184a97d30 | ||
|   | 8a638b71ae | ||
|   | 84d9658c36 | ||
|   | 9e97c2e626 | ||
|   | e04543db09 | ||
|   | a5b872b5c8 | ||
|   | 9f46e7a449 | ||
|   | 8a16a6a04a | ||
|   | a183b2d232 | ||
|   | c146996f3f | ||
|   | 091143135b | ||
|   | 148fbbb92f | ||
|   | c2372c072c | ||
|   | ceb33770d2 | ||
|   | c0d93d20be | ||
|   | e8506511b2 | ||
|   | 4cfb89430c | ||
|   | 2b9e6a29d7 | ||
|   | 6df1ea0d9e | ||
|   | dcd661b138 | ||
|   | 16f20abdff | 
| @@ -12,7 +12,7 @@ | ||||
| 	"features": { | ||||
| 		"ghcr.io/devcontainers/features/docker-in-docker:2": {}, | ||||
| 		"ghcr.io/devcontainers/features/go:1": { | ||||
| 			"version": "1.23.7" | ||||
| 			"version": "1.23.8" | ||||
| 		} | ||||
| 	}, | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/actions/install-go/action.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/actions/install-go/action.yml
									
									
									
									
										vendored
									
									
								
							| @@ -3,7 +3,7 @@ description: "Reusable action to install Go, so there is one place to bump Go ve | ||||
| inputs: | ||||
|   go-version: | ||||
|     required: true | ||||
|     default: "1.23.7" | ||||
|     default: "1.23.8" | ||||
|     description: "Go version to install" | ||||
|  | ||||
| runs: | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/api-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/api-release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -6,7 +6,7 @@ on: | ||||
| name: API Release | ||||
|  | ||||
| env: | ||||
|   GO_VERSION: "1.23.7" | ||||
|   GO_VERSION: "1.23.8" | ||||
|  | ||||
| permissions: # added using https://github.com/step-security/secure-workflows | ||||
|   contents: read | ||||
|   | ||||
							
								
								
									
										12
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @@ -189,7 +189,7 @@ jobs: | ||||
|     strategy: | ||||
|       matrix: | ||||
|         os: [ubuntu-22.04, ubuntu-24.04, ubuntu-24.04-arm, macos-13, windows-2019, windows-2022] | ||||
|         go-version: ["1.24.1", "1.23.7"] | ||||
|         go-version: ["1.24.2", "1.23.8"] | ||||
|     steps: | ||||
|       - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | ||||
|       - uses: ./.github/actions/install-go | ||||
| @@ -405,7 +405,9 @@ jobs: | ||||
|           script/setup/install-critools | ||||
|           script/setup/install-failpoint-binaries | ||||
|  | ||||
|       - name: Install criu | ||||
|       # Disable criu testing on arm64 until we can solve the consistent failures of restore testing | ||||
|       - if: matrix.os != 'ubuntu-24.04-arm' | ||||
|         name: Install criu | ||||
|         run: | | ||||
|           sudo add-apt-repository -y ppa:criu/ppa | ||||
|           sudo apt-get update | ||||
| @@ -486,8 +488,12 @@ jobs: | ||||
|           TEST_RUNTIME: ${{ matrix.runtime }} | ||||
|           CGROUP_DRIVER: ${{ matrix.cgroup_driver }} | ||||
|         run: | | ||||
|           # skipping the ipv6 test till https://github.com/actions/runner-images/issues/11985 is fixed | ||||
|           if [[ ${{matrix.os}} == "ubuntu-22.04" ]]; then | ||||
|             skip_test="runtime should support port mapping with host port and container port" | ||||
|           fi | ||||
|           env | ||||
|           sudo -E PATH=$PATH ./script/critest.sh "${{github.workspace}}/report" | ||||
|           sudo -E PATH=$PATH SKIP_TEST="$skip_test" ./script/critest.sh "${{github.workspace}}/report" | ||||
|  | ||||
|       # Log the status of this VM to investigate issues like | ||||
|       # https://github.com/containerd/containerd/issues/4969 | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -13,7 +13,7 @@ on: | ||||
| name: Release | ||||
|  | ||||
| env: | ||||
|   GO_VERSION: "1.23.7" | ||||
|   GO_VERSION: "1.23.8" | ||||
|  | ||||
| permissions: # added using https://github.com/step-security/secure-workflows | ||||
|   contents: read | ||||
| @@ -64,7 +64,7 @@ jobs: | ||||
|  | ||||
|   build: | ||||
|     name: Build Release Binaries | ||||
|     runs-on: ubuntu-20.04 | ||||
|     runs-on: ubuntu-24.04 | ||||
|     timeout-minutes: 30 | ||||
|     strategy: | ||||
|       matrix: | ||||
|   | ||||
							
								
								
									
										2
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								Vagrantfile
									
									
									
									
										vendored
									
									
								
							| @@ -107,7 +107,7 @@ EOF | ||||
|   config.vm.provision "install-golang", type: "shell", run: "once" do |sh| | ||||
|     sh.upload_path = "/tmp/vagrant-install-golang" | ||||
|     sh.env = { | ||||
|         'GO_VERSION': ENV['GO_VERSION'] || "1.23.7", | ||||
|         'GO_VERSION': ENV['GO_VERSION'] || "1.23.8", | ||||
|     } | ||||
|     sh.inline = <<~SHELL | ||||
|         #!/usr/bin/env bash | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| module github.com/containerd/containerd/api | ||||
|  | ||||
| go 1.21 | ||||
| go 1.23.0 | ||||
|  | ||||
| require ( | ||||
| 	github.com/containerd/ttrpc v1.2.5 | ||||
| @@ -17,7 +17,7 @@ require ( | ||||
| 	github.com/golang/protobuf v1.5.3 // indirect | ||||
| 	github.com/opencontainers/go-digest v1.0.0 // indirect | ||||
| 	github.com/sirupsen/logrus v1.9.3 // indirect | ||||
| 	golang.org/x/net v0.23.0 // indirect | ||||
| 	golang.org/x/sys v0.18.0 // indirect | ||||
| 	golang.org/x/text v0.14.0 // indirect | ||||
| 	golang.org/x/net v0.37.0 // indirect | ||||
| 	golang.org/x/sys v0.31.0 // indirect | ||||
| 	golang.org/x/text v0.23.0 // indirect | ||||
| ) | ||||
|   | ||||
							
								
								
									
										12
									
								
								api/go.sum
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								api/go.sum
									
									
									
									
									
								
							| @@ -42,8 +42,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn | ||||
| golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||||
| golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= | ||||
| golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= | ||||
| golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= | ||||
| golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= | ||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| @@ -51,12 +51,12 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h | ||||
| golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= | ||||
| golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= | ||||
| golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= | ||||
| golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | ||||
| golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= | ||||
| golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||||
|   | ||||
| @@ -279,7 +279,8 @@ func (c *container) NewTask(ctx context.Context, ioCreate cio.Creator, opts ...N | ||||
| 		} | ||||
| 	} | ||||
| 	info := TaskInfo{ | ||||
| 		runtime: r.Runtime.Name, | ||||
| 		runtime:        r.Runtime.Name, | ||||
| 		runtimeOptions: r.Runtime.Options, | ||||
| 	} | ||||
| 	for _, o := range opts { | ||||
| 		if err := o(ctx, c.client, &info); err != nil { | ||||
|   | ||||
| @@ -146,6 +146,11 @@ type TaskInfo struct { | ||||
|  | ||||
| 	// runtime is the runtime name for the container, and cannot be changed. | ||||
| 	runtime string | ||||
|  | ||||
| 	// runtimeOptions is the runtime options for the container, and when task options are set, | ||||
| 	// they will be based on the runtimeOptions. | ||||
| 	// https://github.com/containerd/containerd/issues/11568 | ||||
| 	runtimeOptions typeurl.Any | ||||
| } | ||||
|  | ||||
| // Runtime name for the container | ||||
| @@ -153,6 +158,29 @@ func (i *TaskInfo) Runtime() string { | ||||
| 	return i.runtime | ||||
| } | ||||
|  | ||||
| // getRuncOptions returns a reference to the runtime options for use by the task. | ||||
| // If the set of options is not set by the opts passed into the NewTask creation | ||||
| // this function first attempts to initialize the runtime options with a copy of the runtimeOptions, | ||||
| // otherwise an empty set of options is assigned and returned | ||||
| func (i *TaskInfo) getRuncOptions() (*options.Options, error) { | ||||
| 	if i.Options != nil { | ||||
| 		opts, ok := i.Options.(*options.Options) | ||||
| 		if !ok { | ||||
| 			return nil, errors.New("invalid runtime v2 options format") | ||||
| 		} | ||||
| 		return opts, nil | ||||
| 	} | ||||
|  | ||||
| 	opts := &options.Options{} | ||||
| 	if i.runtimeOptions != nil && i.runtimeOptions.GetValue() != nil { | ||||
| 		if err := typeurl.UnmarshalTo(i.runtimeOptions, opts); err != nil { | ||||
| 			return nil, fmt.Errorf("failed to get runtime v2 options: %w", err) | ||||
| 		} | ||||
| 	} | ||||
| 	i.Options = opts | ||||
| 	return opts, nil | ||||
| } | ||||
|  | ||||
| // Task is the executable object within containerd | ||||
| type Task interface { | ||||
| 	Process | ||||
|   | ||||
| @@ -54,12 +54,9 @@ func WithRuntimePath(absRuntimePath string) NewTaskOpts { | ||||
| // usually it is served inside a sandbox, and we can get it from sandbox status. | ||||
| func WithTaskAPIEndpoint(address string, version uint32) NewTaskOpts { | ||||
| 	return func(ctx context.Context, client *Client, info *TaskInfo) error { | ||||
| 		if info.Options == nil { | ||||
| 			info.Options = &options.Options{} | ||||
| 		} | ||||
| 		opts, ok := info.Options.(*options.Options) | ||||
| 		if !ok { | ||||
| 			return errors.New("invalid runtime v2 options format") | ||||
| 		opts, err := info.getRuncOptions() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		opts.TaskApiAddress = address | ||||
| 		opts.TaskApiVersion = version | ||||
| @@ -119,12 +116,9 @@ func WithCheckpointImagePath(path string) CheckpointTaskOpts { | ||||
| // WithRestoreImagePath sets image path for create option | ||||
| func WithRestoreImagePath(path string) NewTaskOpts { | ||||
| 	return func(ctx context.Context, c *Client, ti *TaskInfo) error { | ||||
| 		if ti.Options == nil { | ||||
| 			ti.Options = &options.Options{} | ||||
| 		} | ||||
| 		opts, ok := ti.Options.(*options.Options) | ||||
| 		if !ok { | ||||
| 			return errors.New("invalid runtime v2 options format") | ||||
| 		opts, err := ti.getRuncOptions() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		opts.CriuImagePath = path | ||||
| 		return nil | ||||
| @@ -134,12 +128,9 @@ func WithRestoreImagePath(path string) NewTaskOpts { | ||||
| // WithRestoreWorkPath sets criu work path for create option | ||||
| func WithRestoreWorkPath(path string) NewTaskOpts { | ||||
| 	return func(ctx context.Context, c *Client, ti *TaskInfo) error { | ||||
| 		if ti.Options == nil { | ||||
| 			ti.Options = &options.Options{} | ||||
| 		} | ||||
| 		opts, ok := ti.Options.(*options.Options) | ||||
| 		if !ok { | ||||
| 			return errors.New("invalid runtime v2 options format") | ||||
| 		opts, err := ti.getRuncOptions() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		opts.CriuWorkPath = path | ||||
| 		return nil | ||||
|   | ||||
| @@ -20,20 +20,14 @@ package client | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
|  | ||||
| 	"github.com/containerd/containerd/api/types/runc/options" | ||||
| ) | ||||
|  | ||||
| // WithNoNewKeyring causes tasks not to be created with a new keyring for secret storage. | ||||
| // There is an upper limit on the number of keyrings in a linux system | ||||
| func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error { | ||||
| 	if ti.Options == nil { | ||||
| 		ti.Options = &options.Options{} | ||||
| 	} | ||||
| 	opts, ok := ti.Options.(*options.Options) | ||||
| 	if !ok { | ||||
| 		return errors.New("invalid v2 shim create options format") | ||||
| 	opts, err := ti.getRuncOptions() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	opts.NoNewKeyring = true | ||||
| 	return nil | ||||
| @@ -41,12 +35,9 @@ func WithNoNewKeyring(ctx context.Context, c *Client, ti *TaskInfo) error { | ||||
|  | ||||
| // WithNoPivotRoot instructs the runtime not to you pivot_root | ||||
| func WithNoPivotRoot(_ context.Context, _ *Client, ti *TaskInfo) error { | ||||
| 	if ti.Options == nil { | ||||
| 		ti.Options = &options.Options{} | ||||
| 	} | ||||
| 	opts, ok := ti.Options.(*options.Options) | ||||
| 	if !ok { | ||||
| 		return errors.New("invalid v2 shim create options format") | ||||
| 	opts, err := ti.getRuncOptions() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	opts.NoPivotRoot = true | ||||
| 	return nil | ||||
| @@ -55,12 +46,9 @@ func WithNoPivotRoot(_ context.Context, _ *Client, ti *TaskInfo) error { | ||||
| // WithShimCgroup sets the existing cgroup for the shim | ||||
| func WithShimCgroup(path string) NewTaskOpts { | ||||
| 	return func(ctx context.Context, c *Client, ti *TaskInfo) error { | ||||
| 		if ti.Options == nil { | ||||
| 			ti.Options = &options.Options{} | ||||
| 		} | ||||
| 		opts, ok := ti.Options.(*options.Options) | ||||
| 		if !ok { | ||||
| 			return errors.New("invalid v2 shim create options format") | ||||
| 		opts, err := ti.getRuncOptions() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		opts.ShimCgroup = path | ||||
| 		return nil | ||||
| @@ -70,12 +58,9 @@ func WithShimCgroup(path string) NewTaskOpts { | ||||
| // WithUIDOwner allows console I/O to work with the remapped UID in user namespace | ||||
| func WithUIDOwner(uid uint32) NewTaskOpts { | ||||
| 	return func(ctx context.Context, c *Client, ti *TaskInfo) error { | ||||
| 		if ti.Options == nil { | ||||
| 			ti.Options = &options.Options{} | ||||
| 		} | ||||
| 		opts, ok := ti.Options.(*options.Options) | ||||
| 		if !ok { | ||||
| 			return errors.New("invalid v2 shim create options format") | ||||
| 		opts, err := ti.getRuncOptions() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		opts.IoUid = uid | ||||
| 		return nil | ||||
| @@ -85,12 +70,9 @@ func WithUIDOwner(uid uint32) NewTaskOpts { | ||||
| // WithGIDOwner allows console I/O to work with the remapped GID in user namespace | ||||
| func WithGIDOwner(gid uint32) NewTaskOpts { | ||||
| 	return func(ctx context.Context, c *Client, ti *TaskInfo) error { | ||||
| 		if ti.Options == nil { | ||||
| 			ti.Options = &options.Options{} | ||||
| 		} | ||||
| 		opts, ok := ti.Options.(*options.Options) | ||||
| 		if !ok { | ||||
| 			return errors.New("invalid v2 shim create options format") | ||||
| 		opts, err := ti.getRuncOptions() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		opts.IoGid = gid | ||||
| 		return nil | ||||
|   | ||||
| @@ -34,7 +34,7 @@ | ||||
| #   docker run --privileged --group-add keep-groups -v ./critest_exit_code.txt:/tmp/critest_exit_code.txt containerd-test | ||||
| # ------------------------------------------------------------------------------ | ||||
|  | ||||
| ARG GOLANG_VERSION=1.23.7 | ||||
| ARG GOLANG_VERSION=1.23.8 | ||||
| ARG GOLANG_IMAGE=golang | ||||
|  | ||||
| FROM ${GOLANG_IMAGE}:${GOLANG_VERSION} AS golang | ||||
|   | ||||
| @@ -43,11 +43,11 @@ go run main.go --target_dir $SRC/containerd/images | ||||
|  | ||||
| apt-get update && apt-get install -y wget | ||||
| cd $SRC | ||||
| wget --quiet https://go.dev/dl/go1.23.7.linux-amd64.tar.gz | ||||
| wget --quiet https://go.dev/dl/go1.23.8.linux-amd64.tar.gz | ||||
|  | ||||
| mkdir temp-go | ||||
| rm -rf /root/.go/* | ||||
| tar -C temp-go/ -xzf go1.23.7.linux-amd64.tar.gz | ||||
| tar -C temp-go/ -xzf go1.23.8.linux-amd64.tar.gz | ||||
| mv temp-go/go/* /root/.go/ | ||||
| cd $SRC/containerd | ||||
|  | ||||
|   | ||||
| @@ -479,13 +479,15 @@ func (pw *pushWriter) Digest() digest.Digest { | ||||
|  | ||||
| func (pw *pushWriter) Commit(ctx context.Context, size int64, expected digest.Digest, opts ...content.Opt) error { | ||||
| 	// Check whether read has already thrown an error | ||||
| 	if _, err := pw.pipe.Write([]byte{}); err != nil && !errors.Is(err, io.ErrClosedPipe) { | ||||
| 		return fmt.Errorf("pipe error before commit: %w", err) | ||||
| 	if pw.pipe != nil { | ||||
| 		if _, err := pw.pipe.Write([]byte{}); err != nil && !errors.Is(err, io.ErrClosedPipe) { | ||||
| 			return fmt.Errorf("pipe error before commit: %w", err) | ||||
| 		} | ||||
| 		if err := pw.pipe.Close(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if err := pw.pipe.Close(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	// TODO: timeout waiting for response | ||||
| 	var resp *http.Response | ||||
| 	select { | ||||
|   | ||||
| @@ -91,9 +91,9 @@ func loadShim(ctx context.Context, bundle *Bundle, onClose func()) (_ ShimInstan | ||||
| 		// To prevent flood of error messages, the expected error | ||||
| 		// should be reset, like os.ErrClosed or os.ErrNotExist, which | ||||
| 		// depends on platform. | ||||
| 		err = checkCopyShimLogError(ctx, err) | ||||
| 		err = checkCopyShimLogError(shimCtx, err) | ||||
| 		if err != nil { | ||||
| 			log.G(ctx).WithError(err).Error("copy shim log after reload") | ||||
| 			log.G(shimCtx).WithError(err).Error("copy shim log after reload") | ||||
| 		} | ||||
| 	}() | ||||
| 	onCloseWithShimLog := func() { | ||||
|   | ||||
| @@ -266,12 +266,12 @@ func (m *TaskManager) validateRuntimeFeatures(ctx context.Context, opts runtime. | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	ropts := opts.RuntimeOptions | ||||
| 	if ropts == nil || ropts.GetValue() == nil { | ||||
| 		ropts = opts.TaskOptions | ||||
| 	topts := opts.TaskOptions | ||||
| 	if topts == nil || topts.GetValue() == nil { | ||||
| 		topts = opts.RuntimeOptions | ||||
| 	} | ||||
|  | ||||
| 	pInfo, err := m.PluginInfo(ctx, &apitypes.RuntimeRequest{RuntimePath: opts.Runtime, Options: typeurl.MarshalProto(ropts)}) | ||||
| 	pInfo, err := m.PluginInfo(ctx, &apitypes.RuntimeRequest{RuntimePath: opts.Runtime, Options: typeurl.MarshalProto(topts)}) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("runtime info: %w", err) | ||||
| 	} | ||||
|   | ||||
| @@ -21,4 +21,6 @@ const ( | ||||
| 	// This will be based on the client compilation target, so take that into | ||||
| 	// account when choosing this value. | ||||
| 	DefaultSnapshotter = "overlayfs" | ||||
| 	// DefaultDiffer will set the default differ for the platform. | ||||
| 	DefaultDiffer = "walking" | ||||
| ) | ||||
|   | ||||
| @@ -23,4 +23,6 @@ const ( | ||||
| 	// This will be based on the client compilation target, so take that into | ||||
| 	// account when choosing this value. | ||||
| 	DefaultSnapshotter = "native" | ||||
| 	// DefaultDiffer will set the default differ for the platform. | ||||
| 	DefaultDiffer = "walking" | ||||
| ) | ||||
|   | ||||
							
								
								
									
										22
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								go.mod
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| module github.com/containerd/containerd/v2 | ||||
|  | ||||
| go 1.22.0 | ||||
| go 1.23.0 | ||||
|  | ||||
| require ( | ||||
| 	dario.cat/mergo v1.0.1 | ||||
| @@ -74,8 +74,8 @@ require ( | ||||
| 	go.opentelemetry.io/otel/sdk v1.31.0 | ||||
| 	go.opentelemetry.io/otel/trace v1.31.0 | ||||
| 	golang.org/x/mod v0.21.0 | ||||
| 	golang.org/x/sync v0.10.0 | ||||
| 	golang.org/x/sys v0.28.0 | ||||
| 	golang.org/x/sync v0.12.0 | ||||
| 	golang.org/x/sys v0.31.0 | ||||
| 	google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 | ||||
| 	google.golang.org/grpc v1.68.1 | ||||
| 	google.golang.org/protobuf v1.35.2 | ||||
| @@ -86,7 +86,7 @@ require ( | ||||
| 	k8s.io/klog/v2 v2.130.1 | ||||
| 	k8s.io/kubelet v0.31.2 | ||||
| 	k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 | ||||
| 	tags.cncf.io/container-device-interface v0.8.1 | ||||
| 	tags.cncf.io/container-device-interface v1.0.0 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| @@ -102,7 +102,7 @@ require ( | ||||
| 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect | ||||
| 	github.com/felixge/httpsnoop v1.0.4 // indirect | ||||
| 	github.com/fxamacker/cbor/v2 v2.7.0 // indirect | ||||
| 	github.com/go-jose/go-jose/v4 v4.0.4 // indirect | ||||
| 	github.com/go-jose/go-jose/v4 v4.0.5 // indirect | ||||
| 	github.com/go-logr/logr v1.4.2 // indirect | ||||
| 	github.com/go-logr/stdr v1.2.2 // indirect | ||||
| 	github.com/go-openapi/jsonpointer v0.19.6 // indirect | ||||
| @@ -152,12 +152,12 @@ require ( | ||||
| 	go.opencensus.io v0.24.0 // indirect | ||||
| 	go.opentelemetry.io/otel/metric v1.31.0 // indirect | ||||
| 	go.opentelemetry.io/proto/otlp v1.3.1 // indirect | ||||
| 	golang.org/x/crypto v0.31.0 // indirect | ||||
| 	golang.org/x/crypto v0.36.0 // indirect | ||||
| 	golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect | ||||
| 	golang.org/x/net v0.33.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.23.0 // indirect | ||||
| 	golang.org/x/term v0.27.0 // indirect | ||||
| 	golang.org/x/text v0.21.0 // indirect | ||||
| 	golang.org/x/net v0.37.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.28.0 // indirect | ||||
| 	golang.org/x/term v0.30.0 // indirect | ||||
| 	golang.org/x/text v0.23.0 // indirect | ||||
| 	golang.org/x/time v0.3.0 // indirect | ||||
| 	google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect | ||||
| 	gopkg.in/inf.v0 v0.9.1 // indirect | ||||
| @@ -169,7 +169,7 @@ require ( | ||||
| 	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect | ||||
| 	sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect | ||||
| 	sigs.k8s.io/yaml v1.4.0 // indirect | ||||
| 	tags.cncf.io/container-device-interface/specs-go v0.8.0 // indirect | ||||
| 	tags.cncf.io/container-device-interface/specs-go v1.0.0 // indirect | ||||
| ) | ||||
|  | ||||
| exclude ( | ||||
|   | ||||
							
								
								
									
										36
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								go.sum
									
									
									
									
									
								
							| @@ -119,8 +119,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos | ||||
| github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= | ||||
| github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= | ||||
| github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= | ||||
| github.com/go-jose/go-jose/v4 v4.0.4 h1:VsjPI33J0SB9vQM6PLmNjoHqMQNGPiZ0rHL7Ni7Q6/E= | ||||
| github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc= | ||||
| github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= | ||||
| github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= | ||||
| github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||||
| github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= | ||||
| github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | ||||
| @@ -407,8 +407,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY | ||||
| golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= | ||||
| golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= | ||||
| golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= | ||||
| golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= | ||||
| golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= | ||||
| golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= | ||||
| golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= | ||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||
| golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4= | ||||
| golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= | ||||
| @@ -442,11 +442,11 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= | ||||
| golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= | ||||
| golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= | ||||
| golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= | ||||
| golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= | ||||
| golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= | ||||
| golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= | ||||
| golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= | ||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
| golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= | ||||
| golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= | ||||
| golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= | ||||
| golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= | ||||
| golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| @@ -458,8 +458,9 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= | ||||
| golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||||
| golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||||
| golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= | ||||
| golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||||
| golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= | ||||
| golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= | ||||
| golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| @@ -482,8 +483,9 @@ golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= | ||||
| golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= | ||||
| golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= | ||||
| golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| @@ -492,8 +494,9 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= | ||||
| golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= | ||||
| golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= | ||||
| golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= | ||||
| golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= | ||||
| golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= | ||||
| golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= | ||||
| golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | ||||
| @@ -502,8 +505,9 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= | ||||
| golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= | ||||
| golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | ||||
| golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | ||||
| golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= | ||||
| golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= | ||||
| golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= | ||||
| golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= | ||||
| golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= | ||||
| golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||||
| @@ -594,7 +598,7 @@ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+s | ||||
| sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= | ||||
| sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= | ||||
| sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= | ||||
| tags.cncf.io/container-device-interface v0.8.1 h1:c0jN4Mt6781jD67NdPajmZlD1qrqQyov/Xfoab37lj0= | ||||
| tags.cncf.io/container-device-interface v0.8.1/go.mod h1:Apb7N4VdILW0EVdEMRYXIDVRZfNJZ+kmEUss2kRRQ6Y= | ||||
| tags.cncf.io/container-device-interface/specs-go v0.8.0 h1:QYGFzGxvYK/ZLMrjhvY0RjpUavIn4KcmRmVP/JjdBTA= | ||||
| tags.cncf.io/container-device-interface/specs-go v0.8.0/go.mod h1:BhJIkjjPh4qpys+qm4DAYtUyryaTDg9zris+AczXyws= | ||||
| tags.cncf.io/container-device-interface v1.0.0 h1:fbwPQiWZNpXUb9Os6t6JW52rsOppTFUbeJOpNtN1TmI= | ||||
| tags.cncf.io/container-device-interface v1.0.0/go.mod h1:mmi2aRGmOjK/6NR3TXjLpEIarOJ9qwgZjQ3nTIRwAaA= | ||||
| tags.cncf.io/container-device-interface/specs-go v1.0.0 h1:8gLw29hH1ZQP9K1YtAzpvkHCjjyIxHZYzBAvlQ+0vD8= | ||||
| tags.cncf.io/container-device-interface/specs-go v1.0.0/go.mod h1:u86hoFWqnh3hWz3esofRFKbI261bUlvUfLKGrDhJkgQ= | ||||
|   | ||||
| @@ -19,12 +19,26 @@ | ||||
| package client | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/containerd/containerd/api/services/tasks/v1" | ||||
| 	"github.com/containerd/containerd/api/types/runc/options" | ||||
| 	. "github.com/containerd/containerd/v2/client" | ||||
| 	"github.com/containerd/containerd/v2/integration/images" | ||||
| 	"github.com/containerd/containerd/v2/pkg/deprecation" | ||||
| 	"github.com/containerd/containerd/v2/pkg/oci" | ||||
| 	"github.com/containerd/containerd/v2/pkg/protobuf" | ||||
| 	"github.com/containerd/containerd/v2/plugins" | ||||
| 	"github.com/containerd/errdefs" | ||||
| 	"github.com/containerd/errdefs/pkg/errgrpc" | ||||
| 	"github.com/containerd/platforms" | ||||
| 	"github.com/containerd/typeurl/v2" | ||||
| 	"github.com/google/go-cmp/cmp" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"google.golang.org/grpc" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| @@ -63,3 +77,118 @@ func TestImagePullSchema1WithEmptyLayers(t *testing.T) { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestNewTaskWithRuntimeOption(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	fakeTasks := &fakeTaskService{ | ||||
| 		TasksClient:    tasks.NewTasksClient(nil), | ||||
| 		createRequests: map[string]*tasks.CreateTaskRequest{}, | ||||
| 	} | ||||
|  | ||||
| 	cli, err := newClient(t, address, | ||||
| 		WithServices(WithTaskClient(fakeTasks)), | ||||
| 	) | ||||
| 	require.NoError(t, err) | ||||
| 	defer cli.Close() | ||||
|  | ||||
| 	var ( | ||||
| 		image       Image | ||||
| 		ctx, cancel = testContext(t) | ||||
| 	) | ||||
| 	defer cancel() | ||||
|  | ||||
| 	image, err = cli.GetImage(ctx, testImage) | ||||
| 	require.NoError(t, err) | ||||
|  | ||||
| 	for _, tc := range []struct { | ||||
| 		name            string | ||||
| 		runtimeOption   *options.Options | ||||
| 		taskOpts        []NewTaskOpts | ||||
| 		expectedOptions *options.Options | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "should be empty options", | ||||
| 			runtimeOption: &options.Options{ | ||||
| 				BinaryName: "no-runc", | ||||
| 			}, | ||||
| 			expectedOptions: nil, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "should overwrite IOUid/ShimCgroup", | ||||
| 			runtimeOption: &options.Options{ | ||||
| 				BinaryName:    "no-runc", | ||||
| 				ShimCgroup:    "/abc", | ||||
| 				IoUid:         1000, | ||||
| 				SystemdCgroup: true, | ||||
| 			}, | ||||
| 			taskOpts: []NewTaskOpts{ | ||||
| 				WithUIDOwner(2000), | ||||
| 				WithGIDOwner(3000), | ||||
| 				WithShimCgroup("/def"), | ||||
| 			}, | ||||
| 			expectedOptions: &options.Options{ | ||||
| 				BinaryName:    "no-runc", | ||||
| 				ShimCgroup:    "/def", | ||||
| 				IoUid:         2000, | ||||
| 				IoGid:         3000, | ||||
| 				SystemdCgroup: true, | ||||
| 			}, | ||||
| 		}, | ||||
| 	} { | ||||
| 		t.Run(tc.name, func(t *testing.T) { | ||||
| 			id := strings.Replace(t.Name(), "/", "_", -1) | ||||
|  | ||||
| 			container, err := cli.NewContainer( | ||||
| 				ctx, | ||||
| 				id, | ||||
| 				WithNewSnapshotView(id, image), | ||||
| 				WithNewSpec(oci.WithImageConfig(image), withExitStatus(7)), | ||||
| 				WithRuntime(plugins.RuntimeRuncV2, tc.runtimeOption), | ||||
| 			) | ||||
| 			require.NoError(t, err) | ||||
| 			defer container.Delete(ctx, WithSnapshotCleanup) | ||||
|  | ||||
| 			_, err = container.NewTask(ctx, empty(), tc.taskOpts...) | ||||
| 			require.NoError(t, err) | ||||
|  | ||||
| 			fakeTasks.Lock() | ||||
| 			req := fakeTasks.createRequests[id] | ||||
| 			fakeTasks.Unlock() | ||||
|  | ||||
| 			if tc.expectedOptions == nil { | ||||
| 				require.Nil(t, req.Options) | ||||
| 				return | ||||
| 			} | ||||
|  | ||||
| 			gotOptions := &options.Options{} | ||||
| 			require.NoError(t, typeurl.UnmarshalTo(req.Options, gotOptions)) | ||||
| 			require.True(t, cmp.Equal(tc.expectedOptions, gotOptions, protobuf.Compare)) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type fakeTaskService struct { | ||||
| 	sync.Mutex | ||||
| 	createRequests map[string]*tasks.CreateTaskRequest | ||||
| 	tasks.TasksClient | ||||
| } | ||||
|  | ||||
| func (ts *fakeTaskService) Create(ctx context.Context, in *tasks.CreateTaskRequest, opts ...grpc.CallOption) (*tasks.CreateTaskResponse, error) { | ||||
| 	ts.Lock() | ||||
| 	defer ts.Unlock() | ||||
|  | ||||
| 	ts.createRequests[in.ContainerID] = in | ||||
| 	return &tasks.CreateTaskResponse{ | ||||
| 		ContainerID: in.ContainerID, | ||||
| 		Pid:         1, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| func (ts *fakeTaskService) Get(ctx context.Context, in *tasks.GetRequest, opts ...grpc.CallOption) (*tasks.GetResponse, error) { | ||||
| 	return nil, errgrpc.ToGRPC(errdefs.ErrNotFound) | ||||
| } | ||||
|  | ||||
| func (ts *fakeTaskService) Delete(ctx context.Context, in *tasks.DeleteTaskRequest, opts ...grpc.CallOption) (*tasks.DeleteResponse, error) { | ||||
| 	return nil, errgrpc.ToGRPC(errdefs.ErrNotFound) | ||||
| } | ||||
|   | ||||
| @@ -1090,6 +1090,19 @@ func TestContainerRuntimeOptionsv2(t *testing.T) { | ||||
| 	if !strings.Contains(err.Error(), `"no-runc"`) { | ||||
| 		t.Errorf("task creation should have failed because of lack of executable. Instead failed with: %v", err.Error()) | ||||
| 	} | ||||
|  | ||||
| 	// It doesn't matter what the NewTaskOpts function is. We are using an existing function in the client package, | ||||
| 	// which will cause the TaskOptions in the new task request to be non-empty. | ||||
| 	// https://github.com/containerd/containerd/issues/11568 | ||||
| 	task, err = container.NewTask(ctx, empty(), WithNoNewKeyring) | ||||
| 	if err == nil { | ||||
| 		t.Errorf("task creation should have failed") | ||||
| 		task.Delete(ctx) | ||||
| 		return | ||||
| 	} | ||||
| 	if !strings.Contains(err.Error(), `"no-runc"`) { | ||||
| 		t.Errorf("task creation should have failed because of lack of executable. Instead failed with: %v", err.Error()) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestContainerKillInitPidHost(t *testing.T) { | ||||
|   | ||||
| @@ -43,7 +43,7 @@ type podSandboxEventHandler struct { | ||||
| func (p *podSandboxEventHandler) HandleEvent(any interface{}) error { | ||||
| 	switch e := any.(type) { | ||||
| 	case *eventtypes.TaskExit: | ||||
| 		log.L.Infof("TaskExit event in podsandbox handler %+v", e) | ||||
| 		log.L.Debugf("TaskExit event in podsandbox handler %+v", e) | ||||
| 		// Use ID instead of ContainerID to rule out TaskExit event for exec. | ||||
| 		sb := p.controller.store.Get(e.ID) | ||||
| 		if sb == nil { | ||||
|   | ||||
| @@ -595,13 +595,13 @@ func WithUser(userstr string) SpecOpts { | ||||
| 		setProcess(s) | ||||
| 		s.Process.User.AdditionalGids = nil | ||||
| 		// While the Linux kernel allows the max UID to be MaxUint32 - 2, | ||||
|                 // and the OCI Runtime Spec has no definition about the max UID, | ||||
|                 // the runc implementation is known to require the UID to be <= MaxInt32. | ||||
|                 // | ||||
|                 // containerd follows runc's limitation here. | ||||
|                 // | ||||
|                 // In future we may relax this limitation to allow MaxUint32 - 2, | ||||
|                 // or, amend the OCI Runtime Spec to codify the implementation limitation. | ||||
| 		// and the OCI Runtime Spec has no definition about the max UID, | ||||
| 		// the runc implementation is known to require the UID to be <= MaxInt32. | ||||
| 		// | ||||
| 		// containerd follows runc's limitation here. | ||||
| 		// | ||||
| 		// In future we may relax this limitation to allow MaxUint32 - 2, | ||||
| 		// or, amend the OCI Runtime Spec to codify the implementation limitation. | ||||
| 		const ( | ||||
| 			minUserID  = 0 | ||||
| 			maxUserID  = math.MaxInt32 | ||||
|   | ||||
| @@ -105,7 +105,6 @@ guest:x:100:guest | ||||
| 		}, | ||||
| 	} | ||||
| 	for _, testCase := range testCases { | ||||
| 		testCase := testCase | ||||
| 		t.Run(testCase.user, func(t *testing.T) { | ||||
| 			t.Parallel() | ||||
| 			s := Spec{ | ||||
|   | ||||
| @@ -73,13 +73,12 @@ func init() { | ||||
|  | ||||
| 			options := &images.CRIImageServiceOptions{ | ||||
| 				Content:          mdb.ContentStore(), | ||||
| 				Images:           metadata.NewImageStore(mdb), | ||||
| 				RuntimePlatforms: map[string]images.ImagePlatform{}, | ||||
| 				Snapshotters:     map[string]snapshots.Snapshotter{}, | ||||
| 				ImageFSPaths:     map[string]string{}, | ||||
| 			} | ||||
|  | ||||
| 			options.Client, err = containerd.New( | ||||
| 			ctrdCli, err := containerd.New( | ||||
| 				"", | ||||
| 				containerd.WithDefaultNamespace(constants.K8sContainerdNamespace), | ||||
| 				containerd.WithDefaultPlatform(platforms.Default()), | ||||
| @@ -88,6 +87,8 @@ func init() { | ||||
| 			if err != nil { | ||||
| 				return nil, fmt.Errorf("unable to init client for cri image service: %w", err) | ||||
| 			} | ||||
| 			options.Images = ctrdCli.ImageService() | ||||
| 			options.Client = ctrdCli | ||||
|  | ||||
| 			allSnapshotters := mdb.Snapshotters() | ||||
| 			defaultSnapshotter := config.Snapshotter | ||||
|   | ||||
| @@ -28,6 +28,7 @@ func defaultUnpackConfig() []unpackConfiguration { | ||||
| 		{ | ||||
| 			Platform:    platforms.Format(platforms.DefaultSpec()), | ||||
| 			Snapshotter: defaults.DefaultSnapshotter, | ||||
| 			Differ:      defaults.DefaultDiffer, | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										27
									
								
								releases/v2.0.5.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								releases/v2.0.5.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| # commit to be tagged for new release | ||||
| commit = "HEAD" | ||||
|  | ||||
| project_name = "containerd" | ||||
| github_repo = "containerd/containerd" | ||||
| match_deps = "^github.com/(containerd/[a-zA-Z0-9-]+)$" | ||||
| ignore_deps = [ "github.com/containerd/containerd" ] | ||||
|  | ||||
| # previous release | ||||
| previous = "v2.0.4" | ||||
|  | ||||
| pre_release = false | ||||
|  | ||||
| preface = """\ | ||||
| The fifth patch release for containerd 2.0 includes various bug fixes and updates. | ||||
| """ | ||||
|  | ||||
| postface = """\ | ||||
| ### Which file should I download? | ||||
| * `containerd-<VERSION>-<OS>-<ARCH>.tar.gz`:         ✅Recommended. Dynamically linked with glibc 2.31 (Ubuntu 20.04). | ||||
| * `containerd-static-<VERSION>-<OS>-<ARCH>.tar.gz`:  Statically linked. Expected to be used on non-glibc Linux distributions. Not position-independent. | ||||
|  | ||||
| In addition to containerd, typically you will have to install [runc](https://github.com/opencontainers/runc/releases) | ||||
| and [CNI plugins](https://github.com/containernetworking/plugins/releases) from their official sites too. | ||||
|  | ||||
| See also the [Getting Started](https://github.com/containerd/containerd/blob/main/docs/getting-started.md) documentation. | ||||
| """ | ||||
| @@ -70,6 +70,11 @@ if [ ! -z "$CGROUP_DRIVER" ] && [ "$CGROUP_DRIVER" = "systemd" ];then | ||||
| EOF | ||||
| fi | ||||
|  | ||||
| GINKGO_SKIP_TEST=() | ||||
| if [ ! -z "$SKIP_TEST" ]; then | ||||
|   GINKGO_SKIP_TEST+=("--ginkgo.skip" "$SKIP_TEST") | ||||
| fi | ||||
|  | ||||
| ls /etc/cni/net.d | ||||
|  | ||||
| /usr/local/bin/containerd \ | ||||
| @@ -85,4 +90,4 @@ do | ||||
|     crictl --runtime-endpoint ${BDIR}/c.sock info && break || sleep 1 | ||||
| done | ||||
|  | ||||
| critest --report-dir "$report_dir" --runtime-endpoint=unix:///${BDIR}/c.sock --parallel=8 "${EXTRA_CRITEST_OPTIONS:-""}" | ||||
| critest --report-dir "$report_dir" --runtime-endpoint=unix:///${BDIR}/c.sock --parallel=8 "${GINKGO_SKIP_TEST[@]}" "${EXTRA_CRITEST_OPTIONS:-""}" | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| # lived test environment. | ||||
| Set-MpPreference -DisableRealtimeMonitoring:$true | ||||
|  | ||||
| $PACKAGES= @{ mingw = "10.2.0"; git = ""; golang = "1.23.7"; make = ""; nssm = "" } | ||||
| $PACKAGES= @{ mingw = "10.2.0"; git = ""; golang = "1.23.8"; make = ""; nssm = "" } | ||||
|  | ||||
| Write-Host "Downloading chocolatey package" | ||||
| curl.exe -L "https://packages.chocolatey.org/chocolatey.0.10.15.nupkg" -o 'c:\choco.zip' | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| v1.2.5 | ||||
| v1.2.6 | ||||
|   | ||||
							
								
								
									
										6
									
								
								vendor/github.com/go-jose/go-jose/v4/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/go-jose/go-jose/v4/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -7,9 +7,3 @@ When submitting code, please make every effort to follow existing conventions | ||||
| and style in order to keep the code as readable as possible. Please also make | ||||
| sure all tests pass by running `go test`, and format your code with `go fmt`. | ||||
| We also recommend using `golint` and `errcheck`. | ||||
|  | ||||
| Before your code can be accepted into the project you must also sign the | ||||
| Individual Contributor License Agreement.  We use [cla-assistant.io][1] and you | ||||
| will be prompted to sign once a pull request is opened. | ||||
|  | ||||
| [1]: https://cla-assistant.io/ | ||||
|   | ||||
							
								
								
									
										10
									
								
								vendor/github.com/go-jose/go-jose/v4/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/go-jose/go-jose/v4/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -9,14 +9,6 @@ Package jose aims to provide an implementation of the Javascript Object Signing | ||||
| and Encryption set of standards. This includes support for JSON Web Encryption, | ||||
| JSON Web Signature, and JSON Web Token standards. | ||||
|  | ||||
| **Disclaimer**: This library contains encryption software that is subject to | ||||
| the U.S. Export Administration Regulations. You may not export, re-export, | ||||
| transfer or download this code or any part of it in violation of any United | ||||
| States law, directive or regulation. In particular this software may not be | ||||
| exported or re-exported in any form or on any media to Iran, North Sudan, | ||||
| Syria, Cuba, or North Korea, or to denied persons or entities mentioned on any | ||||
| US maintained blocked list. | ||||
|  | ||||
| ## Overview | ||||
|  | ||||
| The implementation follows the | ||||
| @@ -109,6 +101,6 @@ allows attaching a key id. | ||||
|  | ||||
| Examples can be found in the Godoc | ||||
| reference for this package. The | ||||
| [`jose-util`](https://github.com/go-jose/go-jose/tree/v4/jose-util) | ||||
| [`jose-util`](https://github.com/go-jose/go-jose/tree/main/jose-util) | ||||
| subdirectory also contains a small command-line utility which might be useful | ||||
| as an example as well. | ||||
|   | ||||
							
								
								
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jwe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jwe.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -288,10 +288,11 @@ func ParseEncryptedCompact( | ||||
| 	keyAlgorithms []KeyAlgorithm, | ||||
| 	contentEncryption []ContentEncryption, | ||||
| ) (*JSONWebEncryption, error) { | ||||
| 	parts := strings.Split(input, ".") | ||||
| 	if len(parts) != 5 { | ||||
| 	// Five parts is four separators | ||||
| 	if strings.Count(input, ".") != 4 { | ||||
| 		return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts") | ||||
| 	} | ||||
| 	parts := strings.SplitN(input, ".", 5) | ||||
|  | ||||
| 	rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) | ||||
| 	if err != nil { | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/github.com/go-jose/go-jose/v4/jwk.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/go-jose/go-jose/v4/jwk.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -239,10 +239,10 @@ func (k *JSONWebKey) UnmarshalJSON(data []byte) (err error) { | ||||
| 				keyPub = key | ||||
| 			} | ||||
| 		} else { | ||||
| 			err = fmt.Errorf("go-jose/go-jose: unknown curve %s'", raw.Crv) | ||||
| 			return fmt.Errorf("go-jose/go-jose: unknown curve %s'", raw.Crv) | ||||
| 		} | ||||
| 	default: | ||||
| 		err = fmt.Errorf("go-jose/go-jose: unknown json web key type '%s'", raw.Kty) | ||||
| 		return fmt.Errorf("go-jose/go-jose: unknown json web key type '%s'", raw.Kty) | ||||
| 	} | ||||
|  | ||||
| 	if err != nil { | ||||
|   | ||||
							
								
								
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jws.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/go-jose/go-jose/v4/jws.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -327,10 +327,11 @@ func parseSignedCompact( | ||||
| 	payload []byte, | ||||
| 	signatureAlgorithms []SignatureAlgorithm, | ||||
| ) (*JSONWebSignature, error) { | ||||
| 	parts := strings.Split(input, ".") | ||||
| 	if len(parts) != 3 { | ||||
| 	// Three parts is two separators | ||||
| 	if strings.Count(input, ".") != 2 { | ||||
| 		return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts") | ||||
| 	} | ||||
| 	parts := strings.SplitN(input, ".", 3) | ||||
|  | ||||
| 	if parts[1] != "" && payload != nil { | ||||
| 		return nil, fmt.Errorf("go-jose/go-jose: payload is not detached") | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/net/http2/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/net/http2/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -60,7 +60,7 @@ func configFromServer(h1 *http.Server, h2 *Server) http2Config { | ||||
| 	return conf | ||||
| } | ||||
|  | ||||
| // configFromServer merges configuration settings from h2 and h2.t1.HTTP2 | ||||
| // configFromTransport merges configuration settings from h2 and h2.t1.HTTP2 | ||||
| // (the net/http Transport). | ||||
| func configFromTransport(h2 *Transport) http2Config { | ||||
| 	conf := http2Config{ | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/golang.org/x/net/http2/config_go124.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/golang.org/x/net/http2/config_go124.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -13,7 +13,7 @@ func fillNetHTTPServerConfig(conf *http2Config, srv *http.Server) { | ||||
| 	fillNetHTTPConfig(conf, srv.HTTP2) | ||||
| } | ||||
|  | ||||
| // fillNetHTTPServerConfig sets fields in conf from tr.HTTP2. | ||||
| // fillNetHTTPTransportConfig sets fields in conf from tr.HTTP2. | ||||
| func fillNetHTTPTransportConfig(conf *http2Config, tr *http.Transport) { | ||||
| 	fillNetHTTPConfig(conf, tr.HTTP2) | ||||
| } | ||||
|   | ||||
							
								
								
									
										39
									
								
								vendor/golang.org/x/net/http2/http2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/golang.org/x/net/http2/http2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -34,11 +34,19 @@ import ( | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	VerboseLogs                    bool | ||||
| 	logFrameWrites                 bool | ||||
| 	logFrameReads                  bool | ||||
| 	inTests                        bool | ||||
| 	disableExtendedConnectProtocol bool | ||||
| 	VerboseLogs    bool | ||||
| 	logFrameWrites bool | ||||
| 	logFrameReads  bool | ||||
| 	inTests        bool | ||||
|  | ||||
| 	// Enabling extended CONNECT by causes browsers to attempt to use | ||||
| 	// WebSockets-over-HTTP/2. This results in problems when the server's websocket | ||||
| 	// package doesn't support extended CONNECT. | ||||
| 	// | ||||
| 	// Disable extended CONNECT by default for now. | ||||
| 	// | ||||
| 	// Issue #71128. | ||||
| 	disableExtendedConnectProtocol = true | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| @@ -51,8 +59,8 @@ func init() { | ||||
| 		logFrameWrites = true | ||||
| 		logFrameReads = true | ||||
| 	} | ||||
| 	if strings.Contains(e, "http2xconnect=0") { | ||||
| 		disableExtendedConnectProtocol = true | ||||
| 	if strings.Contains(e, "http2xconnect=1") { | ||||
| 		disableExtendedConnectProtocol = false | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -407,23 +415,6 @@ func (s *sorter) SortStrings(ss []string) { | ||||
| 	s.v = save | ||||
| } | ||||
|  | ||||
| // validPseudoPath reports whether v is a valid :path pseudo-header | ||||
| // value. It must be either: | ||||
| // | ||||
| //   - a non-empty string starting with '/' | ||||
| //   - the string '*', for OPTIONS requests. | ||||
| // | ||||
| // For now this is only used a quick check for deciding when to clean | ||||
| // up Opaque URLs before sending requests from the Transport. | ||||
| // See golang.org/issue/16847 | ||||
| // | ||||
| // We used to enforce that the path also didn't start with "//", but | ||||
| // Google's GFE accepts such paths and Chrome sends them, so ignore | ||||
| // that part of the spec. See golang.org/issue/19103. | ||||
| func validPseudoPath(v string) bool { | ||||
| 	return (len(v) > 0 && v[0] == '/') || v == "*" | ||||
| } | ||||
|  | ||||
| // incomparable is a zero-width, non-comparable type. Adding it to a struct | ||||
| // makes that struct also non-comparable, and generally doesn't add | ||||
| // any size (as long as it's first). | ||||
|   | ||||
							
								
								
									
										125
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										125
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -50,6 +50,7 @@ import ( | ||||
|  | ||||
| 	"golang.org/x/net/http/httpguts" | ||||
| 	"golang.org/x/net/http2/hpack" | ||||
| 	"golang.org/x/net/internal/httpcommon" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -812,8 +813,7 @@ const maxCachedCanonicalHeadersKeysSize = 2048 | ||||
|  | ||||
| func (sc *serverConn) canonicalHeader(v string) string { | ||||
| 	sc.serveG.check() | ||||
| 	buildCommonHeaderMapsOnce() | ||||
| 	cv, ok := commonCanonHeader[v] | ||||
| 	cv, ok := httpcommon.CachedCanonicalHeader(v) | ||||
| 	if ok { | ||||
| 		return cv | ||||
| 	} | ||||
| @@ -2233,25 +2233,25 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream | ||||
| func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) { | ||||
| 	sc.serveG.check() | ||||
|  | ||||
| 	rp := requestParam{ | ||||
| 		method:    f.PseudoValue("method"), | ||||
| 		scheme:    f.PseudoValue("scheme"), | ||||
| 		authority: f.PseudoValue("authority"), | ||||
| 		path:      f.PseudoValue("path"), | ||||
| 		protocol:  f.PseudoValue("protocol"), | ||||
| 	rp := httpcommon.ServerRequestParam{ | ||||
| 		Method:    f.PseudoValue("method"), | ||||
| 		Scheme:    f.PseudoValue("scheme"), | ||||
| 		Authority: f.PseudoValue("authority"), | ||||
| 		Path:      f.PseudoValue("path"), | ||||
| 		Protocol:  f.PseudoValue("protocol"), | ||||
| 	} | ||||
|  | ||||
| 	// extended connect is disabled, so we should not see :protocol | ||||
| 	if disableExtendedConnectProtocol && rp.protocol != "" { | ||||
| 	if disableExtendedConnectProtocol && rp.Protocol != "" { | ||||
| 		return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) | ||||
| 	} | ||||
|  | ||||
| 	isConnect := rp.method == "CONNECT" | ||||
| 	isConnect := rp.Method == "CONNECT" | ||||
| 	if isConnect { | ||||
| 		if rp.protocol == "" && (rp.path != "" || rp.scheme != "" || rp.authority == "") { | ||||
| 		if rp.Protocol == "" && (rp.Path != "" || rp.Scheme != "" || rp.Authority == "") { | ||||
| 			return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) | ||||
| 		} | ||||
| 	} else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") { | ||||
| 	} else if rp.Method == "" || rp.Path == "" || (rp.Scheme != "https" && rp.Scheme != "http") { | ||||
| 		// See 8.1.2.6 Malformed Requests and Responses: | ||||
| 		// | ||||
| 		// Malformed requests or responses that are detected | ||||
| @@ -2265,15 +2265,16 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res | ||||
| 		return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol)) | ||||
| 	} | ||||
|  | ||||
| 	rp.header = make(http.Header) | ||||
| 	header := make(http.Header) | ||||
| 	rp.Header = header | ||||
| 	for _, hf := range f.RegularFields() { | ||||
| 		rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value) | ||||
| 		header.Add(sc.canonicalHeader(hf.Name), hf.Value) | ||||
| 	} | ||||
| 	if rp.authority == "" { | ||||
| 		rp.authority = rp.header.Get("Host") | ||||
| 	if rp.Authority == "" { | ||||
| 		rp.Authority = header.Get("Host") | ||||
| 	} | ||||
| 	if rp.protocol != "" { | ||||
| 		rp.header.Set(":protocol", rp.protocol) | ||||
| 	if rp.Protocol != "" { | ||||
| 		header.Set(":protocol", rp.Protocol) | ||||
| 	} | ||||
|  | ||||
| 	rw, req, err := sc.newWriterAndRequestNoBody(st, rp) | ||||
| @@ -2282,7 +2283,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res | ||||
| 	} | ||||
| 	bodyOpen := !f.StreamEnded() | ||||
| 	if bodyOpen { | ||||
| 		if vv, ok := rp.header["Content-Length"]; ok { | ||||
| 		if vv, ok := rp.Header["Content-Length"]; ok { | ||||
| 			if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil { | ||||
| 				req.ContentLength = int64(cl) | ||||
| 			} else { | ||||
| @@ -2298,84 +2299,38 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res | ||||
| 	return rw, req, nil | ||||
| } | ||||
|  | ||||
| type requestParam struct { | ||||
| 	method                  string | ||||
| 	scheme, authority, path string | ||||
| 	protocol                string | ||||
| 	header                  http.Header | ||||
| } | ||||
|  | ||||
| func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) { | ||||
| func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp httpcommon.ServerRequestParam) (*responseWriter, *http.Request, error) { | ||||
| 	sc.serveG.check() | ||||
|  | ||||
| 	var tlsState *tls.ConnectionState // nil if not scheme https | ||||
| 	if rp.scheme == "https" { | ||||
| 	if rp.Scheme == "https" { | ||||
| 		tlsState = sc.tlsState | ||||
| 	} | ||||
|  | ||||
| 	needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue") | ||||
| 	if needsContinue { | ||||
| 		rp.header.Del("Expect") | ||||
| 	} | ||||
| 	// Merge Cookie headers into one "; "-delimited value. | ||||
| 	if cookies := rp.header["Cookie"]; len(cookies) > 1 { | ||||
| 		rp.header.Set("Cookie", strings.Join(cookies, "; ")) | ||||
| 	} | ||||
|  | ||||
| 	// Setup Trailers | ||||
| 	var trailer http.Header | ||||
| 	for _, v := range rp.header["Trailer"] { | ||||
| 		for _, key := range strings.Split(v, ",") { | ||||
| 			key = http.CanonicalHeaderKey(textproto.TrimString(key)) | ||||
| 			switch key { | ||||
| 			case "Transfer-Encoding", "Trailer", "Content-Length": | ||||
| 				// Bogus. (copy of http1 rules) | ||||
| 				// Ignore. | ||||
| 			default: | ||||
| 				if trailer == nil { | ||||
| 					trailer = make(http.Header) | ||||
| 				} | ||||
| 				trailer[key] = nil | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	delete(rp.header, "Trailer") | ||||
|  | ||||
| 	var url_ *url.URL | ||||
| 	var requestURI string | ||||
| 	if rp.method == "CONNECT" && rp.protocol == "" { | ||||
| 		url_ = &url.URL{Host: rp.authority} | ||||
| 		requestURI = rp.authority // mimic HTTP/1 server behavior | ||||
| 	} else { | ||||
| 		var err error | ||||
| 		url_, err = url.ParseRequestURI(rp.path) | ||||
| 		if err != nil { | ||||
| 			return nil, nil, sc.countError("bad_path", streamError(st.id, ErrCodeProtocol)) | ||||
| 		} | ||||
| 		requestURI = rp.path | ||||
| 	res := httpcommon.NewServerRequest(rp) | ||||
| 	if res.InvalidReason != "" { | ||||
| 		return nil, nil, sc.countError(res.InvalidReason, streamError(st.id, ErrCodeProtocol)) | ||||
| 	} | ||||
|  | ||||
| 	body := &requestBody{ | ||||
| 		conn:          sc, | ||||
| 		stream:        st, | ||||
| 		needsContinue: needsContinue, | ||||
| 		needsContinue: res.NeedsContinue, | ||||
| 	} | ||||
| 	req := &http.Request{ | ||||
| 		Method:     rp.method, | ||||
| 		URL:        url_, | ||||
| 	req := (&http.Request{ | ||||
| 		Method:     rp.Method, | ||||
| 		URL:        res.URL, | ||||
| 		RemoteAddr: sc.remoteAddrStr, | ||||
| 		Header:     rp.header, | ||||
| 		RequestURI: requestURI, | ||||
| 		Header:     rp.Header, | ||||
| 		RequestURI: res.RequestURI, | ||||
| 		Proto:      "HTTP/2.0", | ||||
| 		ProtoMajor: 2, | ||||
| 		ProtoMinor: 0, | ||||
| 		TLS:        tlsState, | ||||
| 		Host:       rp.authority, | ||||
| 		Host:       rp.Authority, | ||||
| 		Body:       body, | ||||
| 		Trailer:    trailer, | ||||
| 	} | ||||
| 	req = req.WithContext(st.ctx) | ||||
|  | ||||
| 		Trailer:    res.Trailer, | ||||
| 	}).WithContext(st.ctx) | ||||
| 	rw := sc.newResponseWriter(st, req) | ||||
| 	return rw, req, nil | ||||
| } | ||||
| @@ -3270,12 +3225,12 @@ func (sc *serverConn) startPush(msg *startPushRequest) { | ||||
| 		// we start in "half closed (remote)" for simplicity. | ||||
| 		// See further comments at the definition of stateHalfClosedRemote. | ||||
| 		promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote) | ||||
| 		rw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{ | ||||
| 			method:    msg.method, | ||||
| 			scheme:    msg.url.Scheme, | ||||
| 			authority: msg.url.Host, | ||||
| 			path:      msg.url.RequestURI(), | ||||
| 			header:    cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE | ||||
| 		rw, req, err := sc.newWriterAndRequestNoBody(promised, httpcommon.ServerRequestParam{ | ||||
| 			Method:    msg.method, | ||||
| 			Scheme:    msg.url.Scheme, | ||||
| 			Authority: msg.url.Host, | ||||
| 			Path:      msg.url.RequestURI(), | ||||
| 			Header:    cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 			// Should not happen, since we've already validated msg.url. | ||||
|   | ||||
							
								
								
									
										347
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										347
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -25,7 +25,6 @@ import ( | ||||
| 	"net/http" | ||||
| 	"net/http/httptrace" | ||||
| 	"net/textproto" | ||||
| 	"sort" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| @@ -35,6 +34,7 @@ import ( | ||||
| 	"golang.org/x/net/http/httpguts" | ||||
| 	"golang.org/x/net/http2/hpack" | ||||
| 	"golang.org/x/net/idna" | ||||
| 	"golang.org/x/net/internal/httpcommon" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -375,6 +375,7 @@ type ClientConn struct { | ||||
| 	doNotReuse       bool       // whether conn is marked to not be reused for any future requests | ||||
| 	closing          bool | ||||
| 	closed           bool | ||||
| 	closedOnIdle     bool                     // true if conn was closed for idleness | ||||
| 	seenSettings     bool                     // true if we've seen a settings frame, false otherwise | ||||
| 	seenSettingsChan chan struct{}            // closed when seenSettings is true or frame reading fails | ||||
| 	wantSettingsAck  bool                     // we sent a SETTINGS frame and haven't heard back | ||||
| @@ -1089,10 +1090,12 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { | ||||
|  | ||||
| 	// If this connection has never been used for a request and is closed, | ||||
| 	// then let it take a request (which will fail). | ||||
| 	// If the conn was closed for idleness, we're racing the idle timer; | ||||
| 	// don't try to use the conn. (Issue #70515.) | ||||
| 	// | ||||
| 	// This avoids a situation where an error early in a connection's lifetime | ||||
| 	// goes unreported. | ||||
| 	if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed { | ||||
| 	if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed && !cc.closedOnIdle { | ||||
| 		st.canTakeNewRequest = true | ||||
| 	} | ||||
|  | ||||
| @@ -1155,6 +1158,7 @@ func (cc *ClientConn) closeIfIdle() { | ||||
| 		return | ||||
| 	} | ||||
| 	cc.closed = true | ||||
| 	cc.closedOnIdle = true | ||||
| 	nextID := cc.nextStreamID | ||||
| 	// TODO: do clients send GOAWAY too? maybe? Just Close: | ||||
| 	cc.mu.Unlock() | ||||
| @@ -1271,23 +1275,6 @@ func (cc *ClientConn) closeForLostPing() { | ||||
| // exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests. | ||||
| var errRequestCanceled = errors.New("net/http: request canceled") | ||||
|  | ||||
| func commaSeparatedTrailers(req *http.Request) (string, error) { | ||||
| 	keys := make([]string, 0, len(req.Trailer)) | ||||
| 	for k := range req.Trailer { | ||||
| 		k = canonicalHeader(k) | ||||
| 		switch k { | ||||
| 		case "Transfer-Encoding", "Trailer", "Content-Length": | ||||
| 			return "", fmt.Errorf("invalid Trailer key %q", k) | ||||
| 		} | ||||
| 		keys = append(keys, k) | ||||
| 	} | ||||
| 	if len(keys) > 0 { | ||||
| 		sort.Strings(keys) | ||||
| 		return strings.Join(keys, ","), nil | ||||
| 	} | ||||
| 	return "", nil | ||||
| } | ||||
|  | ||||
| func (cc *ClientConn) responseHeaderTimeout() time.Duration { | ||||
| 	if cc.t.t1 != nil { | ||||
| 		return cc.t.t1.ResponseHeaderTimeout | ||||
| @@ -1299,22 +1286,6 @@ func (cc *ClientConn) responseHeaderTimeout() time.Duration { | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // checkConnHeaders checks whether req has any invalid connection-level headers. | ||||
| // per RFC 7540 section 8.1.2.2: Connection-Specific Header Fields. | ||||
| // Certain headers are special-cased as okay but not transmitted later. | ||||
| func checkConnHeaders(req *http.Request) error { | ||||
| 	if v := req.Header.Get("Upgrade"); v != "" { | ||||
| 		return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"]) | ||||
| 	} | ||||
| 	if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { | ||||
| 		return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv) | ||||
| 	} | ||||
| 	if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) { | ||||
| 		return fmt.Errorf("http2: invalid Connection request header: %q", vv) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // actualContentLength returns a sanitized version of | ||||
| // req.ContentLength, where 0 actually means zero (not unknown) and -1 | ||||
| // means unknown. | ||||
| @@ -1360,25 +1331,7 @@ func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream)) | ||||
| 		donec:                make(chan struct{}), | ||||
| 	} | ||||
|  | ||||
| 	// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? | ||||
| 	if !cc.t.disableCompression() && | ||||
| 		req.Header.Get("Accept-Encoding") == "" && | ||||
| 		req.Header.Get("Range") == "" && | ||||
| 		!cs.isHead { | ||||
| 		// Request gzip only, not deflate. Deflate is ambiguous and | ||||
| 		// not as universally supported anyway. | ||||
| 		// See: https://zlib.net/zlib_faq.html#faq39 | ||||
| 		// | ||||
| 		// Note that we don't request this for HEAD requests, | ||||
| 		// due to a bug in nginx: | ||||
| 		//   http://trac.nginx.org/nginx/ticket/358 | ||||
| 		//   https://golang.org/issue/5522 | ||||
| 		// | ||||
| 		// We don't request gzip if the request is for a range, since | ||||
| 		// auto-decoding a portion of a gzipped document will just fail | ||||
| 		// anyway. See https://golang.org/issue/8923 | ||||
| 		cs.requestedGzip = true | ||||
| 	} | ||||
| 	cs.requestedGzip = httpcommon.IsRequestGzip(req.Method, req.Header, cc.t.disableCompression()) | ||||
|  | ||||
| 	go cs.doRequest(req, streamf) | ||||
|  | ||||
| @@ -1492,10 +1445,6 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre | ||||
| 	cc := cs.cc | ||||
| 	ctx := cs.ctx | ||||
|  | ||||
| 	if err := checkConnHeaders(req); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// wait for setting frames to be received, a server can change this value later, | ||||
| 	// but we just wait for the first settings frame | ||||
| 	var isExtendedConnect bool | ||||
| @@ -1659,26 +1608,39 @@ func (cs *clientStream) encodeAndWriteHeaders(req *http.Request) error { | ||||
| 	// we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is | ||||
| 	// sent by writeRequestBody below, along with any Trailers, | ||||
| 	// again in form HEADERS{1}, CONTINUATION{0,}) | ||||
| 	trailers, err := commaSeparatedTrailers(req) | ||||
| 	cc.hbuf.Reset() | ||||
| 	res, err := encodeRequestHeaders(req, cs.requestedGzip, cc.peerMaxHeaderListSize, func(name, value string) { | ||||
| 		cc.writeHeader(name, value) | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	hasTrailers := trailers != "" | ||||
| 	contentLen := actualContentLength(req) | ||||
| 	hasBody := contentLen != 0 | ||||
| 	hdrs, err := cc.encodeHeaders(req, cs.requestedGzip, trailers, contentLen) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 		return fmt.Errorf("http2: %w", err) | ||||
| 	} | ||||
| 	hdrs := cc.hbuf.Bytes() | ||||
|  | ||||
| 	// Write the request. | ||||
| 	endStream := !hasBody && !hasTrailers | ||||
| 	endStream := !res.HasBody && !res.HasTrailers | ||||
| 	cs.sentHeaders = true | ||||
| 	err = cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs) | ||||
| 	traceWroteHeaders(cs.trace) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func encodeRequestHeaders(req *http.Request, addGzipHeader bool, peerMaxHeaderListSize uint64, headerf func(name, value string)) (httpcommon.EncodeHeadersResult, error) { | ||||
| 	return httpcommon.EncodeHeaders(req.Context(), httpcommon.EncodeHeadersParam{ | ||||
| 		Request: httpcommon.Request{ | ||||
| 			Header:              req.Header, | ||||
| 			Trailer:             req.Trailer, | ||||
| 			URL:                 req.URL, | ||||
| 			Host:                req.Host, | ||||
| 			Method:              req.Method, | ||||
| 			ActualContentLength: actualContentLength(req), | ||||
| 		}, | ||||
| 		AddGzipHeader:         addGzipHeader, | ||||
| 		PeerMaxHeaderListSize: peerMaxHeaderListSize, | ||||
| 		DefaultUserAgent:      defaultUserAgent, | ||||
| 	}, headerf) | ||||
| } | ||||
|  | ||||
| // cleanupWriteRequest performs post-request tasks. | ||||
| // | ||||
| // If err (the result of writeRequest) is non-nil and the stream is not closed, | ||||
| @@ -2066,218 +2028,6 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func validateHeaders(hdrs http.Header) string { | ||||
| 	for k, vv := range hdrs { | ||||
| 		if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" { | ||||
| 			return fmt.Sprintf("name %q", k) | ||||
| 		} | ||||
| 		for _, v := range vv { | ||||
| 			if !httpguts.ValidHeaderFieldValue(v) { | ||||
| 				// Don't include the value in the error, | ||||
| 				// because it may be sensitive. | ||||
| 				return fmt.Sprintf("value for header %q", k) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| var errNilRequestURL = errors.New("http2: Request.URI is nil") | ||||
|  | ||||
| func isNormalConnect(req *http.Request) bool { | ||||
| 	return req.Method == "CONNECT" && req.Header.Get(":protocol") == "" | ||||
| } | ||||
|  | ||||
| // requires cc.wmu be held. | ||||
| func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) { | ||||
| 	cc.hbuf.Reset() | ||||
| 	if req.URL == nil { | ||||
| 		return nil, errNilRequestURL | ||||
| 	} | ||||
|  | ||||
| 	host := req.Host | ||||
| 	if host == "" { | ||||
| 		host = req.URL.Host | ||||
| 	} | ||||
| 	host, err := httpguts.PunycodeHostPort(host) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if !httpguts.ValidHostHeader(host) { | ||||
| 		return nil, errors.New("http2: invalid Host header") | ||||
| 	} | ||||
|  | ||||
| 	var path string | ||||
| 	if !isNormalConnect(req) { | ||||
| 		path = req.URL.RequestURI() | ||||
| 		if !validPseudoPath(path) { | ||||
| 			orig := path | ||||
| 			path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) | ||||
| 			if !validPseudoPath(path) { | ||||
| 				if req.URL.Opaque != "" { | ||||
| 					return nil, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) | ||||
| 				} else { | ||||
| 					return nil, fmt.Errorf("invalid request :path %q", orig) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Check for any invalid headers+trailers and return an error before we | ||||
| 	// potentially pollute our hpack state. (We want to be able to | ||||
| 	// continue to reuse the hpack encoder for future requests) | ||||
| 	if err := validateHeaders(req.Header); err != "" { | ||||
| 		return nil, fmt.Errorf("invalid HTTP header %s", err) | ||||
| 	} | ||||
| 	if err := validateHeaders(req.Trailer); err != "" { | ||||
| 		return nil, fmt.Errorf("invalid HTTP trailer %s", err) | ||||
| 	} | ||||
|  | ||||
| 	enumerateHeaders := func(f func(name, value string)) { | ||||
| 		// 8.1.2.3 Request Pseudo-Header Fields | ||||
| 		// The :path pseudo-header field includes the path and query parts of the | ||||
| 		// target URI (the path-absolute production and optionally a '?' character | ||||
| 		// followed by the query production, see Sections 3.3 and 3.4 of | ||||
| 		// [RFC3986]). | ||||
| 		f(":authority", host) | ||||
| 		m := req.Method | ||||
| 		if m == "" { | ||||
| 			m = http.MethodGet | ||||
| 		} | ||||
| 		f(":method", m) | ||||
| 		if !isNormalConnect(req) { | ||||
| 			f(":path", path) | ||||
| 			f(":scheme", req.URL.Scheme) | ||||
| 		} | ||||
| 		if trailers != "" { | ||||
| 			f("trailer", trailers) | ||||
| 		} | ||||
|  | ||||
| 		var didUA bool | ||||
| 		for k, vv := range req.Header { | ||||
| 			if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") { | ||||
| 				// Host is :authority, already sent. | ||||
| 				// Content-Length is automatic, set below. | ||||
| 				continue | ||||
| 			} else if asciiEqualFold(k, "connection") || | ||||
| 				asciiEqualFold(k, "proxy-connection") || | ||||
| 				asciiEqualFold(k, "transfer-encoding") || | ||||
| 				asciiEqualFold(k, "upgrade") || | ||||
| 				asciiEqualFold(k, "keep-alive") { | ||||
| 				// Per 8.1.2.2 Connection-Specific Header | ||||
| 				// Fields, don't send connection-specific | ||||
| 				// fields. We have already checked if any | ||||
| 				// are error-worthy so just ignore the rest. | ||||
| 				continue | ||||
| 			} else if asciiEqualFold(k, "user-agent") { | ||||
| 				// Match Go's http1 behavior: at most one | ||||
| 				// User-Agent. If set to nil or empty string, | ||||
| 				// then omit it. Otherwise if not mentioned, | ||||
| 				// include the default (below). | ||||
| 				didUA = true | ||||
| 				if len(vv) < 1 { | ||||
| 					continue | ||||
| 				} | ||||
| 				vv = vv[:1] | ||||
| 				if vv[0] == "" { | ||||
| 					continue | ||||
| 				} | ||||
| 			} else if asciiEqualFold(k, "cookie") { | ||||
| 				// Per 8.1.2.5 To allow for better compression efficiency, the | ||||
| 				// Cookie header field MAY be split into separate header fields, | ||||
| 				// each with one or more cookie-pairs. | ||||
| 				for _, v := range vv { | ||||
| 					for { | ||||
| 						p := strings.IndexByte(v, ';') | ||||
| 						if p < 0 { | ||||
| 							break | ||||
| 						} | ||||
| 						f("cookie", v[:p]) | ||||
| 						p++ | ||||
| 						// strip space after semicolon if any. | ||||
| 						for p+1 <= len(v) && v[p] == ' ' { | ||||
| 							p++ | ||||
| 						} | ||||
| 						v = v[p:] | ||||
| 					} | ||||
| 					if len(v) > 0 { | ||||
| 						f("cookie", v) | ||||
| 					} | ||||
| 				} | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			for _, v := range vv { | ||||
| 				f(k, v) | ||||
| 			} | ||||
| 		} | ||||
| 		if shouldSendReqContentLength(req.Method, contentLength) { | ||||
| 			f("content-length", strconv.FormatInt(contentLength, 10)) | ||||
| 		} | ||||
| 		if addGzipHeader { | ||||
| 			f("accept-encoding", "gzip") | ||||
| 		} | ||||
| 		if !didUA { | ||||
| 			f("user-agent", defaultUserAgent) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Do a first pass over the headers counting bytes to ensure | ||||
| 	// we don't exceed cc.peerMaxHeaderListSize. This is done as a | ||||
| 	// separate pass before encoding the headers to prevent | ||||
| 	// modifying the hpack state. | ||||
| 	hlSize := uint64(0) | ||||
| 	enumerateHeaders(func(name, value string) { | ||||
| 		hf := hpack.HeaderField{Name: name, Value: value} | ||||
| 		hlSize += uint64(hf.Size()) | ||||
| 	}) | ||||
|  | ||||
| 	if hlSize > cc.peerMaxHeaderListSize { | ||||
| 		return nil, errRequestHeaderListSize | ||||
| 	} | ||||
|  | ||||
| 	trace := httptrace.ContextClientTrace(req.Context()) | ||||
| 	traceHeaders := traceHasWroteHeaderField(trace) | ||||
|  | ||||
| 	// Header list size is ok. Write the headers. | ||||
| 	enumerateHeaders(func(name, value string) { | ||||
| 		name, ascii := lowerHeader(name) | ||||
| 		if !ascii { | ||||
| 			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header | ||||
| 			// field names have to be ASCII characters (just as in HTTP/1.x). | ||||
| 			return | ||||
| 		} | ||||
| 		cc.writeHeader(name, value) | ||||
| 		if traceHeaders { | ||||
| 			traceWroteHeaderField(trace, name, value) | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| 	return cc.hbuf.Bytes(), nil | ||||
| } | ||||
|  | ||||
| // shouldSendReqContentLength reports whether the http2.Transport should send | ||||
| // a "content-length" request header. This logic is basically a copy of the net/http | ||||
| // transferWriter.shouldSendContentLength. | ||||
| // The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). | ||||
| // -1 means unknown. | ||||
| func shouldSendReqContentLength(method string, contentLength int64) bool { | ||||
| 	if contentLength > 0 { | ||||
| 		return true | ||||
| 	} | ||||
| 	if contentLength < 0 { | ||||
| 		return false | ||||
| 	} | ||||
| 	// For zero bodies, whether we send a content-length depends on the method. | ||||
| 	// It also kinda doesn't matter for http2 either way, with END_STREAM. | ||||
| 	switch method { | ||||
| 	case "POST", "PUT", "PATCH": | ||||
| 		return true | ||||
| 	default: | ||||
| 		return false | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // requires cc.wmu be held. | ||||
| func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { | ||||
| 	cc.hbuf.Reset() | ||||
| @@ -2294,7 +2044,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { | ||||
| 	} | ||||
|  | ||||
| 	for k, vv := range trailer { | ||||
| 		lowKey, ascii := lowerHeader(k) | ||||
| 		lowKey, ascii := httpcommon.LowerHeader(k) | ||||
| 		if !ascii { | ||||
| 			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header | ||||
| 			// field names have to be ASCII characters (just as in HTTP/1.x). | ||||
| @@ -2434,9 +2184,12 @@ func (rl *clientConnReadLoop) cleanup() { | ||||
| 	// This avoids a situation where new connections are constantly created, | ||||
| 	// added to the pool, fail, and are removed from the pool, without any error | ||||
| 	// being surfaced to the user. | ||||
| 	const unusedWaitTime = 5 * time.Second | ||||
| 	unusedWaitTime := 5 * time.Second | ||||
| 	if cc.idleTimeout > 0 && unusedWaitTime > cc.idleTimeout { | ||||
| 		unusedWaitTime = cc.idleTimeout | ||||
| 	} | ||||
| 	idleTime := cc.t.now().Sub(cc.lastActive) | ||||
| 	if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime { | ||||
| 	if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime && !cc.closedOnIdle { | ||||
| 		cc.idleTimer = cc.t.afterFunc(unusedWaitTime-idleTime, func() { | ||||
| 			cc.t.connPool().MarkDead(cc) | ||||
| 		}) | ||||
| @@ -2457,6 +2210,13 @@ func (rl *clientConnReadLoop) cleanup() { | ||||
| 	} | ||||
| 	cc.cond.Broadcast() | ||||
| 	cc.mu.Unlock() | ||||
|  | ||||
| 	if !cc.seenSettings { | ||||
| 		// If we have a pending request that wants extended CONNECT, | ||||
| 		// let it continue and fail with the connection error. | ||||
| 		cc.extendedConnectAllowed = true | ||||
| 		close(cc.seenSettingsChan) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // countReadFrameError calls Transport.CountError with a string | ||||
| @@ -2549,9 +2309,6 @@ func (rl *clientConnReadLoop) run() error { | ||||
| 			if VerboseLogs { | ||||
| 				cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err) | ||||
| 			} | ||||
| 			if !cc.seenSettings { | ||||
| 				close(cc.seenSettingsChan) | ||||
| 			} | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| @@ -2646,7 +2403,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra | ||||
| 		Status:     status + " " + http.StatusText(statusCode), | ||||
| 	} | ||||
| 	for _, hf := range regularFields { | ||||
| 		key := canonicalHeader(hf.Name) | ||||
| 		key := httpcommon.CanonicalHeader(hf.Name) | ||||
| 		if key == "Trailer" { | ||||
| 			t := res.Trailer | ||||
| 			if t == nil { | ||||
| @@ -2654,7 +2411,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra | ||||
| 				res.Trailer = t | ||||
| 			} | ||||
| 			foreachHeaderElement(hf.Value, func(v string) { | ||||
| 				t[canonicalHeader(v)] = nil | ||||
| 				t[httpcommon.CanonicalHeader(v)] = nil | ||||
| 			}) | ||||
| 		} else { | ||||
| 			vv := header[key] | ||||
| @@ -2778,7 +2535,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr | ||||
|  | ||||
| 	trailer := make(http.Header) | ||||
| 	for _, hf := range f.RegularFields() { | ||||
| 		key := canonicalHeader(hf.Name) | ||||
| 		key := httpcommon.CanonicalHeader(hf.Name) | ||||
| 		trailer[key] = append(trailer[key], hf.Value) | ||||
| 	} | ||||
| 	cs.trailer = trailer | ||||
| @@ -3324,7 +3081,7 @@ func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, ping bool, | ||||
|  | ||||
| var ( | ||||
| 	errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit") | ||||
| 	errRequestHeaderListSize  = errors.New("http2: request header list larger than peer's advertised limit") | ||||
| 	errRequestHeaderListSize  = httpcommon.ErrRequestHeaderListSize | ||||
| ) | ||||
|  | ||||
| func (cc *ClientConn) logf(format string, args ...interface{}) { | ||||
| @@ -3508,16 +3265,6 @@ func traceFirstResponseByte(trace *httptrace.ClientTrace) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { | ||||
| 	return trace != nil && trace.WroteHeaderField != nil | ||||
| } | ||||
|  | ||||
| func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) { | ||||
| 	if trace != nil && trace.WroteHeaderField != nil { | ||||
| 		trace.WroteHeaderField(k, []string{v}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error { | ||||
| 	if trace != nil { | ||||
| 		return trace.Got1xxResponse | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/net/http2/write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/net/http2/write.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -13,6 +13,7 @@ import ( | ||||
|  | ||||
| 	"golang.org/x/net/http/httpguts" | ||||
| 	"golang.org/x/net/http2/hpack" | ||||
| 	"golang.org/x/net/internal/httpcommon" | ||||
| ) | ||||
|  | ||||
| // writeFramer is implemented by any type that is used to write frames. | ||||
| @@ -351,7 +352,7 @@ func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) { | ||||
| 	} | ||||
| 	for _, k := range keys { | ||||
| 		vv := h[k] | ||||
| 		k, ascii := lowerHeader(k) | ||||
| 		k, ascii := httpcommon.LowerHeader(k) | ||||
| 		if !ascii { | ||||
| 			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header | ||||
| 			// field names have to be ASCII characters (just as in HTTP/1.x). | ||||
|   | ||||
							
								
								
									
										53
									
								
								vendor/golang.org/x/net/internal/httpcommon/ascii.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/golang.org/x/net/internal/httpcommon/ascii.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| // Copyright 2025 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package httpcommon | ||||
|  | ||||
| import "strings" | ||||
|  | ||||
| // The HTTP protocols are defined in terms of ASCII, not Unicode. This file | ||||
| // contains helper functions which may use Unicode-aware functions which would | ||||
| // otherwise be unsafe and could introduce vulnerabilities if used improperly. | ||||
|  | ||||
| // asciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t | ||||
| // are equal, ASCII-case-insensitively. | ||||
| func asciiEqualFold(s, t string) bool { | ||||
| 	if len(s) != len(t) { | ||||
| 		return false | ||||
| 	} | ||||
| 	for i := 0; i < len(s); i++ { | ||||
| 		if lower(s[i]) != lower(t[i]) { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // lower returns the ASCII lowercase version of b. | ||||
| func lower(b byte) byte { | ||||
| 	if 'A' <= b && b <= 'Z' { | ||||
| 		return b + ('a' - 'A') | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // isASCIIPrint returns whether s is ASCII and printable according to | ||||
| // https://tools.ietf.org/html/rfc20#section-4.2. | ||||
| func isASCIIPrint(s string) bool { | ||||
| 	for i := 0; i < len(s); i++ { | ||||
| 		if s[i] < ' ' || s[i] > '~' { | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // asciiToLower returns the lowercase version of s if s is ASCII and printable, | ||||
| // and whether or not it was. | ||||
| func asciiToLower(s string) (lower string, ok bool) { | ||||
| 	if !isASCIIPrint(s) { | ||||
| 		return "", false | ||||
| 	} | ||||
| 	return strings.ToLower(s), true | ||||
| } | ||||
| @@ -1,11 +1,11 @@ | ||||
| // Copyright 2014 The Go Authors. All rights reserved. | ||||
| // Copyright 2025 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package http2 | ||||
| package httpcommon | ||||
| 
 | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"net/textproto" | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| @@ -82,13 +82,15 @@ func buildCommonHeaderMaps() { | ||||
| 	commonLowerHeader = make(map[string]string, len(common)) | ||||
| 	commonCanonHeader = make(map[string]string, len(common)) | ||||
| 	for _, v := range common { | ||||
| 		chk := http.CanonicalHeaderKey(v) | ||||
| 		chk := textproto.CanonicalMIMEHeaderKey(v) | ||||
| 		commonLowerHeader[chk] = v | ||||
| 		commonCanonHeader[v] = chk | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func lowerHeader(v string) (lower string, ascii bool) { | ||||
| // LowerHeader returns the lowercase form of a header name, | ||||
| // used on the wire for HTTP/2 and HTTP/3 requests. | ||||
| func LowerHeader(v string) (lower string, ascii bool) { | ||||
| 	buildCommonHeaderMapsOnce() | ||||
| 	if s, ok := commonLowerHeader[v]; ok { | ||||
| 		return s, true | ||||
| @@ -96,10 +98,18 @@ func lowerHeader(v string) (lower string, ascii bool) { | ||||
| 	return asciiToLower(v) | ||||
| } | ||||
| 
 | ||||
| func canonicalHeader(v string) string { | ||||
| // CanonicalHeader canonicalizes a header name. (For example, "host" becomes "Host".) | ||||
| func CanonicalHeader(v string) string { | ||||
| 	buildCommonHeaderMapsOnce() | ||||
| 	if s, ok := commonCanonHeader[v]; ok { | ||||
| 		return s | ||||
| 	} | ||||
| 	return http.CanonicalHeaderKey(v) | ||||
| 	return textproto.CanonicalMIMEHeaderKey(v) | ||||
| } | ||||
| 
 | ||||
| // CachedCanonicalHeader returns the canonical form of a well-known header name. | ||||
| func CachedCanonicalHeader(v string) (string, bool) { | ||||
| 	buildCommonHeaderMapsOnce() | ||||
| 	s, ok := commonCanonHeader[v] | ||||
| 	return s, ok | ||||
| } | ||||
							
								
								
									
										467
									
								
								vendor/golang.org/x/net/internal/httpcommon/request.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										467
									
								
								vendor/golang.org/x/net/internal/httpcommon/request.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,467 @@ | ||||
| // Copyright 2025 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package httpcommon | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"net/http/httptrace" | ||||
| 	"net/textproto" | ||||
| 	"net/url" | ||||
| 	"sort" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
|  | ||||
| 	"golang.org/x/net/http/httpguts" | ||||
| 	"golang.org/x/net/http2/hpack" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	ErrRequestHeaderListSize = errors.New("request header list larger than peer's advertised limit") | ||||
| ) | ||||
|  | ||||
| // Request is a subset of http.Request. | ||||
| // It'd be simpler to pass an *http.Request, of course, but we can't depend on net/http | ||||
| // without creating a dependency cycle. | ||||
| type Request struct { | ||||
| 	URL                 *url.URL | ||||
| 	Method              string | ||||
| 	Host                string | ||||
| 	Header              map[string][]string | ||||
| 	Trailer             map[string][]string | ||||
| 	ActualContentLength int64 // 0 means 0, -1 means unknown | ||||
| } | ||||
|  | ||||
| // EncodeHeadersParam is parameters to EncodeHeaders. | ||||
| type EncodeHeadersParam struct { | ||||
| 	Request Request | ||||
|  | ||||
| 	// AddGzipHeader indicates that an "accept-encoding: gzip" header should be | ||||
| 	// added to the request. | ||||
| 	AddGzipHeader bool | ||||
|  | ||||
| 	// PeerMaxHeaderListSize, when non-zero, is the peer's MAX_HEADER_LIST_SIZE setting. | ||||
| 	PeerMaxHeaderListSize uint64 | ||||
|  | ||||
| 	// DefaultUserAgent is the User-Agent header to send when the request | ||||
| 	// neither contains a User-Agent nor disables it. | ||||
| 	DefaultUserAgent string | ||||
| } | ||||
|  | ||||
| // EncodeHeadersParam is the result of EncodeHeaders. | ||||
| type EncodeHeadersResult struct { | ||||
| 	HasBody     bool | ||||
| 	HasTrailers bool | ||||
| } | ||||
|  | ||||
| // EncodeHeaders constructs request headers common to HTTP/2 and HTTP/3. | ||||
| // It validates a request and calls headerf with each pseudo-header and header | ||||
| // for the request. | ||||
| // The headerf function is called with the validated, canonicalized header name. | ||||
| func EncodeHeaders(ctx context.Context, param EncodeHeadersParam, headerf func(name, value string)) (res EncodeHeadersResult, _ error) { | ||||
| 	req := param.Request | ||||
|  | ||||
| 	// Check for invalid connection-level headers. | ||||
| 	if err := checkConnHeaders(req.Header); err != nil { | ||||
| 		return res, err | ||||
| 	} | ||||
|  | ||||
| 	if req.URL == nil { | ||||
| 		return res, errors.New("Request.URL is nil") | ||||
| 	} | ||||
|  | ||||
| 	host := req.Host | ||||
| 	if host == "" { | ||||
| 		host = req.URL.Host | ||||
| 	} | ||||
| 	host, err := httpguts.PunycodeHostPort(host) | ||||
| 	if err != nil { | ||||
| 		return res, err | ||||
| 	} | ||||
| 	if !httpguts.ValidHostHeader(host) { | ||||
| 		return res, errors.New("invalid Host header") | ||||
| 	} | ||||
|  | ||||
| 	// isNormalConnect is true if this is a non-extended CONNECT request. | ||||
| 	isNormalConnect := false | ||||
| 	var protocol string | ||||
| 	if vv := req.Header[":protocol"]; len(vv) > 0 { | ||||
| 		protocol = vv[0] | ||||
| 	} | ||||
| 	if req.Method == "CONNECT" && protocol == "" { | ||||
| 		isNormalConnect = true | ||||
| 	} else if protocol != "" && req.Method != "CONNECT" { | ||||
| 		return res, errors.New("invalid :protocol header in non-CONNECT request") | ||||
| 	} | ||||
|  | ||||
| 	// Validate the path, except for non-extended CONNECT requests which have no path. | ||||
| 	var path string | ||||
| 	if !isNormalConnect { | ||||
| 		path = req.URL.RequestURI() | ||||
| 		if !validPseudoPath(path) { | ||||
| 			orig := path | ||||
| 			path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) | ||||
| 			if !validPseudoPath(path) { | ||||
| 				if req.URL.Opaque != "" { | ||||
| 					return res, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) | ||||
| 				} else { | ||||
| 					return res, fmt.Errorf("invalid request :path %q", orig) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Check for any invalid headers+trailers and return an error before we | ||||
| 	// potentially pollute our hpack state. (We want to be able to | ||||
| 	// continue to reuse the hpack encoder for future requests) | ||||
| 	if err := validateHeaders(req.Header); err != "" { | ||||
| 		return res, fmt.Errorf("invalid HTTP header %s", err) | ||||
| 	} | ||||
| 	if err := validateHeaders(req.Trailer); err != "" { | ||||
| 		return res, fmt.Errorf("invalid HTTP trailer %s", err) | ||||
| 	} | ||||
|  | ||||
| 	trailers, err := commaSeparatedTrailers(req.Trailer) | ||||
| 	if err != nil { | ||||
| 		return res, err | ||||
| 	} | ||||
|  | ||||
| 	enumerateHeaders := func(f func(name, value string)) { | ||||
| 		// 8.1.2.3 Request Pseudo-Header Fields | ||||
| 		// The :path pseudo-header field includes the path and query parts of the | ||||
| 		// target URI (the path-absolute production and optionally a '?' character | ||||
| 		// followed by the query production, see Sections 3.3 and 3.4 of | ||||
| 		// [RFC3986]). | ||||
| 		f(":authority", host) | ||||
| 		m := req.Method | ||||
| 		if m == "" { | ||||
| 			m = "GET" | ||||
| 		} | ||||
| 		f(":method", m) | ||||
| 		if !isNormalConnect { | ||||
| 			f(":path", path) | ||||
| 			f(":scheme", req.URL.Scheme) | ||||
| 		} | ||||
| 		if protocol != "" { | ||||
| 			f(":protocol", protocol) | ||||
| 		} | ||||
| 		if trailers != "" { | ||||
| 			f("trailer", trailers) | ||||
| 		} | ||||
|  | ||||
| 		var didUA bool | ||||
| 		for k, vv := range req.Header { | ||||
| 			if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") { | ||||
| 				// Host is :authority, already sent. | ||||
| 				// Content-Length is automatic, set below. | ||||
| 				continue | ||||
| 			} else if asciiEqualFold(k, "connection") || | ||||
| 				asciiEqualFold(k, "proxy-connection") || | ||||
| 				asciiEqualFold(k, "transfer-encoding") || | ||||
| 				asciiEqualFold(k, "upgrade") || | ||||
| 				asciiEqualFold(k, "keep-alive") { | ||||
| 				// Per 8.1.2.2 Connection-Specific Header | ||||
| 				// Fields, don't send connection-specific | ||||
| 				// fields. We have already checked if any | ||||
| 				// are error-worthy so just ignore the rest. | ||||
| 				continue | ||||
| 			} else if asciiEqualFold(k, "user-agent") { | ||||
| 				// Match Go's http1 behavior: at most one | ||||
| 				// User-Agent. If set to nil or empty string, | ||||
| 				// then omit it. Otherwise if not mentioned, | ||||
| 				// include the default (below). | ||||
| 				didUA = true | ||||
| 				if len(vv) < 1 { | ||||
| 					continue | ||||
| 				} | ||||
| 				vv = vv[:1] | ||||
| 				if vv[0] == "" { | ||||
| 					continue | ||||
| 				} | ||||
| 			} else if asciiEqualFold(k, "cookie") { | ||||
| 				// Per 8.1.2.5 To allow for better compression efficiency, the | ||||
| 				// Cookie header field MAY be split into separate header fields, | ||||
| 				// each with one or more cookie-pairs. | ||||
| 				for _, v := range vv { | ||||
| 					for { | ||||
| 						p := strings.IndexByte(v, ';') | ||||
| 						if p < 0 { | ||||
| 							break | ||||
| 						} | ||||
| 						f("cookie", v[:p]) | ||||
| 						p++ | ||||
| 						// strip space after semicolon if any. | ||||
| 						for p+1 <= len(v) && v[p] == ' ' { | ||||
| 							p++ | ||||
| 						} | ||||
| 						v = v[p:] | ||||
| 					} | ||||
| 					if len(v) > 0 { | ||||
| 						f("cookie", v) | ||||
| 					} | ||||
| 				} | ||||
| 				continue | ||||
| 			} else if k == ":protocol" { | ||||
| 				// :protocol pseudo-header was already sent above. | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			for _, v := range vv { | ||||
| 				f(k, v) | ||||
| 			} | ||||
| 		} | ||||
| 		if shouldSendReqContentLength(req.Method, req.ActualContentLength) { | ||||
| 			f("content-length", strconv.FormatInt(req.ActualContentLength, 10)) | ||||
| 		} | ||||
| 		if param.AddGzipHeader { | ||||
| 			f("accept-encoding", "gzip") | ||||
| 		} | ||||
| 		if !didUA { | ||||
| 			f("user-agent", param.DefaultUserAgent) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// Do a first pass over the headers counting bytes to ensure | ||||
| 	// we don't exceed cc.peerMaxHeaderListSize. This is done as a | ||||
| 	// separate pass before encoding the headers to prevent | ||||
| 	// modifying the hpack state. | ||||
| 	if param.PeerMaxHeaderListSize > 0 { | ||||
| 		hlSize := uint64(0) | ||||
| 		enumerateHeaders(func(name, value string) { | ||||
| 			hf := hpack.HeaderField{Name: name, Value: value} | ||||
| 			hlSize += uint64(hf.Size()) | ||||
| 		}) | ||||
|  | ||||
| 		if hlSize > param.PeerMaxHeaderListSize { | ||||
| 			return res, ErrRequestHeaderListSize | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	trace := httptrace.ContextClientTrace(ctx) | ||||
|  | ||||
| 	// Header list size is ok. Write the headers. | ||||
| 	enumerateHeaders(func(name, value string) { | ||||
| 		name, ascii := LowerHeader(name) | ||||
| 		if !ascii { | ||||
| 			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header | ||||
| 			// field names have to be ASCII characters (just as in HTTP/1.x). | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		headerf(name, value) | ||||
|  | ||||
| 		if trace != nil && trace.WroteHeaderField != nil { | ||||
| 			trace.WroteHeaderField(name, []string{value}) | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| 	res.HasBody = req.ActualContentLength != 0 | ||||
| 	res.HasTrailers = trailers != "" | ||||
| 	return res, nil | ||||
| } | ||||
|  | ||||
| // IsRequestGzip reports whether we should add an Accept-Encoding: gzip header | ||||
| // for a request. | ||||
| func IsRequestGzip(method string, header map[string][]string, disableCompression bool) bool { | ||||
| 	// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? | ||||
| 	if !disableCompression && | ||||
| 		len(header["Accept-Encoding"]) == 0 && | ||||
| 		len(header["Range"]) == 0 && | ||||
| 		method != "HEAD" { | ||||
| 		// Request gzip only, not deflate. Deflate is ambiguous and | ||||
| 		// not as universally supported anyway. | ||||
| 		// See: https://zlib.net/zlib_faq.html#faq39 | ||||
| 		// | ||||
| 		// Note that we don't request this for HEAD requests, | ||||
| 		// due to a bug in nginx: | ||||
| 		//   http://trac.nginx.org/nginx/ticket/358 | ||||
| 		//   https://golang.org/issue/5522 | ||||
| 		// | ||||
| 		// We don't request gzip if the request is for a range, since | ||||
| 		// auto-decoding a portion of a gzipped document will just fail | ||||
| 		// anyway. See https://golang.org/issue/8923 | ||||
| 		return true | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // checkConnHeaders checks whether req has any invalid connection-level headers. | ||||
| // | ||||
| // https://www.rfc-editor.org/rfc/rfc9114.html#section-4.2-3 | ||||
| // https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.2-1 | ||||
| // | ||||
| // Certain headers are special-cased as okay but not transmitted later. | ||||
| // For example, we allow "Transfer-Encoding: chunked", but drop the header when encoding. | ||||
| func checkConnHeaders(h map[string][]string) error { | ||||
| 	if vv := h["Upgrade"]; len(vv) > 0 && (vv[0] != "" && vv[0] != "chunked") { | ||||
| 		return fmt.Errorf("invalid Upgrade request header: %q", vv) | ||||
| 	} | ||||
| 	if vv := h["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { | ||||
| 		return fmt.Errorf("invalid Transfer-Encoding request header: %q", vv) | ||||
| 	} | ||||
| 	if vv := h["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) { | ||||
| 		return fmt.Errorf("invalid Connection request header: %q", vv) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func commaSeparatedTrailers(trailer map[string][]string) (string, error) { | ||||
| 	keys := make([]string, 0, len(trailer)) | ||||
| 	for k := range trailer { | ||||
| 		k = CanonicalHeader(k) | ||||
| 		switch k { | ||||
| 		case "Transfer-Encoding", "Trailer", "Content-Length": | ||||
| 			return "", fmt.Errorf("invalid Trailer key %q", k) | ||||
| 		} | ||||
| 		keys = append(keys, k) | ||||
| 	} | ||||
| 	if len(keys) > 0 { | ||||
| 		sort.Strings(keys) | ||||
| 		return strings.Join(keys, ","), nil | ||||
| 	} | ||||
| 	return "", nil | ||||
| } | ||||
|  | ||||
| // validPseudoPath reports whether v is a valid :path pseudo-header | ||||
| // value. It must be either: | ||||
| // | ||||
| //   - a non-empty string starting with '/' | ||||
| //   - the string '*', for OPTIONS requests. | ||||
| // | ||||
| // For now this is only used a quick check for deciding when to clean | ||||
| // up Opaque URLs before sending requests from the Transport. | ||||
| // See golang.org/issue/16847 | ||||
| // | ||||
| // We used to enforce that the path also didn't start with "//", but | ||||
| // Google's GFE accepts such paths and Chrome sends them, so ignore | ||||
| // that part of the spec. See golang.org/issue/19103. | ||||
| func validPseudoPath(v string) bool { | ||||
| 	return (len(v) > 0 && v[0] == '/') || v == "*" | ||||
| } | ||||
|  | ||||
| func validateHeaders(hdrs map[string][]string) string { | ||||
| 	for k, vv := range hdrs { | ||||
| 		if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" { | ||||
| 			return fmt.Sprintf("name %q", k) | ||||
| 		} | ||||
| 		for _, v := range vv { | ||||
| 			if !httpguts.ValidHeaderFieldValue(v) { | ||||
| 				// Don't include the value in the error, | ||||
| 				// because it may be sensitive. | ||||
| 				return fmt.Sprintf("value for header %q", k) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // shouldSendReqContentLength reports whether we should send | ||||
| // a "content-length" request header. This logic is basically a copy of the net/http | ||||
| // transferWriter.shouldSendContentLength. | ||||
| // The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). | ||||
| // -1 means unknown. | ||||
| func shouldSendReqContentLength(method string, contentLength int64) bool { | ||||
| 	if contentLength > 0 { | ||||
| 		return true | ||||
| 	} | ||||
| 	if contentLength < 0 { | ||||
| 		return false | ||||
| 	} | ||||
| 	// For zero bodies, whether we send a content-length depends on the method. | ||||
| 	// It also kinda doesn't matter for http2 either way, with END_STREAM. | ||||
| 	switch method { | ||||
| 	case "POST", "PUT", "PATCH": | ||||
| 		return true | ||||
| 	default: | ||||
| 		return false | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ServerRequestParam is parameters to NewServerRequest. | ||||
| type ServerRequestParam struct { | ||||
| 	Method                  string | ||||
| 	Scheme, Authority, Path string | ||||
| 	Protocol                string | ||||
| 	Header                  map[string][]string | ||||
| } | ||||
|  | ||||
| // ServerRequestResult is the result of NewServerRequest. | ||||
| type ServerRequestResult struct { | ||||
| 	// Various http.Request fields. | ||||
| 	URL        *url.URL | ||||
| 	RequestURI string | ||||
| 	Trailer    map[string][]string | ||||
|  | ||||
| 	NeedsContinue bool // client provided an "Expect: 100-continue" header | ||||
|  | ||||
| 	// If the request should be rejected, this is a short string suitable for passing | ||||
| 	// to the http2 package's CountError function. | ||||
| 	// It might be a bit odd to return errors this way rather than returing an error, | ||||
| 	// but this ensures we don't forget to include a CountError reason. | ||||
| 	InvalidReason string | ||||
| } | ||||
|  | ||||
| func NewServerRequest(rp ServerRequestParam) ServerRequestResult { | ||||
| 	needsContinue := httpguts.HeaderValuesContainsToken(rp.Header["Expect"], "100-continue") | ||||
| 	if needsContinue { | ||||
| 		delete(rp.Header, "Expect") | ||||
| 	} | ||||
| 	// Merge Cookie headers into one "; "-delimited value. | ||||
| 	if cookies := rp.Header["Cookie"]; len(cookies) > 1 { | ||||
| 		rp.Header["Cookie"] = []string{strings.Join(cookies, "; ")} | ||||
| 	} | ||||
|  | ||||
| 	// Setup Trailers | ||||
| 	var trailer map[string][]string | ||||
| 	for _, v := range rp.Header["Trailer"] { | ||||
| 		for _, key := range strings.Split(v, ",") { | ||||
| 			key = textproto.CanonicalMIMEHeaderKey(textproto.TrimString(key)) | ||||
| 			switch key { | ||||
| 			case "Transfer-Encoding", "Trailer", "Content-Length": | ||||
| 				// Bogus. (copy of http1 rules) | ||||
| 				// Ignore. | ||||
| 			default: | ||||
| 				if trailer == nil { | ||||
| 					trailer = make(map[string][]string) | ||||
| 				} | ||||
| 				trailer[key] = nil | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	delete(rp.Header, "Trailer") | ||||
|  | ||||
| 	// "':authority' MUST NOT include the deprecated userinfo subcomponent | ||||
| 	// for "http" or "https" schemed URIs." | ||||
| 	// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8 | ||||
| 	if strings.IndexByte(rp.Authority, '@') != -1 && (rp.Scheme == "http" || rp.Scheme == "https") { | ||||
| 		return ServerRequestResult{ | ||||
| 			InvalidReason: "userinfo_in_authority", | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	var url_ *url.URL | ||||
| 	var requestURI string | ||||
| 	if rp.Method == "CONNECT" && rp.Protocol == "" { | ||||
| 		url_ = &url.URL{Host: rp.Authority} | ||||
| 		requestURI = rp.Authority // mimic HTTP/1 server behavior | ||||
| 	} else { | ||||
| 		var err error | ||||
| 		url_, err = url.ParseRequestURI(rp.Path) | ||||
| 		if err != nil { | ||||
| 			return ServerRequestResult{ | ||||
| 				InvalidReason: "bad_path", | ||||
| 			} | ||||
| 		} | ||||
| 		requestURI = rp.Path | ||||
| 	} | ||||
|  | ||||
| 	return ServerRequestResult{ | ||||
| 		URL:           url_, | ||||
| 		NeedsContinue: needsContinue, | ||||
| 		RequestURI:    requestURI, | ||||
| 		Trailer:       trailer, | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/net/proxy/per_host.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/net/proxy/per_host.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -7,6 +7,7 @@ package proxy | ||||
| import ( | ||||
| 	"context" | ||||
| 	"net" | ||||
| 	"net/netip" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| @@ -57,7 +58,8 @@ func (p *PerHost) DialContext(ctx context.Context, network, addr string) (c net. | ||||
| } | ||||
|  | ||||
| func (p *PerHost) dialerForRequest(host string) Dialer { | ||||
| 	if ip := net.ParseIP(host); ip != nil { | ||||
| 	if nip, err := netip.ParseAddr(host); err == nil { | ||||
| 		ip := net.IP(nip.AsSlice()) | ||||
| 		for _, net := range p.bypassNetworks { | ||||
| 			if net.Contains(ip) { | ||||
| 				return p.bypass | ||||
| @@ -108,8 +110,8 @@ func (p *PerHost) AddFromString(s string) { | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 		if ip := net.ParseIP(host); ip != nil { | ||||
| 			p.AddIP(ip) | ||||
| 		if nip, err := netip.ParseAddr(host); err == nil { | ||||
| 			p.AddIP(net.IP(nip.AsSlice())) | ||||
| 			continue | ||||
| 		} | ||||
| 		if strings.HasPrefix(host, "*.") { | ||||
|   | ||||
							
								
								
									
										15
									
								
								vendor/golang.org/x/oauth2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/golang.org/x/oauth2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -5,15 +5,6 @@ | ||||
|  | ||||
| oauth2 package contains a client implementation for OAuth 2.0 spec. | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| ~~~~ | ||||
| go get golang.org/x/oauth2 | ||||
| ~~~~ | ||||
|  | ||||
| Or you can manually git clone the repository to | ||||
| `$(go env GOPATH)/src/golang.org/x/oauth2`. | ||||
|  | ||||
| See pkg.go.dev for further documentation and examples. | ||||
|  | ||||
| * [pkg.go.dev/golang.org/x/oauth2](https://pkg.go.dev/golang.org/x/oauth2) | ||||
| @@ -33,7 +24,11 @@ The main issue tracker for the oauth2 repository is located at | ||||
| https://github.com/golang/oauth2/issues. | ||||
|  | ||||
| This repository uses Gerrit for code changes. To learn how to submit changes to | ||||
| this repository, see https://golang.org/doc/contribute.html. In particular: | ||||
| this repository, see https://go.dev/doc/contribute. | ||||
|  | ||||
| The git repository is https://go.googlesource.com/oauth2. | ||||
|  | ||||
| Note: | ||||
|  | ||||
| * Excluding trivial changes, all contributions should be connected to an existing issue. | ||||
| * API changes must go through the [change proposal process](https://go.dev/s/proposal-process) before they can be accepted. | ||||
|   | ||||
							
								
								
									
										10
									
								
								vendor/golang.org/x/oauth2/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/golang.org/x/oauth2/oauth2.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -56,7 +56,7 @@ type Config struct { | ||||
| 	// the OAuth flow, after the resource owner's URLs. | ||||
| 	RedirectURL string | ||||
|  | ||||
| 	// Scope specifies optional requested permissions. | ||||
| 	// Scopes specifies optional requested permissions. | ||||
| 	Scopes []string | ||||
|  | ||||
| 	// authStyleCache caches which auth style to use when Endpoint.AuthStyle is | ||||
| @@ -288,7 +288,7 @@ func (tf *tokenRefresher) Token() (*Token, error) { | ||||
| 	if tf.refreshToken != tk.RefreshToken { | ||||
| 		tf.refreshToken = tk.RefreshToken | ||||
| 	} | ||||
| 	return tk, err | ||||
| 	return tk, nil | ||||
| } | ||||
|  | ||||
| // reuseTokenSource is a TokenSource that holds a single token in memory | ||||
| @@ -356,11 +356,15 @@ func NewClient(ctx context.Context, src TokenSource) *http.Client { | ||||
| 	if src == nil { | ||||
| 		return internal.ContextClient(ctx) | ||||
| 	} | ||||
| 	cc := internal.ContextClient(ctx) | ||||
| 	return &http.Client{ | ||||
| 		Transport: &Transport{ | ||||
| 			Base:   internal.ContextClient(ctx).Transport, | ||||
| 			Base:   cc.Transport, | ||||
| 			Source: ReuseTokenSource(nil, src), | ||||
| 		}, | ||||
| 		CheckRedirect: cc.CheckRedirect, | ||||
| 		Jar:           cc.Jar, | ||||
| 		Timeout:       cc.Timeout, | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/oauth2/pkce.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/oauth2/pkce.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -21,7 +21,7 @@ const ( | ||||
| // | ||||
| // A fresh verifier should be generated for each authorization. | ||||
| // S256ChallengeOption(verifier) should then be passed to Config.AuthCodeURL | ||||
| // (or Config.DeviceAccess) and VerifierOption(verifier) to Config.Exchange | ||||
| // (or Config.DeviceAuth) and VerifierOption(verifier) to Config.Exchange | ||||
| // (or Config.DeviceAccessToken). | ||||
| func GenerateVerifier() string { | ||||
| 	// "RECOMMENDED that the output of a suitable random number generator be | ||||
| @@ -51,7 +51,7 @@ func S256ChallengeFromVerifier(verifier string) string { | ||||
| } | ||||
|  | ||||
| // S256ChallengeOption derives a PKCE code challenge derived from verifier with | ||||
| // method S256. It should be passed to Config.AuthCodeURL or Config.DeviceAccess | ||||
| // method S256. It should be passed to Config.AuthCodeURL or Config.DeviceAuth | ||||
| // only. | ||||
| func S256ChallengeOption(verifier string) AuthCodeOption { | ||||
| 	return challengeOption{ | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sync/errgroup/errgroup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sync/errgroup/errgroup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -46,7 +46,7 @@ func (g *Group) done() { | ||||
| // returns a non-nil error or the first time Wait returns, whichever occurs | ||||
| // first. | ||||
| func WithContext(ctx context.Context) (*Group, context.Context) { | ||||
| 	ctx, cancel := withCancelCause(ctx) | ||||
| 	ctx, cancel := context.WithCancelCause(ctx) | ||||
| 	return &Group{cancel: cancel}, ctx | ||||
| } | ||||
|  | ||||
| @@ -118,6 +118,7 @@ func (g *Group) TryGo(f func() error) bool { | ||||
|  | ||||
| // SetLimit limits the number of active goroutines in this group to at most n. | ||||
| // A negative value indicates no limit. | ||||
| // A limit of zero will prevent any new goroutines from being added. | ||||
| // | ||||
| // Any subsequent call to the Go method will block until it can add an active | ||||
| // goroutine without exceeding the configured limit. | ||||
|   | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sync/errgroup/go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sync/errgroup/go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| // Copyright 2023 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| //go:build go1.20 | ||||
|  | ||||
| package errgroup | ||||
|  | ||||
| import "context" | ||||
|  | ||||
| func withCancelCause(parent context.Context) (context.Context, func(error)) { | ||||
| 	return context.WithCancelCause(parent) | ||||
| } | ||||
							
								
								
									
										14
									
								
								vendor/golang.org/x/sync/errgroup/pre_go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/golang.org/x/sync/errgroup/pre_go120.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,14 +0,0 @@ | ||||
| // Copyright 2023 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| //go:build !go1.20 | ||||
|  | ||||
| package errgroup | ||||
|  | ||||
| import "context" | ||||
|  | ||||
| func withCancelCause(parent context.Context) (context.Context, func(error)) { | ||||
| 	ctx, cancel := context.WithCancel(parent) | ||||
| 	return ctx, func(error) { cancel() } | ||||
| } | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/cpu/cpu.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -72,6 +72,9 @@ var X86 struct { | ||||
| 	HasSSSE3            bool // Supplemental streaming SIMD extension 3 | ||||
| 	HasSSE41            bool // Streaming SIMD extension 4 and 4.1 | ||||
| 	HasSSE42            bool // Streaming SIMD extension 4 and 4.2 | ||||
| 	HasAVXIFMA          bool // Advanced vector extension Integer Fused Multiply Add | ||||
| 	HasAVXVNNI          bool // Advanced vector extension Vector Neural Network Instructions | ||||
| 	HasAVXVNNIInt8      bool // Advanced vector extension Vector Neural Network Int8 instructions | ||||
| 	_                   CacheLinePad | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										21
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/golang.org/x/sys/cpu/cpu_x86.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -53,6 +53,9 @@ func initOptions() { | ||||
| 		{Name: "sse41", Feature: &X86.HasSSE41}, | ||||
| 		{Name: "sse42", Feature: &X86.HasSSE42}, | ||||
| 		{Name: "ssse3", Feature: &X86.HasSSSE3}, | ||||
| 		{Name: "avxifma", Feature: &X86.HasAVXIFMA}, | ||||
| 		{Name: "avxvnni", Feature: &X86.HasAVXVNNI}, | ||||
| 		{Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8}, | ||||
|  | ||||
| 		// These capabilities should always be enabled on amd64: | ||||
| 		{Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"}, | ||||
| @@ -106,7 +109,7 @@ func archInit() { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	_, ebx7, ecx7, edx7 := cpuid(7, 0) | ||||
| 	eax7, ebx7, ecx7, edx7 := cpuid(7, 0) | ||||
| 	X86.HasBMI1 = isSet(3, ebx7) | ||||
| 	X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX | ||||
| 	X86.HasBMI2 = isSet(8, ebx7) | ||||
| @@ -134,14 +137,24 @@ func archInit() { | ||||
| 		X86.HasAVX512VAES = isSet(9, ecx7) | ||||
| 		X86.HasAVX512VBMI2 = isSet(6, ecx7) | ||||
| 		X86.HasAVX512BITALG = isSet(12, ecx7) | ||||
|  | ||||
| 		eax71, _, _, _ := cpuid(7, 1) | ||||
| 		X86.HasAVX512BF16 = isSet(5, eax71) | ||||
| 	} | ||||
|  | ||||
| 	X86.HasAMXTile = isSet(24, edx7) | ||||
| 	X86.HasAMXInt8 = isSet(25, edx7) | ||||
| 	X86.HasAMXBF16 = isSet(22, edx7) | ||||
|  | ||||
| 	// These features depend on the second level of extended features. | ||||
| 	if eax7 >= 1 { | ||||
| 		eax71, _, _, edx71 := cpuid(7, 1) | ||||
| 		if X86.HasAVX512 { | ||||
| 			X86.HasAVX512BF16 = isSet(5, eax71) | ||||
| 		} | ||||
| 		if X86.HasAVX { | ||||
| 			X86.HasAVXIFMA = isSet(23, eax71) | ||||
| 			X86.HasAVXVNNI = isSet(4, eax71) | ||||
| 			X86.HasAVXVNNIInt8 = isSet(4, edx71) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func isSet(bitpos uint, value uint32) bool { | ||||
|   | ||||
							
								
								
									
										36
									
								
								vendor/golang.org/x/sys/unix/auxv.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								vendor/golang.org/x/sys/unix/auxv.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // Copyright 2025 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| //go:build go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import ( | ||||
| 	"syscall" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | ||||
| //go:linkname runtime_getAuxv runtime.getAuxv | ||||
| func runtime_getAuxv() []uintptr | ||||
|  | ||||
| // Auxv returns the ELF auxiliary vector as a sequence of key/value pairs. | ||||
| // The returned slice is always a fresh copy, owned by the caller. | ||||
| // It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed, | ||||
| // which happens in some locked-down environments and build modes. | ||||
| func Auxv() ([][2]uintptr, error) { | ||||
| 	vec := runtime_getAuxv() | ||||
| 	vecLen := len(vec) | ||||
|  | ||||
| 	if vecLen == 0 { | ||||
| 		return nil, syscall.ENOENT | ||||
| 	} | ||||
|  | ||||
| 	if vecLen%2 != 0 { | ||||
| 		return nil, syscall.EINVAL | ||||
| 	} | ||||
|  | ||||
| 	result := make([]uintptr, vecLen) | ||||
| 	copy(result, vec) | ||||
| 	return unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil | ||||
| } | ||||
							
								
								
									
										13
									
								
								vendor/golang.org/x/sys/unix/auxv_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/golang.org/x/sys/unix/auxv_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| // Copyright 2025 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| //go:build !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) | ||||
|  | ||||
| package unix | ||||
|  | ||||
| import "syscall" | ||||
|  | ||||
| func Auxv() ([][2]uintptr, error) { | ||||
| 	return nil, syscall.ENOTSUP | ||||
| } | ||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/sys/unix/syscall_dragonfly.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -246,6 +246,18 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e | ||||
| 	return sendfile(outfd, infd, offset, count) | ||||
| } | ||||
|  | ||||
| func Dup3(oldfd, newfd, flags int) error { | ||||
| 	if oldfd == newfd || flags&^O_CLOEXEC != 0 { | ||||
| 		return EINVAL | ||||
| 	} | ||||
| 	how := F_DUP2FD | ||||
| 	if flags&O_CLOEXEC != 0 { | ||||
| 		how = F_DUP2FD_CLOEXEC | ||||
| 	} | ||||
| 	_, err := fcntl(oldfd, how, newfd) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Exposed directly | ||||
|  */ | ||||
|   | ||||
							
								
								
									
										87
									
								
								vendor/golang.org/x/sys/unix/syscall_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										87
									
								
								vendor/golang.org/x/sys/unix/syscall_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1102,3 +1102,90 @@ func (s *Strioctl) SetInt(i int) { | ||||
| func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) { | ||||
| 	return ioctlPtrRet(fd, req, unsafe.Pointer(s)) | ||||
| } | ||||
|  | ||||
| // Ucred Helpers | ||||
| // See ucred(3c) and getpeerucred(3c) | ||||
|  | ||||
| //sys	getpeerucred(fd uintptr, ucred *uintptr) (err error) | ||||
| //sys	ucredFree(ucred uintptr) = ucred_free | ||||
| //sys	ucredGet(pid int) (ucred uintptr, err error) = ucred_get | ||||
| //sys	ucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid | ||||
| //sys	ucredGetegid(ucred uintptr) (gid int) = ucred_getegid | ||||
| //sys	ucredGetruid(ucred uintptr) (uid int) = ucred_getruid | ||||
| //sys	ucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid | ||||
| //sys	ucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid | ||||
| //sys	ucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid | ||||
| //sys	ucredGetpid(ucred uintptr) (pid int) = ucred_getpid | ||||
|  | ||||
| // Ucred is an opaque struct that holds user credentials. | ||||
| type Ucred struct { | ||||
| 	ucred uintptr | ||||
| } | ||||
|  | ||||
| // We need to ensure that ucredFree is called on the underlying ucred | ||||
| // when the Ucred is garbage collected. | ||||
| func ucredFinalizer(u *Ucred) { | ||||
| 	ucredFree(u.ucred) | ||||
| } | ||||
|  | ||||
| func GetPeerUcred(fd uintptr) (*Ucred, error) { | ||||
| 	var ucred uintptr | ||||
| 	err := getpeerucred(fd, &ucred) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	result := &Ucred{ | ||||
| 		ucred: ucred, | ||||
| 	} | ||||
| 	// set the finalizer on the result so that the ucred will be freed | ||||
| 	runtime.SetFinalizer(result, ucredFinalizer) | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| func UcredGet(pid int) (*Ucred, error) { | ||||
| 	ucred, err := ucredGet(pid) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	result := &Ucred{ | ||||
| 		ucred: ucred, | ||||
| 	} | ||||
| 	// set the finalizer on the result so that the ucred will be freed | ||||
| 	runtime.SetFinalizer(result, ucredFinalizer) | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| func (u *Ucred) Geteuid() int { | ||||
| 	defer runtime.KeepAlive(u) | ||||
| 	return ucredGeteuid(u.ucred) | ||||
| } | ||||
|  | ||||
| func (u *Ucred) Getruid() int { | ||||
| 	defer runtime.KeepAlive(u) | ||||
| 	return ucredGetruid(u.ucred) | ||||
| } | ||||
|  | ||||
| func (u *Ucred) Getsuid() int { | ||||
| 	defer runtime.KeepAlive(u) | ||||
| 	return ucredGetsuid(u.ucred) | ||||
| } | ||||
|  | ||||
| func (u *Ucred) Getegid() int { | ||||
| 	defer runtime.KeepAlive(u) | ||||
| 	return ucredGetegid(u.ucred) | ||||
| } | ||||
|  | ||||
| func (u *Ucred) Getrgid() int { | ||||
| 	defer runtime.KeepAlive(u) | ||||
| 	return ucredGetrgid(u.ucred) | ||||
| } | ||||
|  | ||||
| func (u *Ucred) Getsgid() int { | ||||
| 	defer runtime.KeepAlive(u) | ||||
| 	return ucredGetsgid(u.ucred) | ||||
| } | ||||
|  | ||||
| func (u *Ucred) Getpid() int { | ||||
| 	defer runtime.KeepAlive(u) | ||||
| 	return ucredGetpid(u.ucred) | ||||
| } | ||||
|   | ||||
							
								
								
									
										20
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1245,6 +1245,7 @@ const ( | ||||
| 	FAN_REPORT_DFID_NAME                        = 0xc00 | ||||
| 	FAN_REPORT_DFID_NAME_TARGET                 = 0x1e00 | ||||
| 	FAN_REPORT_DIR_FID                          = 0x400 | ||||
| 	FAN_REPORT_FD_ERROR                         = 0x2000 | ||||
| 	FAN_REPORT_FID                              = 0x200 | ||||
| 	FAN_REPORT_NAME                             = 0x800 | ||||
| 	FAN_REPORT_PIDFD                            = 0x80 | ||||
| @@ -1330,8 +1331,10 @@ const ( | ||||
| 	FUSE_SUPER_MAGIC                            = 0x65735546 | ||||
| 	FUTEXFS_SUPER_MAGIC                         = 0xbad1dea | ||||
| 	F_ADD_SEALS                                 = 0x409 | ||||
| 	F_CREATED_QUERY                             = 0x404 | ||||
| 	F_DUPFD                                     = 0x0 | ||||
| 	F_DUPFD_CLOEXEC                             = 0x406 | ||||
| 	F_DUPFD_QUERY                               = 0x403 | ||||
| 	F_EXLCK                                     = 0x4 | ||||
| 	F_GETFD                                     = 0x1 | ||||
| 	F_GETFL                                     = 0x3 | ||||
| @@ -1551,6 +1554,7 @@ const ( | ||||
| 	IPPROTO_ROUTING                             = 0x2b | ||||
| 	IPPROTO_RSVP                                = 0x2e | ||||
| 	IPPROTO_SCTP                                = 0x84 | ||||
| 	IPPROTO_SMC                                 = 0x100 | ||||
| 	IPPROTO_TCP                                 = 0x6 | ||||
| 	IPPROTO_TP                                  = 0x1d | ||||
| 	IPPROTO_UDP                                 = 0x11 | ||||
| @@ -1623,6 +1627,8 @@ const ( | ||||
| 	IPV6_UNICAST_IF                             = 0x4c | ||||
| 	IPV6_USER_FLOW                              = 0xe | ||||
| 	IPV6_V6ONLY                                 = 0x1a | ||||
| 	IPV6_VERSION                                = 0x60 | ||||
| 	IPV6_VERSION_MASK                           = 0xf0 | ||||
| 	IPV6_XFRM_POLICY                            = 0x23 | ||||
| 	IP_ADD_MEMBERSHIP                           = 0x23 | ||||
| 	IP_ADD_SOURCE_MEMBERSHIP                    = 0x27 | ||||
| @@ -1867,6 +1873,7 @@ const ( | ||||
| 	MADV_UNMERGEABLE                            = 0xd | ||||
| 	MADV_WILLNEED                               = 0x3 | ||||
| 	MADV_WIPEONFORK                             = 0x12 | ||||
| 	MAP_DROPPABLE                               = 0x8 | ||||
| 	MAP_FILE                                    = 0x0 | ||||
| 	MAP_FIXED                                   = 0x10 | ||||
| 	MAP_FIXED_NOREPLACE                         = 0x100000 | ||||
| @@ -1967,6 +1974,7 @@ const ( | ||||
| 	MSG_PEEK                                    = 0x2 | ||||
| 	MSG_PROXY                                   = 0x10 | ||||
| 	MSG_RST                                     = 0x1000 | ||||
| 	MSG_SOCK_DEVMEM                             = 0x2000000 | ||||
| 	MSG_SYN                                     = 0x400 | ||||
| 	MSG_TRUNC                                   = 0x20 | ||||
| 	MSG_TRYHARD                                 = 0x4 | ||||
| @@ -2083,6 +2091,7 @@ const ( | ||||
| 	NFC_ATR_REQ_MAXSIZE                         = 0x40 | ||||
| 	NFC_ATR_RES_GB_MAXSIZE                      = 0x2f | ||||
| 	NFC_ATR_RES_MAXSIZE                         = 0x40 | ||||
| 	NFC_ATS_MAXSIZE                             = 0x14 | ||||
| 	NFC_COMM_ACTIVE                             = 0x0 | ||||
| 	NFC_COMM_PASSIVE                            = 0x1 | ||||
| 	NFC_DEVICE_NAME_MAXSIZE                     = 0x8 | ||||
| @@ -2163,6 +2172,7 @@ const ( | ||||
| 	NFNL_SUBSYS_QUEUE                           = 0x3 | ||||
| 	NFNL_SUBSYS_ULOG                            = 0x4 | ||||
| 	NFS_SUPER_MAGIC                             = 0x6969 | ||||
| 	NFT_BITWISE_BOOL                            = 0x0 | ||||
| 	NFT_CHAIN_FLAGS                             = 0x7 | ||||
| 	NFT_CHAIN_MAXNAMELEN                        = 0x100 | ||||
| 	NFT_CT_MAX                                  = 0x17 | ||||
| @@ -2491,6 +2501,7 @@ const ( | ||||
| 	PR_GET_PDEATHSIG                            = 0x2 | ||||
| 	PR_GET_SECCOMP                              = 0x15 | ||||
| 	PR_GET_SECUREBITS                           = 0x1b | ||||
| 	PR_GET_SHADOW_STACK_STATUS                  = 0x4a | ||||
| 	PR_GET_SPECULATION_CTRL                     = 0x34 | ||||
| 	PR_GET_TAGGED_ADDR_CTRL                     = 0x38 | ||||
| 	PR_GET_THP_DISABLE                          = 0x2a | ||||
| @@ -2499,6 +2510,7 @@ const ( | ||||
| 	PR_GET_TIMING                               = 0xd | ||||
| 	PR_GET_TSC                                  = 0x19 | ||||
| 	PR_GET_UNALIGN                              = 0x5 | ||||
| 	PR_LOCK_SHADOW_STACK_STATUS                 = 0x4c | ||||
| 	PR_MCE_KILL                                 = 0x21 | ||||
| 	PR_MCE_KILL_CLEAR                           = 0x0 | ||||
| 	PR_MCE_KILL_DEFAULT                         = 0x2 | ||||
| @@ -2525,6 +2537,8 @@ const ( | ||||
| 	PR_PAC_GET_ENABLED_KEYS                     = 0x3d | ||||
| 	PR_PAC_RESET_KEYS                           = 0x36 | ||||
| 	PR_PAC_SET_ENABLED_KEYS                     = 0x3c | ||||
| 	PR_PMLEN_MASK                               = 0x7f000000 | ||||
| 	PR_PMLEN_SHIFT                              = 0x18 | ||||
| 	PR_PPC_DEXCR_CTRL_CLEAR                     = 0x4 | ||||
| 	PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC              = 0x10 | ||||
| 	PR_PPC_DEXCR_CTRL_EDITABLE                  = 0x1 | ||||
| @@ -2592,6 +2606,7 @@ const ( | ||||
| 	PR_SET_PTRACER                              = 0x59616d61 | ||||
| 	PR_SET_SECCOMP                              = 0x16 | ||||
| 	PR_SET_SECUREBITS                           = 0x1c | ||||
| 	PR_SET_SHADOW_STACK_STATUS                  = 0x4b | ||||
| 	PR_SET_SPECULATION_CTRL                     = 0x35 | ||||
| 	PR_SET_SYSCALL_USER_DISPATCH                = 0x3b | ||||
| 	PR_SET_TAGGED_ADDR_CTRL                     = 0x37 | ||||
| @@ -2602,6 +2617,9 @@ const ( | ||||
| 	PR_SET_UNALIGN                              = 0x6 | ||||
| 	PR_SET_VMA                                  = 0x53564d41 | ||||
| 	PR_SET_VMA_ANON_NAME                        = 0x0 | ||||
| 	PR_SHADOW_STACK_ENABLE                      = 0x1 | ||||
| 	PR_SHADOW_STACK_PUSH                        = 0x4 | ||||
| 	PR_SHADOW_STACK_WRITE                       = 0x2 | ||||
| 	PR_SME_GET_VL                               = 0x40 | ||||
| 	PR_SME_SET_VL                               = 0x3f | ||||
| 	PR_SME_SET_VL_ONEXEC                        = 0x40000 | ||||
| @@ -2911,7 +2929,6 @@ const ( | ||||
| 	RTM_NEWNEXTHOP                              = 0x68 | ||||
| 	RTM_NEWNEXTHOPBUCKET                        = 0x74 | ||||
| 	RTM_NEWNSID                                 = 0x58 | ||||
| 	RTM_NEWNVLAN                                = 0x70 | ||||
| 	RTM_NEWPREFIX                               = 0x34 | ||||
| 	RTM_NEWQDISC                                = 0x24 | ||||
| 	RTM_NEWROUTE                                = 0x18 | ||||
| @@ -2920,6 +2937,7 @@ const ( | ||||
| 	RTM_NEWTCLASS                               = 0x28 | ||||
| 	RTM_NEWTFILTER                              = 0x2c | ||||
| 	RTM_NEWTUNNEL                               = 0x78 | ||||
| 	RTM_NEWVLAN                                 = 0x70 | ||||
| 	RTM_NR_FAMILIES                             = 0x1b | ||||
| 	RTM_NR_MSGTYPES                             = 0x6c | ||||
| 	RTM_SETDCB                                  = 0x4f | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -116,6 +116,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -304,6 +306,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -116,6 +116,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -305,6 +307,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -310,6 +312,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103 | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -109,6 +109,7 @@ const ( | ||||
| 	F_SETOWN                         = 0x8 | ||||
| 	F_UNLCK                          = 0x2 | ||||
| 	F_WRLCK                          = 0x1 | ||||
| 	GCS_MAGIC                        = 0x47435300 | ||||
| 	HIDIOCGRAWINFO                   = 0x80084803 | ||||
| 	HIDIOCGRDESC                     = 0x90044802 | ||||
| 	HIDIOCGRDESCSIZE                 = 0x80044801 | ||||
| @@ -119,6 +120,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -302,6 +305,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -116,6 +116,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -297,6 +299,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x80 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xfffffff | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xfffff | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -303,6 +305,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x80 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xfffffff | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xfffff | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -303,6 +305,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x80 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -303,6 +305,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x80 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -303,6 +305,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xfffffff | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xfffff | ||||
| 	ISIG                             = 0x80 | ||||
| 	IUCLC                            = 0x1000 | ||||
| 	IXOFF                            = 0x400 | ||||
| @@ -358,6 +360,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xfffffff | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xfffff | ||||
| 	ISIG                             = 0x80 | ||||
| 	IUCLC                            = 0x1000 | ||||
| 	IXOFF                            = 0x400 | ||||
| @@ -362,6 +364,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x80 | ||||
| 	IUCLC                            = 0x1000 | ||||
| 	IXOFF                            = 0x400 | ||||
| @@ -362,6 +364,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xffffff0f | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xffff0f00 | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -294,6 +296,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -115,6 +115,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x80000 | ||||
| 	IN_NONBLOCK                      = 0x800 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xfffffff | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xfffff | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -366,6 +368,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x36 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3a | ||||
| 	SCM_TIMESTAMPNS                  = 0x23 | ||||
| 	SCM_TS_OPT_ID                    = 0x51 | ||||
| 	SCM_TXTIME                       = 0x3d | ||||
| 	SCM_WIFI_STATUS                  = 0x29 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103 | ||||
|   | ||||
							
								
								
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -119,6 +119,8 @@ const ( | ||||
| 	IN_CLOEXEC                       = 0x400000 | ||||
| 	IN_NONBLOCK                      = 0x4000 | ||||
| 	IOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9 | ||||
| 	IPV6_FLOWINFO_MASK               = 0xfffffff | ||||
| 	IPV6_FLOWLABEL_MASK              = 0xfffff | ||||
| 	ISIG                             = 0x1 | ||||
| 	IUCLC                            = 0x200 | ||||
| 	IXOFF                            = 0x1000 | ||||
| @@ -357,6 +359,7 @@ const ( | ||||
| 	SCM_TIMESTAMPING_OPT_STATS       = 0x38 | ||||
| 	SCM_TIMESTAMPING_PKTINFO         = 0x3c | ||||
| 	SCM_TIMESTAMPNS                  = 0x21 | ||||
| 	SCM_TS_OPT_ID                    = 0x5a | ||||
| 	SCM_TXTIME                       = 0x3f | ||||
| 	SCM_WIFI_STATUS                  = 0x25 | ||||
| 	SECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103 | ||||
|   | ||||
							
								
								
									
										114
									
								
								vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										114
									
								
								vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -141,6 +141,16 @@ 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_getpeerucred getpeerucred "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_get ucred_get "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_getegid ucred_getegid "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_getruid ucred_getruid "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_getpid ucred_getpid "libc.so" | ||||
| //go:cgo_import_dynamic libc_ucred_free ucred_free "libc.so" | ||||
| //go:cgo_import_dynamic libc_port_create port_create "libc.so" | ||||
| //go:cgo_import_dynamic libc_port_associate port_associate "libc.so" | ||||
| //go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so" | ||||
| @@ -280,6 +290,16 @@ import ( | ||||
| //go:linkname procgetpeername libc_getpeername | ||||
| //go:linkname procsetsockopt libc_setsockopt | ||||
| //go:linkname procrecvfrom libc_recvfrom | ||||
| //go:linkname procgetpeerucred libc_getpeerucred | ||||
| //go:linkname procucred_get libc_ucred_get | ||||
| //go:linkname procucred_geteuid libc_ucred_geteuid | ||||
| //go:linkname procucred_getegid libc_ucred_getegid | ||||
| //go:linkname procucred_getruid libc_ucred_getruid | ||||
| //go:linkname procucred_getrgid libc_ucred_getrgid | ||||
| //go:linkname procucred_getsuid libc_ucred_getsuid | ||||
| //go:linkname procucred_getsgid libc_ucred_getsgid | ||||
| //go:linkname procucred_getpid libc_ucred_getpid | ||||
| //go:linkname procucred_free libc_ucred_free | ||||
| //go:linkname procport_create libc_port_create | ||||
| //go:linkname procport_associate libc_port_associate | ||||
| //go:linkname procport_dissociate libc_port_dissociate | ||||
| @@ -420,6 +440,16 @@ var ( | ||||
| 	procgetpeername, | ||||
| 	procsetsockopt, | ||||
| 	procrecvfrom, | ||||
| 	procgetpeerucred, | ||||
| 	procucred_get, | ||||
| 	procucred_geteuid, | ||||
| 	procucred_getegid, | ||||
| 	procucred_getruid, | ||||
| 	procucred_getrgid, | ||||
| 	procucred_getsuid, | ||||
| 	procucred_getsgid, | ||||
| 	procucred_getpid, | ||||
| 	procucred_free, | ||||
| 	procport_create, | ||||
| 	procport_associate, | ||||
| 	procport_dissociate, | ||||
| @@ -2029,6 +2059,90 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func getpeerucred(fd uintptr, ucred *uintptr) (err error) { | ||||
| 	_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0) | ||||
| 	if e1 != 0 { | ||||
| 		err = errnoErr(e1) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGet(pid int) (ucred uintptr, err error) { | ||||
| 	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0) | ||||
| 	ucred = uintptr(r0) | ||||
| 	if e1 != 0 { | ||||
| 		err = errnoErr(e1) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGeteuid(ucred uintptr) (uid int) { | ||||
| 	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	uid = int(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGetegid(ucred uintptr) (gid int) { | ||||
| 	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	gid = int(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGetruid(ucred uintptr) (uid int) { | ||||
| 	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	uid = int(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGetrgid(ucred uintptr) (gid int) { | ||||
| 	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	gid = int(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGetsuid(ucred uintptr) (uid int) { | ||||
| 	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	uid = int(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGetsgid(ucred uintptr) (gid int) { | ||||
| 	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	gid = int(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredGetpid(ucred uintptr) (pid int) { | ||||
| 	r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	pid = int(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func ucredFree(ucred uintptr) { | ||||
| 	sysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | ||||
|  | ||||
| func port_create() (n int, err error) { | ||||
| 	r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) | ||||
| 	n = int(r0) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_386.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -458,4 +458,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR            = 460 | ||||
| 	SYS_LSM_LIST_MODULES             = 461 | ||||
| 	SYS_MSEAL                        = 462 | ||||
| 	SYS_SETXATTRAT                   = 463 | ||||
| 	SYS_GETXATTRAT                   = 464 | ||||
| 	SYS_LISTXATTRAT                  = 465 | ||||
| 	SYS_REMOVEXATTRAT                = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -381,4 +381,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -422,4 +422,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR            = 460 | ||||
| 	SYS_LSM_LIST_MODULES             = 461 | ||||
| 	SYS_MSEAL                        = 462 | ||||
| 	SYS_SETXATTRAT                   = 463 | ||||
| 	SYS_GETXATTRAT                   = 464 | ||||
| 	SYS_LISTXATTRAT                  = 465 | ||||
| 	SYS_REMOVEXATTRAT                = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -325,4 +325,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -321,4 +321,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -442,4 +442,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR            = 4460 | ||||
| 	SYS_LSM_LIST_MODULES             = 4461 | ||||
| 	SYS_MSEAL                        = 4462 | ||||
| 	SYS_SETXATTRAT                   = 4463 | ||||
| 	SYS_GETXATTRAT                   = 4464 | ||||
| 	SYS_LISTXATTRAT                  = 4465 | ||||
| 	SYS_REMOVEXATTRAT                = 4466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -372,4 +372,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 5460 | ||||
| 	SYS_LSM_LIST_MODULES        = 5461 | ||||
| 	SYS_MSEAL                   = 5462 | ||||
| 	SYS_SETXATTRAT              = 5463 | ||||
| 	SYS_GETXATTRAT              = 5464 | ||||
| 	SYS_LISTXATTRAT             = 5465 | ||||
| 	SYS_REMOVEXATTRAT           = 5466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -372,4 +372,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 5460 | ||||
| 	SYS_LSM_LIST_MODULES        = 5461 | ||||
| 	SYS_MSEAL                   = 5462 | ||||
| 	SYS_SETXATTRAT              = 5463 | ||||
| 	SYS_GETXATTRAT              = 5464 | ||||
| 	SYS_LISTXATTRAT             = 5465 | ||||
| 	SYS_REMOVEXATTRAT           = 5466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -442,4 +442,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR            = 4460 | ||||
| 	SYS_LSM_LIST_MODULES             = 4461 | ||||
| 	SYS_MSEAL                        = 4462 | ||||
| 	SYS_SETXATTRAT                   = 4463 | ||||
| 	SYS_GETXATTRAT                   = 4464 | ||||
| 	SYS_LISTXATTRAT                  = 4465 | ||||
| 	SYS_REMOVEXATTRAT                = 4466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -449,4 +449,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR            = 460 | ||||
| 	SYS_LSM_LIST_MODULES             = 461 | ||||
| 	SYS_MSEAL                        = 462 | ||||
| 	SYS_SETXATTRAT                   = 463 | ||||
| 	SYS_GETXATTRAT                   = 464 | ||||
| 	SYS_LISTXATTRAT                  = 465 | ||||
| 	SYS_REMOVEXATTRAT                = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -421,4 +421,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -421,4 +421,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -326,4 +326,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -387,4 +387,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -400,4 +400,8 @@ const ( | ||||
| 	SYS_LSM_SET_SELF_ATTR       = 460 | ||||
| 	SYS_LSM_LIST_MODULES        = 461 | ||||
| 	SYS_MSEAL                   = 462 | ||||
| 	SYS_SETXATTRAT              = 463 | ||||
| 	SYS_GETXATTRAT              = 464 | ||||
| 	SYS_LISTXATTRAT             = 465 | ||||
| 	SYS_REMOVEXATTRAT           = 466 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										6
									
								
								vendor/golang.org/x/sys/unix/ztypes_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/golang.org/x/sys/unix/ztypes_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -4747,7 +4747,7 @@ const ( | ||||
| 	NL80211_ATTR_MAC_HINT                                   = 0xc8 | ||||
| 	NL80211_ATTR_MAC_MASK                                   = 0xd7 | ||||
| 	NL80211_ATTR_MAX_AP_ASSOC_STA                           = 0xca | ||||
| 	NL80211_ATTR_MAX                                        = 0x14c | ||||
| 	NL80211_ATTR_MAX                                        = 0x14d | ||||
| 	NL80211_ATTR_MAX_CRIT_PROT_DURATION                     = 0xb4 | ||||
| 	NL80211_ATTR_MAX_CSA_COUNTERS                           = 0xce | ||||
| 	NL80211_ATTR_MAX_MATCH_SETS                             = 0x85 | ||||
| @@ -5519,7 +5519,7 @@ const ( | ||||
| 	NL80211_MNTR_FLAG_CONTROL                               = 0x3 | ||||
| 	NL80211_MNTR_FLAG_COOK_FRAMES                           = 0x5 | ||||
| 	NL80211_MNTR_FLAG_FCSFAIL                               = 0x1 | ||||
| 	NL80211_MNTR_FLAG_MAX                                   = 0x6 | ||||
| 	NL80211_MNTR_FLAG_MAX                                   = 0x7 | ||||
| 	NL80211_MNTR_FLAG_OTHER_BSS                             = 0x4 | ||||
| 	NL80211_MNTR_FLAG_PLCPFAIL                              = 0x2 | ||||
| 	NL80211_MPATH_FLAG_ACTIVE                               = 0x1 | ||||
| @@ -6174,3 +6174,5 @@ type SockDiagReq struct { | ||||
| 	Family   uint8 | ||||
| 	Protocol uint8 | ||||
| } | ||||
|  | ||||
| const RTM_NEWNVLAN = 0x70 | ||||
|   | ||||
							
								
								
									
										11
									
								
								vendor/golang.org/x/sys/windows/dll_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/golang.org/x/sys/windows/dll_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -43,8 +43,8 @@ type DLL struct { | ||||
| // LoadDLL loads DLL file into memory. | ||||
| // | ||||
| // Warning: using LoadDLL without an absolute path name is subject to | ||||
| // DLL preloading attacks. To safely load a system DLL, use LazyDLL | ||||
| // with System set to true, or use LoadLibraryEx directly. | ||||
| // DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL], | ||||
| // or use [LoadLibraryEx] directly. | ||||
| func LoadDLL(name string) (dll *DLL, err error) { | ||||
| 	namep, err := UTF16PtrFromString(name) | ||||
| 	if err != nil { | ||||
| @@ -271,6 +271,9 @@ func (d *LazyDLL) NewProc(name string) *LazyProc { | ||||
| } | ||||
|  | ||||
| // NewLazyDLL creates new LazyDLL associated with DLL file. | ||||
| // | ||||
| // Warning: using NewLazyDLL without an absolute path name is subject to | ||||
| // DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL]. | ||||
| func NewLazyDLL(name string) *LazyDLL { | ||||
| 	return &LazyDLL{Name: name} | ||||
| } | ||||
| @@ -410,7 +413,3 @@ func loadLibraryEx(name string, system bool) (*DLL, error) { | ||||
| 	} | ||||
| 	return &DLL{Name: name, Handle: h}, nil | ||||
| } | ||||
|  | ||||
| type errString string | ||||
|  | ||||
| func (s errString) Error() string { return string(s) } | ||||
|   | ||||
							
								
								
									
										35
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -318,7 +318,7 @@ github.com/fsnotify/fsnotify | ||||
| # github.com/fxamacker/cbor/v2 v2.7.0 | ||||
| ## explicit; go 1.17 | ||||
| github.com/fxamacker/cbor/v2 | ||||
| # github.com/go-jose/go-jose/v4 v4.0.4 | ||||
| # github.com/go-jose/go-jose/v4 v4.0.5 | ||||
| ## explicit; go 1.21 | ||||
| github.com/go-jose/go-jose/v4 | ||||
| github.com/go-jose/go-jose/v4/cipher | ||||
| @@ -675,8 +675,8 @@ go.opentelemetry.io/proto/otlp/collector/trace/v1 | ||||
| go.opentelemetry.io/proto/otlp/common/v1 | ||||
| go.opentelemetry.io/proto/otlp/resource/v1 | ||||
| go.opentelemetry.io/proto/otlp/trace/v1 | ||||
| # golang.org/x/crypto v0.31.0 | ||||
| ## explicit; go 1.20 | ||||
| # golang.org/x/crypto v0.36.0 | ||||
| ## explicit; go 1.23.0 | ||||
| golang.org/x/crypto/cast5 | ||||
| golang.org/x/crypto/cryptobyte | ||||
| golang.org/x/crypto/cryptobyte/asn1 | ||||
| @@ -695,8 +695,8 @@ golang.org/x/exp/slices | ||||
| # golang.org/x/mod v0.21.0 | ||||
| ## explicit; go 1.22.0 | ||||
| golang.org/x/mod/semver | ||||
| # golang.org/x/net v0.33.0 | ||||
| ## explicit; go 1.18 | ||||
| # golang.org/x/net v0.37.0 | ||||
| ## explicit; go 1.23.0 | ||||
| golang.org/x/net/bpf | ||||
| golang.org/x/net/html | ||||
| golang.org/x/net/html/atom | ||||
| @@ -704,22 +704,23 @@ golang.org/x/net/http/httpguts | ||||
| golang.org/x/net/http2 | ||||
| golang.org/x/net/http2/hpack | ||||
| golang.org/x/net/idna | ||||
| golang.org/x/net/internal/httpcommon | ||||
| golang.org/x/net/internal/socks | ||||
| golang.org/x/net/internal/timeseries | ||||
| golang.org/x/net/proxy | ||||
| golang.org/x/net/trace | ||||
| golang.org/x/net/websocket | ||||
| # golang.org/x/oauth2 v0.23.0 | ||||
| ## explicit; go 1.18 | ||||
| # golang.org/x/oauth2 v0.28.0 | ||||
| ## explicit; go 1.23.0 | ||||
| golang.org/x/oauth2 | ||||
| golang.org/x/oauth2/internal | ||||
| # golang.org/x/sync v0.10.0 | ||||
| ## explicit; go 1.18 | ||||
| # golang.org/x/sync v0.12.0 | ||||
| ## explicit; go 1.23.0 | ||||
| golang.org/x/sync/errgroup | ||||
| golang.org/x/sync/semaphore | ||||
| golang.org/x/sync/singleflight | ||||
| # golang.org/x/sys v0.28.0 | ||||
| ## explicit; go 1.18 | ||||
| # golang.org/x/sys v0.31.0 | ||||
| ## explicit; go 1.23.0 | ||||
| golang.org/x/sys/cpu | ||||
| golang.org/x/sys/execabs | ||||
| golang.org/x/sys/plan9 | ||||
| @@ -729,11 +730,11 @@ golang.org/x/sys/windows/registry | ||||
| golang.org/x/sys/windows/svc | ||||
| golang.org/x/sys/windows/svc/debug | ||||
| golang.org/x/sys/windows/svc/mgr | ||||
| # golang.org/x/term v0.27.0 | ||||
| ## explicit; go 1.18 | ||||
| # golang.org/x/term v0.30.0 | ||||
| ## explicit; go 1.23.0 | ||||
| golang.org/x/term | ||||
| # golang.org/x/text v0.21.0 | ||||
| ## explicit; go 1.18 | ||||
| # golang.org/x/text v0.23.0 | ||||
| ## explicit; go 1.23.0 | ||||
| golang.org/x/text/secure/bidirule | ||||
| golang.org/x/text/transform | ||||
| golang.org/x/text/unicode/bidi | ||||
| @@ -1183,12 +1184,12 @@ sigs.k8s.io/structured-merge-diff/v4/value | ||||
| ## explicit; go 1.12 | ||||
| sigs.k8s.io/yaml | ||||
| sigs.k8s.io/yaml/goyaml.v2 | ||||
| # tags.cncf.io/container-device-interface v0.8.1 | ||||
| # tags.cncf.io/container-device-interface v1.0.0 | ||||
| ## explicit; go 1.20 | ||||
| tags.cncf.io/container-device-interface/internal/validation | ||||
| tags.cncf.io/container-device-interface/internal/validation/k8s | ||||
| tags.cncf.io/container-device-interface/pkg/cdi | ||||
| tags.cncf.io/container-device-interface/pkg/parser | ||||
| # tags.cncf.io/container-device-interface/specs-go v0.8.0 | ||||
| # tags.cncf.io/container-device-interface/specs-go v1.0.0 | ||||
| ## explicit; go 1.19 | ||||
| tags.cncf.io/container-device-interface/specs-go | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/annotations.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/annotations.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -71,7 +71,7 @@ func ParseAnnotations(annotations map[string]string) ([]string, []string, error) | ||||
| 			continue | ||||
| 		} | ||||
| 		for _, d := range strings.Split(value, ",") { | ||||
| 			if !IsQualifiedName(d) { | ||||
| 			if !parser.IsQualifiedName(d) { | ||||
| 				return nil, nil, fmt.Errorf("invalid CDI device name %q", d) | ||||
| 			} | ||||
| 			devices = append(devices, d) | ||||
| @@ -130,7 +130,7 @@ func AnnotationKey(pluginName, deviceID string) (string, error) { | ||||
| func AnnotationValue(devices []string) (string, error) { | ||||
| 	value, sep := "", "" | ||||
| 	for _, d := range devices { | ||||
| 		if _, _, _, err := ParseQualifiedName(d); err != nil { | ||||
| 		if _, _, _, err := parser.ParseQualifiedName(d); err != nil { | ||||
| 			return "", err | ||||
| 		} | ||||
| 		value += sep + d | ||||
|   | ||||
							
								
								
									
										47
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -22,6 +22,7 @@ import ( | ||||
| 	"io/fs" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"runtime" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| @@ -116,7 +117,7 @@ func (c *Cache) configure(options ...Option) { | ||||
| 		c.watch.setup(c.specDirs, c.dirErrors) | ||||
| 		c.watch.start(&c.Mutex, c.refresh, c.dirErrors) | ||||
| 	} | ||||
| 	c.refresh() | ||||
| 	_ = c.refresh() // we record but ignore errors | ||||
| } | ||||
|  | ||||
| // Refresh rescans the CDI Spec directories and refreshes the Cache. | ||||
| @@ -222,7 +223,8 @@ func (c *Cache) refreshIfRequired(force bool) (bool, error) { | ||||
|  | ||||
| // InjectDevices injects the given qualified devices to an OCI Spec. It | ||||
| // returns any unresolvable devices and an error if injection fails for | ||||
| // any of the devices. | ||||
| // any of the devices. Might trigger a cache refresh, in which case any | ||||
| // errors encountered can be obtained using GetErrors(). | ||||
| func (c *Cache) InjectDevices(ociSpec *oci.Spec, devices ...string) ([]string, error) { | ||||
| 	var unresolved []string | ||||
|  | ||||
| @@ -233,7 +235,7 @@ func (c *Cache) InjectDevices(ociSpec *oci.Spec, devices ...string) ([]string, e | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
|  | ||||
| 	c.refreshIfRequired(false) | ||||
| 	_, _ = c.refreshIfRequired(false) // we record but ignore errors | ||||
|  | ||||
| 	edits := &ContainerEdits{} | ||||
| 	specs := map[*Spec]struct{}{} | ||||
| @@ -335,24 +337,27 @@ func (c *Cache) RemoveSpec(name string) error { | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // GetDevice returns the cached device for the given qualified name. | ||||
| // GetDevice returns the cached device for the given qualified name. Might trigger | ||||
| // a cache refresh, in which case any errors encountered can be obtained using | ||||
| // GetErrors(). | ||||
| func (c *Cache) GetDevice(device string) *Device { | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
|  | ||||
| 	c.refreshIfRequired(false) | ||||
| 	_, _ = c.refreshIfRequired(false) // we record but ignore errors | ||||
|  | ||||
| 	return c.devices[device] | ||||
| } | ||||
|  | ||||
| // ListDevices lists all cached devices by qualified name. | ||||
| // ListDevices lists all cached devices by qualified name. Might trigger a cache | ||||
| // refresh, in which case any errors encountered can be obtained using GetErrors(). | ||||
| func (c *Cache) ListDevices() []string { | ||||
| 	var devices []string | ||||
|  | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
|  | ||||
| 	c.refreshIfRequired(false) | ||||
| 	_, _ = c.refreshIfRequired(false) // we record but ignore errors | ||||
|  | ||||
| 	for name := range c.devices { | ||||
| 		devices = append(devices, name) | ||||
| @@ -362,14 +367,15 @@ func (c *Cache) ListDevices() []string { | ||||
| 	return devices | ||||
| } | ||||
|  | ||||
| // ListVendors lists all vendors known to the cache. | ||||
| // ListVendors lists all vendors known to the cache. Might trigger a cache refresh, | ||||
| // in which case any errors encountered can be obtained using GetErrors(). | ||||
| func (c *Cache) ListVendors() []string { | ||||
| 	var vendors []string | ||||
|  | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
|  | ||||
| 	c.refreshIfRequired(false) | ||||
| 	_, _ = c.refreshIfRequired(false) // we record but ignore errors | ||||
|  | ||||
| 	for vendor := range c.specs { | ||||
| 		vendors = append(vendors, vendor) | ||||
| @@ -379,7 +385,8 @@ func (c *Cache) ListVendors() []string { | ||||
| 	return vendors | ||||
| } | ||||
|  | ||||
| // ListClasses lists all device classes known to the cache. | ||||
| // ListClasses lists all device classes known to the cache. Might trigger a cache | ||||
| // refresh, in which case any errors encountered can be obtained using GetErrors(). | ||||
| func (c *Cache) ListClasses() []string { | ||||
| 	var ( | ||||
| 		cmap    = map[string]struct{}{} | ||||
| @@ -389,7 +396,7 @@ func (c *Cache) ListClasses() []string { | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
|  | ||||
| 	c.refreshIfRequired(false) | ||||
| 	_, _ = c.refreshIfRequired(false) // we record but ignore errors | ||||
|  | ||||
| 	for _, specs := range c.specs { | ||||
| 		for _, spec := range specs { | ||||
| @@ -404,12 +411,13 @@ func (c *Cache) ListClasses() []string { | ||||
| 	return classes | ||||
| } | ||||
|  | ||||
| // GetVendorSpecs returns all specs for the given vendor. | ||||
| // GetVendorSpecs returns all specs for the given vendor. Might trigger a cache | ||||
| // refresh, in which case any errors encountered can be obtained using GetErrors(). | ||||
| func (c *Cache) GetVendorSpecs(vendor string) []*Spec { | ||||
| 	c.Lock() | ||||
| 	defer c.Unlock() | ||||
|  | ||||
| 	c.refreshIfRequired(false) | ||||
| 	_, _ = c.refreshIfRequired(false) // we record but ignore errors | ||||
|  | ||||
| 	return c.specs[vendor] | ||||
| } | ||||
| @@ -522,6 +530,13 @@ func (w *watch) watch(fsw *fsnotify.Watcher, m *sync.Mutex, refresh func() error | ||||
| 	if watch == nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	eventMask := fsnotify.Rename | fsnotify.Remove | fsnotify.Write | ||||
| 	// On macOS, we also need to watch for Create events. | ||||
| 	if runtime.GOOS == "darwin" { | ||||
| 		eventMask |= fsnotify.Create | ||||
| 	} | ||||
|  | ||||
| 	for { | ||||
| 		select { | ||||
| 		case event, ok := <-watch.Events: | ||||
| @@ -529,10 +544,10 @@ func (w *watch) watch(fsw *fsnotify.Watcher, m *sync.Mutex, refresh func() error | ||||
| 				return | ||||
| 			} | ||||
|  | ||||
| 			if (event.Op & (fsnotify.Rename | fsnotify.Remove | fsnotify.Write)) == 0 { | ||||
| 			if (event.Op & eventMask) == 0 { | ||||
| 				continue | ||||
| 			} | ||||
| 			if event.Op == fsnotify.Write { | ||||
| 			if event.Op == fsnotify.Write || event.Op == fsnotify.Create { | ||||
| 				if ext := filepath.Ext(event.Name); ext != ".json" && ext != ".yaml" { | ||||
| 					continue | ||||
| 				} | ||||
| @@ -544,7 +559,7 @@ func (w *watch) watch(fsw *fsnotify.Watcher, m *sync.Mutex, refresh func() error | ||||
| 			} else { | ||||
| 				w.update(dirErrors) | ||||
| 			} | ||||
| 			refresh() | ||||
| 			_ = refresh() | ||||
| 			m.Unlock() | ||||
|  | ||||
| 		case _, ok := <-watch.Errors: | ||||
|   | ||||
							
								
								
									
										26
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_darwin.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| //go:build darwin | ||||
| // +build darwin | ||||
|  | ||||
| /* | ||||
|    Copyright © 2021 The CDI Authors | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package cdi | ||||
|  | ||||
| import "syscall" | ||||
|  | ||||
| func osSync() { | ||||
| 	_ = syscall.Sync() | ||||
| } | ||||
							
								
								
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/cache_test_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
| //go:build !windows && !darwin | ||||
| // +build !windows,!darwin | ||||
|  | ||||
| /* | ||||
|    Copyright © 2021 The CDI Authors | ||||
|   | ||||
							
								
								
									
										27
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/container-edits.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -26,7 +26,7 @@ import ( | ||||
|  | ||||
| 	oci "github.com/opencontainers/runtime-spec/specs-go" | ||||
| 	ocigen "github.com/opencontainers/runtime-tools/generate" | ||||
| 	"tags.cncf.io/container-device-interface/specs-go" | ||||
| 	cdi "tags.cncf.io/container-device-interface/specs-go" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -64,7 +64,7 @@ var ( | ||||
| // to all OCI Specs where at least one devices from the CDI Spec | ||||
| // is injected. | ||||
| type ContainerEdits struct { | ||||
| 	*specs.ContainerEdits | ||||
| 	*cdi.ContainerEdits | ||||
| } | ||||
|  | ||||
| // Apply edits to the given OCI Spec. Updates the OCI Spec in place. | ||||
| @@ -205,7 +205,7 @@ func (e *ContainerEdits) Append(o *ContainerEdits) *ContainerEdits { | ||||
| 		e = &ContainerEdits{} | ||||
| 	} | ||||
| 	if e.ContainerEdits == nil { | ||||
| 		e.ContainerEdits = &specs.ContainerEdits{} | ||||
| 		e.ContainerEdits = &cdi.ContainerEdits{} | ||||
| 	} | ||||
|  | ||||
| 	e.Env = append(e.Env, o.Env...) | ||||
| @@ -259,7 +259,7 @@ func ValidateEnv(env []string) error { | ||||
|  | ||||
| // DeviceNode is a CDI Spec DeviceNode wrapper, used for validating DeviceNodes. | ||||
| type DeviceNode struct { | ||||
| 	*specs.DeviceNode | ||||
| 	*cdi.DeviceNode | ||||
| } | ||||
|  | ||||
| // Validate a CDI Spec DeviceNode. | ||||
| @@ -289,7 +289,7 @@ func (d *DeviceNode) Validate() error { | ||||
|  | ||||
| // Hook is a CDI Spec Hook wrapper, used for validating hooks. | ||||
| type Hook struct { | ||||
| 	*specs.Hook | ||||
| 	*cdi.Hook | ||||
| } | ||||
|  | ||||
| // Validate a hook. | ||||
| @@ -308,7 +308,7 @@ func (h *Hook) Validate() error { | ||||
|  | ||||
| // Mount is a CDI Mount wrapper, used for validating mounts. | ||||
| type Mount struct { | ||||
| 	*specs.Mount | ||||
| 	*cdi.Mount | ||||
| } | ||||
|  | ||||
| // Validate a mount. | ||||
| @@ -325,13 +325,13 @@ func (m *Mount) Validate() error { | ||||
| // IntelRdt is a CDI IntelRdt wrapper. | ||||
| // This is used for validation and conversion to OCI specifications. | ||||
| type IntelRdt struct { | ||||
| 	*specs.IntelRdt | ||||
| 	*cdi.IntelRdt | ||||
| } | ||||
|  | ||||
| // ValidateIntelRdt validates the IntelRdt configuration. | ||||
| // | ||||
| // Deprecated: ValidateIntelRdt is deprecated use IntelRdt.Validate() instead. | ||||
| func ValidateIntelRdt(i *specs.IntelRdt) error { | ||||
| func ValidateIntelRdt(i *cdi.IntelRdt) error { | ||||
| 	return (&IntelRdt{i}).Validate() | ||||
| } | ||||
|  | ||||
| @@ -355,7 +355,7 @@ func ensureOCIHooks(spec *oci.Spec) { | ||||
| func sortMounts(specgen *ocigen.Generator) { | ||||
| 	mounts := specgen.Mounts() | ||||
| 	specgen.ClearMounts() | ||||
| 	sort.Sort(orderedMounts(mounts)) | ||||
| 	sort.Stable(orderedMounts(mounts)) | ||||
| 	specgen.Config.Mounts = mounts | ||||
| } | ||||
|  | ||||
| @@ -375,14 +375,7 @@ func (m orderedMounts) Len() int { | ||||
| // mount indexed by parameter 1 is less than that of the mount indexed by | ||||
| // parameter 2. Used in sorting. | ||||
| func (m orderedMounts) Less(i, j int) bool { | ||||
| 	ip, jp := m.parts(i), m.parts(j) | ||||
| 	if ip < jp { | ||||
| 		return true | ||||
| 	} | ||||
| 	if jp < ip { | ||||
| 		return false | ||||
| 	} | ||||
| 	return m[i].Destination < m[j].Destination | ||||
| 	return m.parts(i) < m.parts(j) | ||||
| } | ||||
|  | ||||
| // Swap swaps two items in an array of mounts. Used in sorting | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/device.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/tags.cncf.io/container-device-interface/pkg/cdi/device.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -67,7 +67,7 @@ func (d *Device) edits() *ContainerEdits { | ||||
|  | ||||
| // Validate the device. | ||||
| func (d *Device) validate() error { | ||||
| 	if err := ValidateDeviceName(d.Name); err != nil { | ||||
| 	if err := parser.ValidateDeviceName(d.Name); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	name := d.Name | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user