struct mptcp_sock *msk = mptcp_sk(newsock->sk);
                struct mptcp_subflow_context *subflow;
                struct sock *newsk = newsock->sk;
-               bool slowpath;
 
-               slowpath = lock_sock_fast(newsk);
+               lock_sock(newsk);
 
                /* PM/worker can now acquire the first subflow socket
                 * lock without racing with listener queue cleanup,
                        if (!ssk->sk_socket)
                                mptcp_sock_graft(ssk, newsock);
                }
-               unlock_sock_fast(newsk, slowpath);
+               release_sock(newsk);
        }
 
        if (inet_csk_listen_poll(ssock->sk))
 
        .netnsok = true,
 };
 
+static int genl_bind(struct net *net, int group)
+{
+       const struct genl_family *family;
+       unsigned int id;
+       int ret = 0;
+
+       genl_lock_all();
+
+       idr_for_each_entry(&genl_fam_idr, family, id) {
+               const struct genl_multicast_group *grp;
+               int i;
+
+               if (family->n_mcgrps == 0)
+                       continue;
+
+               i = group - family->mcgrp_offset;
+               if (i < 0 || i >= family->n_mcgrps)
+                       continue;
+
+               grp = &family->mcgrps[i];
+               if ((grp->flags & GENL_UNS_ADMIN_PERM) &&
+                   !ns_capable(net->user_ns, CAP_NET_ADMIN))
+                       ret = -EPERM;
+
+               break;
+       }
+
+       genl_unlock_all();
+       return ret;
+}
+
 static int __net_init genl_pernet_init(struct net *net)
 {
        struct netlink_kernel_cfg cfg = {
                .input          = genl_rcv,
                .flags          = NL_CFG_F_NONROOT_RECV,
+               .bind           = genl_bind,
        };
 
        /* we'll bump the group number right afterwards */