The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/3] align IPv4 teardown with IPv6 and fix driver regressions
@ 2026-07-11  0:54 Yuyang Huang
  2026-07-11  0:54 ` [PATCH net-next v2 1/3] net: prestera: ignore duplicate RIF destruction events Yuyang Huang
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Yuyang Huang @ 2026-07-11  0:54 UTC (permalink / raw)
  To: Yuyang Huang
  Cc: David S. Miller, Andrew Lunn, David Ahern, Elad Nachman,
	Eric Dumazet, Ido Schimmel, Jakub Kicinski, Johannes Berg,
	Paolo Abeni, Simon Horman, linux-kernel, linux-wireless, netdev

This series aligns the IPv4 address teardown sequence with IPv6 by clearing
dev->ip_ptr early in inetdev_destroy() before freeing the multicast list and
individual IP addresses. This prevents RCU readers from accessing a partially
destroyed in_device structure.

However, clearing dev->ip_ptr early causes __in_dev_get_rtnl() to return NULL
during the notifier loop in inetdev_destroy(). This causes regressions in
some drivers (prestera and mac80211) that use this lookup helper in their
inetaddr notifier callbacks.

To prevent regressions and maintain bisectability, this series first fixes the
affected drivers (Patch 1 and 2) before applying the core IPv4 change (Patch 3).

An audit was performed on all other registered inetaddr and inet6addr notifier
listeners, and no other drivers were found to be affected.

Change in v2:
  - Split the original single patch into a 3-patch series.
  - Patch 1: Teach prestera to ignore duplicate RIF destruction events when the
    RIF is already gone, rather than returning -EEXIST and aborting the chain.
  - Patch 2: Fix mac80211 to use the valid ifa->ifa_dev from the event argument
    instead of looking it up via the netdevice.
  - Patch 3: The original change to clear dev->ip_ptr early.

Yuyang Huang (3):
  net: prestera: ignore duplicate RIF destruction events
  wifi: mac80211: use ifa_dev from event argument
  net: ipv4: clear dev->ip_ptr before destroying inetdev

 drivers/net/ethernet/marvell/prestera/prestera_router.c | 6 ++----
 net/ipv4/devinet.c                                      | 4 ++--
 net/mac80211/main.c                                     | 4 +---
 3 files changed, 5 insertions(+), 9 deletions(-)

-- 
2.55.0.795.g602f6c329a-goog


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH net-next v2 1/3] net: prestera: ignore duplicate RIF destruction events
  2026-07-11  0:54 [PATCH net-next v2 0/3] align IPv4 teardown with IPv6 and fix driver regressions Yuyang Huang
@ 2026-07-11  0:54 ` Yuyang Huang
  2026-07-11  0:54 ` [PATCH net-next v2 2/3] wifi: mac80211: use ifa_dev from event argument Yuyang Huang
  2026-07-11  0:54 ` [PATCH net-next v2 3/3] net: ipv4: clear dev->ip_ptr before destroying inetdev Yuyang Huang
  2 siblings, 0 replies; 5+ messages in thread
From: Yuyang Huang @ 2026-07-11  0:54 UTC (permalink / raw)
  To: Yuyang Huang
  Cc: David S. Miller, Andrew Lunn, David Ahern, Elad Nachman,
	Eric Dumazet, Ido Schimmel, Jakub Kicinski, Johannes Berg,
	Paolo Abeni, Simon Horman, linux-kernel, linux-wireless, netdev,
	Kuniyuki Iwashima

During address teardown, the inetaddr notifier may be called multiple
times for the same interface. Ignore NETDEV_DOWN events if the RIF has
already been destroyed, rather than returning -EEXIST, which aborts the
notifier chain.

Cc: Ido Schimmel <idosch@nvidia.com>
Cc: Kuniyuki Iwashima <kuniyu@google.com>
Signed-off-by: Yuyang Huang <yuyanghuang@google.com>
---
 drivers/net/ethernet/marvell/prestera/prestera_router.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_router.c b/drivers/net/ethernet/marvell/prestera/prestera_router.c
index b036b173a308..0c4f462baa6e 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_router.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_router.c
@@ -1302,10 +1302,8 @@ static int __prestera_inetaddr_port_event(struct net_device *port_dev,
 		dev_hold(port_dev);
 		break;
 	case NETDEV_DOWN:
-		if (!re) {
-			NL_SET_ERR_MSG_MOD(extack, "Can't find RIF");
-			return -EEXIST;
-		}
+		if (!re)
+			return 0;
 		prestera_rif_entry_destroy(port->sw, re);
 		dev_put(port_dev);
 		break;
-- 
2.55.0.795.g602f6c329a-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net-next v2 2/3] wifi: mac80211: use ifa_dev from event argument
  2026-07-11  0:54 [PATCH net-next v2 0/3] align IPv4 teardown with IPv6 and fix driver regressions Yuyang Huang
  2026-07-11  0:54 ` [PATCH net-next v2 1/3] net: prestera: ignore duplicate RIF destruction events Yuyang Huang
@ 2026-07-11  0:54 ` Yuyang Huang
  2026-07-11  0:54 ` [PATCH net-next v2 3/3] net: ipv4: clear dev->ip_ptr before destroying inetdev Yuyang Huang
  2 siblings, 0 replies; 5+ messages in thread
From: Yuyang Huang @ 2026-07-11  0:54 UTC (permalink / raw)
  To: Yuyang Huang
  Cc: David S. Miller, Andrew Lunn, David Ahern, Elad Nachman,
	Eric Dumazet, Ido Schimmel, Jakub Kicinski, Johannes Berg,
	Paolo Abeni, Simon Horman, linux-kernel, linux-wireless, netdev,
	Kuniyuki Iwashima

During address teardown, the netdevice's ip_ptr might be cleared before
the inetaddr notifier is called. In this case, __in_dev_get_rtnl()
returns NULL, causing the notifier to abort early and fail to update
the ARP filter.

Fix this by using the in_device pointer from the event argument
(ifa->ifa_dev) which is guaranteed to be valid.

Cc: Ido Schimmel <idosch@nvidia.com>
Cc: Kuniyuki Iwashima <kuniyu@google.com>
Signed-off-by: Yuyang Huang <yuyanghuang@google.com>
---
 net/mac80211/main.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 90d295cc364f..0e7a60dd1d8d 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -588,9 +588,7 @@ static int ieee80211_ifa_changed(struct notifier_block *nb,
 	if (sdata->vif.type != NL80211_IFTYPE_STATION)
 		return NOTIFY_DONE;
 
-	idev = __in_dev_get_rtnl(sdata->dev);
-	if (!idev)
-		return NOTIFY_DONE;
+	idev = ifa->ifa_dev;
 
 	ifmgd = &sdata->u.mgd;
 
-- 
2.55.0.795.g602f6c329a-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net-next v2 3/3] net: ipv4: clear dev->ip_ptr before destroying inetdev
  2026-07-11  0:54 [PATCH net-next v2 0/3] align IPv4 teardown with IPv6 and fix driver regressions Yuyang Huang
  2026-07-11  0:54 ` [PATCH net-next v2 1/3] net: prestera: ignore duplicate RIF destruction events Yuyang Huang
  2026-07-11  0:54 ` [PATCH net-next v2 2/3] wifi: mac80211: use ifa_dev from event argument Yuyang Huang
@ 2026-07-11  0:54 ` Yuyang Huang
  2026-07-12  7:20   ` Ido Schimmel
  2 siblings, 1 reply; 5+ messages in thread
From: Yuyang Huang @ 2026-07-11  0:54 UTC (permalink / raw)
  To: Yuyang Huang
  Cc: David S. Miller, Andrew Lunn, David Ahern, Elad Nachman,
	Eric Dumazet, Ido Schimmel, Jakub Kicinski, Johannes Berg,
	Paolo Abeni, Simon Horman, linux-kernel, linux-wireless, netdev,
	Kuniyuki Iwashima

To prevent RCU readers from accessing a partially destroyed in_device,
clear dev->ip_ptr early in inetdev_destroy() before freeing the
multicast list and individual IP addresses. This aligns the IPv4 teardown
sequence with the IPv6 implementation.

Cc: Ido Schimmel <idosch@nvidia.com>
Cc: Kuniyuki Iwashima <kuniyu@google.com>
Signed-off-by: Yuyang Huang <yuyanghuang@google.com>
---
 net/ipv4/devinet.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index a35b72662e43..3b31f4bec30e 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -322,6 +322,8 @@ static void inetdev_destroy(struct in_device *in_dev)
 
 	in_dev->dead = 1;
 
+	RCU_INIT_POINTER(dev->ip_ptr, NULL);
+
 	ip_mc_destroy_dev(in_dev);
 
 	while ((ifa = rtnl_dereference(in_dev->ifa_list)) != NULL) {
@@ -329,8 +331,6 @@ static void inetdev_destroy(struct in_device *in_dev)
 		inet_free_ifa(ifa);
 	}
 
-	RCU_INIT_POINTER(dev->ip_ptr, NULL);
-
 	devinet_sysctl_unregister(in_dev);
 	neigh_parms_release(&arp_tbl, in_dev->arp_parms);
 	arp_ifdown(dev);
-- 
2.55.0.795.g602f6c329a-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next v2 3/3] net: ipv4: clear dev->ip_ptr before destroying inetdev
  2026-07-11  0:54 ` [PATCH net-next v2 3/3] net: ipv4: clear dev->ip_ptr before destroying inetdev Yuyang Huang
@ 2026-07-12  7:20   ` Ido Schimmel
  0 siblings, 0 replies; 5+ messages in thread
From: Ido Schimmel @ 2026-07-12  7:20 UTC (permalink / raw)
  To: Yuyang Huang
  Cc: David S. Miller, Andrew Lunn, David Ahern, Elad Nachman,
	Eric Dumazet, Jakub Kicinski, Johannes Berg, Paolo Abeni,
	Simon Horman, linux-kernel, linux-wireless, netdev,
	Kuniyuki Iwashima

On Sat, Jul 11, 2026 at 09:54:04AM +0900, Yuyang Huang wrote:
> To prevent RCU readers from accessing a partially destroyed in_device,
> clear dev->ip_ptr early in inetdev_destroy() before freeing the
> multicast list and individual IP addresses. This aligns the IPv4 teardown
> sequence with the IPv6 implementation.
> 
> Cc: Ido Schimmel <idosch@nvidia.com>
> Cc: Kuniyuki Iwashima <kuniyu@google.com>
> Signed-off-by: Yuyang Huang <yuyanghuang@google.com>

Reviewed-by: Ido Schimmel <idosch@nvidia.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-07-12  7:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-11  0:54 [PATCH net-next v2 0/3] align IPv4 teardown with IPv6 and fix driver regressions Yuyang Huang
2026-07-11  0:54 ` [PATCH net-next v2 1/3] net: prestera: ignore duplicate RIF destruction events Yuyang Huang
2026-07-11  0:54 ` [PATCH net-next v2 2/3] wifi: mac80211: use ifa_dev from event argument Yuyang Huang
2026-07-11  0:54 ` [PATCH net-next v2 3/3] net: ipv4: clear dev->ip_ptr before destroying inetdev Yuyang Huang
2026-07-12  7:20   ` Ido Schimmel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox