From 0a028c3f016cc9c303c75e266d776b73136c56ee Mon Sep 17 00:00:00 2001 From: Amir Mohamad Ehsandar Date: Sun, 11 Oct 2020 01:23:08 +0330 Subject: [PATCH] Fix simplification linter errors --- libcontainer/cgroups/ebpf/ebpf.go | 2 ++ libcontainer/cgroups/fs/name.go | 6 ++--- libcontainer/cgroups/systemd/common.go | 4 +-- libcontainer/cgroups/utils.go | 2 +- libcontainer/container_linux.go | 37 ++++++++++++++------------ libcontainer/integration/exec_test.go | 9 +++---- libcontainer/intelrdt/monitoring.go | 4 ++- libcontainer/system/proc.go | 10 +++++-- 8 files changed, 43 insertions(+), 31 deletions(-) diff --git a/libcontainer/cgroups/ebpf/ebpf.go b/libcontainer/cgroups/ebpf/ebpf.go index 4795e0aa3f0..696d3013398 100644 --- a/libcontainer/cgroups/ebpf/ebpf.go +++ b/libcontainer/cgroups/ebpf/ebpf.go @@ -32,10 +32,12 @@ func LoadAttachCgroupDeviceFilter(insts asm.Instructions, license string, dirFD if err != nil { return nilCloser, err } + //nolint:staticcheck if err := prog.Attach(dirFD, ebpf.AttachCGroupDevice, unix.BPF_F_ALLOW_MULTI); err != nil { return nilCloser, errors.Wrap(err, "failed to call BPF_PROG_ATTACH (BPF_CGROUP_DEVICE, BPF_F_ALLOW_MULTI)") } closer := func() error { + //nolint:staticcheck if err := prog.Detach(dirFD, ebpf.AttachCGroupDevice, unix.BPF_F_ALLOW_MULTI); err != nil { return errors.Wrap(err, "failed to call BPF_PROG_DETACH (BPF_CGROUP_DEVICE, BPF_F_ALLOW_MULTI)") } diff --git a/libcontainer/cgroups/fs/name.go b/libcontainer/cgroups/fs/name.go index 9a5af709d24..a81933b59d6 100644 --- a/libcontainer/cgroups/fs/name.go +++ b/libcontainer/cgroups/fs/name.go @@ -16,12 +16,12 @@ func (s *NameGroup) Name() string { return s.GroupName } -func (s *NameGroup) Apply(path string, d *cgroupData) error { +func (s *NameGroup) Apply(path string, d *cgroupData) (err error) { if s.Join { // ignore errors if the named cgroup does not exist - join(path, d.pid) + err = join(path, d.pid) } - return nil + return } func (s *NameGroup) Set(path string, cgroup *configs.Cgroup) error { diff --git a/libcontainer/cgroups/systemd/common.go b/libcontainer/cgroups/systemd/common.go index 5872ac96970..28ef1a4be8b 100644 --- a/libcontainer/cgroups/systemd/common.go +++ b/libcontainer/cgroups/systemd/common.go @@ -333,11 +333,11 @@ func startUnit(dbusConnection *systemdDbus.Conn, unitName string, properties []s close(statusChan) // Please refer to https://godoc.org/github.com/coreos/go-systemd/dbus#Conn.StartUnit if s != "done" { - dbusConnection.ResetFailedUnit(unitName) + _ = dbusConnection.ResetFailedUnit(unitName) return errors.Errorf("error creating systemd unit `%s`: got `%s`", unitName, s) } case <-timeout.C: - dbusConnection.ResetFailedUnit(unitName) + _ = dbusConnection.ResetFailedUnit(unitName) return errors.New("Timeout waiting for systemd to create " + unitName) } } else if !isUnitExists(err) { diff --git a/libcontainer/cgroups/utils.go b/libcontainer/cgroups/utils.go index 05018bd4b1f..900ce9a966f 100644 --- a/libcontainer/cgroups/utils.go +++ b/libcontainer/cgroups/utils.go @@ -270,7 +270,7 @@ func RemovePaths(paths map[string]string) (err error) { } } if len(paths) == 0 { - //nolint:ineffassign // done to help garbage collecting: opencontainers/runc#2506 + //nolint:staticcheck,ineffassign // done to help garbage collecting: opencontainers/runc#2506 paths = make(map[string]string) return nil } diff --git a/libcontainer/container_linux.go b/libcontainer/container_linux.go index 395ece5d451..35a1fa9333f 100644 --- a/libcontainer/container_linux.go +++ b/libcontainer/container_linux.go @@ -680,8 +680,7 @@ var criuFeatures *criurpc.CriuFeatures func (c *linuxContainer) checkCriuFeatures(criuOpts *CriuOpts, rpcOpts *criurpc.CriuOpts, criuFeat *criurpc.CriuFeatures) error { - var t criurpc.CriuReqType - t = criurpc.CriuReqType_FEATURE_CHECK + var t criurpc.CriuReqType = criurpc.CriuReqType_FEATURE_CHECK // make sure the features we are looking for are really not from // some previous check @@ -764,10 +763,7 @@ func (c *linuxContainer) checkCriuVersion(minVersion int) error { const descriptorsFilename = "descriptors.json" func (c *linuxContainer) addCriuDumpMount(req *criurpc.CriuReq, m *configs.Mount) { - mountDest := m.Destination - if strings.HasPrefix(mountDest, c.config.Rootfs) { - mountDest = mountDest[len(c.config.Rootfs):] - } + mountDest := strings.TrimPrefix(m.Destination, c.config.Rootfs) extMnt := &criurpc.ExtMountMap{ Key: proto.String(mountDest), @@ -1108,10 +1104,7 @@ func (c *linuxContainer) Checkpoint(criuOpts *CriuOpts) error { } func (c *linuxContainer) addCriuRestoreMount(req *criurpc.CriuReq, m *configs.Mount) { - mountDest := m.Destination - if strings.HasPrefix(mountDest, c.config.Rootfs) { - mountDest = mountDest[len(c.config.Rootfs):] - } + mountDest := strings.TrimPrefix(m.Destination, c.config.Rootfs) extMnt := &criurpc.ExtMountMap{ Key: proto.String(mountDest), @@ -1216,7 +1209,7 @@ func (c *linuxContainer) prepareCriuRestoreMounts(mounts []*configs.Mount) error return nil } -func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { +func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) (err error) { c.m.Lock() defer c.m.Unlock() @@ -1243,7 +1236,10 @@ func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { if err != nil { return err } - defer workDir.Close() + defer func() { + err = workDir.Close() + }() + if criuOpts.ImagesDirectory == "" { return errors.New("invalid directory to restore checkpoint") } @@ -1251,7 +1247,9 @@ func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { if err != nil { return err } - defer imageDir.Close() + defer func() { + err = imageDir.Close() + }() // CRIU has a few requirements for a root directory: // * it must be a mount point // * its parent must not be overmounted @@ -1261,7 +1259,9 @@ func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { if err := os.Mkdir(root, 0755); err != nil { return err } - defer os.Remove(root) + defer func() { + err = os.Remove(root) + }() root, err = filepath.EvalSymlinks(root) if err != nil { return err @@ -1270,7 +1270,9 @@ func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { if err != nil { return err } - defer unix.Unmount(root, unix.MNT_DETACH) + defer func() { + err = unix.Unmount(root, unix.MNT_DETACH) + }() t := criurpc.CriuReqType_RESTORE req := &criurpc.CriuReq{ Type: &t, @@ -1378,7 +1380,7 @@ func (c *linuxContainer) Restore(process *Process, criuOpts *CriuOpts) error { // Now that CRIU is done let's close all opened FDs CRIU needed. for _, fd := range extraFiles { - fd.Close() + _ = fd.Close() } return err @@ -1592,7 +1594,7 @@ func (c *linuxContainer) criuSwrk(process *Process, req *criurpc.CriuReq, opts * break } - criuClientCon.CloseWrite() + _ = criuClientCon.CloseWrite() // cmd.Wait() waits cmd.goroutines which are used for proxying file descriptors. // Here we want to wait only the CRIU process. criuProcessState, err = criuProcess.Wait() @@ -1780,6 +1782,7 @@ func (c *linuxContainer) saveState(s *State) (retErr error) { return os.Rename(tmpFile.Name(), stateFilePath) } +//nolint:unused func (c *linuxContainer) deleteState() error { return os.Remove(filepath.Join(c.root, stateFilename)) } diff --git a/libcontainer/integration/exec_test.go b/libcontainer/integration/exec_test.go index a4183b65889..c2357a13fb2 100644 --- a/libcontainer/integration/exec_test.go +++ b/libcontainer/integration/exec_test.go @@ -370,7 +370,7 @@ func TestProcessEmptyCaps(t *testing.T) { // Wait for process waitProcess(&pconfig, t) - outputStatus := string(stdout.Bytes()) + outputStatus := stdout.String() lines := strings.Split(outputStatus, "\n") @@ -423,7 +423,7 @@ func TestProcessCaps(t *testing.T) { // Wait for process waitProcess(&pconfig, t) - outputStatus := string(stdout.Bytes()) + outputStatus := stdout.String() lines := strings.Split(outputStatus, "\n") @@ -449,8 +449,7 @@ func TestProcessCaps(t *testing.T) { } var netAdminMask uint64 - var netAdminBit uint - netAdminBit = 12 // from capability.h + var netAdminBit = uint(12) // from capability.h netAdminMask = 1 << netAdminBit if effectiveCaps&netAdminMask != netAdminMask { t.Fatal("CAP_NET_ADMIN is not set as expected") @@ -487,7 +486,7 @@ func TestAdditionalGroups(t *testing.T) { // Wait for process waitProcess(&pconfig, t) - outputGroups := string(stdout.Bytes()) + outputGroups := stdout.String() // Check that the groups output has the groups that we specified if !strings.Contains(outputGroups, "audio") { diff --git a/libcontainer/intelrdt/monitoring.go b/libcontainer/intelrdt/monitoring.go index 4ccc8eae050..b3f3080ccc5 100644 --- a/libcontainer/intelrdt/monitoring.go +++ b/libcontainer/intelrdt/monitoring.go @@ -21,7 +21,9 @@ type monFeatures struct { func getMonFeatures(intelRdtRoot string) (monFeatures, error) { file, err := os.Open(filepath.Join(intelRdtRoot, "info", "L3_MON", "mon_features")) - defer file.Close() + defer func() { + _ = file.Close() + }() if err != nil { return monFeatures{}, err } diff --git a/libcontainer/system/proc.go b/libcontainer/system/proc.go index b73cf70b434..dabea9dce15 100644 --- a/libcontainer/system/proc.go +++ b/libcontainer/system/proc.go @@ -96,8 +96,14 @@ func parseStat(data string) (stat Stat_t, err error) { // one (PID) and two (Name) in the paren-split. parts = strings.Split(data[i+2:], " ") var state int - fmt.Sscanf(parts[3-3], "%c", &state) + + if _, err = fmt.Sscanf(parts[3-3], "%c", &state); err != nil { + return Stat_t{}, err + } stat.State = State(state) - fmt.Sscanf(parts[22-3], "%d", &stat.StartTime) + + if _, err = fmt.Sscanf(parts[22-3], "%d", &stat.StartTime); err != nil { + return Stat_t{}, err + } return stat, nil }