mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
Always use valid ids pointer in dec_ttl_cnt_ids_from_openflow()
Always update the ids pointer after calling ofpbuf_put() to ensure that it is valid when accessed. During testing a case came up where the call to ofpbuf_put() in the for (i = 0; i < ids->n_controllers; i++) loop would cause the underlying buffer to be reallocated. This resulted in ids->n_controllers being an incorrect value, the loop continuing on longer than desired and finally a segmentation fault. Reported-by: Joe Stringer <joe@wand.net.nz> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -209,9 +209,9 @@ dec_ttl_cnt_ids_from_openflow(const struct nx_action_cnt_ids *nac_ids,
|
||||
for (i = 0; i < ids->n_controllers; i++) {
|
||||
uint16_t id = ntohs(((ovs_be16 *)(nac_ids + 1))[i]);
|
||||
ofpbuf_put(out, &id, sizeof id);
|
||||
ids = out->l2;
|
||||
}
|
||||
|
||||
ids = out->l2;
|
||||
ofpact_update_len(out, &ids->ofpact);
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user