Quoting Alexander Vladimirov ([email protected]):
> 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 <[email protected]>

Acked-by: Serge E. Hallyn <[email protected]>

> ---
>  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
> 
> _______________________________________________
> lxc-devel mailing list
> [email protected]
> http://lists.linuxcontainers.org/listinfo/lxc-devel
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to