diff --git a/src/lxc/conf.c b/src/lxc/conf.c index a63157117..4b5255033 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3896,6 +3896,30 @@ int do_rootfs_setup(struct lxc_conf *conf, const char *name, const char *lxcpath return 0; } +static bool verify_start_hooks(struct lxc_conf *conf) +{ + struct lxc_list *it; + char path[MAXPATHLEN]; + lxc_list_for_each(it, &conf->hooks[LXCHOOK_START]) { + char *hookname = it->elem; + struct stat st; + int ret; + + ret = snprintf(path, MAXPATHLEN, "%s%s", + conf->rootfs.mount, hookname); + if (ret < 0 || ret >= MAXPATHLEN) + return false; + ret = stat(path, &st); + if (ret) { + SYSERROR("Start hook %s not found in container rootfs", + hookname); + return false; + } + } + + return true; +} + int lxc_setup(struct lxc_handler *handler) { const char *name = handler->name; @@ -3949,6 +3973,10 @@ int lxc_setup(struct lxc_handler *handler) return -1; } + /* Make sure any start hooks are in the rootfs */ + if (!verify_start_hooks(lxc_conf)) + return -1; + if (lxc_conf->is_execute) lxc_execute_bind_init(lxc_conf);