Commit beb5f069 by Alexander Vladimirov Committed by Stéphane Graber

Prevent write_config from corrupting container config

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: 's avatarAlexander Vladimirov <alexander.idkfa.vladimirov@gmail.com> Acked-by: 's avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
parent ca1b82fb
...@@ -1168,7 +1168,7 @@ static const char *sig_name(int signum) { ...@@ -1168,7 +1168,7 @@ static const char *sig_name(int signum) {
if (signum == signames[n].num) if (signum == signames[n].num)
return signames[n].name; return signames[n].name;
} }
return ""; return NULL;
} }
static int sig_parse(const char *signame) { static int sig_parse(const char *signame) {
...@@ -2222,6 +2222,7 @@ void write_config(FILE *fout, struct lxc_conf *c) ...@@ -2222,6 +2222,7 @@ void write_config(FILE *fout, struct lxc_conf *c)
{ {
struct lxc_list *it; struct lxc_list *it;
int i; int i;
const char *signame;
if (c->fstab) if (c->fstab)
fprintf(fout, "lxc.mount = %s\n", c->fstab); fprintf(fout, "lxc.mount = %s\n", c->fstab);
...@@ -2259,10 +2260,22 @@ void write_config(FILE *fout, struct lxc_conf *c) ...@@ -2259,10 +2260,22 @@ void write_config(FILE *fout, struct lxc_conf *c)
fprintf(fout, "lxc.pts = %d\n", c->pts); fprintf(fout, "lxc.pts = %d\n", c->pts);
if (c->ttydir) if (c->ttydir)
fprintf(fout, "lxc.devttydir = %s\n", c->ttydir); fprintf(fout, "lxc.devttydir = %s\n", c->ttydir);
if (c->haltsignal) 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)); fprintf(fout, "lxc.haltsignal = SIG%s\n", sig_name(c->haltsignal));
if (c->stopsignal) }
}
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)); fprintf(fout, "lxc.stopsignal = SIG%s\n", sig_name(c->stopsignal));
}
}
#if HAVE_SYS_PERSONALITY_H #if HAVE_SYS_PERSONALITY_H
switch(c->personality) { switch(c->personality) {
case PER_LINUX32: fprintf(fout, "lxc.arch = x86\n"); break; case PER_LINUX32: fprintf(fout, "lxc.arch = x86\n"); break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment