runtime-v2: add validation for runtime name

add validation for runtime name, if runtime name is invalid,
containerd will got panic.

Signed-off-by: Ace-Tang <aceapril@126.com>
This commit is contained in:
Ace-Tang 2018-10-18 16:13:05 +08:00
parent 133ac5cd2a
commit 7b1b16b741

View File

@ -49,6 +49,9 @@ func Command(ctx context.Context, runtime, containerdAddress, path string, cmdAr
} }
args = append(args, cmdArgs...) args = append(args, cmdArgs...)
name := BinaryName(runtime) name := BinaryName(runtime)
if name == "" {
return nil, fmt.Errorf("invalid runtime name %s, correct runtime name should format like io.containerd.runc.v1", runtime)
}
var cmdPath string var cmdPath string
var lerr error var lerr error
if cmdPath, lerr = exec.LookPath(name); lerr != nil { if cmdPath, lerr = exec.LookPath(name); lerr != nil {
@ -69,10 +72,15 @@ func Command(ctx context.Context, runtime, containerdAddress, path string, cmdAr
return cmd, nil return cmd, nil
} }
// BinaryName returns the shim binary name from the runtime name // BinaryName returns the shim binary name from the runtime name,
// empty string returns means runtime name is invalid
func BinaryName(runtime string) string { func BinaryName(runtime string) string {
// runtime name should format like $prefix.name.version
parts := strings.Split(runtime, ".") parts := strings.Split(runtime, ".")
// TODO: add validation for runtime if len(parts) < 2 {
return ""
}
return fmt.Sprintf(shimBinaryFormat, parts[len(parts)-2], parts[len(parts)-1]) return fmt.Sprintf(shimBinaryFormat, parts[len(parts)-2], parts[len(parts)-1])
} }