From a215f87e2314ba9bbdfbd6da98a1c273e9a05e9b Mon Sep 17 00:00:00 2001 From: Hui Zhu Date: Mon, 16 Dec 2019 14:52:12 +0800 Subject: [PATCH] vendor: Update github.com/kata-containers/agent to handle hvsock issue Update github.com/kata-containers/agent to handle hvsock issue. Shortlog: 33f3208 client.go: HybridVSockDialer: Close dup fd after receive packet 74a3b95 release: Kata Containers 1.10.0-rc0 afd0871 ci: install docker before configure c502552 client.go: HybridVSockDialer: Check return size n of unix.Recvfrom f8e4ce8 client.go: HybridVSockDialer: Change Read EOT to recv peek 5b64d42 agent: get current cpuset from /sys/devices/system/cpu/online 183a24a release: Kata Containers 1.10.0-alpha1 1ee8516 config: add option to control hotplug timeout of block devices 40567f6 release: Kata Containers 1.10.0-alpha0 19bee57 agent: connect debugging console in a specific vsock port 8361150 docs: Add enable services and installation steps for TRACING.md a4f7373 agent: fix pause bin on musl f9f129a docs: Add missing steps at TRACING.md d3e66bf tracing: Wrapper for tracing functions 7a7dba7 network: ensure parent directories exist 455f728 tracing: Generate an alias for opentracing.Span 5f302e5 agent: Revert "client: remove the parameter of 'enableYamux'" 717ee24 client: remove the parameter of 'enableYamux' d387c77 vendor: Update github.com/syndtr/gocapability/capability b3d737b vendor: update libcontainer to 1.0.0-rc9 6eac713 release: Kata Containers 1.9.0-rc0 Fixes: #2284 Signed-off-by: Hui Zhu --- Gopkg.lock | 4 +-- Gopkg.toml | 2 +- .../agent/protocols/client/client.go | 27 ++++++++++++++----- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index d56247e29d..cf1c76503b 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -405,7 +405,7 @@ revision = "8cba5a8e5f2816f26f9dc34b8ea968279a5a76eb" [[projects]] - digest = "1:903bfb87f41dc18a533d327b5b03fd2f562f34deafcbd0db93d4be3fa8d6099c" + digest = "1:6da9487ef0cc0cca3eeb1a24e3bb018ce2e07b7c2fc4d50975b54efdcc942118" name = "github.com/kata-containers/agent" packages = [ "pkg/types", @@ -413,7 +413,7 @@ "protocols/grpc", ] pruneopts = "NUT" - revision = "32c87e75c2e4c014961f104c3c59b87f2aee3384" + revision = "6182fa34c64ba6eb1b6028d8b6647a86844129c4" [[projects]] branch = "master" diff --git a/Gopkg.toml b/Gopkg.toml index 489242f216..0fbc6fe385 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -52,7 +52,7 @@ [[constraint]] name = "github.com/kata-containers/agent" - revision = "32c87e75c2e4c014961f104c3c59b87f2aee3384" + revision = "6182fa34c64ba6eb1b6028d8b6647a86844129c4" [[constraint]] name = "github.com/containerd/cri-containerd" diff --git a/vendor/github.com/kata-containers/agent/protocols/client/client.go b/vendor/github.com/kata-containers/agent/protocols/client/client.go index 911c252ef8..43b9a94525 100644 --- a/vendor/github.com/kata-containers/agent/protocols/client/client.go +++ b/vendor/github.com/kata-containers/agent/protocols/client/client.go @@ -9,16 +9,19 @@ package client import ( "context" "fmt" + "io" "net" "net/url" "strconv" "strings" + "syscall" "time" "github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc" "github.com/hashicorp/yamux" "github.com/mdlayher/vsock" opentracing "github.com/opentracing/opentracing-go" + "golang.org/x/sys/unix" "google.golang.org/grpc" "google.golang.org/grpc/codes" grpcStatus "google.golang.org/grpc/status" @@ -407,12 +410,24 @@ func HybridVSockDialer(sock string, timeout time.Duration) (net.Conn, error) { return nil, err } - // Read EOT (End of transmission) byte - eot := make([]byte, 32) - if _, err = conn.Read(eot); err != nil { - // Just close the connection, gRPC will dial again - // without errors - conn.Close() + // Receive the packet from the connection without removing it from + // the receive queue (MSG_PEEK), ensuring the connection is usable. + if uc, ok := conn.(*net.UnixConn); ok { + file, err := uc.File() + if err != nil { + conn.Close() + return nil, err + } + eot := make([]byte, 1) + n, _, err := unix.Recvfrom(int(file.Fd()), eot, syscall.MSG_PEEK) + file.Close() + if err != nil || n == 0 { + conn.Close() + if err == nil { + err = io.EOF + } + return nil, err + } } return conn, nil