If dp-packet contains l2 padding its size will be larger than the actual size of a payload and action will work incorrectly.
Padding could be set during miniflow_extract() if detected. CC: Numan Siddique <[email protected]> Fixes: 5b34f8fc3b38 ("Add a new OVS action check_pkt_larger") Reported-by: Miroslav Kubiczek <[email protected]> Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2020-May/050157.html Signed-off-by: Ilya Maximets <[email protected]> --- I didn't test this, only checked existing unit tests. Miroslav, could you, please, check if this works in your case? It might be also good to write some unit test for this. lib/odp-execute.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/odp-execute.c b/lib/odp-execute.c index 6018e378a..548083cef 100644 --- a/lib/odp-execute.c +++ b/lib/odp-execute.c @@ -761,10 +761,10 @@ odp_execute_check_pkt_len(void *dp, struct dp_packet *packet, bool steal, const struct nlattr *a; struct dp_packet_batch pb; + uint32_t size = dp_packet_size(packet) - dp_packet_l2_pad_size(packet); a = attrs[OVS_CHECK_PKT_LEN_ATTR_PKT_LEN]; - bool is_greater = dp_packet_size(packet) > nl_attr_get_u16(a); - if (is_greater) { + if (size > nl_attr_get_u16(a)) { a = attrs[OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER]; } else { a = attrs[OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQUAL]; -- 2.25.4 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
