mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 10:39:04 +00:00
fbcfb7f7af
Signed-off-by: Felix Fietkau <nbd@nbd.name>
34 lines
1.1 KiB
Diff
34 lines
1.1 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Mon, 20 Mar 2023 15:49:15 +0100
|
|
Subject: [PATCH] net: ethernet: mtk_eth_soc: fix flow_offload related refcount
|
|
bug
|
|
|
|
Since we call flow_block_cb_decref on FLOW_BLOCK_UNBIND, we need to call
|
|
flow_block_cb_incref unconditionally, even for a newly allocated cb.
|
|
Fixes a use-after-free bug. Also fix the accidentally inverted refcount
|
|
check on unbind.
|
|
|
|
Fixes: 502e84e2382d ("net: ethernet: mtk_eth_soc: add flow offloading support")
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
|
+++ b/drivers/net/ethernet/mediatek/mtk_ppe_offload.c
|
|
@@ -584,6 +584,7 @@ mtk_eth_setup_tc_block(struct net_device
|
|
if (IS_ERR(block_cb))
|
|
return PTR_ERR(block_cb);
|
|
|
|
+ flow_block_cb_incref(block_cb);
|
|
flow_block_cb_add(block_cb, f);
|
|
list_add_tail(&block_cb->driver_list, &block_cb_list);
|
|
return 0;
|
|
@@ -592,7 +593,7 @@ mtk_eth_setup_tc_block(struct net_device
|
|
if (!block_cb)
|
|
return -ENOENT;
|
|
|
|
- if (flow_block_cb_decref(block_cb)) {
|
|
+ if (!flow_block_cb_decref(block_cb)) {
|
|
flow_block_cb_remove(block_cb, f);
|
|
list_del(&block_cb->driver_list);
|
|
}
|