From: Ethan Jackson Date: Wed, 30 Apr 2014 21:52:28 +0000 (-0700) Subject: ofproto: Fix potential leak during flow mods. X-Git-Tag: sliver-openvswitch-2.2.90-1~3^2~14 X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=commitdiff_plain;h=0ef165ecb57943e17a8ee8270df68ffb8d032e29 ofproto: Fix potential leak during flow mods. This code created a cls_rule without destroying it. Found by inspection. Signed-off-by: Ethan Jackson Acked-by: Jarno Rajahalme --- diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 3d788a681..208efc1e8 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -1975,14 +1975,13 @@ ofproto_flow_mod(struct ofproto *ofproto, struct ofputil_flow_mod *fm) if (fm->command == OFPFC_MODIFY_STRICT && fm->table_id != OFPTT_ALL && !(fm->flags & OFPUTIL_FF_RESET_COUNTS)) { struct oftable *table = &ofproto->tables[fm->table_id]; - struct cls_rule match_rule; struct rule *rule; bool done = false; - cls_rule_init(&match_rule, &fm->match, fm->priority); fat_rwlock_rdlock(&table->cls.rwlock); - rule = rule_from_cls_rule(classifier_find_rule_exactly(&table->cls, - &match_rule)); + rule = rule_from_cls_rule(classifier_find_match_exactly(&table->cls, + &fm->match, + fm->priority)); if (rule) { /* Reading many of the rule fields and writing on 'modified' * requires the rule->mutex. Also, rule->actions may change