]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG
authorSiddharth Vadapalli <s-vadapalli@ti.com>
Fri, 7 Aug 2026 11:17:37 +0000 (16:47 +0530)
committerJakub Kicinski <kuba@kernel.org>
Thu, 13 Aug 2026 00:36:19 +0000 (17:36 -0700)
On the packet reception path, the ID of the MAC Port on which the packet
was received, is embedded in the RX DMA Descriptor's metadata. The ID is
extracted using the helper function cppi5_desc_get_tags_ids() which fills
in the 16-bit Source Tag into the 'port_id' variable. However, it is only
the lower 8-bits of the 16-bit Source Tag that represent the MAC Port ID,
while the upper 8-bits are Hardware-Reserved and carry an arbitrary value.
With the existing logic, sporadic kernel crash is observed due to the
subsequent driver code accessing out-of-bound memory because of an invalid
port_id.

Hence, fix the port_id extraction logic to use only the lower 8-bits of the
Source Tag as the MAC Port ID.

Fixes: 93a76530316a ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver")
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Reviewed-by: Chintan Vankar <c-vankar@ti.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260807111738.2055900-1-s-vadapalli@ti.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/ti/am65-cpsw-nuss.c

index 434a31080855a78e3ea5dfc528d3e59d8766dbd5..6330540979d70eb3d04c5cf3ad61562b9ea9d473 100644 (file)
@@ -1310,6 +1310,8 @@ static int am65_cpsw_nuss_rx_packets(struct am65_cpsw_rx_flow *flow,
        k3_udma_glue_rx_cppi5_to_dma_addr(rx_chn->rx_chn, &buf_dma);
        pkt_len = cppi5_hdesc_get_pktlen(desc_rx);
        cppi5_desc_get_tags_ids(&desc_rx->hdr, &port_id, NULL);
+       /* Port ID is contained in the lower 8-bits of the 16-bit Source Tag */
+       port_id &= 0xFF;
        dev_dbg(dev, "%s rx port_id:%d\n", __func__, port_id);
        port = am65_common_get_port(common, port_id);
        ndev = port->ndev;