hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/net/netlink/diag.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 #include <linux/module.h>
23
34 #include <net/sock.h>
....@@ -93,6 +94,7 @@
9394 struct net *net = sock_net(skb->sk);
9495 struct netlink_diag_req *req;
9596 struct netlink_sock *nlsk;
97
+ unsigned long flags;
9698 struct sock *sk;
9799 int num = 2;
98100 int ret = 0;
....@@ -151,7 +153,7 @@
151153 num++;
152154
153155 mc_list:
154
- read_lock(&nl_table_lock);
156
+ read_lock_irqsave(&nl_table_lock, flags);
155157 sk_for_each_bound(sk, &tbl->mc_list) {
156158 if (sk_hashed(sk))
157159 continue;
....@@ -166,13 +168,13 @@
166168 NETLINK_CB(cb->skb).portid,
167169 cb->nlh->nlmsg_seq,
168170 NLM_F_MULTI,
169
- sock_i_ino(sk)) < 0) {
171
+ __sock_i_ino(sk)) < 0) {
170172 ret = 1;
171173 break;
172174 }
173175 num++;
174176 }
175
- read_unlock(&nl_table_lock);
177
+ read_unlock_irqrestore(&nl_table_lock, flags);
176178
177179 done:
178180 cb->args[0] = num;