From 77d8b6cd77d876ef2e8fce492d9207693021fe3e Mon Sep 17 00:00:00 2001 From: Etienne Perot Date: Mon, 26 Sep 2022 20:02:45 -0700 Subject: [PATCH] Add custom error type for `ResolveExecutablePath`. PiperOrigin-RevId: 477058661 --- pkg/sentry/fs/user/path.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/sentry/fs/user/path.go b/pkg/sentry/fs/user/path.go index 67a9adfd7..d7340e9a3 100644 --- a/pkg/sentry/fs/user/path.go +++ b/pkg/sentry/fs/user/path.go @@ -30,8 +30,13 @@ import ( "gvisor.dev/gvisor/pkg/sentry/vfs" ) +// ExecutableResolveError represents a failure to resolve the executable +// in ResolveExecutablePath. +type ExecutableResolveError error + // ResolveExecutablePath resolves the given executable name given the working // dir and environment. +// Returns ExecutableResolveError when the executable cannot be resolved. func ResolveExecutablePath(ctx context.Context, args *kernel.CreateProcessArgs) (string, error) { name := args.Filename if len(name) == 0 { @@ -64,14 +69,14 @@ func ResolveExecutablePath(ctx context.Context, args *kernel.CreateProcessArgs) if kernel.VFS2Enabled { f, err := resolveVFS2(ctx, args.Credentials, args.MountNamespaceVFS2, paths, name) if err != nil { - return "", fmt.Errorf("error finding executable %q in PATH %v: %v", name, paths, err) + return "", ExecutableResolveError(fmt.Errorf("error finding executable %q in PATH %v: %v", name, paths, err)) } return f, nil } f, err := resolve(ctx, args.MountNamespace, paths, name) if err != nil { - return "", fmt.Errorf("error finding executable %q in PATH %v: %v", name, paths, err) + return "", ExecutableResolveError(fmt.Errorf("error finding executable %q in PATH %v: %v", name, paths, err)) } return f, nil }