[LEDE-DEV,2/7] firewall3: do not use a wrong pointer in the warn() function

Message ID 1492704342-24042-2-git-send-email-pme.lebleu@gmail.com
State Changes Requested
Headers show

Commit Message

Pierre Lebleu April 20, 2017, 4:05 p.m.
In the function fw3_load_rules(), warm_elem() used a pointer
to an UCI section which was not valid anymore.

Signed-off-by: Pierre Lebleu <pme.lebleu@gmail.com>
---
 rules.c |   31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

Patch

diff --git a/rules.c b/rules.c
index 8f232d3..a1b154d 100644
--- a/rules.c
+++ b/rules.c
@@ -159,41 +159,41 @@  fw3_load_rules(struct fw3_state *state, struct uci_package *p,
 
 		if (rule->src.invert || rule->dest.invert)
 		{
-			warn_elem(e, "must not have inverted 'src' or 'dest' options");
+			warn("%s must not have inverted 'src' or 'dest' options", rule->name);
 			fw3_free_rule(rule);
 			continue;
 		}
 		else if (rule->src.set && !rule->src.any &&
 		         !(rule->_src = fw3_lookup_zone(state, rule->src.name)))
 		{
-			warn_elem(e, "refers to not existing zone '%s'", rule->src.name);
+			warn("%s refers to not existing zone '%s'", rule->name, rule->src.name);
 			fw3_free_rule(rule);
 			continue;
 		}
 		else if (rule->dest.set && !rule->dest.any &&
 		         !(rule->_dest = fw3_lookup_zone(state, rule->dest.name)))
 		{
-			warn_elem(e, "refers to not existing zone '%s'", rule->dest.name);
+			warn("%s refers to not existing zone '%s'", rule->name, rule->dest.name);
 			fw3_free_rule(rule);
 			continue;
 		}
 		else if (rule->ipset.set && state->disable_ipsets)
 		{
-			warn_elem(e, "skipped due to disabled ipset support");
+			warn("%s skipped due to disabled ipset support", rule->name);
 			fw3_free_rule(rule);
 			continue;
 		}
 		else if (rule->ipset.set &&
 		         !(rule->ipset.ptr = fw3_lookup_ipset(state, rule->ipset.name)))
 		{
-			warn_elem(e, "refers to unknown ipset '%s'", rule->ipset.name);
+			warn("%s refers to unknown ipset '%s'", rule->name, rule->ipset.name);
 			fw3_free_rule(rule);
 			continue;
 		}
 
 		if (!rule->_src && rule->target == FW3_FLAG_NOTRACK)
 		{
-			warn_elem(e, "is set to target NOTRACK but has no source assigned");
+			warn("%s is set to target NOTRACK but has no source assigned", rule->name);
 			fw3_free_rule(rule);
 			continue;
 		}
@@ -201,46 +201,47 @@  fw3_load_rules(struct fw3_state *state, struct uci_package *p,
 		if (!rule->set_mark.set && !rule->set_xmark.set &&
 		    rule->target == FW3_FLAG_MARK)
 		{
-			warn_elem(e, "is set to target MARK but specifies neither "
-			             "'set_mark' nor 'set_xmark' option");
+			warn("%s is set to target MARK but specifies neither "
+			             "'set_mark' nor 'set_xmark' option", rule->name);
 			fw3_free_rule(rule);
 			continue;
 		}
 
 		if (rule->_dest && rule->target == FW3_FLAG_MARK)
 		{
-			warn_elem(e, "must not specify 'dest' for MARK target");
+			warn("%s must not specify 'dest' for MARK target", rule->name);
 			fw3_free_rule(rule);
 			continue;
 		}
 
 		if (rule->set_mark.invert || rule->set_xmark.invert)
 		{
-			warn_elem(e, "must not have inverted 'set_mark' or 'set_xmark'");
+			warn("%s must not have inverted 'set_mark' or 'set_xmark'", rule->name);
 			fw3_free_rule(rule);
 			continue;
 		}
 
 		if (!rule->_src && !rule->_dest && !rule->src.any && !rule->dest.any)
 		{
-			warn_elem(e, "has neither a source nor a destination zone assigned "
-			             "- assuming an output rule");
+			warn("%s has neither a source nor a destination zone assigned "
+			             "- assuming an output rule", rule->name);
 		}
 
 		if (list_empty(&rule->proto))
 		{
-			warn_elem(e, "does not specify a protocol, assuming TCP+UDP");
+			warn("%s does not specify a protocol, assuming TCP+UDP", rule->name);
 			fw3_parse_protocol(&rule->proto, "tcpudp", true);
 		}
 
 		if (rule->target == FW3_FLAG_UNSPEC)
 		{
-			warn_elem(e, "has no target specified, defaulting to REJECT");
+			warn("%s has no target specified, defaulting to REJECT", rule->name);
 			rule->target = FW3_FLAG_REJECT;
 		}
 		else if (rule->target > FW3_FLAG_MARK)
 		{
-			warn_elem(e, "has invalid target specified, defaulting to REJECT");
+			warn("%s has invalid target specified, defaulting to REJECT",
+					rule->name);
 			rule->target = FW3_FLAG_REJECT;
 		}