summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuka Koznjak <luka.koznjak@sartura.hr>2019-12-04 21:35:10 +0100
committerLuka Perkov <luka.perkov@sartura.hr>2020-01-27 23:24:48 +0100
commitaa5e77a13d955ac9b497efc015c957c475734f0d (patch)
tree01c538db7bf4efca05e0af86caae28ba327249fe
parent165b444131453d63fc78c1d86f23c3ca36a2ffd7 (diff)
downloaduci-aa5e77a13d955ac9b497efc015c957c475734f0d.tar.gz
file: fix segfault in uci_parse_config
Fixed a segmentation fault caused by using a pointer to a reallocated address. The name pointer in the uci_parse_config function becomes invalid if assert_eol calls uci_realloc down the line, resulting in a segmentation fault when attempting to dereference name. A simple fix is to call assert_eol before retrieving the actual address for the name and type pointers. The segmentation fault has been found while fuzzing the uci configuration system for various types of different crashes and undefined behavious, which resulted in multiple different import files causing instability and sementation faults. Signed-off-by: Luka Kožnjak <luka.koznjak@sartura.hr> Signed-off-by: Juraj Vijtiuk <juraj.vijtiuk@sartura.hr> CC: Luka Perkov <luka.perkov@sartura.hr>
-rw-r--r--file.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/file.c b/file.c
index f5032bd..3cd7702 100644
--- a/file.c
+++ b/file.c
@@ -425,9 +425,9 @@ static void uci_parse_config(struct uci_context *ctx)
uci_parse_error(ctx, "invalid character in type field");
ofs_name = next_arg(ctx, false, true, false);
+ assert_eol(ctx);
type = pctx_str(pctx, ofs_type);
name = pctx_str(pctx, ofs_name);
- assert_eol(ctx);
if (!name || !name[0]) {
ctx->internal = !pctx->merge;