]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
bnxt_en: Do not accept fragments for aRFS flow steering.
authorMichael Chan <michael.chan@broadcom.com>
Mon, 27 Jan 2020 09:56:17 +0000 (04:56 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Jan 2020 10:33:28 +0000 (11:33 +0100)
In bnxt_rx_flow_steer(), if the dissected packet is a fragment, do not
proceed to create the ntuple filter and return error instead.  Otherwise
we would create a filter with 0 source and destination ports because
the dissected ports would not be available for fragments.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index fb4a65fe575d6b62f4dfdfb4a35adf7b7e9f98c1..fb67e6656206be956e4f7a72988b0de7b08aa467 100644 (file)
@@ -11100,6 +11100,7 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
        struct ethhdr *eth = (struct ethhdr *)skb_mac_header(skb);
        int rc = 0, idx, bit_id, l2_idx = 0;
        struct hlist_head *head;
+       u32 flags;
 
        if (!ether_addr_equal(dev->dev_addr, eth->h_dest)) {
                struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
@@ -11139,8 +11140,9 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
                rc = -EPROTONOSUPPORT;
                goto err_free;
        }
-       if ((fkeys->control.flags & FLOW_DIS_ENCAPSULATION) &&
-           bp->hwrm_spec_code < 0x10601) {
+       flags = fkeys->control.flags;
+       if (((flags & FLOW_DIS_ENCAPSULATION) &&
+            bp->hwrm_spec_code < 0x10601) || (flags & FLOW_DIS_IS_FRAGMENT)) {
                rc = -EPROTONOSUPPORT;
                goto err_free;
        }