]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: ethernet: mtk_eth_soc: Reset prog ptr to old_prog in case of error in mtk_xdp_se...
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 3 Mar 2026 17:56:39 +0000 (18:56 +0100)
committerSasha Levin <sashal@kernel.org>
Thu, 12 Mar 2026 11:09:58 +0000 (07:09 -0400)
[ Upstream commit 0abc73c8a40fd64ac1739c90bb4f42c418d27a5e ]

Reset eBPF program pointer to old_prog and do not decrease its ref-count
if mtk_open routine in mtk_xdp_setup() fails.

Fixes: 7c26c20da5d42 ("net: ethernet: mtk_eth_soc: add basic XDP support")
Suggested-by: Paolo Valerio <pvalerio@redhat.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260303-mtk-xdp-prog-ptr-fix-v2-1-97b6dbbe240f@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mediatek/mtk_eth_soc.c

index e68997a29191b2a8ce0868873dcfe95c79e10e56..8d3e15bc867d2d2f43b2017c8005a96bcae7ecd3 100644 (file)
@@ -3749,12 +3749,21 @@ static int mtk_xdp_setup(struct net_device *dev, struct bpf_prog *prog,
                mtk_stop(dev);
 
        old_prog = rcu_replace_pointer(eth->prog, prog, lockdep_rtnl_is_held());
+
+       if (netif_running(dev) && need_update) {
+               int err;
+
+               err = mtk_open(dev);
+               if (err) {
+                       rcu_assign_pointer(eth->prog, old_prog);
+
+                       return err;
+               }
+       }
+
        if (old_prog)
                bpf_prog_put(old_prog);
 
-       if (netif_running(dev) && need_update)
-               return mtk_open(dev);
-
        return 0;
 }