Commit 6a2108c7 authored by Shivaji Kant's avatar Shivaji Kant Committed by Jakub Kicinski
Browse files

net: devmem: refresh devmem TX dst in case of route invalidation



The zero-copy Device Memory (Devmem) transmit path
relies on the socket's route cache (`dst_entry`) to
validate that the packet is being sent via the network
device to which the DMA buffer was bound.

However, this check incorrectly fails and returns `-ENODEV`
if the socket's route cache entry (`dst`) is merely missing
or expired (`dst == NULL`). This scenario is observed during
network events, such as when flow steering rules are deleted,
leading to a temporary route cache invalidation.

This patch fixes -ENODEV error for `net_devmem_get_binding()`
by doing the following:

1.  It attempts to rebuild the route via `rebuild_header()`
if the route is initially missing (`dst == NULL`). This
allows the TCP/IP stack to recover from transient route
cache misses.
2.  It uses `rcu_read_lock()` and `dst_dev_rcu()` to safely
access the network device pointer (`dst_dev`) from the
route, preventing use-after-free conditions if the
device is concurrently removed.
3.  It maintains the critical safety check by validating
that the retrieved destination device (`dst_dev`) is
exactly the device registered in the Devmem binding
(`binding->dev`).

These changes prevent unnecessary ENODEV failures while
maintaining the critical safety requirement that the
Devmem resources are only used on the bound network device.

Reviewed-by: default avatarBobby Eshleman <bobbyeshleman@meta.com>
Reported-by: default avatarEric Dumazet <edumazet@google.com>
Reported-by: default avatarVedant Mathur <vedantmathur@google.com>
Suggested-by: default avatarEric Dumazet <edumazet@google.com>
Fixes: bd618489 ("net: devmem: Implement TX path")
Signed-off-by: default avatarShivaji Kant <shivajikant@google.com>
Link: https://patch.msgid.link/20251029065420.3489943-1-shivajikant@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a38eeecf
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment