RE: [PATCH net-next] net: rmnet: annotate endpoint lookup under RTNL
From: subash.a.kasiviswanathan
Date: Mon Jul 06 2026 - 03:22:30 EST
> -----Original Message-----
> From: Runyu Xiao <runyu.xiao@xxxxxxxxxx>
> Sent: Wednesday, July 1, 2026 6:40 AM
> To: subash.a.kasiviswanathan@xxxxxxxxxxxxxxxx;
> sean.tranchetti@xxxxxxxxxxxxxxxx
> Cc: andrew+netdev@xxxxxxx; davem@xxxxxxxxxxxxx;
> edumazet@xxxxxxxxxx; kuba@xxxxxxxxxx; pabeni@xxxxxxxxxx;
> netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
> runyu.xiao@xxxxxxxxxx; jianhao.xu@xxxxxxxxxx
> Subject: [PATCH net-next] net: rmnet: annotate endpoint lookup under RTNL
>
> rmnet_get_endpoint() is shared by packet receive paths and RTNL-protected
> control paths. The receive paths already run under RCU/BH context through
> the RX handler, while the control paths reach
> rmnet_get_endpoint() after obtaining the rmnet port with
> rmnet_get_port_rtnl().
>
> The helper walks port->muxed_ep[] with hlist_for_each_entry_rcu(). Pass
> lockdep_rtnl_is_held() as the non-RCU protection condition so
> CONFIG_PROVE_RCU_LIST can see the RTNL-protected control-path calls
> while preserving the existing RCU-reader behavior for data paths.
>
> This was found by our static analysis tool and then manually reviewed
against
> the current tree. The dynamic triage evidence is a target-matched
> CONFIG_PROVE_RCU_LIST warning; the change is limited to documenting the
> existing protection contract.
>
> This is a lockdep annotation cleanup. It does not change endpoint lifetime
or
> hash updates.
>
> Signed-off-by: Runyu Xiao <runyu.xiao@xxxxxxxxxx>
> ---
> drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
> b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
> index ba8763cac9d9..977fb80d8bf8 100644
> --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
> +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
> @@ -423,7 +423,8 @@ struct rmnet_endpoint *rmnet_get_endpoint(struct
> rmnet_port *port, u8 mux_id) {
> struct rmnet_endpoint *ep;
>
> - hlist_for_each_entry_rcu(ep, &port->muxed_ep[mux_id], hlnode) {
> + hlist_for_each_entry_rcu(ep, &port->muxed_ep[mux_id], hlnode,
> + lockdep_rtnl_is_held()) {
> if (ep->mux_id == mux_id)
> return ep;
> }
> --
> 2.34.1
Reviewed-by: Subash Abhinov Kasiviswanathan
<subash.a.kasiviswanathan@xxxxxxxxxxxxxxxx>