[lxc-devel] [PATCH 1/1] container start: check for start hooks in container rootfs

Serge Hallyn serge.hallyn at ubuntu.com
Tue Jun 10 03:29:11 UTC 2014


Do so early enough that we can report a meaningful failure.

(This should with https://github.com/lxc/lxc/issues/225)

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 src/lxc/conf.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index a631571..4b52550 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);
 
-- 
1.9.1



More information about the lxc-devel mailing list