Skip to content

Commit bc53b02

Browse files
CKI Backport BotHangbin Liu
authored andcommitted
ipv6: mcast: Don't hold RTNL in ipv6_sock_mc_close().
JIRA: https://issues.redhat.com/browse/RHEL-115325 commit 1e589db Author: Kuniyuki Iwashima <kuniyu@google.com> Date: Wed Jul 2 16:01:25 2025 -0700 ipv6: mcast: Don't hold RTNL in ipv6_sock_mc_close(). In __ipv6_sock_mc_close(), per-socket mld data is protected by lock_sock(), and only __dev_get_by_index() and __in6_dev_get() require RTNL. Let's call __ipv6_sock_mc_drop() and drop RTNL in ipv6_sock_mc_close(). Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20250702230210.3115355-9-kuni1840@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com>
1 parent d8bcfce commit bc53b02

File tree

1 file changed

+1
-21
lines changed

1 file changed

+1
-21
lines changed

net/ipv6/mcast.c

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -334,28 +334,10 @@ void __ipv6_sock_mc_close(struct sock *sk)
334334
{
335335
struct ipv6_pinfo *np = inet6_sk(sk);
336336
struct ipv6_mc_socklist *mc_lst;
337-
struct net *net = sock_net(sk);
338-
339-
ASSERT_RTNL();
340337

341338
while ((mc_lst = sock_dereference(np->ipv6_mc_list, sk)) != NULL) {
342-
struct net_device *dev;
343-
344339
np->ipv6_mc_list = mc_lst->next;
345-
346-
dev = __dev_get_by_index(net, mc_lst->ifindex);
347-
if (dev) {
348-
struct inet6_dev *idev = __in6_dev_get(dev);
349-
350-
ip6_mc_leave_src(sk, mc_lst, idev);
351-
if (idev)
352-
__ipv6_dev_mc_dec(idev, &mc_lst->addr);
353-
} else {
354-
ip6_mc_leave_src(sk, mc_lst, NULL);
355-
}
356-
357-
atomic_sub(sizeof(*mc_lst), &sk->sk_omem_alloc);
358-
kfree_rcu(mc_lst, rcu);
340+
__ipv6_sock_mc_drop(sk, mc_lst);
359341
}
360342
}
361343

@@ -366,11 +348,9 @@ void ipv6_sock_mc_close(struct sock *sk)
366348
if (!rcu_access_pointer(np->ipv6_mc_list))
367349
return;
368350

369-
rtnl_lock();
370351
lock_sock(sk);
371352
__ipv6_sock_mc_close(sk);
372353
release_sock(sk);
373-
rtnl_unlock();
374354
}
375355

376356
int ip6_mc_source(int add, int omode, struct sock *sk,

0 commit comments

Comments
 (0)