]> Pileus Git - ~andy/linux/blobdiff - net/sctp/socket.c
Merge branch 'master' into staging-next
[~andy/linux] / net / sctp / socket.c
index 42b709c95cf3d0f97b1de88d727a4258e8835396..9e91d6e5df63e4317eeeb367d55e734e5a62af2f 100644 (file)
@@ -28,9 +28,8 @@
  * See the GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with GNU CC; see the file COPYING.  If not, write to
- * the Free Software Foundation, 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * along with GNU CC; see the file COPYING.  If not, see
+ * <http://www.gnu.org/licenses/>.
  *
  * Please send any bug reports or fixes you make to the
  * email address(es):
@@ -83,7 +82,7 @@ static int sctp_writeable(struct sock *sk);
 static void sctp_wfree(struct sk_buff *skb);
 static int sctp_wait_for_sndbuf(struct sctp_association *, long *timeo_p,
                                size_t msg_len);
-static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p);
+static int sctp_wait_for_packet(struct sock *sk, int *err, long *timeo_p);
 static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p);
 static int sctp_wait_for_accept(struct sock *sk, long timeo);
 static void sctp_wait_for_close(struct sock *sk, long timeo);
@@ -273,7 +272,7 @@ static int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len)
 {
        int retval = 0;
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        pr_debug("%s: sk:%p, addr:%p, addr_len:%d\n", __func__, sk,
                 addr, addr_len);
@@ -285,7 +284,7 @@ static int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len)
        else
                retval = -EINVAL;
 
-       sctp_release_sock(sk);
+       release_sock(sk);
 
        return retval;
 }
@@ -953,7 +952,7 @@ int sctp_asconf_mgmt(struct sctp_sock *sp, struct sctp_sockaddr_entry *addrw)
  *
  * Returns 0 if ok, <0 errno code on error.
  */
-static int sctp_setsockopt_bindx(struct socksk,
+static int sctp_setsockopt_bindx(struct sock *sk,
                                 struct sockaddr __user *addrs,
                                 int addrs_size, int op)
 {
@@ -1040,7 +1039,7 @@ out:
  * Common routine for handling connect() and sctp_connectx().
  * Connect will come in with just a single address.
  */
-static int __sctp_connect(struct socksk,
+static int __sctp_connect(struct sock *sk,
                          struct sockaddr *kaddrs,
                          int addrs_size,
                          sctp_assoc_t *assoc_id)
@@ -1300,7 +1299,7 @@ out_free:
  *
  * Returns >=0 if ok, <0 errno code on error.
  */
-static int __sctp_setsockopt_connectx(struct socksk,
+static int __sctp_setsockopt_connectx(struct sock *sk,
                                      struct sockaddr __user *addrs,
                                      int addrs_size,
                                      sctp_assoc_t *assoc_id)
@@ -1338,7 +1337,7 @@ static int __sctp_setsockopt_connectx(struct sock* sk,
  * This is an older interface.  It's kept for backward compatibility
  * to the option that doesn't provide association id.
  */
-static int sctp_setsockopt_connectx_old(struct socksk,
+static int sctp_setsockopt_connectx_old(struct sock *sk,
                                        struct sockaddr __user *addrs,
                                        int addrs_size)
 {
@@ -1351,7 +1350,7 @@ static int sctp_setsockopt_connectx_old(struct sock* sk,
  * indication to the call.  Error is always negative and association id is
  * always positive.
  */
-static int sctp_setsockopt_connectx(struct socksk,
+static int sctp_setsockopt_connectx(struct sock *sk,
                                    struct sockaddr __user *addrs,
                                    int addrs_size)
 {
@@ -1374,7 +1373,7 @@ static int sctp_setsockopt_connectx(struct sock* sk,
  * addrs_num structure member.  That way we can re-use the existing
  * code.
  */
-static int sctp_getsockopt_connectx3(struct socksk, int len,
+static int sctp_getsockopt_connectx3(struct sock *sk, int len,
                                     char __user *optval,
                                     int __user *optlen)
 {
@@ -1462,7 +1461,7 @@ static void sctp_close(struct sock *sk, long timeout)
 
        pr_debug("%s: sk:%p, timeout:%ld\n", __func__, sk, timeout);
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
        sk->sk_shutdown = SHUTDOWN_MASK;
        sk->sk_state = SCTP_SS_CLOSING;
 
@@ -1506,13 +1505,13 @@ static void sctp_close(struct sock *sk, long timeout)
                sctp_wait_for_close(sk, timeout);
 
        /* This will run the backlog queue.  */
-       sctp_release_sock(sk);
+       release_sock(sk);
 
        /* Supposedly, no process has access to the socket, but
         * the net layers still may.
         */
-       sctp_local_bh_disable();
-       sctp_bh_lock_sock(sk);
+       local_bh_disable();
+       bh_lock_sock(sk);
 
        /* Hold the sock, since sk_common_release() will put sock_put()
         * and we have just a little more cleanup.
@@ -1520,8 +1519,8 @@ static void sctp_close(struct sock *sk, long timeout)
        sock_hold(sk);
        sk_common_release(sk);
 
-       sctp_bh_unlock_sock(sk);
-       sctp_local_bh_enable();
+       bh_unlock_sock(sk);
+       local_bh_enable();
 
        sock_put(sk);
 
@@ -1569,7 +1568,7 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
        struct net *net = sock_net(sk);
        struct sctp_sock *sp;
        struct sctp_endpoint *ep;
-       struct sctp_association *new_asoc=NULL, *asoc=NULL;
+       struct sctp_association *new_asoc = NULL, *asoc = NULL;
        struct sctp_transport *transport, *chunk_tp;
        struct sctp_chunk *chunk;
        union sctp_addr to;
@@ -1666,7 +1665,7 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
 
        pr_debug("%s: about to look up association\n", __func__);
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        /* If a msg_name has been specified, assume this is to be used.  */
        if (msg_name) {
@@ -1744,7 +1743,7 @@ static int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
                 * either the default or the user specified stream counts.
                 */
                if (sinfo) {
-                       if (!sinit || (sinit && !sinit->sinit_num_ostreams)) {
+                       if (!sinit || !sinit->sinit_num_ostreams) {
                                /* Check against the defaults. */
                                if (sinfo->sinfo_stream >=
                                    sp->initmsg.sinit_num_ostreams) {
@@ -1950,7 +1949,7 @@ out_free:
                sctp_association_free(asoc);
        }
 out_unlock:
-       sctp_release_sock(sk);
+       release_sock(sk);
 
 out_nounlock:
        return sctp_error(sk, msg_flags, err);
@@ -2036,7 +2035,7 @@ static int sctp_recvmsg(struct kiocb *iocb, struct sock *sk,
                 "addr_len:%p)\n", __func__, sk, msg, len, noblock, flags,
                 addr_len);
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        if (sctp_style(sk, TCP) && !sctp_sstate(sk, ESTABLISHED)) {
                err = -ENOTCONN;
@@ -2120,7 +2119,7 @@ out_free:
                sctp_ulpevent_free(event);
        }
 out:
-       sctp_release_sock(sk);
+       release_sock(sk);
        return err;
 }
 
@@ -2463,7 +2462,7 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
        int hb_change, pmtud_change, sackdelay_change;
 
        if (optlen != sizeof(struct sctp_paddrparams))
-               return - EINVAL;
+               return -EINVAL;
 
        if (copy_from_user(&params, optval, optlen))
                return -EFAULT;
@@ -2484,7 +2483,7 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
        /* If an address other than INADDR_ANY is specified, and
         * no transport is found, then the request is invalid.
         */
-       if (!sctp_is_any(sk, ( union sctp_addr *)&params.spp_address)) {
+       if (!sctp_is_any(sk, (union sctp_addr *)&params.spp_address)) {
                trans = sctp_addr_id2transport(sk, &params.spp_address,
                                               params.spp_assoc_id);
                if (!trans)
@@ -2528,6 +2527,16 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
        return 0;
 }
 
+static inline __u32 sctp_spp_sackdelay_enable(__u32 param_flags)
+{
+       return (param_flags & ~SPP_SACKDELAY) | SPP_SACKDELAY_ENABLE;
+}
+
+static inline __u32 sctp_spp_sackdelay_disable(__u32 param_flags)
+{
+       return (param_flags & ~SPP_SACKDELAY) | SPP_SACKDELAY_DISABLE;
+}
+
 /*
  * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
  *
@@ -2579,8 +2588,11 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
                if (params.sack_delay == 0 && params.sack_freq == 0)
                        return 0;
        } else if (optlen == sizeof(struct sctp_assoc_value)) {
-               pr_warn("Use of struct sctp_assoc_value in delayed_ack socket option deprecated\n");
-               pr_warn("Use struct sctp_sack_info instead\n");
+               pr_warn_ratelimited(DEPRECATED
+                                   "%s (pid %d) "
+                                   "Use of struct sctp_assoc_value in delayed_ack socket option.\n"
+                                   "Use struct sctp_sack_info instead\n",
+                                   current->comm, task_pid_nr(current));
                if (copy_from_user(&params, optval, optlen))
                        return -EFAULT;
 
@@ -2589,7 +2601,7 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
                else
                        params.sack_freq = 0;
        } else
-               return - EINVAL;
+               return -EINVAL;
 
        /* Validate value parameter. */
        if (params.sack_delay > 500)
@@ -2608,37 +2620,31 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
                        asoc->sackdelay =
                                msecs_to_jiffies(params.sack_delay);
                        asoc->param_flags =
-                               (asoc->param_flags & ~SPP_SACKDELAY) |
-                               SPP_SACKDELAY_ENABLE;
+                               sctp_spp_sackdelay_enable(asoc->param_flags);
                } else {
                        sp->sackdelay = params.sack_delay;
                        sp->param_flags =
-                               (sp->param_flags & ~SPP_SACKDELAY) |
-                               SPP_SACKDELAY_ENABLE;
+                               sctp_spp_sackdelay_enable(sp->param_flags);
                }
        }
 
        if (params.sack_freq == 1) {
                if (asoc) {
                        asoc->param_flags =
-                               (asoc->param_flags & ~SPP_SACKDELAY) |
-                               SPP_SACKDELAY_DISABLE;
+                               sctp_spp_sackdelay_disable(asoc->param_flags);
                } else {
                        sp->param_flags =
-                               (sp->param_flags & ~SPP_SACKDELAY) |
-                               SPP_SACKDELAY_DISABLE;
+                               sctp_spp_sackdelay_disable(sp->param_flags);
                }
        } else if (params.sack_freq > 1) {
                if (asoc) {
                        asoc->sackfreq = params.sack_freq;
                        asoc->param_flags =
-                               (asoc->param_flags & ~SPP_SACKDELAY) |
-                               SPP_SACKDELAY_ENABLE;
+                               sctp_spp_sackdelay_enable(asoc->param_flags);
                } else {
                        sp->sackfreq = params.sack_freq;
                        sp->param_flags =
-                               (sp->param_flags & ~SPP_SACKDELAY) |
-                               SPP_SACKDELAY_ENABLE;
+                               sctp_spp_sackdelay_enable(sp->param_flags);
                }
        }
 
@@ -2650,18 +2656,15 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
                                trans->sackdelay =
                                        msecs_to_jiffies(params.sack_delay);
                                trans->param_flags =
-                                       (trans->param_flags & ~SPP_SACKDELAY) |
-                                       SPP_SACKDELAY_ENABLE;
+                                       sctp_spp_sackdelay_enable(trans->param_flags);
                        }
                        if (params.sack_freq == 1) {
                                trans->param_flags =
-                                       (trans->param_flags & ~SPP_SACKDELAY) |
-                                       SPP_SACKDELAY_DISABLE;
+                                       sctp_spp_sackdelay_disable(trans->param_flags);
                        } else if (params.sack_freq > 1) {
                                trans->sackfreq = params.sack_freq;
                                trans->param_flags =
-                                       (trans->param_flags & ~SPP_SACKDELAY) |
-                                       SPP_SACKDELAY_ENABLE;
+                                       sctp_spp_sackdelay_enable(trans->param_flags);
                        }
                }
        }
@@ -2995,8 +2998,11 @@ static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned
        int val;
 
        if (optlen == sizeof(int)) {
-               pr_warn("Use of int in maxseg socket option deprecated\n");
-               pr_warn("Use struct sctp_assoc_value instead\n");
+               pr_warn_ratelimited(DEPRECATED
+                                   "%s (pid %d) "
+                                   "Use of int in maxseg socket option.\n"
+                                   "Use struct sctp_assoc_value instead\n",
+                                   current->comm, task_pid_nr(current));
                if (copy_from_user(&val, optval, optlen))
                        return -EFAULT;
                params.assoc_id = 0;
@@ -3253,8 +3259,11 @@ static int sctp_setsockopt_maxburst(struct sock *sk,
        int assoc_id = 0;
 
        if (optlen == sizeof(int)) {
-               pr_warn("Use of int in max_burst socket option deprecated\n");
-               pr_warn("Use struct sctp_assoc_value instead\n");
+               pr_warn_ratelimited(DEPRECATED
+                                   "%s (pid %d) "
+                                   "Use of int in max_burst socket option deprecated.\n"
+                                   "Use struct sctp_assoc_value instead\n",
+                                   current->comm, task_pid_nr(current));
                if (copy_from_user(&val, optval, optlen))
                        return -EFAULT;
        } else if (optlen == sizeof(struct sctp_assoc_value)) {
@@ -3333,7 +3342,7 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk,
        if (optlen < sizeof(struct sctp_hmacalgo))
                return -EINVAL;
 
-       hmacs= memdup_user(optval, optlen);
+       hmacs = memdup_user(optval, optlen);
        if (IS_ERR(hmacs))
                return PTR_ERR(hmacs);
 
@@ -3371,7 +3380,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
        if (optlen <= sizeof(struct sctp_authkey))
                return -EINVAL;
 
-       authkey= memdup_user(optval, optlen);
+       authkey = memdup_user(optval, optlen);
        if (IS_ERR(authkey))
                return PTR_ERR(authkey);
 
@@ -3581,7 +3590,7 @@ static int sctp_setsockopt(struct sock *sk, int level, int optname,
                goto out_nounlock;
        }
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        switch (optname) {
        case SCTP_SOCKOPT_BINDX_ADD:
@@ -3699,7 +3708,7 @@ static int sctp_setsockopt(struct sock *sk, int level, int optname,
                break;
        }
 
-       sctp_release_sock(sk);
+       release_sock(sk);
 
 out_nounlock:
        return retval;
@@ -3727,7 +3736,7 @@ static int sctp_connect(struct sock *sk, struct sockaddr *addr,
        int err = 0;
        struct sctp_af *af;
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        pr_debug("%s: sk:%p, sockaddr:%p, addr_len:%d\n", __func__, sk,
                 addr, addr_len);
@@ -3743,7 +3752,7 @@ static int sctp_connect(struct sock *sk, struct sockaddr *addr,
                err = __sctp_connect(sk, addr, af->sockaddr_len, NULL);
        }
 
-       sctp_release_sock(sk);
+       release_sock(sk);
        return err;
 }
 
@@ -3769,7 +3778,7 @@ static struct sock *sctp_accept(struct sock *sk, int flags, int *err)
        long timeo;
        int error = 0;
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        sp = sctp_sk(sk);
        ep = sp->ep;
@@ -3807,7 +3816,7 @@ static struct sock *sctp_accept(struct sock *sk, int flags, int *err)
        sctp_sock_migrate(sk, newsk, asoc, SCTP_SOCKET_TCP);
 
 out:
-       sctp_release_sock(sk);
+       release_sock(sk);
        *err = error;
        return newsk;
 }
@@ -3817,7 +3826,7 @@ static int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg)
 {
        int rc = -ENOTCONN;
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        /*
         * SEQPACKET-style sockets in LISTENING state are valid, for
@@ -3847,7 +3856,7 @@ static int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg)
                break;
        }
 out:
-       sctp_release_sock(sk);
+       release_sock(sk);
        return rc;
 }
 
@@ -3925,7 +3934,7 @@ static int sctp_init_sock(struct sock *sk)
         */
        sp->hbinterval  = net->sctp.hb_interval;
        sp->pathmaxrxt  = net->sctp.max_retrans_path;
-       sp->pathmtu     = 0; // allow default discovery
+       sp->pathmtu     = 0; /* allow default discovery */
        sp->sackdelay   = net->sctp.sack_timeout;
        sp->sackfreq    = 2;
        sp->param_flags = SPP_HB_ENABLE |
@@ -4468,7 +4477,7 @@ static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len,
        /* If an address other than INADDR_ANY is specified, and
         * no transport is found, then the request is invalid.
         */
-       if (!sctp_is_any(sk, ( union sctp_addr *)&params.spp_address)) {
+       if (!sctp_is_any(sk, (union sctp_addr *)&params.spp_address)) {
                trans = sctp_addr_id2transport(sk, &params.spp_address,
                                               params.spp_assoc_id);
                if (!trans) {
@@ -4574,12 +4583,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
                if (copy_from_user(&params, optval, len))
                        return -EFAULT;
        } else if (len == sizeof(struct sctp_assoc_value)) {
-               pr_warn("Use of struct sctp_assoc_value in delayed_ack socket option deprecated\n");
-               pr_warn("Use struct sctp_sack_info instead\n");
+               pr_warn_ratelimited(DEPRECATED
+                                   "%s (pid %d) "
+                                   "Use of struct sctp_assoc_value in delayed_ack socket option.\n"
+                                   "Use struct sctp_sack_info instead\n",
+                                   current->comm, task_pid_nr(current));
                if (copy_from_user(&params, optval, len))
                        return -EFAULT;
        } else
-               return - EINVAL;
+               return -EINVAL;
 
        /* Get association, if sack_assoc_id != 0 and the socket is a one
         * to many style socket, and an association was not found, then
@@ -4669,8 +4681,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
        if (!asoc)
                return -EINVAL;
 
-       to = optval + offsetof(struct sctp_getaddrs,addrs);
-       space_left = len - offsetof(struct sctp_getaddrs,addrs);
+       to = optval + offsetof(struct sctp_getaddrs, addrs);
+       space_left = len - offsetof(struct sctp_getaddrs, addrs);
 
        list_for_each_entry(from, &asoc->peer.transport_addr_list,
                                transports) {
@@ -4730,7 +4742,7 @@ static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to,
                memcpy(to, &temp, addrlen);
 
                to += addrlen;
-               cnt ++;
+               cnt++;
                space_left -= addrlen;
                *bytes_copied += addrlen;
        }
@@ -4779,8 +4791,8 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
                bp = &asoc->base.bind_addr;
        }
 
-       to = optval + offsetof(struct sctp_getaddrs,addrs);
-       space_left = len - offsetof(struct sctp_getaddrs,addrs);
+       to = optval + offsetof(struct sctp_getaddrs, addrs);
+       space_left = len - offsetof(struct sctp_getaddrs, addrs);
 
        addrs = kmalloc(space_left, GFP_KERNEL);
        if (!addrs)
@@ -4819,7 +4831,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
                memcpy(buf, &temp, addrlen);
                buf += addrlen;
                bytes_copied += addrlen;
-               cnt ++;
+               cnt++;
                space_left -= addrlen;
        }
 
@@ -5091,7 +5103,7 @@ static int sctp_getsockopt_associnfo(struct sock *sk, int len,
                assocparams.sasoc_cookie_life = ktime_to_ms(asoc->cookie_life);
 
                list_for_each(pos, &asoc->peer.transport_addr_list) {
-                       cnt ++;
+                       cnt++;
                }
 
                assocparams.sasoc_number_peer_destinations = cnt;
@@ -5219,8 +5231,11 @@ static int sctp_getsockopt_maxseg(struct sock *sk, int len,
        struct sctp_association *asoc;
 
        if (len == sizeof(int)) {
-               pr_warn("Use of int in maxseg socket option deprecated\n");
-               pr_warn("Use struct sctp_assoc_value instead\n");
+               pr_warn_ratelimited(DEPRECATED
+                                   "%s (pid %d) "
+                                   "Use of int in maxseg socket option.\n"
+                                   "Use struct sctp_assoc_value instead\n",
+                                   current->comm, task_pid_nr(current));
                params.assoc_id = 0;
        } else if (len >= sizeof(struct sctp_assoc_value)) {
                len = sizeof(struct sctp_assoc_value);
@@ -5311,8 +5326,11 @@ static int sctp_getsockopt_maxburst(struct sock *sk, int len,
        struct sctp_association *asoc;
 
        if (len == sizeof(int)) {
-               pr_warn("Use of int in max_burst socket option deprecated\n");
-               pr_warn("Use struct sctp_assoc_value instead\n");
+               pr_warn_ratelimited(DEPRECATED
+                                   "%s (pid %d) "
+                                   "Use of int in max_burst socket option.\n"
+                                   "Use struct sctp_assoc_value instead\n",
+                                   current->comm, task_pid_nr(current));
                params.assoc_id = 0;
        } else if (len >= sizeof(struct sctp_assoc_value)) {
                len = sizeof(struct sctp_assoc_value);
@@ -5444,7 +5462,8 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
                return -EFAULT;
 num:
        len = sizeof(struct sctp_authchunks) + num_chunks;
-       if (put_user(len, optlen)) return -EFAULT;
+       if (put_user(len, optlen))
+               return -EFAULT;
        if (put_user(num_chunks, &p->gauth_number_of_chunks))
                return -EFAULT;
        return 0;
@@ -5476,7 +5495,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
                return -EINVAL;
 
        if (asoc)
-               ch = (struct sctp_chunks_param*)asoc->c.auth_chunks;
+               ch = (struct sctp_chunks_param *)asoc->c.auth_chunks;
        else
                ch = sctp_sk(sk)->ep->auth_chunk_list;
 
@@ -5735,7 +5754,7 @@ static int sctp_getsockopt(struct sock *sk, int level, int optname,
        if (get_user(len, optlen))
                return -EFAULT;
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        switch (optname) {
        case SCTP_STATUS:
@@ -5859,7 +5878,7 @@ static int sctp_getsockopt(struct sock *sk, int level, int optname,
                break;
        }
 
-       sctp_release_sock(sk);
+       release_sock(sk);
        return retval;
 }
 
@@ -5899,7 +5918,7 @@ static long sctp_get_port_local(struct sock *sk, union sctp_addr *addr)
 
        pr_debug("%s: begins, snum:%d\n", __func__, snum);
 
-       sctp_local_bh_disable();
+       local_bh_disable();
 
        if (snum == 0) {
                /* Search for an available port. */
@@ -5908,7 +5927,7 @@ static long sctp_get_port_local(struct sock *sk, union sctp_addr *addr)
 
                inet_get_local_port_range(sock_net(sk), &low, &high);
                remaining = (high - low) + 1;
-               rover = net_random() % remaining + low;
+               rover = prandom_u32() % remaining + low;
 
                do {
                        rover++;
@@ -5918,14 +5937,14 @@ static long sctp_get_port_local(struct sock *sk, union sctp_addr *addr)
                                continue;
                        index = sctp_phashfn(sock_net(sk), rover);
                        head = &sctp_port_hashtable[index];
-                       sctp_spin_lock(&head->lock);
+                       spin_lock(&head->lock);
                        sctp_for_each_hentry(pp, &head->chain)
                                if ((pp->port == rover) &&
                                    net_eq(sock_net(sk), pp->net))
                                        goto next;
                        break;
                next:
-                       sctp_spin_unlock(&head->lock);
+                       spin_unlock(&head->lock);
                } while (--remaining > 0);
 
                /* Exhausted local port range during search? */
@@ -5946,7 +5965,7 @@ static long sctp_get_port_local(struct sock *sk, union sctp_addr *addr)
                 * port iterator, pp being NULL.
                 */
                head = &sctp_port_hashtable[sctp_phashfn(sock_net(sk), snum)];
-               sctp_spin_lock(&head->lock);
+               spin_lock(&head->lock);
                sctp_for_each_hentry(pp, &head->chain) {
                        if ((pp->port == snum) && net_eq(pp->net, sock_net(sk)))
                                goto pp_found;
@@ -6030,10 +6049,10 @@ success:
        ret = 0;
 
 fail_unlock:
-       sctp_spin_unlock(&head->lock);
+       spin_unlock(&head->lock);
 
 fail:
-       sctp_local_bh_enable();
+       local_bh_enable();
        return ret;
 }
 
@@ -6125,7 +6144,7 @@ int sctp_inet_listen(struct socket *sock, int backlog)
        if (unlikely(backlog < 0))
                return err;
 
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
        /* Peeled-off sockets are not allowed to listen().  */
        if (sctp_style(sk, UDP_HIGH_BANDWIDTH))
@@ -6158,7 +6177,7 @@ int sctp_inet_listen(struct socket *sock, int backlog)
 
        err = 0;
 out:
-       sctp_release_sock(sk);
+       release_sock(sk);
        return err;
 }
 
@@ -6267,20 +6286,20 @@ static inline void __sctp_put_port(struct sock *sk)
                                                  inet_sk(sk)->inet_num)];
        struct sctp_bind_bucket *pp;
 
-       sctp_spin_lock(&head->lock);
+       spin_lock(&head->lock);
        pp = sctp_sk(sk)->bind_hash;
        __sk_del_bind_node(sk);
        sctp_sk(sk)->bind_hash = NULL;
        inet_sk(sk)->inet_num = 0;
        sctp_bucket_destroy(pp);
-       sctp_spin_unlock(&head->lock);
+       spin_unlock(&head->lock);
 }
 
 void sctp_put_port(struct sock *sk)
 {
-       sctp_local_bh_disable();
+       local_bh_disable();
        __sctp_put_port(sk);
-       sctp_local_bh_enable();
+       local_bh_enable();
 }
 
 /*
@@ -6418,7 +6437,7 @@ static int sctp_msghdr_parse(const struct msghdr *msg, sctp_cmsgs_t *cmsgs)
  * Note: This function is the same function as in core/datagram.c
  * with a few modifications to make lksctp work.
  */
-static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p)
+static int sctp_wait_for_packet(struct sock *sk, int *err, long *timeo_p)
 {
        int error;
        DEFINE_WAIT(wait);
@@ -6455,9 +6474,9 @@ static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p)
         * does not fit in the user's buffer, but this seems to be the
         * only way to honor MSG_DONTWAIT realistically.
         */
-       sctp_release_sock(sk);
+       release_sock(sk);
        *timeo_p = schedule_timeout(*timeo_p);
-       sctp_lock_sock(sk);
+       lock_sock(sk);
 
 ready:
        finish_wait(sk_sleep(sk), &wait);
@@ -6640,10 +6659,10 @@ static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
                /* Let another process have a go.  Since we are going
                 * to sleep anyway.
                 */
-               sctp_release_sock(sk);
+               release_sock(sk);
                current_timeo = schedule_timeout(current_timeo);
                BUG_ON(sk != asoc->base.sk);
-               sctp_lock_sock(sk);
+               lock_sock(sk);
 
                *timeo_p = current_timeo;
        }
@@ -6748,9 +6767,9 @@ static int sctp_wait_for_connect(struct sctp_association *asoc, long *timeo_p)
                /* Let another process have a go.  Since we are going
                 * to sleep anyway.
                 */
-               sctp_release_sock(sk);
+               release_sock(sk);
                current_timeo = schedule_timeout(current_timeo);
-               sctp_lock_sock(sk);
+               lock_sock(sk);
 
                *timeo_p = current_timeo;
        }
@@ -6793,9 +6812,9 @@ static int sctp_wait_for_accept(struct sock *sk, long timeo)
                                          TASK_INTERRUPTIBLE);
 
                if (list_empty(&ep->asocs)) {
-                       sctp_release_sock(sk);
+                       release_sock(sk);
                        timeo = schedule_timeout(timeo);
-                       sctp_lock_sock(sk);
+                       lock_sock(sk);
                }
 
                err = -EINVAL;
@@ -6828,9 +6847,9 @@ static void sctp_wait_for_close(struct sock *sk, long timeout)
                prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
                if (list_empty(&sctp_sk(sk)->ep->asocs))
                        break;
-               sctp_release_sock(sk);
+               release_sock(sk);
                timeout = schedule_timeout(timeout);
-               sctp_lock_sock(sk);
+               lock_sock(sk);
        } while (!signal_pending(current) && timeout);
 
        finish_wait(sk_sleep(sk), &wait);
@@ -6931,14 +6950,14 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
        /* Hook this new socket in to the bind_hash list. */
        head = &sctp_port_hashtable[sctp_phashfn(sock_net(oldsk),
                                                 inet_sk(oldsk)->inet_num)];
-       sctp_local_bh_disable();
-       sctp_spin_lock(&head->lock);
+       local_bh_disable();
+       spin_lock(&head->lock);
        pp = sctp_sk(oldsk)->bind_hash;
        sk_add_bind_node(newsk, &pp->owner);
        sctp_sk(newsk)->bind_hash = pp;
        inet_sk(newsk)->inet_num = inet_sk(oldsk)->inet_num;
-       sctp_spin_unlock(&head->lock);
-       sctp_local_bh_enable();
+       spin_unlock(&head->lock);
+       local_bh_enable();
 
        /* Copy the bind_addr list from the original endpoint to the new
         * endpoint so that we can handle restarts properly
@@ -7027,7 +7046,7 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
                newsk->sk_shutdown |= RCV_SHUTDOWN;
 
        newsk->sk_state = SCTP_SS_ESTABLISHED;
-       sctp_release_sock(newsk);
+       release_sock(newsk);
 }