* [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one().
@ 2024-05-29 19:01 Guillaume Nault
2024-05-29 19:10 ` Guillaume Nault
2024-06-04 10:55 ` Paolo Abeni
0 siblings, 2 replies; 6+ messages in thread
From: Guillaume Nault @ 2024-05-29 19:01 UTC (permalink / raw)
To: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet; +Cc: netdev
Ensure the inner IP header is part of the skb's linear data before
setting old_iph. Otherwise, on a fragmented skb, old_iph could point
outside of the packet data.
Use skb_vlan_inet_prepare() on classical VXLAN devices to accommodate
for potential VLANs. Use pskb_inet_may_pull() for VXLAN-GPE as there's
no Ethernet header in that case.
Signed-off-by: Guillaume Nault <gnault@redhat.com>
---
drivers/net/vxlan/vxlan_core.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/net/vxlan/vxlan_core.c b/drivers/net/vxlan/vxlan_core.c
index f78dd0438843..323308734192 100644
--- a/drivers/net/vxlan/vxlan_core.c
+++ b/drivers/net/vxlan/vxlan_core.c
@@ -2339,7 +2339,7 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
struct ip_tunnel_key *pkey;
struct ip_tunnel_key key;
struct vxlan_dev *vxlan = netdev_priv(dev);
- const struct iphdr *old_iph = ip_hdr(skb);
+ const struct iphdr *old_iph;
struct vxlan_metadata _md;
struct vxlan_metadata *md = &_md;
unsigned int pkt_len = skb->len;
@@ -2355,6 +2355,16 @@ void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
bool xnet = !net_eq(vxlan->net, dev_net(vxlan->dev));
__be32 vni = 0;
+ if (flags & VXLAN_F_GPE) {
+ if (!pskb_inet_may_pull(skb))
+ goto drop;
+ } else {
+ if (!skb_vlan_inet_prepare(skb))
+ goto drop;
+ }
+
+ old_iph = ip_hdr(skb);
+
info = skb_tunnel_info(skb);
use_cache = ip_tunnel_dst_cache_usable(skb, info);
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one().
2024-05-29 19:01 [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one() Guillaume Nault
@ 2024-05-29 19:10 ` Guillaume Nault
2024-06-04 10:55 ` Paolo Abeni
1 sibling, 0 replies; 6+ messages in thread
From: Guillaume Nault @ 2024-05-29 19:10 UTC (permalink / raw)
To: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet
Cc: netdev, stephen hemminger
On Wed, May 29, 2024 at 09:01:12PM +0200, Guillaume Nault wrote:
> Ensure the inner IP header is part of the skb's linear data before
> setting old_iph. Otherwise, on a fragmented skb, old_iph could point
> outside of the packet data.
Forgot the Fixes tag. Sorry.
Fixes: d342894c5d2f ("vxlan: virtual extensible lan")
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one().
2024-05-29 19:01 [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one() Guillaume Nault
2024-05-29 19:10 ` Guillaume Nault
@ 2024-06-04 10:55 ` Paolo Abeni
2024-06-05 13:37 ` Guillaume Nault
1 sibling, 1 reply; 6+ messages in thread
From: Paolo Abeni @ 2024-06-04 10:55 UTC (permalink / raw)
To: Guillaume Nault, David Miller, Jakub Kicinski, Eric Dumazet; +Cc: netdev
On Wed, 2024-05-29 at 21:01 +0200, Guillaume Nault wrote:
> Ensure the inner IP header is part of the skb's linear data before
> setting old_iph. Otherwise, on a fragmented skb, old_iph could point
> outside of the packet data.
>
> Use skb_vlan_inet_prepare() on classical VXLAN devices to accommodate
> for potential VLANs. Use pskb_inet_may_pull() for VXLAN-GPE as there's
> no Ethernet header in that case.
AFAICS even vxlan-GPE allows an ethernet header, see tun_p_to_eth_p()
and:
https://www.ietf.org/archive/id/draft-ietf-nvo3-vxlan-gpe-12.html#name-multi-protocol-support
What I'm missing?
Thanks,
Paolo
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one().
2024-06-04 10:55 ` Paolo Abeni
@ 2024-06-05 13:37 ` Guillaume Nault
2024-06-05 13:49 ` Eric Dumazet
0 siblings, 1 reply; 6+ messages in thread
From: Guillaume Nault @ 2024-06-05 13:37 UTC (permalink / raw)
To: Paolo Abeni; +Cc: David Miller, Jakub Kicinski, Eric Dumazet, netdev
On Tue, Jun 04, 2024 at 12:55:53PM +0200, Paolo Abeni wrote:
> On Wed, 2024-05-29 at 21:01 +0200, Guillaume Nault wrote:
> > Ensure the inner IP header is part of the skb's linear data before
> > setting old_iph. Otherwise, on a fragmented skb, old_iph could point
> > outside of the packet data.
> >
> > Use skb_vlan_inet_prepare() on classical VXLAN devices to accommodate
> > for potential VLANs. Use pskb_inet_may_pull() for VXLAN-GPE as there's
> > no Ethernet header in that case.
>
> AFAICS even vxlan-GPE allows an ethernet header, see tun_p_to_eth_p()
> and:
>
> https://www.ietf.org/archive/id/draft-ietf-nvo3-vxlan-gpe-12.html#name-multi-protocol-support
>
> What I'm missing?
Didn't see that. I'll post a v2.
Thanks.
> Thanks,
>
> Paolo
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one().
2024-06-05 13:37 ` Guillaume Nault
@ 2024-06-05 13:49 ` Eric Dumazet
2024-06-05 15:53 ` Guillaume Nault
0 siblings, 1 reply; 6+ messages in thread
From: Eric Dumazet @ 2024-06-05 13:49 UTC (permalink / raw)
To: Guillaume Nault; +Cc: Paolo Abeni, David Miller, Jakub Kicinski, netdev
On Wed, Jun 5, 2024 at 3:38 PM Guillaume Nault <gnault@redhat.com> wrote:
>
> On Tue, Jun 04, 2024 at 12:55:53PM +0200, Paolo Abeni wrote:
> > On Wed, 2024-05-29 at 21:01 +0200, Guillaume Nault wrote:
> > > Ensure the inner IP header is part of the skb's linear data before
> > > setting old_iph. Otherwise, on a fragmented skb, old_iph could point
> > > outside of the packet data.
What is a "fragmented skb" ?
> > >
> > > Use skb_vlan_inet_prepare() on classical VXLAN devices to accommodate
> > > for potential VLANs. Use pskb_inet_may_pull() for VXLAN-GPE as there's
> > > no Ethernet header in that case.
> >
> > AFAICS even vxlan-GPE allows an ethernet header, see tun_p_to_eth_p()
> > and:
> >
> > https://www.ietf.org/archive/id/draft-ietf-nvo3-vxlan-gpe-12.html#name-multi-protocol-support
> >
> > What I'm missing?
>
> Didn't see that. I'll post a v2.
> Thanks.
Also please add a Fixes: tag
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one().
2024-06-05 13:49 ` Eric Dumazet
@ 2024-06-05 15:53 ` Guillaume Nault
0 siblings, 0 replies; 6+ messages in thread
From: Guillaume Nault @ 2024-06-05 15:53 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Paolo Abeni, David Miller, Jakub Kicinski, netdev
On Wed, Jun 05, 2024 at 03:49:47PM +0200, Eric Dumazet wrote:
> On Wed, Jun 5, 2024 at 3:38 PM Guillaume Nault <gnault@redhat.com> wrote:
> >
> > On Tue, Jun 04, 2024 at 12:55:53PM +0200, Paolo Abeni wrote:
> > > On Wed, 2024-05-29 at 21:01 +0200, Guillaume Nault wrote:
> > > > Ensure the inner IP header is part of the skb's linear data before
> > > > setting old_iph. Otherwise, on a fragmented skb, old_iph could point
> > > > outside of the packet data.
>
> What is a "fragmented skb" ?
I meant "non linear". I'll rephrase in v2.
> > > >
> > > > Use skb_vlan_inet_prepare() on classical VXLAN devices to accommodate
> > > > for potential VLANs. Use pskb_inet_may_pull() for VXLAN-GPE as there's
> > > > no Ethernet header in that case.
> > >
> > > AFAICS even vxlan-GPE allows an ethernet header, see tun_p_to_eth_p()
> > > and:
> > >
> > > https://www.ietf.org/archive/id/draft-ietf-nvo3-vxlan-gpe-12.html#name-multi-protocol-support
> > >
> > > What I'm missing?
> >
> > Didn't see that. I'll post a v2.
> > Thanks.
>
> Also please add a Fixes: tag
Yes, I forgot it in the original posting.
I added it as a reply to the patch email.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-06-05 15:53 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-29 19:01 [PATCH net] vxlan: Pull inner IP header in vxlan_xmit_one() Guillaume Nault
2024-05-29 19:10 ` Guillaume Nault
2024-06-04 10:55 ` Paolo Abeni
2024-06-05 13:37 ` Guillaume Nault
2024-06-05 13:49 ` Eric Dumazet
2024-06-05 15:53 ` Guillaume Nault
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).