mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
lib/flow: fix minimatch_extract() ICMPv6 parsing
This patch addresses two bugs related to ICMPv6(NDP) packets: - In miniflow_extract() push the words in the correct order - In parse_icmpv6() use sizeof struct, not size of struct * match_wc_init() has been modified, to include the nd_target field when the transport layer protocol is ICMPv6 A testcase has been added to detect the bugs. Signed-off-by: Daniele Di Proietto <ddiproietto@vmware.com> Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
This commit is contained in:
@@ -277,7 +277,7 @@ parse_icmpv6(void **datap, size_t *sizep, const struct icmp6_hdr *icmp,
|
||||
(icmp->icmp6_type == ND_NEIGHBOR_SOLICIT ||
|
||||
icmp->icmp6_type == ND_NEIGHBOR_ADVERT)) {
|
||||
|
||||
*nd_target = data_try_pull(datap, sizep, sizeof *nd_target);
|
||||
*nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
|
||||
if (OVS_UNLIKELY(!*nd_target)) {
|
||||
return false;
|
||||
}
|
||||
@@ -607,12 +607,12 @@ miniflow_extract(struct ofpbuf *packet, const struct pkt_metadata *md,
|
||||
memset(arp_buf, 0, sizeof arp_buf);
|
||||
if (OVS_LIKELY(parse_icmpv6(&data, &size, icmp, &nd_target,
|
||||
arp_buf))) {
|
||||
miniflow_push_words(mf, arp_sha, arp_buf,
|
||||
ETH_ADDR_LEN * 2 / 4);
|
||||
if (nd_target) {
|
||||
miniflow_push_words(mf, nd_target, nd_target,
|
||||
sizeof *nd_target / 4);
|
||||
}
|
||||
miniflow_push_words(mf, arp_sha, arp_buf,
|
||||
ETH_ADDR_LEN * 2 / 4);
|
||||
miniflow_push_be16(mf, tp_src, htons(icmp->icmp6_type));
|
||||
miniflow_push_be16(mf, tp_dst, htons(icmp->icmp6_code));
|
||||
}
|
||||
|
Reference in New Issue
Block a user