struct ovs_gso_cb is stored in skb->cd. avoid going beyond size of skb->cb.
Signed-off-by: Pravin B Shelar <pshe...@ovn.org> --- datapath/linux/compat/gso.c | 1 + datapath/linux/compat/gso.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/datapath/linux/compat/gso.c b/datapath/linux/compat/gso.c index 1f24e74..10412c0 100644 --- a/datapath/linux/compat/gso.c +++ b/datapath/linux/compat/gso.c @@ -171,6 +171,7 @@ static struct sk_buff *tnl_skb_gso_segment(struct sk_buff *skb, __be16 proto = skb->protocol; char cb[sizeof(skb->cb)]; + BUILD_BUG_ON(sizeof(struct ovs_gso_cb) > FIELD_SIZEOF(struct sk_buff, cb)); OVS_GSO_CB(skb)->ipv6 = (sa_family == AF_INET6); /* setup whole inner packet to get protocol. */ __skb_pull(skb, mac_offset); diff --git a/datapath/linux/compat/gso.h b/datapath/linux/compat/gso.h index fa0a7db..e93998c 100644 --- a/datapath/linux/compat/gso.h +++ b/datapath/linux/compat/gso.h @@ -14,6 +14,7 @@ struct ovs_gso_cb { #ifndef USE_UPSTREAM_TUNNEL_GSO gso_fix_segment_t fix_segment; #endif + bool ipv6; #ifndef HAVE_INNER_PROTOCOL __be16 inner_protocol; #endif @@ -21,7 +22,6 @@ struct ovs_gso_cb { /* Keep original tunnel info during userspace action execution. */ struct metadata_dst *fill_md_dst; #endif - bool ipv6; }; #define OVS_GSO_CB(skb) ((struct ovs_gso_cb *)(skb)->cb) -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev