kata-containers/runtime/patches/0073-write-exit-code-in-integer-byte-order.patch
holyfei c709612f2a kata-containers: modify kata-containers version
Fix #I4KI81
reason: modify kata-containers version and update
it to 1.11.1

Signed-off-by: holyfei <yangfeiyu20092010@163.com>
2021-11-30 20:08:25 +08:00

79 lines
2.0 KiB
Diff

From 3282a8bb49fff14b1eb9742544803255bfa82a82 Mon Sep 17 00:00:00 2001
From: gaohuatao <gaohuatao@huawei.com>
Date: Wed, 12 May 2021 17:17:41 +0800
Subject: [PATCH] write exit code in integer byte order
reason: write exit code in integer byte order just to adapt iSulad
Signed-off-by: gaohuatao <gaohuatao@huawei.com>
---
containerd-shim-v2/service.go | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/containerd-shim-v2/service.go b/containerd-shim-v2/service.go
index c85eb24..9c40f43 100644
--- a/containerd-shim-v2/service.go
+++ b/containerd-shim-v2/service.go
@@ -6,14 +6,16 @@
package containerdshim
import (
+ "bytes"
"context"
+ "encoding/binary"
"io/ioutil"
"os"
sysexec "os/exec"
- "strconv"
"sync"
"syscall"
"time"
+ "unsafe"
eventstypes "github.com/containerd/containerd/api/events"
"github.com/containerd/containerd/api/types/task"
@@ -893,6 +895,12 @@ func (s *service) processExits() {
}
}
+func isBigEndian() (ret bool) {
+ i := int(0x1)
+ bs := (*[int(unsafe.Sizeof(i))]byte)(unsafe.Pointer(&i))
+ return bs[0] == 0
+}
+
func (s *service) closeExitFifo(e exit) {
if e.execid != "" {
// not a container, no need to close exit fifo
@@ -900,6 +908,7 @@ func (s *service) closeExitFifo(e exit) {
}
var ret uint32
+ var nativeEndian binary.ByteOrder
s.mu.Lock()
c, err := s.getContainer(e.id)
@@ -914,9 +923,17 @@ func (s *service) closeExitFifo(e exit) {
// refill the exitCh with the container process's exit code in case
// there were other waits on this process.
c.exitCh <- ret
- exitStr := strconv.FormatUint(uint64(ret), 10)
+
+ if isBigEndian() {
+ nativeEndian = binary.BigEndian
+ } else {
+ nativeEndian = binary.LittleEndian
+ }
+
+ bytesBuffer := bytes.NewBuffer([]byte{})
+ binary.Write(bytesBuffer, nativeEndian, &ret)
- _, err = c.exitFd.Write([]byte(exitStr))
+ _, err = c.exitFd.Write(bytesBuffer.Bytes())
if err != nil {
logrus.WithError(err).Error("write exit fifo failed")
}
--
2.20.1