This seems to have been a "thinko".  IP_ECN_decapsulate needs info
from both internal and external headers.

Signed-off-by: John W. Linville <linvi...@tuxdriver.com>
---
 drivers/net/geneve.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

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;
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to