From: Alexander Duyck <aduyck@mirantis.com>
To: netdev@vger.kernel.org, davem@davemloft.net, alexander.duyck@gmail.com
Subject: [net-next PATCH 2/5] flow_dissector: Fix fragment handling for header length computation
Date: Wed, 24 Feb 2016 09:29:44 -0800 [thread overview]
Message-ID: <20160224172944.12339.62809.stgit@localhost.localdomain> (raw)
In-Reply-To: <20160224172644.12339.92679.stgit@localhost.localdomain>
It turns out that for IPv4 we were reporting the ip_proto of the fragment,
and for IPv6 we were not. This patch updates that behavior so that we
always report the IP protocol of the fragment. In addition it takes the
steps of updating the payload offset code so that we will determine the
start of the payload not including the L4 header for any fragment after the
first.
Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
---
net/core/flow_dissector.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c
index 1f88f8280280..8bd745f72734 100644
--- a/net/core/flow_dissector.c
+++ b/net/core/flow_dissector.c
@@ -448,13 +448,12 @@ ip_proto_again:
key_control->flags |= FLOW_DIS_IS_FRAGMENT;
nhoff += sizeof(_fh);
+ ip_proto = fh->nexthdr;
if (!(fh->frag_off & htons(IP6_OFFSET))) {
key_control->flags |= FLOW_DIS_FIRST_FRAG;
- if (flags & FLOW_DISSECTOR_F_PARSE_1ST_FRAG) {
- ip_proto = fh->nexthdr;
+ if (flags & FLOW_DISSECTOR_F_PARSE_1ST_FRAG)
goto ip_proto_again;
- }
}
goto out_good;
}
@@ -741,6 +740,11 @@ u32 __skb_get_poff(const struct sk_buff *skb, void *data,
{
u32 poff = keys->control.thoff;
+ /* skip L4 headers for fragments after the first */
+ if ((keys->control.flags & FLOW_DIS_IS_FRAGMENT) &&
+ !(keys->control.flags & FLOW_DIS_FIRST_FRAG))
+ return poff;
+
switch (keys->basic.ip_proto) {
case IPPROTO_TCP: {
/* access doff as u8 to avoid unaligned access */
next prev parent reply other threads:[~2016-02-24 17:29 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-24 17:29 [net-next PATCH 0/5] Flow dissector fixes and improvements Alexander Duyck
2016-02-24 17:29 ` [net-next PATCH 1/5] flow_dissector: Check for IP fragmentation even if not using IPv4 address Alexander Duyck
2016-02-24 18:14 ` Tom Herbert
2016-02-24 17:29 ` Alexander Duyck [this message]
2016-02-24 18:14 ` [net-next PATCH 2/5] flow_dissector: Fix fragment handling for header length computation Tom Herbert
2016-02-24 17:29 ` [net-next PATCH 3/5] flow_dissector: Correctly handle parsing FCoE Alexander Duyck
2016-02-24 18:14 ` Tom Herbert
2016-02-24 17:29 ` [net-next PATCH 4/5] flow_dissector: Use same pointer for IPv4 and IPv6 addresses Alexander Duyck
2016-02-24 18:15 ` Tom Herbert
2016-02-24 17:30 ` [net-next PATCH 5/5] eth: Pull header from first fragment via eth_get_headlen Alexander Duyck
2016-02-24 18:15 ` Tom Herbert
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=20160224172944.12339.62809.stgit@localhost.localdomain \
--to=aduyck@mirantis.com \
--cc=alexander.duyck@gmail.com \
--cc=davem@davemloft.net \
--cc=netdev@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;
as well as URLs for NNTP newsgroup(s).