chiark / gitweb /
nspawn: don't accept just any tree to execute
authorLennart Poettering <lennart@poettering.net>
Fri, 14 Feb 2014 15:35:18 +0000 (16:35 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 14 Feb 2014 15:35:18 +0000 (16:35 +0100)
When invoked without -D in an arbitrary directory we should not try to
execute anything, make some validity checks first.

src/nspawn/nspawn.c

index 3a6d428cd5e682231079e1a8001d067e45a1ced8..2a0edf6abca216381ddf932ea46978bc3f2d6b30 100644 (file)
@@ -1555,9 +1555,21 @@ int main(int argc, char *argv[]) {
                 goto finish;
         }
 
-        if (arg_boot && path_is_os_tree(arg_directory) <= 0) {
-                log_error("Directory %s doesn't look like an OS root directory (/etc/os-release is missing). Refusing.", arg_directory);
-                goto finish;
+        if (arg_boot) {
+                if (path_is_os_tree(arg_directory) <= 0) {
+                        log_error("Directory %s doesn't look like an OS root directory (/etc/os-release is missing). Refusing.", arg_directory);
+                        goto finish;
+                }
+        } else {
+                const char *p;
+
+                p = strappenda(arg_directory,
+                               argc > optind && path_is_absolute(argv[optind]) ? argv[optind] : "/usr/bin/");
+                if (access(p, F_OK) < 0) {
+                        log_error("Directory %s lacks the binary to execute or doesn't look like a binary tree. Refusing.", arg_directory);
+                        goto finish;
+
+                }
         }
 
         log_close();