The padding length is (packet size - ipv6 header length - ipv6 plen). This patch fixes incorrect ipv6 size checking and improves it by combining branch.
Reviewed-by: Gavin Hu <gavin...@arm.com> Signed-off-by: Yanqin Wei <yanqin....@arm.com> --- lib/flow.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/flow.c b/lib/flow.c index e5b554b..1b21f51 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -688,18 +688,16 @@ ipv4_get_nw_frag(const struct ip_header *nh) static inline bool ipv6_sanity_check(const struct ovs_16aligned_ip6_hdr *nh, size_t size) { - uint16_t plen; + int pad_len; if (OVS_UNLIKELY(size < sizeof *nh)) { return false; } - plen = ntohs(nh->ip6_plen); - if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) { - return false; - } + pad_len = size - IPV6_HEADER_LEN - ntohs(nh->ip6_plen); + /* Jumbo Payload option not supported yet. */ - if (OVS_UNLIKELY(size - plen > UINT8_MAX)) { + if (OVS_UNLIKELY(pad_len < 0 || pad_len > UINT8_MAX)) { return false; } -- 2.7.4 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev