summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBen Pfaff <blp@ovn.org>2018-07-26 15:43:27 -0700
committerBen Pfaff <blp@ovn.org>2018-08-03 16:06:26 -0700
commit5da3e1fe02d31144fb24cd187550434248aa7b1f (patch)
treee62bff0e7fc7123292d5fb1cfd018e20a7dacb55 /lib
parentc98638358053ee5a9f31f7acbcef20670698d0bc (diff)
downloadopenvswitch-5da3e1fe02d31144fb24cd187550434248aa7b1f.tar.gz
nx-match: Fix memory leak in oxm_pull_field_array() error case.
Reported-at: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9424 Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Mark Michelson <mmichels@redhat.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/nx-match.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/nx-match.c b/lib/nx-match.c
index 6b1b563ea..3b030833c 100644
--- a/lib/nx-match.c
+++ b/lib/nx-match.c
@@ -742,7 +742,6 @@ oxm_pull_field_array(const void *fields_data, size_t fields_len,
NULL);
if (error) {
VLOG_DBG_RL(&rl, "error pulling field array field");
- return error;
} else if (!field) {
VLOG_DBG_RL(&rl, "unknown field array field");
error = OFPERR_OFPBMC_BAD_FIELD;
@@ -751,7 +750,7 @@ oxm_pull_field_array(const void *fields_data, size_t fields_len,
error = OFPERR_OFPBMC_DUP_FIELD;
} else if (!mf_is_mask_valid(field, &value)) {
VLOG_DBG_RL(&rl, "bad mask in field array field '%s'", field->name);
- return OFPERR_OFPBMC_BAD_MASK;
+ error = OFPERR_OFPBMC_BAD_MASK;
} else {
field_array_set(field->id, &value, fa);
}
@@ -762,6 +761,8 @@ oxm_pull_field_array(const void *fields_data, size_t fields_len,
VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
"within field array (%s)", pos - start,
ofperr_to_string(error));
+
+ free(fa->values);
return error;
}
}