mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
net: ipv4: clear dev->ip_ptr before destroying inetdev
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: Kuniyuki Iwashima <kuniyu@google.com> Signed-off-by: Yuyang Huang <yuyanghuang@google.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Link: https://patch.msgid.link/20260711005405.2861680-4-yuyanghuang@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e5b14e9ae8
commit
aa22336b76
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user