From 40f55ca3fe06d2e5d0232c1f07911ea728fd1bc1 Mon Sep 17 00:00:00 2001 From: Ed Santiago Date: Wed, 25 Dec 2019 11:51:06 -0700 Subject: signal parsing - better input validation The helper function we use for signal name mapping does not check for negative numbers nor invalid (too-high) ones. This can yield unexpected error messages: # podman kill -s -1 foo ERRO[0000] unknown signal "18446744073709551615" This PR introduces a small wrapper for it that: 1) Strips off a leading dash, allowing '-1' or '-HUP' as valid inputs; and 2) Rejects numbers <1 or >64 (SIGRTMAX) Also adds a test suite checking signal handling as well as ensuring that invalid signals are rejected by the command line. Fixes: #4746 Signed-off-by: Ed Santiago --- cmd/podman/kill.go | 4 ++-- cmd/podman/pod_kill.go | 4 ++-- cmd/podman/shared/create.go | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) (limited to 'cmd') diff --git a/cmd/podman/kill.go b/cmd/podman/kill.go index aba2008ca..a10546ea9 100644 --- a/cmd/podman/kill.go +++ b/cmd/podman/kill.go @@ -3,7 +3,7 @@ package main import ( "github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/pkg/adapter" - "github.com/docker/docker/pkg/signal" + "github.com/containers/libpod/pkg/util" "github.com/opentracing/opentracing-go" "github.com/pkg/errors" "github.com/spf13/cobra" @@ -54,7 +54,7 @@ func killCmd(c *cliconfig.KillValues) error { // Check if the signalString provided by the user is valid // Invalid signals will return err - killSignal, err := signal.ParseSignal(c.Signal) + killSignal, err := util.ParseSignal(c.Signal) if err != nil { return err } diff --git a/cmd/podman/pod_kill.go b/cmd/podman/pod_kill.go index 064946f72..9f696073d 100644 --- a/cmd/podman/pod_kill.go +++ b/cmd/podman/pod_kill.go @@ -6,7 +6,7 @@ import ( "github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/pkg/adapter" - "github.com/docker/docker/pkg/signal" + "github.com/containers/libpod/pkg/util" "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -60,7 +60,7 @@ func podKillCmd(c *cliconfig.PodKillValues) error { if c.Signal != "" { // Check if the signalString provided by the user is valid // Invalid signals will return err - sysSignal, err := signal.ParseSignal(c.Signal) + sysSignal, err := util.ParseSignal(c.Signal) if err != nil { return err } diff --git a/cmd/podman/shared/create.go b/cmd/podman/shared/create.go index c1c5db7cb..58cf56eea 100644 --- a/cmd/podman/shared/create.go +++ b/cmd/podman/shared/create.go @@ -24,7 +24,6 @@ import ( "github.com/containers/libpod/pkg/rootless" cc "github.com/containers/libpod/pkg/spec" "github.com/containers/libpod/pkg/util" - "github.com/docker/docker/pkg/signal" "github.com/docker/go-connections/nat" "github.com/docker/go-units" "github.com/opentracing/opentracing-go" @@ -464,7 +463,7 @@ func ParseCreateOpts(ctx context.Context, c *GenericCLIResults, runtime *libpod. signalString = c.String("stop-signal") } if signalString != "" { - stopSignal, err = signal.ParseSignal(signalString) + stopSignal, err = util.ParseSignal(signalString) if err != nil { return nil, err } @@ -624,7 +623,7 @@ func ParseCreateOpts(ctx context.Context, c *GenericCLIResults, runtime *libpod. } if systemd { if signalString == "" { - stopSignal, err = signal.ParseSignal("RTMIN+3") + stopSignal, err = util.ParseSignal("RTMIN+3") if err != nil { return nil, errors.Wrapf(err, "error parsing systemd signal") } -- cgit v1.2.3-54-g00ecf