From: William Tu <u9012...@gmail.com> Date: Fri, 18 Aug 2017 06:24:40 -0700
> +static int erspan_rcv(struct sk_buff *skb, struct tnl_ptk_info *tpi, > + int gre_hdr_len) > +{ > + struct net *net = dev_net(skb->dev); > + struct ip_tunnel_net *itn; > + struct ip_tunnel *tunnel; > + struct metadata_dst *tun_dst = NULL; > + const struct iphdr *iph; > + struct erspanhdr *ershdr; > + __be32 index; > + __be32 session_id; > + int len; Please order local variables from longest to shortest line, ie. reverse christmas tree format. > + > + itn = net_generic(net, erspan_net_id); > + iph = ip_hdr(skb); > + len = iph->ihl * 4 + gre_hdr_len + sizeof(*ershdr); > + > + if (unlikely(!pskb_may_pull(skb, len))) > + return -ENOMEM; I think the len passed here is wrong, it should be "gre_hdr_len + sizeof(*ershdr)". > +static void erspan_build_header(struct sk_buff *skb, > + __be32 id, u32 index, bool truncate) > +{ > + struct erspanhdr *ershdr; > + struct iphdr *iphdr = ip_hdr(skb); > + struct ethhdr *eth = eth_hdr(skb); > + struct qtag_prefix { > + __be16 eth_type; > + __be16 tci; > + } *qp; > + u16 vlan_tci = 0; > + enum erspan_encap_type enc_type = ERSPAN_ENCAP_NOVLAN; Reverse christmas tree for the local variables, please. > +static int erspan_validate(struct nlattr *tb[], struct nlattr *data[], > + struct netlink_ext_ack *extack) > +{ > + int ret; > + __be16 flags = 0; Likewise.