From: Pravin Shelar <pshelar@ovn.org>
To: Ed Swierk <eswierk@skyportsystems.com>
Cc: ovs-dev <ovs-dev@openvswitch.org>,
netdev <netdev@vger.kernel.org>,
Benjamin Warren <ben@skyportsystems.com>,
Keith Holleman <holleman@skyportsystems.com>
Subject: Re: [PATCH v2] openvswitch: Trim off padding before L3+ netfilter processing
Date: Tue, 9 Jan 2018 14:06:57 -0800 [thread overview]
Message-ID: <CAOrHB_ArESDpqqhdDv8f448GnE8jP9xAeHCCoEEHH_iQgiNr3Q@mail.gmail.com> (raw)
In-Reply-To: <f92d898f-f612-f17a-e3d7-ece8a9a19db3@skyportsystems.com>
On Mon, Jan 8, 2018 at 7:02 PM, Ed Swierk <eswierk@skyportsystems.com> wrote:
> On 1/6/18 10:57, Pravin Shelar wrote:
>> On Fri, Jan 5, 2018 at 10:59 PM, Ed Swierk <eswierk@skyportsystems.com> wrote:
>>>
>>>
>>> On Jan 5, 2018 22:17, "Pravin Shelar" <pshelar@ovn.org> wrote:
>>>
>>> On Fri, Jan 5, 2018 at 3:20 PM, Ed Swierk <eswierk@skyportsystems.com>
>>> wrote:
>>>> On Fri, Jan 5, 2018 at 10:14 AM, Ed Swierk <eswierk@skyportsystems.com>
>>>> wrote:
>>>>> On Thu, Jan 4, 2018 at 7:36 PM, Pravin Shelar <pshelar@ovn.org> wrote:
>>>>>> OVS already pull all required headers in skb linear data, so no need
>>>>>> to redo all of it. only check required is the ip-checksum validation.
>>>>>> I think we could avoid it in most of cases by checking skb length to
>>>>>> ipheader length before verifying the ip header-checksum.
>>>>>
>>>>> Shouldn't the IP header checksum be verified even earlier, like in
>>>>> key_extract(), before actually using any of the fields in the IP
>>>>> header?
>>>>
>>>> Something like this for verifying the IP header checksum (not tested):
>>>>
>>> AFAIU openflow does not need this verification, so it is not required
>>> in flow extract.
>>>
>>>
>>> Okay. How about my proposed trimming implementation, caching the pad length
>>> in the ovs cb?
>>>
>> Caching the length is not that simple, OVS actions can change the
>> length. Keeping it consistent with packet would be more work, so lets
>> calculate it in ovs-ct function.
>>
>
> Something like this?
>
Sure, Can you submit formal patch?
> diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
> index a38c80e..282325d 100644
> --- a/include/linux/skbuff.h
> +++ b/include/linux/skbuff.h
> @@ -4084,6 +4084,8 @@ struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb,
> unsigned int transport_len,
> __sum16(*skb_chkf)(struct sk_buff *skb));
>
> +int skb_network_trim(struct sk_buff *skb);
> +
> /**
> * skb_head_is_locked - Determine if the skb->head is locked down
> * @skb: skb to check
> diff --git a/net/core/skbuff.c b/net/core/skbuff.c
> index 08f5740..c68e927 100644
> --- a/net/core/skbuff.c
> +++ b/net/core/skbuff.c
> @@ -4740,6 +4740,41 @@ struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb,
> }
> EXPORT_SYMBOL(skb_checksum_trimmed);
>
> +/**
> + * skb_network_trim - trim skb to length specified by the network header
> + * @skb: the skb to trim
> + *
> + * Trims the skb to the length specified by the network header,
> + * removing any trailing padding. Leaves the skb alone if the protocol
> + * is not IP or IPv6. Frees the skb on error.
> + *
> + * Caller needs to pull the skb to the network header.
> + */
> +int skb_network_trim(struct sk_buff *skb)
> +{
> + unsigned int len;
> + int err;
> +
> + switch (skb->protocol) {
> + case htons(ETH_P_IP):
> + len = ntohs(ip_hdr(skb)->tot_len);
> + break;
> + case htons(ETH_P_IPV6):
> + len = sizeof(struct ipv6hdr)
> + + ntohs(ipv6_hdr(skb)->payload_len);
> + break;
> + default:
> + len = skb->len;
> + }
> +
> + err = pskb_trim_rcsum(skb, len);
> + if (unlikely(err))
> + kfree_skb(skb);
> +
> + return err;
> +}
> +EXPORT_SYMBOL(skb_network_trim);
> +
> void __skb_warn_lro_forwarding(const struct sk_buff *skb)
> {
> net_warn_ratelimited("%s: received packets cannot be forwarded while LRO is enabled\n",
> diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
> index b27c5c6..73418d3 100644
> --- a/net/openvswitch/conntrack.c
> +++ b/net/openvswitch/conntrack.c
> @@ -1112,6 +1112,10 @@ int ovs_ct_execute(struct net *net, struct sk_buff *skb,
> nh_ofs = skb_network_offset(skb);
> skb_pull_rcsum(skb, nh_ofs);
>
> + err = skb_network_trim(skb);
> + if (err)
> + return err;
> +
> if (key->ip.frag != OVS_FRAG_TYPE_NONE) {
> err = handle_fragments(net, key, info->zone.id, skb);
> if (err)
next prev parent reply other threads:[~2018-01-09 22:06 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-12 16:17 [PATCH] openvswitch: Trim off padding before L3 conntrack processing Ed Swierk
2017-12-14 0:58 ` Pravin Shelar
2017-12-14 20:05 ` Ed Swierk
2017-12-17 19:22 ` Pravin Shelar
2017-12-17 19:22 ` Pravin Shelar
2017-12-21 15:17 ` [PATCH v2] openvswitch: Trim off padding before L3+ netfilter processing Ed Swierk
2017-12-22 23:31 ` Pravin Shelar
2017-12-22 23:31 ` Pravin Shelar
2017-12-23 0:39 ` Ed Swierk
2018-01-03 6:21 ` Pravin Shelar
2018-01-03 6:21 ` Pravin Shelar
2017-12-23 0:39 ` Ed Swierk
2018-01-04 3:49 ` Ed Swierk
2018-01-05 3:36 ` Pravin Shelar
2018-01-05 18:14 ` Ed Swierk
[not found] ` <CAO_EM_mQgURXZNtW7Qw7OkW4rjp4JWKBmqS8e4pUR=ZuiGCcZQ@mail.gmail.com>
2018-01-06 6:17 ` Pravin Shelar
[not found] ` <CAO_EM_=2qt3zSW1xprkLvcQVKGRTFMUQxCc4-cVLsUcRLj63Hg@mail.gmail.com>
2018-01-06 18:57 ` Pravin Shelar
2018-01-09 0:05 ` Pravin Shelar
2018-01-09 3:02 ` Ed Swierk
2018-01-09 22:06 ` Pravin Shelar [this message]
2018-01-09 3:02 ` Ed Swierk
2018-01-06 6:17 ` Pravin Shelar
2018-01-05 18:14 ` Ed Swierk
2018-01-05 3:36 ` Pravin Shelar
2017-12-21 15:21 ` [PATCH v2 RESEND] " Ed Swierk
2017-12-21 15:21 ` Ed Swierk
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=CAOrHB_ArESDpqqhdDv8f448GnE8jP9xAeHCCoEEHH_iQgiNr3Q@mail.gmail.com \
--to=pshelar@ovn.org \
--cc=ben@skyportsystems.com \
--cc=eswierk@skyportsystems.com \
--cc=holleman@skyportsystems.com \
--cc=netdev@vger.kernel.org \
--cc=ovs-dev@openvswitch.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;
as well as URLs for NNTP newsgroup(s).