ofpacts_pull_openflow_instructions() should fill 'ofpacts' with a list
of OpenFlow actions and each action (including the last one) should be
padded to OFP_ACTION_ALIGN(8) bytes.

In most of the cases this is taken care of (e.g. by ofpacts_decode), but
for the Goto-Table instruction (and Clear-Actions, based on a quick code
inspection), this wasn't the case.

This caused the copy operation in recirc_unroll_actions() to read two
extra bytes after an allocated area (not a big deal, but enough to
displease the AddressSanitizer).

Signed-off-by: William Tu <[email protected]>
Signed-off-by: Daniele Di Proietto <[email protected]>
Co-authored-by: Daniele Di Proietto <[email protected]>
---
 lib/ofp-actions.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
index 354c768..f900aa9 100644
--- a/lib/ofp-actions.c
+++ b/lib/ofp-actions.c
@@ -6334,6 +6334,8 @@ ofpacts_pull_openflow_instructions(struct ofpbuf 
*openflow,
         ogt->table_id = oigt->table_id;
     }
 
+    ofpact_pad(ofpacts);
+
     error = ofpacts_verify(ofpacts->data, ofpacts->size,
                            (1u << N_OVS_INSTRUCTIONS) - 1, 0);
 exit:
-- 
2.5.0

_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to