From 47a96495208f5dfdceabc1a2acbfa1c0517aac80 Mon Sep 17 00:00:00 2001 From: Aleksa Sarai Date: Tue, 2 Feb 2021 16:30:59 -0800 Subject: [PATCH] libct/seccomp/patchpbf/test: fix for 32-bit This test fails to compile on i386: > libcontainer/seccomp/patchbpf/enosys_linux_test.go:180:20: constant 3735928559 overflows int > libcontainer/seccomp/patchbpf/enosys_linux_test.go:204:19: constant 3735928559 overflows int > libcontainer/seccomp/patchbpf/enosys_linux_test.go:227:25: constant 3735928559 overflows int This is because golang.org/x/net/bpf returns an int from their emulated BPF VM implementation when they should really be returning uint32. Fix by switching to uint32 in the test code. Signed-off-by: Kir Kolyshkin --- .../seccomp/patchbpf/enosys_linux_test.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/libcontainer/seccomp/patchbpf/enosys_linux_test.go b/libcontainer/seccomp/patchbpf/enosys_linux_test.go index 17b92af9586..f9a4bf63faa 100644 --- a/libcontainer/seccomp/patchbpf/enosys_linux_test.go +++ b/libcontainer/seccomp/patchbpf/enosys_linux_test.go @@ -159,7 +159,7 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string) type syscallTest struct { syscall string sysno libseccomp.ScmpSyscall - expected int + expected uint32 } scmpArch, err := libseccomp.GetArchFromString(arch) @@ -177,9 +177,9 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string) // Add explicit syscalls (whether they will return -ENOSYS // depends on the filter rules). for idx, syscall := range explicitSyscalls { - expected := int(retFallthrough) + expected := retFallthrough if idx >= enosysStart { - expected = int(retErrnoEnosys) + expected = retErrnoEnosys } sysno, err := libseccomp.GetSyscallFromNameByArch(syscall, scmpArch) if err != nil { @@ -201,7 +201,7 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string) syscallTests = append(syscallTests, syscallTest{ sysno: sysno, syscall: syscall, - expected: int(retFallthrough), + expected: retFallthrough, }) } @@ -216,7 +216,7 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string) syscallTests = append(syscallTests, syscallTest{ sysno: sysno, syscall: fmt.Sprintf("syscall_%#x", sysno), - expected: int(retErrnoEnosys), + expected: retErrnoEnosys, }) } @@ -224,14 +224,17 @@ func testEnosysStub(t *testing.T, defaultAction configs.Action, arches []string) for _, test := range syscallTests { // Override the expected value in the two special cases. if !archSet[arch] || isAllowAction(defaultAction) { - test.expected = int(retFallthrough) + test.expected = retFallthrough } payload := mockSyscallPayload(t, test.sysno, nativeArch, 0x1337, 0xF00BA5) - ret, err := filter.Run(payload) + // NOTE: golang.org/x/net/bpf returns int here rather + // than uint32. + rawRet, err := filter.Run(payload) if err != nil { t.Fatalf("error running filter: %v", err) } + ret := uint32(rawRet) if ret != test.expected { t.Logf("mock filter for %v %v:", arches, allowedSyscalls) for idx, insn := range program {