Do break when we see routing flag or a non-zero version number in GRE
header.

Acked-by: Jiri Pirko <j...@resnulli.us>
Signed-off-by: Tom Herbert <t...@herbertland.com>
---
 net/core/flow_dissector.c | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
index 1f2d893..7f69916 100644
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
@@ -308,30 +308,30 @@ flow_label:
                 * Only look inside GRE if version zero and no
                 * routing
                 */
-               if (!(hdr->flags & (GRE_VERSION|GRE_ROUTING))) {
-                       proto = hdr->proto;
+               if (hdr->flags & (GRE_VERSION | GRE_ROUTING))
+                       break;
+
+               proto = hdr->proto;
+               nhoff += 4;
+               if (hdr->flags & GRE_CSUM)
                        nhoff += 4;
-                       if (hdr->flags & GRE_CSUM)
-                               nhoff += 4;
-                       if (hdr->flags & GRE_KEY)
-                               nhoff += 4;
-                       if (hdr->flags & GRE_SEQ)
-                               nhoff += 4;
-                       if (proto == htons(ETH_P_TEB)) {
-                               const struct ethhdr *eth;
-                               struct ethhdr _eth;
-
-                               eth = __skb_header_pointer(skb, nhoff,
-                                                          sizeof(_eth),
-                                                          data, hlen, &_eth);
-                               if (!eth)
-                                       return false;
-                               proto = eth->h_proto;
-                               nhoff += sizeof(*eth);
-                       }
-                       goto again;
+               if (hdr->flags & GRE_KEY)
+                       nhoff += 4;
+               if (hdr->flags & GRE_SEQ)
+                       nhoff += 4;
+               if (proto == htons(ETH_P_TEB)) {
+                       const struct ethhdr *eth;
+                       struct ethhdr _eth;
+
+                       eth = __skb_header_pointer(skb, nhoff,
+                                                  sizeof(_eth),
+                                                  data, hlen, &_eth);
+                       if (!eth)
+                               return false;
+                       proto = eth->h_proto;
+                       nhoff += sizeof(*eth);
                }
-               break;
+               goto again;
        }
        case IPPROTO_IPIP:
                proto = htons(ETH_P_IP);
-- 
1.8.1

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