confile: be stricter in config helpers

We never call these helper without an initialized config afaict but since we're now exposing these two functions to oss-fuzz directly in a way we never do to users so let's be stricter about it. Inspired-by: #3733 Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent f0489268
...@@ -2598,6 +2598,9 @@ static int parse_line(char *buffer, void *data) ...@@ -2598,6 +2598,9 @@ static int parse_line(char *buffer, void *data)
char *dup = buffer; char *dup = buffer;
struct parse_line_conf *plc = data; struct parse_line_conf *plc = data;
if (!plc->conf)
return syserror_set(-EINVAL, "Missing config");
/* If there are newlines in the config file we should keep them. */ /* If there are newlines in the config file we should keep them. */
empty_line = lxc_is_line_empty(dup); empty_line = lxc_is_line_empty(dup);
if (empty_line) if (empty_line)
...@@ -2667,6 +2670,9 @@ static struct new_config_item *parse_new_conf_line(char *buffer) ...@@ -2667,6 +2670,9 @@ static struct new_config_item *parse_new_conf_line(char *buffer)
char *dup = buffer; char *dup = buffer;
char *dot, *key, *line, *value; char *dot, *key, *line, *value;
if (is_empty_string(buffer))
return log_error_errno(NULL, EINVAL, "Empty configuration line");
linep = line = strdup(dup); linep = line = strdup(dup);
if (!line) if (!line)
return NULL; return NULL;
...@@ -2719,16 +2725,19 @@ static struct new_config_item *parse_new_conf_line(char *buffer) ...@@ -2719,16 +2725,19 @@ static struct new_config_item *parse_new_conf_line(char *buffer)
int lxc_config_read(const char *file, struct lxc_conf *conf, bool from_include) int lxc_config_read(const char *file, struct lxc_conf *conf, bool from_include)
{ {
struct parse_line_conf c; struct parse_line_conf plc;
if (!conf)
return syserror_set(-EINVAL, "Missing config");
c.conf = conf; plc.conf = conf;
c.from_include = from_include; plc.from_include = from_include;
/* Catch only the top level config file name in the structure. */ /* Catch only the top level config file name in the structure. */
if (!conf->rcfile) if (!conf->rcfile)
conf->rcfile = strdup(file); conf->rcfile = strdup(file);
return lxc_file_for_each_line_mmap(file, parse_line, &c); return lxc_file_for_each_line_mmap(file, parse_line, &plc);
} }
int lxc_config_define_add(struct lxc_list *defines, char *arg) int lxc_config_define_add(struct lxc_list *defines, char *arg)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment