Conflict occurs between following lines

[...]
269         if (values[i])
270                 return values[i];
[...]

and

[...]
309         /* could not find value, use default */
310         values[i] = (*ptr)[1];
[...]

so call it while holding the process_lock

Signed-off-by: S.Çağlar Onur <cag...@10ur.org>
---
 src/lxc/cgroup.c |  2 +-
 src/lxc/start.c  |  2 +-
 src/lxc/utils.c  | 41 +++++++++++++++++++++++++++++++++--------
 src/lxc/utils.h  |  3 ++-
 4 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c
index 01ed040..1e1e72a 100644
--- a/src/lxc/cgroup.c
+++ b/src/lxc/cgroup.c
@@ -91,7 +91,7 @@ struct cgroup_meta_data *lxc_cgroup_load_meta()
        int saved_errno;
 
        errno = 0;
-       cgroup_use = lxc_global_config_value("cgroup.use");
+       cgroup_use = default_cgroup_use();
        if (!cgroup_use && errno != 0)
                return NULL;
        if (cgroup_use) {
diff --git a/src/lxc/start.c b/src/lxc/start.c
index 1cadc09..58e1194 100644
--- a/src/lxc/start.c
+++ b/src/lxc/start.c
@@ -695,7 +695,7 @@ int lxc_spawn(struct lxc_handler *handler)
         * default value is available
         */
        if (getuid() == 0)
-               cgroup_pattern = lxc_global_config_value("cgroup.pattern");
+               cgroup_pattern = default_cgroup_pattern();
        if (!cgroup_pattern)
                cgroup_pattern = "%n";
 
diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index 9e2e326..6129cf8 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -269,9 +269,7 @@ const char *lxc_global_config_value(const char *option_name)
        if (values[i])
                return values[i];
 
-       process_lock();
        fin = fopen_cloexec(LXC_GLOBAL_CONF, "r");
-       process_unlock();
        if (fin) {
                while (fgets(buf, 1024, fin)) {
                        if (buf[0] == '#')
@@ -317,30 +315,57 @@ const char *lxc_global_config_value(const char 
*option_name)
                errno = 0;
 
 out:
-       process_lock();
        if (fin)
                fclose(fin);
-       process_unlock();
        return values[i];
 }
 
 const char *default_lvm_vg(void)
 {
-       return lxc_global_config_value("lvm_vg");
+       process_lock();
+       const char *ret = lxc_global_config_value("lvm_vg");
+       process_unlock();
+       return ret;
 }
 
 const char *default_lvm_thin_pool(void)
 {
-       return lxc_global_config_value("lvm_thin_pool");
+       process_lock();
+       const char *ret = lxc_global_config_value("lvm_thin_pool");
+       process_unlock();
+       return ret;
 }
 
 const char *default_zfs_root(void)
 {
-       return lxc_global_config_value("zfsroot");
+       process_lock();
+       const char *ret = lxc_global_config_value("zfsroot");
+       process_unlock();
+       return ret;
 }
+
 const char *default_lxc_path(void)
 {
-       return lxc_global_config_value("lxcpath");
+       process_lock();
+       const char *ret = lxc_global_config_value("lxcpath");
+       process_unlock();
+       return ret;
+}
+
+const char *default_cgroup_use(void)
+{
+       process_lock();
+       const char *ret = lxc_global_config_value("cgroup.use");
+       process_unlock();
+       return ret;
+}
+
+const char *default_cgroup_pattern(void)
+{
+       process_lock();
+       const char *ret = lxc_global_config_value("cgroup.pattern");
+       process_unlock();
+       return ret;
 }
 
 const char *get_rundir()
diff --git a/src/lxc/utils.h b/src/lxc/utils.h
index fc46760..8aa1550 100644
--- a/src/lxc/utils.h
+++ b/src/lxc/utils.h
@@ -49,7 +49,8 @@ extern const char *default_lxc_path(void);
 extern const char *default_zfs_root(void);
 extern const char *default_lvm_vg(void);
 extern const char *default_lvm_thin_pool(void);
-
+extern const char *default_cgroup_use(void);
+extern const char *default_cgroup_pattern(void);
 /* Define getline() if missing from the C library */
 #ifndef HAVE_GETLINE
 #ifdef HAVE_FGETLN
-- 
1.8.3.2


------------------------------------------------------------------------------
Android is increasing in popularity, but the open development platform that
developers love is also attractive to malware creators. Download this white
paper to learn more about secure code signing practices that can help keep
Android apps secure.
http://pubads.g.doubleclick.net/gampad/clk?id=65839951&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