]> git.ipfire.org Git - thirdparty/linux.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)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 5 Mar 2026 14:39:51 +0000 (15:39 +0100)
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>
drivers/net/ethernet/mediatek/mtk_eth_soc.c

index e5e2ffa9c542bfc88dc0d7553d0a6b2a169ec74b..ddc321a02fdae03d4602d0b9053b97c4788f15ac 100644 (file)
@@ -3748,12 +3748,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;
 }