1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

config: fix config node lookup inside empty sections to not return the section itself

When a section was empty in a configuration tree (no children - this is
allowed) and we were looking for a config node inside that section, the
_find_config_node function incorrectly returned the section itself if
the node inside that section was not found.

For example the configuration below:

The config:
    abc {
    }

And a function call to get the "def" node inside "abc" section:
     _find_config_node(..., "abc/def")

...returned the "abc" node instead of NULL ("def" not found).

This in turn caused segfaults in the code using lookups in such
a configuration tree as we (correctly) expected that the node
returned was always the one we were looking for or NULL if not
found. But if incorrect node was returned instead, we processed
that as if this was the node we were looking for and so we
processed its value as well. But sections don't have values => segfault.
This commit is contained in:
Peter Rajnoha 2013-02-27 13:47:57 +01:00
parent a9d0e25627
commit 6c81cd26cc
2 changed files with 3 additions and 2 deletions

View File

@ -1,5 +1,6 @@
Version 1.02.78 -
===================================
Fix config node lookup inside empty sections to not return the section itself.
Extend support for status info of thin pool target.
Fix segfault for truncated string token in config file after the first '"'.
Close open dmeventd FIFO file descriptors on exec (FD_CLOEXEC).

View File

@ -752,12 +752,12 @@ static const struct dm_config_node *_find_config_node(const void *start,
if (cn_found && *e)
cn = cn_found->child;
else
break; /* don't move into the last node */
return cn_found;
path = e;
}
return cn_found;
return NULL;
}
static const struct dm_config_node *_find_first_config_node(const void *start, const char *path)