Skip to content

Commit

Permalink
pinctrl: Fix icmp6 packet corruption issue
Browse files Browse the repository at this point in the history
The commit f792b1a("Fix ACL reject action for UDP packets.")
didn't updated the 'struct ip6_hdr' pointer after calling
dp_packet_put(), as dp_packet_put() can reallocate memory making the
old references to packet pointers invalid.

This patch fixes this issue.

Fixes: f792b1a("Fix ACL reject action for UDP packets.")
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1834655
Acked-by: Dumitru Ceara <dceara@redhat.com>
Signed-off-by: Numan Siddique <numans@ovn.org>
  • Loading branch information
numansiddique committed May 12, 2020
1 parent e728246 commit c24920d
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
4 changes: 2 additions & 2 deletions controller/pinctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1570,8 +1570,6 @@ pinctrl_handle_icmp(struct rconn *swconn, const struct flow *ip_flow,
}
ih->icmp6_base.icmp6_cksum = 0;

nh = dp_packet_l3(&packet);

/* RFC 4443: 3.1.
*
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Expand All @@ -1594,9 +1592,11 @@ pinctrl_handle_icmp(struct rconn *swconn, const struct flow *ip_flow,
}

dp_packet_put(&packet, in_ip, in_ip_len);
nh = dp_packet_l3(&packet);
nh->ip6_plen = htons(ICMP6_DATA_HEADER_LEN + in_ip_len);

icmpv6_csum = packet_csum_pseudoheader6(dp_packet_l3(&packet));
ih = dp_packet_l4(&packet);
ih->icmp6_base.icmp6_cksum = csum_finish(
csum_continue(icmpv6_csum, ih,
in_ip_len + ICMP6_DATA_HEADER_LEN));
Expand Down
2 changes: 1 addition & 1 deletion tests/system-ovn.at
Original file line number Diff line number Diff line change
Expand Up @@ -3967,7 +3967,7 @@ OVS_WAIT_UNTIL([
NS_CHECK_EXEC([sw0-p1-rej], [tcpdump -n -c 1 -i sw0-p1-rej udp port 90 > sw0-p1-rej-udp.pcap &], [0])
NS_CHECK_EXEC([sw0-p1-rej], [tcpdump -n -c 1 -i sw0-p1-rej icmp > sw0-p1-rej-icmp.pcap &], [0])

echo "foo" > foo
printf '.%.0s' {1..100} > foo
OVS_WAIT_UNTIL([
ip netns exec sw0-p1-rej nc -u 10.0.0.4 90 < foo
c=$(cat sw0-p1-rej-icmp.pcap | grep \
Expand Down

0 comments on commit c24920d

Please sign in to comment.