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:
parent
133ac5cd2a
commit
7b1b16b741
@ -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])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user