Message ID | 1442510271-10110-1-git-send-email-linville@tuxdriver.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
On Thu, Sep 17, 2015 at 10:17 AM, John W. Linville <linville@tuxdriver.com> wrote: > diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c > index da3259ce7c8d..a917ae1cfbf3 100644 > --- a/drivers/net/geneve.c > +++ b/drivers/net/geneve.c > @@ -178,13 +178,15 @@ static void geneve_rx(struct geneve_sock *gs, struct sk_buff *skb) > > skb_reset_network_header(skb); > > - iph = ip_hdr(skb); /* Now inner IP header... */ > - err = IP_ECN_decapsulate(iph, skb); > + if (iph) > + err = IP_ECN_decapsulate(iph, skb); It looks like this is now conditional based on !collect_md. I'm not sure that we want to have a difference in behavior between the two. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, Sep 17, 2015 at 12:46:48PM -0700, Jesse Gross wrote: > On Thu, Sep 17, 2015 at 10:17 AM, John W. Linville > <linville@tuxdriver.com> wrote: > > diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c > > index da3259ce7c8d..a917ae1cfbf3 100644 > > --- a/drivers/net/geneve.c > > +++ b/drivers/net/geneve.c > > @@ -178,13 +178,15 @@ static void geneve_rx(struct geneve_sock *gs, struct sk_buff *skb) > > > > skb_reset_network_header(skb); > > > > - iph = ip_hdr(skb); /* Now inner IP header... */ > > - err = IP_ECN_decapsulate(iph, skb); > > + if (iph) > > + err = IP_ECN_decapsulate(iph, skb); > > It looks like this is now conditional based on !collect_md. I'm not > sure that we want to have a difference in behavior between the two. Sure, I can move the iph assignment higher-up and keep the other bits unconditional. John
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index da3259ce7c8d..a917ae1cfbf3 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c @@ -121,10 +121,10 @@ static void geneve_rx(struct geneve_sock *gs, struct sk_buff *skb) struct metadata_dst *tun_dst = NULL; struct geneve_dev *geneve = NULL; struct pcpu_sw_netstats *stats; - struct iphdr *iph; + struct iphdr *iph = NULL; u8 *vni; __be32 addr; - int err; + int err = 0; if (gs->collect_md) { static u8 zero_vni[3]; @@ -178,13 +178,15 @@ static void geneve_rx(struct geneve_sock *gs, struct sk_buff *skb) skb_reset_network_header(skb); - iph = ip_hdr(skb); /* Now inner IP header... */ - err = IP_ECN_decapsulate(iph, skb); + if (iph) + err = IP_ECN_decapsulate(iph, skb); if (unlikely(err)) { if (log_ecn_error) - net_info_ratelimited("non-ECT from %pI4 with TOS=%#x\n", - &iph->saddr, iph->tos); + if (iph) + net_info_ratelimited("non-ECT from %pI4 " + "with TOS=%#x\n", + &iph->saddr, iph->tos); if (err > 1) { ++geneve->dev->stats.rx_frame_errors; ++geneve->dev->stats.rx_errors;
This seems to have been a "thinko". IP_ECN_decapsulate needs info from both internal and external headers. Signed-off-by: John W. Linville <linville@tuxdriver.com> --- drivers/net/geneve.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)