| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | #include <linux/module.h> |
|---|
| 2 | 3 | |
|---|
| 3 | 4 | #include <net/sock.h> |
|---|
| .. | .. |
|---|
| 93 | 94 | struct net *net = sock_net(skb->sk); |
|---|
| 94 | 95 | struct netlink_diag_req *req; |
|---|
| 95 | 96 | struct netlink_sock *nlsk; |
|---|
| 97 | + unsigned long flags; |
|---|
| 96 | 98 | struct sock *sk; |
|---|
| 97 | 99 | int num = 2; |
|---|
| 98 | 100 | int ret = 0; |
|---|
| .. | .. |
|---|
| 151 | 153 | num++; |
|---|
| 152 | 154 | |
|---|
| 153 | 155 | mc_list: |
|---|
| 154 | | - read_lock(&nl_table_lock); |
|---|
| 156 | + read_lock_irqsave(&nl_table_lock, flags); |
|---|
| 155 | 157 | sk_for_each_bound(sk, &tbl->mc_list) { |
|---|
| 156 | 158 | if (sk_hashed(sk)) |
|---|
| 157 | 159 | continue; |
|---|
| .. | .. |
|---|
| 166 | 168 | NETLINK_CB(cb->skb).portid, |
|---|
| 167 | 169 | cb->nlh->nlmsg_seq, |
|---|
| 168 | 170 | NLM_F_MULTI, |
|---|
| 169 | | - sock_i_ino(sk)) < 0) { |
|---|
| 171 | + __sock_i_ino(sk)) < 0) { |
|---|
| 170 | 172 | ret = 1; |
|---|
| 171 | 173 | break; |
|---|
| 172 | 174 | } |
|---|
| 173 | 175 | num++; |
|---|
| 174 | 176 | } |
|---|
| 175 | | - read_unlock(&nl_table_lock); |
|---|
| 177 | + read_unlock_irqrestore(&nl_table_lock, flags); |
|---|
| 176 | 178 | |
|---|
| 177 | 179 | done: |
|---|
| 178 | 180 | cb->args[0] = num; |
|---|