bnxt_en: Fix RCU locking for ntuple filters in bnxt_rx_flow_steer()
authorMichael Chan <michael.chan@broadcom.com>
Fri, 5 Jan 2024 23:54:39 +0000 (15:54 -0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 9 Jan 2024 03:15:03 +0000 (19:15 -0800)
Similar to the previous patch, RCU locking was released too early
in bnxt_rx_flow_steer().  Fix it to unlock after reading fltr->base.sw_id
to guarantee that fltr won't be freed while we are still reading it.

Fixes: cb5bdd292dc0 ("bnxt_en: Add bnxt_lookup_ntp_filter_from_idx() function")
Reported-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/netdev/20231225165653.GH5962@kernel.org/
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20240105235439.28282-4-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index fb5af8a34c8f6c8b0e77013e4dd1039e7aebce89..0aacd3c6ed5c0bbf2e02f1ddddc5dc292ae84a07 100644 (file)
@@ -14020,8 +14020,8 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
        rcu_read_lock();
        fltr = bnxt_lookup_ntp_filter_from_idx(bp, new_fltr, idx);
        if (fltr) {
-               rcu_read_unlock();
                rc = fltr->base.sw_id;
+               rcu_read_unlock();
                goto err_free;
        }
        rcu_read_unlock();