diff options
author | Ben Pfaff <blp@ovn.org> | 2018-07-26 15:43:27 -0700 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2018-08-03 16:06:26 -0700 |
commit | 5da3e1fe02d31144fb24cd187550434248aa7b1f (patch) | |
tree | e62bff0e7fc7123292d5fb1cfd018e20a7dacb55 /lib | |
parent | c98638358053ee5a9f31f7acbcef20670698d0bc (diff) | |
download | openvswitch-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.c | 5 |
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; } } |