From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org,
Martin Varghese <martin.varghese@nokia.com>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 5.3 22/25] net: Fixed updating of ethertype in skb_mpls_push()
Date: Tue, 17 Dec 2019 21:16:21 +0100 [thread overview]
Message-ID: <20191217200912.280804604@linuxfoundation.org> (raw)
In-Reply-To: <20191217200903.179327435@linuxfoundation.org>
From: Martin Varghese <martin.varghese@nokia.com>
[ Upstream commit d04ac224b1688f005a84f764cfe29844f8e9da08 ]
The skb_mpls_push was not updating ethertype of an ethernet packet if
the packet was originally received from a non ARPHRD_ETHER device.
In the below OVS data path flow, since the device corresponding to
port 7 is an l3 device (ARPHRD_NONE) the skb_mpls_push function does
not update the ethertype of the packet even though the previous
push_eth action had added an ethernet header to the packet.
recirc_id(0),in_port(7),eth_type(0x0800),ipv4(tos=0/0xfc,ttl=64,frag=no),
actions:push_eth(src=00:00:00:00:00:00,dst=00:00:00:00:00:00),
push_mpls(label=13,tc=0,ttl=64,bos=1,eth_type=0x8847),4
Fixes: 8822e270d697 ("net: core: move push MPLS functionality from OvS to core helper")
Signed-off-by: Martin Varghese <martin.varghese@nokia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/linux/skbuff.h | 2 +-
net/core/skbuff.c | 4 ++--
net/openvswitch/actions.c | 3 ++-
net/sched/act_mpls.c | 3 ++-
4 files changed, 7 insertions(+), 5 deletions(-)
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -3482,7 +3482,7 @@ int __skb_vlan_pop(struct sk_buff *skb,
int skb_vlan_pop(struct sk_buff *skb);
int skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci);
int skb_mpls_push(struct sk_buff *skb, __be32 mpls_lse, __be16 mpls_proto,
- int mac_len);
+ int mac_len, bool ethernet);
int skb_mpls_pop(struct sk_buff *skb, __be16 next_proto, int mac_len,
bool ethernet);
int skb_mpls_update_lse(struct sk_buff *skb, __be32 mpls_lse);
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -5472,7 +5472,7 @@ static void skb_mod_eth_type(struct sk_b
* Returns 0 on success, -errno otherwise.
*/
int skb_mpls_push(struct sk_buff *skb, __be32 mpls_lse, __be16 mpls_proto,
- int mac_len)
+ int mac_len, bool ethernet)
{
struct mpls_shim_hdr *lse;
int err;
@@ -5503,7 +5503,7 @@ int skb_mpls_push(struct sk_buff *skb, _
lse->label_stack_entry = mpls_lse;
skb_postpush_rcsum(skb, lse, MPLS_HLEN);
- if (skb->dev && skb->dev->type == ARPHRD_ETHER)
+ if (ethernet)
skb_mod_eth_type(skb, eth_hdr(skb), mpls_proto);
skb->protocol = mpls_proto;
--- a/net/openvswitch/actions.c
+++ b/net/openvswitch/actions.c
@@ -166,7 +166,8 @@ static int push_mpls(struct sk_buff *skb
int err;
err = skb_mpls_push(skb, mpls->mpls_lse, mpls->mpls_ethertype,
- skb->mac_len);
+ skb->mac_len,
+ ovs_key_mac_proto(key) == MAC_PROTO_ETHERNET);
if (err)
return err;
--- a/net/sched/act_mpls.c
+++ b/net/sched/act_mpls.c
@@ -83,7 +83,8 @@ static int tcf_mpls_act(struct sk_buff *
break;
case TCA_MPLS_ACT_PUSH:
new_lse = tcf_mpls_get_lse(NULL, p, !eth_p_mpls(skb->protocol));
- if (skb_mpls_push(skb, new_lse, p->tcfm_proto, mac_len))
+ if (skb_mpls_push(skb, new_lse, p->tcfm_proto, mac_len,
+ skb->dev && skb->dev->type == ARPHRD_ETHER))
goto drop;
break;
case TCA_MPLS_ACT_MODIFY:
next prev parent reply other threads:[~2019-12-17 20:17 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-17 20:15 [PATCH 5.3 00/25] 5.3.18-stable review Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 01/25] inet: protect against too small mtu values Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 02/25] mqprio: Fix out-of-bounds access in mqprio_dump Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 03/25] net: bridge: deny dev_set_mac_address() when unregistering Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 04/25] net: dsa: fix flow dissection on Tx path Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 05/25] net: ethernet: ti: cpsw: fix extra rx interrupt Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 06/25] net: sched: fix dump qlen for sch_mq/sch_mqprio with NOLOCK subqueues Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 07/25] net-sysfs: Call dev_hold always in netdev_queue_add_kobject Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 08/25] net: thunderx: start phy before starting autonegotiation Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 09/25] net/tls: Fix return values to avoid ENOTSUPP Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 10/25] openvswitch: support asymmetric conntrack Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 11/25] tcp: md5: fix potential overestimation of TCP option space Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 12/25] tipc: fix ordering of tipc module init and exit routine Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 13/25] net/mlx5e: Query global pause state before setting prio2buffer Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 14/25] net: ipv6: add net argument to ip6_dst_lookup_flow Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 15/25] net: ipv6_stub: use ip6_dst_lookup_flow instead of ip6_dst_lookup Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 16/25] tcp: fix rejected syncookies due to stale timestamps Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 17/25] tcp: tighten acceptance of ACKs not matching a child socket Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 18/25] tcp: Protect accesses to .ts_recent_stamp with {READ,WRITE}_ONCE() Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 19/25] gre: refetch erspan header from skb->data after pskb_may_pull() Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 20/25] Fixed updating of ethertype in function skb_mpls_pop Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 21/25] hsr: fix a NULL pointer dereference in hsr_dev_xmit() Greg Kroah-Hartman
2019-12-17 20:16 ` Greg Kroah-Hartman [this message]
2019-12-17 20:16 ` [PATCH 5.3 23/25] net/mlx5e: Fix TXQ indices to be sequential Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 24/25] page_pool: do not release pool until inflight == 0 Greg Kroah-Hartman
2019-12-17 20:16 ` [PATCH 5.3 25/25] xdp: obtain the mem_id mutex before trying to remove an entry Greg Kroah-Hartman
2019-12-18 8:01 ` [PATCH 5.3 00/25] 5.3.18-stable review Naresh Kamboju
2019-12-18 10:23 ` Jon Hunter
2019-12-18 14:47 ` Guenter Roeck
2019-12-18 21:00 ` shuah
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191217200912.280804604@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.varghese@nokia.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome