- change get_template_path() to only return NULL or non-NULL since one of
  the callers was doing a free(-1) which caused the segfault. Handle the
  NULL template case in the lxcapi_create() caller.

- make sure to free(tpath) in the sha1sum_file() failure case

Signed-off-by: Dwight Engen <dwight.en...@oracle.com>
---
 src/lxc/lxccontainer.c | 45 ++++++++++++++++++++-------------------------
 1 file changed, 20 insertions(+), 25 deletions(-)

diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index f5d41b3..d3f5b0d 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -713,38 +713,32 @@ static struct bdev *do_bdev_create(struct lxc_container 
*c, const char *type,
 /*
  * Given the '-t' template option to lxc-create, figure out what to
  * do.  If the template is a full executable path, use that.  If it
- * is something like 'sshd', then return $templatepath/lxc-sshd.  If
- * no template was passed in, return NULL  (this is ok).
- * On error return (char *) -1.
+ * is something like 'sshd', then return $templatepath/lxc-sshd.
+ * On success return the template, on error return NULL.
  */
-char *get_template_path(const char *t)
+static char *get_template_path(const char *t)
 {
        int ret, len;
        char *tpath;
 
-       if (!t)
-               return NULL;
-
        if (t[0] == '/' && access(t, X_OK) == 0) {
                tpath = strdup(t);
-               if (!tpath)
-                       return (char *) -1;
                return tpath;
        }
 
        len = strlen(LXCTEMPLATEDIR) + strlen(t) + strlen("/lxc-") + 1;
        tpath = malloc(len);
        if (!tpath)
-               return (char *) -1;
+               return NULL;
        ret = snprintf(tpath, len, "%s/lxc-%s", LXCTEMPLATEDIR, t);
        if (ret < 0 || ret >= len) {
                free(tpath);
-               return (char *) -1;
+               return NULL;
        }
        if (access(tpath, X_OK) < 0) {
                SYSERROR("bad template: %s\n", t);
                free(tpath);
-               return (char *) -1;
+               return NULL;
        }
 
        return tpath;
@@ -917,20 +911,19 @@ bool prepend_lxc_header(char *path, const char *t, char 
*const argv[])
 
 #if HAVE_LIBGNUTLS
        tpath = get_template_path(t);
-       if (tpath == (char *) -1) {
+       if (!tpath) {
                ERROR("bad template: %s\n", t);
                goto out_free_contents;
        }
 
-       if (tpath) {
-               have_tpath = true;
-               ret = sha1sum_file(tpath, md_value);
-               if (ret < 0) {
-                       ERROR("Error getting sha1sum of %s", tpath);
-                       goto out_free_contents;
-               }
+       have_tpath = true;
+       ret = sha1sum_file(tpath, md_value);
+       if (ret < 0) {
+               ERROR("Error getting sha1sum of %s", tpath);
                free(tpath);
+               goto out_free_contents;
        }
+       free(tpath);
 #endif
 
        process_lock();
@@ -1006,16 +999,18 @@ static bool lxcapi_create(struct lxc_container *c, const 
char *t,
 {
        bool bret = false;
        pid_t pid;
-       char *tpath;
+       char *tpath = NULL;
        int partial_fd;
 
        if (!c)
                return false;
 
-       tpath = get_template_path(t);
-       if (tpath == (char *) -1) {
-               ERROR("bad template: %s\n", t);
-               goto out;
+       if (t) {
+               tpath = get_template_path(t);
+               if (!tpath) {
+                       ERROR("bad template: %s\n", t);
+                       goto out;
+               }
        }
 
        if (!c->save_config(c, NULL)) {
-- 
1.8.1.4


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to