gre_demux.c (8dd06ef34b6e2f41b29fbf5fc1663780f2524285) | gre_demux.c (085c7c4e1c0e50d90b7d90f61a12e12b317a91e2) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * GRE over IPv4 demultiplexer driver 4 * 5 * Authors: Dmitry Kozlov (xeb@mail.ru) 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 114 unchanged lines hidden (view full) --- 123 hdr_len += 4; 124 } 125 tpi->hdr_len = hdr_len; 126 127 /* ERSPAN ver 1 and 2 protocol sets GRE key field 128 * to 0 and sets the configured key in the 129 * inner erspan header field 130 */ | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * GRE over IPv4 demultiplexer driver 4 * 5 * Authors: Dmitry Kozlov (xeb@mail.ru) 6 */ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt --- 114 unchanged lines hidden (view full) --- 123 hdr_len += 4; 124 } 125 tpi->hdr_len = hdr_len; 126 127 /* ERSPAN ver 1 and 2 protocol sets GRE key field 128 * to 0 and sets the configured key in the 129 * inner erspan header field 130 */ |
131 if (greh->protocol == htons(ETH_P_ERSPAN) || | 131 if ((greh->protocol == htons(ETH_P_ERSPAN) && hdr_len != 4) || |
132 greh->protocol == htons(ETH_P_ERSPAN2)) { 133 struct erspan_base_hdr *ershdr; 134 135 if (!pskb_may_pull(skb, nhs + hdr_len + sizeof(*ershdr))) 136 return -EINVAL; 137 138 ershdr = (struct erspan_base_hdr *)(skb->data + nhs + hdr_len); 139 tpi->key = cpu_to_be32(get_session_id(ershdr)); --- 83 unchanged lines hidden --- | 132 greh->protocol == htons(ETH_P_ERSPAN2)) { 133 struct erspan_base_hdr *ershdr; 134 135 if (!pskb_may_pull(skb, nhs + hdr_len + sizeof(*ershdr))) 136 return -EINVAL; 137 138 ershdr = (struct erspan_base_hdr *)(skb->data + nhs + hdr_len); 139 tpi->key = cpu_to_be32(get_session_id(ershdr)); --- 83 unchanged lines hidden --- |