From: Sowmini Varadhan <sowmini.varadhan@oracle.com>
To: alexander.h.duyck@intel.com, netdev@vger.kernel.org
Cc: sowmini.varadhan@oracle.com
Subject: [PATCH RFC] ixgbe: ixgbe_atr() must check if network header is available in headlen
Date: Sat, 15 Oct 2016 17:31:04 -0400 [thread overview]
Message-ID: <20161015213104.GK31471@oracle.com> (raw)
For some Tx paths (e.g., tpacket_snd()), ixgbe_atr may be
passed down an sk_buff that has the network and transport
header in the paged data, so it needs to make sure these
headers are available in the headlen bytes to calculate the
l4_proto.
This patch bails out if the headlen is "too short", and does
not attempt to call skb_header_pointer() to get the needed
bytes: the assumption is that the caller should set things
up properly if the l4_proto based tx steering is desired.
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index a244d9a..0868de1 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -7632,6 +7632,7 @@ static void ixgbe_atr(struct ixgbe_ring *ring,
struct sk_buff *skb;
__be16 vlan_id;
int l4_proto;
+ int min_hdr_size = 0;
/* if ring doesn't have a interrupt vector, cannot perform ATR */
if (!q_vector)
@@ -7650,6 +7651,14 @@ static void ixgbe_atr(struct ixgbe_ring *ring,
/* snag network header to get L4 type and address */
skb = first->skb;
+ if (first->protocol == htons(ETH_P_IP))
+ min_hdr_size = sizeof(struct iphdr) +
+ sizeof(struct tcphdr);
+ else if (first->protocol == htons(ETH_P_IPV6))
+ min_hdr_size = sizeof(struct ipv6hdr) +
+ sizeof(struct tcphdr);
+ if (min_hdr_size && skb_headlen(skb) < ETH_HLEN + min_hdr_size)
+ return;
hdr.network = skb_network_header(skb);
if (skb->encapsulation &&
first->protocol == htons(ETH_P_IP) &&
--
1.7.1
next reply other threads:[~2016-10-15 21:31 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-15 21:31 Sowmini Varadhan [this message]
2016-10-17 14:38 ` [PATCH RFC] ixgbe: ixgbe_atr() must check if network header is available in headlen Duyck, Alexander H
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=20161015213104.GK31471@oracle.com \
--to=sowmini.varadhan@oracle.com \
--cc=alexander.h.duyck@intel.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.