[lxc-devel] [lxc/master] 2016 02 15/lognull
hallyn on Github
lxc-bot at linuxcontainers.org
Mon Feb 15 20:22:16 UTC 2016
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 365 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20160215/fb27a71f/attachment.bin>
-------------- next part --------------
From 3f53c691d248434fdb817e615495d9c419af07d1 Mon Sep 17 00:00:00 2001
From: Serge Hallyn <serge.hallyn at ubuntu.com>
Date: Mon, 15 Feb 2016 12:15:10 -0800
Subject: [PATCH 1/2] log.c:__lxc_log_set_file: fname cannot be null
fname cannot be passed in as NULL by any of its current callers. If it
could, then build_dir() would crash as it doesn't check for it. So make
sure we are warned if in the future we pass in NULL.
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
src/lxc/log.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/lxc/log.c b/src/lxc/log.c
index 20be5ac..babaebc 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -20,6 +20,7 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <assert.h>
#include <stdio.h>
#include <errno.h>
#include <limits.h>
@@ -268,7 +269,9 @@ static int __lxc_log_set_file(const char *fname, int create_dirs)
free(log_fname);
}
- if (!fname || strlen(fname) == 0) {
+ assert(fname != NULL);
+
+ if (strlen(fname) == 0) {
log_fname = NULL;
return 0;
}
From d9c9b1808af250ec37379c7f0242941a450aa3af Mon Sep 17 00:00:00 2001
From: Serge Hallyn <serge.hallyn at ubuntu.com>
Date: Mon, 15 Feb 2016 12:18:18 -0800
Subject: [PATCH 2/2] log.c:__lxc_log_set_file: completely close log file when
overriding
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 at ubuntu.com>
---
src/lxc/log.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/src/lxc/log.c b/src/lxc/log.c
index babaebc..55fa7f5 100644
--- a/src/lxc/log.c
+++ b/src/lxc/log.c
@@ -253,6 +253,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
@@ -265,8 +275,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);
@@ -383,16 +392,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
More information about the lxc-devel
mailing list