diff mbox series

[OpenWrt-Devel,uci,17/18] ucimap: fix possible use of memory after it is freed

Message ID 20191105003657.16540-18-ynezz@true.cz
State Accepted
Delegated to: Petr Štetiar
Headers show
Series fixes and improvements | expand

Commit Message

Petr Štetiar Nov. 5, 2019, 12:36 a.m. UTC
scan-build from clang version 9 has reported following issue:

 ucimap.c:710:8: warning: Use of memory after it is freed
        err = ucimap_parse_options(map, sm, sd, s);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Petr Štetiar <ynezz@true.cz>
---
 ucimap.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/ucimap.c b/ucimap.c
index d5fd5c4f7143..7c2b0435d308 100644
--- a/ucimap.c
+++ b/ucimap.c
@@ -490,16 +490,21 @@  ucimap_add_section_list(struct uci_map *map, struct ucimap_section_data *sd)
 	map->sdata_tail = &sd->next;
 }
 
-static void
+static int
 ucimap_add_section(struct ucimap_section_data *sd)
 {
+	int r;
 	struct uci_map *map = sd->map;
 
 	sd->next = NULL;
-	if (sd->sm->add(map, ucimap_section_ptr(sd)) < 0)
+	r = sd->sm->add(map, ucimap_section_ptr(sd));
+	if (r < 0) {
 		ucimap_free_section(map, sd);
-	else
+		return r;
+	} else
 		ucimap_add_section_list(map, sd);
+
+	return 0;
 }
 
 #ifdef UCI_DEBUG
@@ -702,7 +707,9 @@  ucimap_parse_section(struct uci_map *map, struct uci_sectionmap *sm, struct ucim
 		goto error;
 
 	if (map->parsed) {
-		ucimap_add_section(sd);
+		err = ucimap_add_section(sd);
+		if (err)
+			return err;
 	} else {
 		ucimap_add_section_list(map, sd);
 	}