]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
log.c:__lxc_log_set_file: completely close log file when overriding
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 15 Feb 2016 20:18:18 +0000 (12:18 -0800)
committerStéphane Graber <stgraber@ubuntu.com>
Thu, 17 Nov 2016 22:55:08 +0000 (17:55 -0500)
Otherwise after a shortcut on error we could end up trying to write
to the closed log fd.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/log.c

index 948735d56563347dd2d9a77a0fcfdef3105a96be..3fd0ffceb3c4c0eb4c5ce9a6515d6b2a3581af06 100644 (file)
@@ -251,6 +251,16 @@ static char *build_log_path(const char *name, const char *lxcpath)
        return p;
 }
 
+extern void lxc_log_close(void)
+{
+       if (lxc_log_fd == -1)
+               return;
+       close(lxc_log_fd);
+       lxc_log_fd = -1;
+       free(log_fname);
+       log_fname = NULL;
+}
+
 /*
  * This can be called:
  *   1. when a program calls lxc_log_init with no logfile parameter (in which
@@ -263,8 +273,7 @@ static int __lxc_log_set_file(const char *fname, int create_dirs)
 {
        if (lxc_log_fd != -1) {
                // we are overriding the default.
-               close(lxc_log_fd);
-               free(log_fname);
+               lxc_log_close();
        }
 
        assert(fname != NULL);
@@ -378,16 +387,6 @@ extern int lxc_log_init(const char *name, const char *file,
        return ret;
 }
 
-extern void lxc_log_close(void)
-{
-       if (lxc_log_fd == -1)
-               return;
-       close(lxc_log_fd);
-       lxc_log_fd = -1;
-       free(log_fname);
-       log_fname = NULL;
-}
-
 /*
  * This is called when we read a lxc.loglevel entry in a lxc.conf file.  This
  * happens after processing command line arguments, which override the .conf