[PATCH net v3 1/3] net: ti: icssg-prueth: Fix TX timestamp cleanup crash

From: Meghana Malladi

Date: Tue Nov 10 2026 - 07:35:13 EST


prueth_cleanup_tx_ts() incorrectly frees ERR_PTR(-EBUSY) slots. The TX
path reserves slots with ERR_PTR(-EBUSY) before storing the real skb
pointer. Use IS_ERR_OR_NULL() to skip these reserved slots during
cleanup, preventing NULL pointer dereference and freeing errors.

Fixes: e2dc7bfd677fc ("net: ti: icssg-prueth: Move common functions into a separate file")
Signed-off-by: Meghana Malladi <m-malladi@xxxxxx>
---

Changes from v2(v3-v2):
- Added this commit in the series which fixes the pre-existing issues
flagged by sashiko

drivers/net/ethernet/ti/icssg/icssg_common.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/ti/icssg/icssg_common.c b/drivers/net/ethernet/ti/icssg/icssg_common.c
index 4a7d1a6f470b..8cb2ad2ebece 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_common.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_common.c
@@ -1426,10 +1426,13 @@ void prueth_cleanup_tx_ts(struct prueth_emac *emac)
int i;

for (i = 0; i < PRUETH_MAX_TX_TS_REQUESTS; i++) {
- if (emac->tx_ts_skb[i]) {
+ /* Slot may hold ERR_PTR(-EBUSY) if the TX path reserved it
+ * but has not yet stored the real skb pointer. Skip the free
+ * but still clear the slot so it can be reused.
+ */
+ if (!IS_ERR_OR_NULL(emac->tx_ts_skb[i]))
dev_kfree_skb_any(emac->tx_ts_skb[i]);
- emac->tx_ts_skb[i] = NULL;
- }
+ emac->tx_ts_skb[i] = NULL;
}
}
EXPORT_SYMBOL_GPL(prueth_cleanup_tx_ts);
--
2.43.0