|
|
@@ -2392,11 +2392,11 @@ int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf,
|
|
|
struct ip_sf_socklist *psl;
|
|
|
struct net *net = sock_net(sk);
|
|
|
|
|
|
+ ASSERT_RTNL();
|
|
|
+
|
|
|
if (!ipv4_is_multicast(addr))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- rtnl_lock();
|
|
|
-
|
|
|
imr.imr_multiaddr.s_addr = msf->imsf_multiaddr;
|
|
|
imr.imr_address.s_addr = msf->imsf_interface;
|
|
|
imr.imr_ifindex = 0;
|
|
|
@@ -2417,7 +2417,6 @@ int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf,
|
|
|
goto done;
|
|
|
msf->imsf_fmode = pmc->sfmode;
|
|
|
psl = rtnl_dereference(pmc->sflist);
|
|
|
- rtnl_unlock();
|
|
|
if (!psl) {
|
|
|
len = 0;
|
|
|
count = 0;
|
|
|
@@ -2436,7 +2435,6 @@ int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf,
|
|
|
return -EFAULT;
|
|
|
return 0;
|
|
|
done:
|
|
|
- rtnl_unlock();
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
@@ -2450,6 +2448,8 @@ int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf,
|
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
|
struct ip_sf_socklist *psl;
|
|
|
|
|
|
+ ASSERT_RTNL();
|
|
|
+
|
|
|
psin = (struct sockaddr_in *)&gsf->gf_group;
|
|
|
if (psin->sin_family != AF_INET)
|
|
|
return -EINVAL;
|
|
|
@@ -2457,8 +2457,6 @@ int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf,
|
|
|
if (!ipv4_is_multicast(addr))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- rtnl_lock();
|
|
|
-
|
|
|
err = -EADDRNOTAVAIL;
|
|
|
|
|
|
for_each_pmc_rtnl(inet, pmc) {
|
|
|
@@ -2470,7 +2468,6 @@ int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf,
|
|
|
goto done;
|
|
|
gsf->gf_fmode = pmc->sfmode;
|
|
|
psl = rtnl_dereference(pmc->sflist);
|
|
|
- rtnl_unlock();
|
|
|
count = psl ? psl->sl_count : 0;
|
|
|
copycount = count < gsf->gf_numsrc ? count : gsf->gf_numsrc;
|
|
|
gsf->gf_numsrc = count;
|
|
|
@@ -2490,7 +2487,6 @@ int ip_mc_gsfget(struct sock *sk, struct group_filter *gsf,
|
|
|
}
|
|
|
return 0;
|
|
|
done:
|
|
|
- rtnl_unlock();
|
|
|
return err;
|
|
|
}
|
|
|
|