If dp-packet contains l2 padding or cutlen was applied to it, size will be larger than the actual size of a payload and action will work incorrectly.
Ex. Padding could be added 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]> --- Version 2: - Using dp_packet_get_send_len() to account cutlen. lib/odp-execute.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/odp-execute.c b/lib/odp-execute.c index 6018e378a..6eeda2a61 100644 --- a/lib/odp-execute.c +++ b/lib/odp-execute.c @@ -761,10 +761,11 @@ 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_get_send_len(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
