flow_compose_l4() can cause 'b' to be reallocated, thus the network header pointer needs to be refreshed afterward.
Found by valgrind in the IPv6 case. I updated the IPv4 case too just in case, and for consistency. Signed-off-by: Ben Pfaff <b...@nicira.com> --- lib/flow.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/flow.c b/lib/flow.c index 76cef66..1f7f310 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -1512,6 +1512,7 @@ flow_compose(struct ofpbuf *b, const struct flow *flow) l4_len = flow_compose_l4(b, flow); + ip = ofpbuf_l3(b); ip->ip_tot_len = htons(b->l4_ofs - b->l3_ofs + l4_len); ip->ip_csum = csum(ip, sizeof *ip); } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) { @@ -1530,6 +1531,7 @@ flow_compose(struct ofpbuf *b, const struct flow *flow) l4_len = flow_compose_l4(b, flow); + nh = ofpbuf_l3(b); nh->ip6_plen = htons(l4_len); } else if (flow->dl_type == htons(ETH_TYPE_ARP) || flow->dl_type == htons(ETH_TYPE_RARP)) { -- 1.7.10.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev