From: Sven Eckelmann <sven@narfation.org>
To: Marek Lindner <marek.lindner@mailbox.org>,
Simon Wunderlich <sw@simonwunderlich.de>,
Antonio Quartulli <antonio@mandelbit.com>,
Matthias Schiffer <mschiffer@universe-factory.net>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
b.a.t.m.a.n@lists.open-mesh.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org,
Matthias Schiffer <mschiffer@universe-factory.net>
Subject: Re: [PATCH batadv 4/5] batman-adv: remove global hardif list
Date: Sat, 31 May 2025 11:56:34 +0200 [thread overview]
Message-ID: <4860101.CbtlEUcBR6@sven-desktop> (raw)
In-Reply-To: <262d5c5a5afe3d478d2e65187c0913a3a8c4781f.1747687504.git.mschiffer@universe-factory.net>
[-- Attachment #1: Type: text/plain, Size: 3058 bytes --]
On Monday, 19 May 2025 22:46:31 CEST Matthias Schiffer wrote:
> struct batadv_hard_iface *
> -batadv_hardif_get_by_netdev(const struct net_device *net_dev)
> +batadv_hardif_get_by_netdev(struct net_device *net_dev)
> {
> struct batadv_hard_iface *hard_iface;
> + struct net_device *mesh_iface;
>
> - rcu_read_lock();
> - list_for_each_entry_rcu(hard_iface, &batadv_hardif_list, list) {
> - if (hard_iface->net_dev == net_dev &&
> - kref_get_unless_zero(&hard_iface->refcount))
> - goto out;
> - }
> + mesh_iface = netdev_master_upper_dev_get(net_dev);
> + if (!mesh_iface || !batadv_meshif_is_valid(mesh_iface))
> + return NULL;
>
> - hard_iface = NULL;
> + hard_iface = netdev_lower_dev_get_private(mesh_iface, net_dev);
> + if (!kref_get_unless_zero(&hard_iface->refcount))
> + return NULL;
>
> -out:
> - rcu_read_unlock();
> return hard_iface;
> }
This code is now relying on rtnl_lock() (see `ASSERT_RTNL` in
`netdev_master_upper_dev_get` and most likely some comments somwhere about the
lists used by `netdev_lower_dev_get_private`). But `batadv_tt_local_add` is
using this function without holding this lock all the time. For example during
packet processing.
See for example `batadv_tt_local_add` calls in `batadv_interface_tx`. This
will happen when `skb->skb_iif` is not 0 (so it was forwarded).
Please double check this - I have not actually tested it but just went through
the code.
And saying this, the `batadv_hardif_get_by_netdev` call was also used to
retrieve additional information about alll kind of interfaces - even when they
are not used by batman-adv directly. For example for figuring out if it is a
wifi interface(for the TT wifi flag). With you change here, you are basically
breaking this functionality because you now require that the netdev is a lower
interface of batman-adv. Therefore, things like:
┌──────┐
┌───────────┼br-lan├──────┐
│ └──────┘ │
│ │
│ │
┌─▼─┐ ┌──▼─┐
│ap0│ │bat0│
└───┘ └──┬─┘
│
│
┌──▼──┐
│mesh0│
└─────┘
Is not handled anymore correctly in TT because ap0 is not a lower interface of
any batadv mesh interface. And as result, the ap-isolation feature of TT
will break.
Kind regards,
Sven
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2025-05-31 9:56 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-19 20:46 [PATCH batadv 1/5] batman-adv: store hard_iface as iflink private data Matthias Schiffer
2025-05-19 20:46 ` [PATCH batadv 2/5] batman-adv: only create hardif while a netdev is part of a mesh Matthias Schiffer
2025-05-31 9:16 ` Sven Eckelmann
2025-05-31 9:21 ` Sven Eckelmann
2025-05-31 9:52 ` Sven Eckelmann
2026-05-10 13:59 ` Sven Eckelmann
2025-05-19 20:46 ` [PATCH batadv 3/5] batman-adv: remove BATADV_IF_NOT_IN_USE hardif state Matthias Schiffer
2025-05-31 9:18 ` Sven Eckelmann
2025-05-19 20:46 ` [PATCH batadv 4/5] batman-adv: remove global hardif list Matthias Schiffer
2025-05-31 9:56 ` Sven Eckelmann [this message]
2025-06-01 9:26 ` Matthias Schiffer
2025-06-01 13:10 ` Sven Eckelmann
2025-06-01 13:36 ` Sven Eckelmann
2026-05-10 7:30 ` Sven Eckelmann
2025-05-19 20:46 ` [PATCH batadv 5/5] batman-adv: move hardif generation counter into batadv_priv Matthias Schiffer
2025-05-31 9:59 ` Sven Eckelmann
2025-05-31 8:31 ` [PATCH batadv 1/5] batman-adv: store hard_iface as iflink private data Sven Eckelmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4860101.CbtlEUcBR6@sven-desktop \
--to=sven@narfation.org \
--cc=antonio@mandelbit.com \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marek.lindner@mailbox.org \
--cc=mschiffer@universe-factory.net \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sw@simonwunderlich.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.