[lxc-devel] [PATCH] Prevent write_config from corrupting container config

Alexander Vladimirov alexander.idkfa.vladimirov at gmail.com
Tue Jun 24 18:54:52 UTC 2014


write_config doesn't check the value sig_name function returns,
this causes write_config to produce corrupted container config when
using non-predefined signal names.

Signed-off-by: Alexander Vladimirov <alexander.idkfa.vladimirov at gmail.com>
---
 src/lxc/confile.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/src/lxc/confile.c b/src/lxc/confile.c
index 3462e9c..855b816 100644
--- a/src/lxc/confile.c
+++ b/src/lxc/confile.c
@@ -1168,7 +1168,7 @@ static const char *sig_name(int signum) {
 		if (signum == signames[n].num)
 			return signames[n].name;
 	}
-	return "";
+	return NULL;
 }
 
 static int sig_parse(const char *signame) {
@@ -2289,6 +2289,7 @@ void write_config(FILE *fout, struct lxc_conf *c)
 {
 	struct lxc_list *it;
 	int i;
+	const char *signame;
 
 	/* first write any includes */
 	lxc_list_for_each(it, &c->includes) {
@@ -2336,10 +2337,22 @@ void write_config(FILE *fout, struct lxc_conf *c)
 		fprintf(fout, "lxc.pts = %d\n", c->pts);
 	if (c->ttydir)
 		fprintf(fout, "lxc.devttydir = %s\n", c->ttydir);
-	if (c->haltsignal)
-		fprintf(fout, "lxc.haltsignal = SIG%s\n", sig_name(c->haltsignal));
-	if (c->stopsignal)
-		fprintf(fout, "lxc.stopsignal = SIG%s\n", sig_name(c->stopsignal));
+	if (c->haltsignal) {
+		signame = sig_name(c->haltsignal);
+		if (signame == NULL) {
+			fprintf(fout, "lxc.haltsignal = %d\n", c->haltsignal);
+		} else {
+			fprintf(fout, "lxc.haltsignal = SIG%s\n", sig_name(c->haltsignal));
+		}
+	}
+	if (c->stopsignal) {
+		signame = sig_name(c->stopsignal);
+		if (signame == NULL) {
+			fprintf(fout, "lxc.stopsignal = %d\n", c->stopsignal);
+		} else {
+			fprintf(fout, "lxc.stopsignal = SIG%s\n", sig_name(c->stopsignal));
+		}
+	}
 	#if HAVE_SYS_PERSONALITY_H
 	switch(c->personality) {
 	case PER_LINUX32: fprintf(fout, "lxc.arch = i686\n"); break;
-- 
2.0.0



More information about the lxc-devel mailing list