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