cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

socket.c (271392B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/* SCTP kernel implementation
      3 * (C) Copyright IBM Corp. 2001, 2004
      4 * Copyright (c) 1999-2000 Cisco, Inc.
      5 * Copyright (c) 1999-2001 Motorola, Inc.
      6 * Copyright (c) 2001-2003 Intel Corp.
      7 * Copyright (c) 2001-2002 Nokia, Inc.
      8 * Copyright (c) 2001 La Monte H.P. Yarroll
      9 *
     10 * This file is part of the SCTP kernel implementation
     11 *
     12 * These functions interface with the sockets layer to implement the
     13 * SCTP Extensions for the Sockets API.
     14 *
     15 * Note that the descriptions from the specification are USER level
     16 * functions--this file is the functions which populate the struct proto
     17 * for SCTP which is the BOTTOM of the sockets interface.
     18 *
     19 * Please send any bug reports or fixes you make to the
     20 * email address(es):
     21 *    lksctp developers <linux-sctp@vger.kernel.org>
     22 *
     23 * Written or modified by:
     24 *    La Monte H.P. Yarroll <piggy@acm.org>
     25 *    Narasimha Budihal     <narsi@refcode.org>
     26 *    Karl Knutson          <karl@athena.chicago.il.us>
     27 *    Jon Grimm             <jgrimm@us.ibm.com>
     28 *    Xingang Guo           <xingang.guo@intel.com>
     29 *    Daisy Chang           <daisyc@us.ibm.com>
     30 *    Sridhar Samudrala     <samudrala@us.ibm.com>
     31 *    Inaky Perez-Gonzalez  <inaky.gonzalez@intel.com>
     32 *    Ardelle Fan	    <ardelle.fan@intel.com>
     33 *    Ryan Layer	    <rmlayer@us.ibm.com>
     34 *    Anup Pemmaiah         <pemmaiah@cc.usu.edu>
     35 *    Kevin Gao             <kevin.gao@intel.com>
     36 */
     37
     38#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
     39
     40#include <crypto/hash.h>
     41#include <linux/types.h>
     42#include <linux/kernel.h>
     43#include <linux/wait.h>
     44#include <linux/time.h>
     45#include <linux/sched/signal.h>
     46#include <linux/ip.h>
     47#include <linux/capability.h>
     48#include <linux/fcntl.h>
     49#include <linux/poll.h>
     50#include <linux/init.h>
     51#include <linux/slab.h>
     52#include <linux/file.h>
     53#include <linux/compat.h>
     54#include <linux/rhashtable.h>
     55
     56#include <net/ip.h>
     57#include <net/icmp.h>
     58#include <net/route.h>
     59#include <net/ipv6.h>
     60#include <net/inet_common.h>
     61#include <net/busy_poll.h>
     62
     63#include <linux/socket.h> /* for sa_family_t */
     64#include <linux/export.h>
     65#include <net/sock.h>
     66#include <net/sctp/sctp.h>
     67#include <net/sctp/sm.h>
     68#include <net/sctp/stream_sched.h>
     69
     70/* Forward declarations for internal helper functions. */
     71static bool sctp_writeable(struct sock *sk);
     72static void sctp_wfree(struct sk_buff *skb);
     73static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
     74				size_t msg_len);
     75static int sctp_wait_for_packet(struct sock *sk, int *err, long *timeo_p);
     76static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p);
     77static int sctp_wait_for_accept(struct sock *sk, long timeo);
     78static void sctp_wait_for_close(struct sock *sk, long timeo);
     79static void sctp_destruct_sock(struct sock *sk);
     80static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
     81					union sctp_addr *addr, int len);
     82static int sctp_bindx_add(struct sock *, struct sockaddr *, int);
     83static int sctp_bindx_rem(struct sock *, struct sockaddr *, int);
     84static int sctp_send_asconf_add_ip(struct sock *, struct sockaddr *, int);
     85static int sctp_send_asconf_del_ip(struct sock *, struct sockaddr *, int);
     86static int sctp_send_asconf(struct sctp_association *asoc,
     87			    struct sctp_chunk *chunk);
     88static int sctp_do_bind(struct sock *, union sctp_addr *, int);
     89static int sctp_autobind(struct sock *sk);
     90static int sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
     91			     struct sctp_association *assoc,
     92			     enum sctp_socket_type type);
     93
     94static unsigned long sctp_memory_pressure;
     95static atomic_long_t sctp_memory_allocated;
     96struct percpu_counter sctp_sockets_allocated;
     97
     98static void sctp_enter_memory_pressure(struct sock *sk)
     99{
    100	sctp_memory_pressure = 1;
    101}
    102
    103
    104/* Get the sndbuf space available at the time on the association.  */
    105static inline int sctp_wspace(struct sctp_association *asoc)
    106{
    107	struct sock *sk = asoc->base.sk;
    108
    109	return asoc->ep->sndbuf_policy ? sk->sk_sndbuf - asoc->sndbuf_used
    110				       : sk_stream_wspace(sk);
    111}
    112
    113/* Increment the used sndbuf space count of the corresponding association by
    114 * the size of the outgoing data chunk.
    115 * Also, set the skb destructor for sndbuf accounting later.
    116 *
    117 * Since it is always 1-1 between chunk and skb, and also a new skb is always
    118 * allocated for chunk bundling in sctp_packet_transmit(), we can use the
    119 * destructor in the data chunk skb for the purpose of the sndbuf space
    120 * tracking.
    121 */
    122static inline void sctp_set_owner_w(struct sctp_chunk *chunk)
    123{
    124	struct sctp_association *asoc = chunk->asoc;
    125	struct sock *sk = asoc->base.sk;
    126
    127	/* The sndbuf space is tracked per association.  */
    128	sctp_association_hold(asoc);
    129
    130	if (chunk->shkey)
    131		sctp_auth_shkey_hold(chunk->shkey);
    132
    133	skb_set_owner_w(chunk->skb, sk);
    134
    135	chunk->skb->destructor = sctp_wfree;
    136	/* Save the chunk pointer in skb for sctp_wfree to use later.  */
    137	skb_shinfo(chunk->skb)->destructor_arg = chunk;
    138
    139	refcount_add(sizeof(struct sctp_chunk), &sk->sk_wmem_alloc);
    140	asoc->sndbuf_used += chunk->skb->truesize + sizeof(struct sctp_chunk);
    141	sk->sk_wmem_queued += chunk->skb->truesize + sizeof(struct sctp_chunk);
    142	sk_mem_charge(sk, chunk->skb->truesize);
    143}
    144
    145static void sctp_clear_owner_w(struct sctp_chunk *chunk)
    146{
    147	skb_orphan(chunk->skb);
    148}
    149
    150#define traverse_and_process()	\
    151do {				\
    152	msg = chunk->msg;	\
    153	if (msg == prev_msg)	\
    154		continue;	\
    155	list_for_each_entry(c, &msg->chunks, frag_list) {	\
    156		if ((clear && asoc->base.sk == c->skb->sk) ||	\
    157		    (!clear && asoc->base.sk != c->skb->sk))	\
    158			cb(c);	\
    159	}			\
    160	prev_msg = msg;		\
    161} while (0)
    162
    163static void sctp_for_each_tx_datachunk(struct sctp_association *asoc,
    164				       bool clear,
    165				       void (*cb)(struct sctp_chunk *))
    166
    167{
    168	struct sctp_datamsg *msg, *prev_msg = NULL;
    169	struct sctp_outq *q = &asoc->outqueue;
    170	struct sctp_chunk *chunk, *c;
    171	struct sctp_transport *t;
    172
    173	list_for_each_entry(t, &asoc->peer.transport_addr_list, transports)
    174		list_for_each_entry(chunk, &t->transmitted, transmitted_list)
    175			traverse_and_process();
    176
    177	list_for_each_entry(chunk, &q->retransmit, transmitted_list)
    178		traverse_and_process();
    179
    180	list_for_each_entry(chunk, &q->sacked, transmitted_list)
    181		traverse_and_process();
    182
    183	list_for_each_entry(chunk, &q->abandoned, transmitted_list)
    184		traverse_and_process();
    185
    186	list_for_each_entry(chunk, &q->out_chunk_list, list)
    187		traverse_and_process();
    188}
    189
    190static void sctp_for_each_rx_skb(struct sctp_association *asoc, struct sock *sk,
    191				 void (*cb)(struct sk_buff *, struct sock *))
    192
    193{
    194	struct sk_buff *skb, *tmp;
    195
    196	sctp_skb_for_each(skb, &asoc->ulpq.lobby, tmp)
    197		cb(skb, sk);
    198
    199	sctp_skb_for_each(skb, &asoc->ulpq.reasm, tmp)
    200		cb(skb, sk);
    201
    202	sctp_skb_for_each(skb, &asoc->ulpq.reasm_uo, tmp)
    203		cb(skb, sk);
    204}
    205
    206/* Verify that this is a valid address. */
    207static inline int sctp_verify_addr(struct sock *sk, union sctp_addr *addr,
    208				   int len)
    209{
    210	struct sctp_af *af;
    211
    212	/* Verify basic sockaddr. */
    213	af = sctp_sockaddr_af(sctp_sk(sk), addr, len);
    214	if (!af)
    215		return -EINVAL;
    216
    217	/* Is this a valid SCTP address?  */
    218	if (!af->addr_valid(addr, sctp_sk(sk), NULL))
    219		return -EINVAL;
    220
    221	if (!sctp_sk(sk)->pf->send_verify(sctp_sk(sk), (addr)))
    222		return -EINVAL;
    223
    224	return 0;
    225}
    226
    227/* Look up the association by its id.  If this is not a UDP-style
    228 * socket, the ID field is always ignored.
    229 */
    230struct sctp_association *sctp_id2assoc(struct sock *sk, sctp_assoc_t id)
    231{
    232	struct sctp_association *asoc = NULL;
    233
    234	/* If this is not a UDP-style socket, assoc id should be ignored. */
    235	if (!sctp_style(sk, UDP)) {
    236		/* Return NULL if the socket state is not ESTABLISHED. It
    237		 * could be a TCP-style listening socket or a socket which
    238		 * hasn't yet called connect() to establish an association.
    239		 */
    240		if (!sctp_sstate(sk, ESTABLISHED) && !sctp_sstate(sk, CLOSING))
    241			return NULL;
    242
    243		/* Get the first and the only association from the list. */
    244		if (!list_empty(&sctp_sk(sk)->ep->asocs))
    245			asoc = list_entry(sctp_sk(sk)->ep->asocs.next,
    246					  struct sctp_association, asocs);
    247		return asoc;
    248	}
    249
    250	/* Otherwise this is a UDP-style socket. */
    251	if (id <= SCTP_ALL_ASSOC)
    252		return NULL;
    253
    254	spin_lock_bh(&sctp_assocs_id_lock);
    255	asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id);
    256	if (asoc && (asoc->base.sk != sk || asoc->base.dead))
    257		asoc = NULL;
    258	spin_unlock_bh(&sctp_assocs_id_lock);
    259
    260	return asoc;
    261}
    262
    263/* Look up the transport from an address and an assoc id. If both address and
    264 * id are specified, the associations matching the address and the id should be
    265 * the same.
    266 */
    267static struct sctp_transport *sctp_addr_id2transport(struct sock *sk,
    268					      struct sockaddr_storage *addr,
    269					      sctp_assoc_t id)
    270{
    271	struct sctp_association *addr_asoc = NULL, *id_asoc = NULL;
    272	struct sctp_af *af = sctp_get_af_specific(addr->ss_family);
    273	union sctp_addr *laddr = (union sctp_addr *)addr;
    274	struct sctp_transport *transport;
    275
    276	if (!af || sctp_verify_addr(sk, laddr, af->sockaddr_len))
    277		return NULL;
    278
    279	addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep,
    280					       laddr,
    281					       &transport);
    282
    283	if (!addr_asoc)
    284		return NULL;
    285
    286	id_asoc = sctp_id2assoc(sk, id);
    287	if (id_asoc && (id_asoc != addr_asoc))
    288		return NULL;
    289
    290	sctp_get_pf_specific(sk->sk_family)->addr_to_user(sctp_sk(sk),
    291						(union sctp_addr *)addr);
    292
    293	return transport;
    294}
    295
    296/* API 3.1.2 bind() - UDP Style Syntax
    297 * The syntax of bind() is,
    298 *
    299 *   ret = bind(int sd, struct sockaddr *addr, int addrlen);
    300 *
    301 *   sd      - the socket descriptor returned by socket().
    302 *   addr    - the address structure (struct sockaddr_in or struct
    303 *             sockaddr_in6 [RFC 2553]),
    304 *   addr_len - the size of the address structure.
    305 */
    306static int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len)
    307{
    308	int retval = 0;
    309
    310	lock_sock(sk);
    311
    312	pr_debug("%s: sk:%p, addr:%p, addr_len:%d\n", __func__, sk,
    313		 addr, addr_len);
    314
    315	/* Disallow binding twice. */
    316	if (!sctp_sk(sk)->ep->base.bind_addr.port)
    317		retval = sctp_do_bind(sk, (union sctp_addr *)addr,
    318				      addr_len);
    319	else
    320		retval = -EINVAL;
    321
    322	release_sock(sk);
    323
    324	return retval;
    325}
    326
    327static int sctp_get_port_local(struct sock *, union sctp_addr *);
    328
    329/* Verify this is a valid sockaddr. */
    330static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
    331					union sctp_addr *addr, int len)
    332{
    333	struct sctp_af *af;
    334
    335	/* Check minimum size.  */
    336	if (len < sizeof (struct sockaddr))
    337		return NULL;
    338
    339	if (!opt->pf->af_supported(addr->sa.sa_family, opt))
    340		return NULL;
    341
    342	if (addr->sa.sa_family == AF_INET6) {
    343		if (len < SIN6_LEN_RFC2133)
    344			return NULL;
    345		/* V4 mapped address are really of AF_INET family */
    346		if (ipv6_addr_v4mapped(&addr->v6.sin6_addr) &&
    347		    !opt->pf->af_supported(AF_INET, opt))
    348			return NULL;
    349	}
    350
    351	/* If we get this far, af is valid. */
    352	af = sctp_get_af_specific(addr->sa.sa_family);
    353
    354	if (len < af->sockaddr_len)
    355		return NULL;
    356
    357	return af;
    358}
    359
    360static void sctp_auto_asconf_init(struct sctp_sock *sp)
    361{
    362	struct net *net = sock_net(&sp->inet.sk);
    363
    364	if (net->sctp.default_auto_asconf) {
    365		spin_lock(&net->sctp.addr_wq_lock);
    366		list_add_tail(&sp->auto_asconf_list, &net->sctp.auto_asconf_splist);
    367		spin_unlock(&net->sctp.addr_wq_lock);
    368		sp->do_auto_asconf = 1;
    369	}
    370}
    371
    372/* Bind a local address either to an endpoint or to an association.  */
    373static int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
    374{
    375	struct net *net = sock_net(sk);
    376	struct sctp_sock *sp = sctp_sk(sk);
    377	struct sctp_endpoint *ep = sp->ep;
    378	struct sctp_bind_addr *bp = &ep->base.bind_addr;
    379	struct sctp_af *af;
    380	unsigned short snum;
    381	int ret = 0;
    382
    383	/* Common sockaddr verification. */
    384	af = sctp_sockaddr_af(sp, addr, len);
    385	if (!af) {
    386		pr_debug("%s: sk:%p, newaddr:%p, len:%d EINVAL\n",
    387			 __func__, sk, addr, len);
    388		return -EINVAL;
    389	}
    390
    391	snum = ntohs(addr->v4.sin_port);
    392
    393	pr_debug("%s: sk:%p, new addr:%pISc, port:%d, new port:%d, len:%d\n",
    394		 __func__, sk, &addr->sa, bp->port, snum, len);
    395
    396	/* PF specific bind() address verification. */
    397	if (!sp->pf->bind_verify(sp, addr))
    398		return -EADDRNOTAVAIL;
    399
    400	/* We must either be unbound, or bind to the same port.
    401	 * It's OK to allow 0 ports if we are already bound.
    402	 * We'll just inhert an already bound port in this case
    403	 */
    404	if (bp->port) {
    405		if (!snum)
    406			snum = bp->port;
    407		else if (snum != bp->port) {
    408			pr_debug("%s: new port %d doesn't match existing port "
    409				 "%d\n", __func__, snum, bp->port);
    410			return -EINVAL;
    411		}
    412	}
    413
    414	if (snum && inet_port_requires_bind_service(net, snum) &&
    415	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
    416		return -EACCES;
    417
    418	/* See if the address matches any of the addresses we may have
    419	 * already bound before checking against other endpoints.
    420	 */
    421	if (sctp_bind_addr_match(bp, addr, sp))
    422		return -EINVAL;
    423
    424	/* Make sure we are allowed to bind here.
    425	 * The function sctp_get_port_local() does duplicate address
    426	 * detection.
    427	 */
    428	addr->v4.sin_port = htons(snum);
    429	if (sctp_get_port_local(sk, addr))
    430		return -EADDRINUSE;
    431
    432	/* Refresh ephemeral port.  */
    433	if (!bp->port) {
    434		bp->port = inet_sk(sk)->inet_num;
    435		sctp_auto_asconf_init(sp);
    436	}
    437
    438	/* Add the address to the bind address list.
    439	 * Use GFP_ATOMIC since BHs will be disabled.
    440	 */
    441	ret = sctp_add_bind_addr(bp, addr, af->sockaddr_len,
    442				 SCTP_ADDR_SRC, GFP_ATOMIC);
    443
    444	if (ret) {
    445		sctp_put_port(sk);
    446		return ret;
    447	}
    448	/* Copy back into socket for getsockname() use. */
    449	inet_sk(sk)->inet_sport = htons(inet_sk(sk)->inet_num);
    450	sp->pf->to_sk_saddr(addr, sk);
    451
    452	return ret;
    453}
    454
    455 /* ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks
    456 *
    457 * R1) One and only one ASCONF Chunk MAY be in transit and unacknowledged
    458 * at any one time.  If a sender, after sending an ASCONF chunk, decides
    459 * it needs to transfer another ASCONF Chunk, it MUST wait until the
    460 * ASCONF-ACK Chunk returns from the previous ASCONF Chunk before sending a
    461 * subsequent ASCONF. Note this restriction binds each side, so at any
    462 * time two ASCONF may be in-transit on any given association (one sent
    463 * from each endpoint).
    464 */
    465static int sctp_send_asconf(struct sctp_association *asoc,
    466			    struct sctp_chunk *chunk)
    467{
    468	int retval = 0;
    469
    470	/* If there is an outstanding ASCONF chunk, queue it for later
    471	 * transmission.
    472	 */
    473	if (asoc->addip_last_asconf) {
    474		list_add_tail(&chunk->list, &asoc->addip_chunk_list);
    475		goto out;
    476	}
    477
    478	/* Hold the chunk until an ASCONF_ACK is received. */
    479	sctp_chunk_hold(chunk);
    480	retval = sctp_primitive_ASCONF(asoc->base.net, asoc, chunk);
    481	if (retval)
    482		sctp_chunk_free(chunk);
    483	else
    484		asoc->addip_last_asconf = chunk;
    485
    486out:
    487	return retval;
    488}
    489
    490/* Add a list of addresses as bind addresses to local endpoint or
    491 * association.
    492 *
    493 * Basically run through each address specified in the addrs/addrcnt
    494 * array/length pair, determine if it is IPv6 or IPv4 and call
    495 * sctp_do_bind() on it.
    496 *
    497 * If any of them fails, then the operation will be reversed and the
    498 * ones that were added will be removed.
    499 *
    500 * Only sctp_setsockopt_bindx() is supposed to call this function.
    501 */
    502static int sctp_bindx_add(struct sock *sk, struct sockaddr *addrs, int addrcnt)
    503{
    504	int cnt;
    505	int retval = 0;
    506	void *addr_buf;
    507	struct sockaddr *sa_addr;
    508	struct sctp_af *af;
    509
    510	pr_debug("%s: sk:%p, addrs:%p, addrcnt:%d\n", __func__, sk,
    511		 addrs, addrcnt);
    512
    513	addr_buf = addrs;
    514	for (cnt = 0; cnt < addrcnt; cnt++) {
    515		/* The list may contain either IPv4 or IPv6 address;
    516		 * determine the address length for walking thru the list.
    517		 */
    518		sa_addr = addr_buf;
    519		af = sctp_get_af_specific(sa_addr->sa_family);
    520		if (!af) {
    521			retval = -EINVAL;
    522			goto err_bindx_add;
    523		}
    524
    525		retval = sctp_do_bind(sk, (union sctp_addr *)sa_addr,
    526				      af->sockaddr_len);
    527
    528		addr_buf += af->sockaddr_len;
    529
    530err_bindx_add:
    531		if (retval < 0) {
    532			/* Failed. Cleanup the ones that have been added */
    533			if (cnt > 0)
    534				sctp_bindx_rem(sk, addrs, cnt);
    535			return retval;
    536		}
    537	}
    538
    539	return retval;
    540}
    541
    542/* Send an ASCONF chunk with Add IP address parameters to all the peers of the
    543 * associations that are part of the endpoint indicating that a list of local
    544 * addresses are added to the endpoint.
    545 *
    546 * If any of the addresses is already in the bind address list of the
    547 * association, we do not send the chunk for that association.  But it will not
    548 * affect other associations.
    549 *
    550 * Only sctp_setsockopt_bindx() is supposed to call this function.
    551 */
    552static int sctp_send_asconf_add_ip(struct sock		*sk,
    553				   struct sockaddr	*addrs,
    554				   int 			addrcnt)
    555{
    556	struct sctp_sock		*sp;
    557	struct sctp_endpoint		*ep;
    558	struct sctp_association		*asoc;
    559	struct sctp_bind_addr		*bp;
    560	struct sctp_chunk		*chunk;
    561	struct sctp_sockaddr_entry	*laddr;
    562	union sctp_addr			*addr;
    563	union sctp_addr			saveaddr;
    564	void				*addr_buf;
    565	struct sctp_af			*af;
    566	struct list_head		*p;
    567	int 				i;
    568	int 				retval = 0;
    569
    570	sp = sctp_sk(sk);
    571	ep = sp->ep;
    572
    573	if (!ep->asconf_enable)
    574		return retval;
    575
    576	pr_debug("%s: sk:%p, addrs:%p, addrcnt:%d\n",
    577		 __func__, sk, addrs, addrcnt);
    578
    579	list_for_each_entry(asoc, &ep->asocs, asocs) {
    580		if (!asoc->peer.asconf_capable)
    581			continue;
    582
    583		if (asoc->peer.addip_disabled_mask & SCTP_PARAM_ADD_IP)
    584			continue;
    585
    586		if (!sctp_state(asoc, ESTABLISHED))
    587			continue;
    588
    589		/* Check if any address in the packed array of addresses is
    590		 * in the bind address list of the association. If so,
    591		 * do not send the asconf chunk to its peer, but continue with
    592		 * other associations.
    593		 */
    594		addr_buf = addrs;
    595		for (i = 0; i < addrcnt; i++) {
    596			addr = addr_buf;
    597			af = sctp_get_af_specific(addr->v4.sin_family);
    598			if (!af) {
    599				retval = -EINVAL;
    600				goto out;
    601			}
    602
    603			if (sctp_assoc_lookup_laddr(asoc, addr))
    604				break;
    605
    606			addr_buf += af->sockaddr_len;
    607		}
    608		if (i < addrcnt)
    609			continue;
    610
    611		/* Use the first valid address in bind addr list of
    612		 * association as Address Parameter of ASCONF CHUNK.
    613		 */
    614		bp = &asoc->base.bind_addr;
    615		p = bp->address_list.next;
    616		laddr = list_entry(p, struct sctp_sockaddr_entry, list);
    617		chunk = sctp_make_asconf_update_ip(asoc, &laddr->a, addrs,
    618						   addrcnt, SCTP_PARAM_ADD_IP);
    619		if (!chunk) {
    620			retval = -ENOMEM;
    621			goto out;
    622		}
    623
    624		/* Add the new addresses to the bind address list with
    625		 * use_as_src set to 0.
    626		 */
    627		addr_buf = addrs;
    628		for (i = 0; i < addrcnt; i++) {
    629			addr = addr_buf;
    630			af = sctp_get_af_specific(addr->v4.sin_family);
    631			memcpy(&saveaddr, addr, af->sockaddr_len);
    632			retval = sctp_add_bind_addr(bp, &saveaddr,
    633						    sizeof(saveaddr),
    634						    SCTP_ADDR_NEW, GFP_ATOMIC);
    635			addr_buf += af->sockaddr_len;
    636		}
    637		if (asoc->src_out_of_asoc_ok) {
    638			struct sctp_transport *trans;
    639
    640			list_for_each_entry(trans,
    641			    &asoc->peer.transport_addr_list, transports) {
    642				trans->cwnd = min(4*asoc->pathmtu, max_t(__u32,
    643				    2*asoc->pathmtu, 4380));
    644				trans->ssthresh = asoc->peer.i.a_rwnd;
    645				trans->rto = asoc->rto_initial;
    646				sctp_max_rto(asoc, trans);
    647				trans->rtt = trans->srtt = trans->rttvar = 0;
    648				/* Clear the source and route cache */
    649				sctp_transport_route(trans, NULL,
    650						     sctp_sk(asoc->base.sk));
    651			}
    652		}
    653		retval = sctp_send_asconf(asoc, chunk);
    654	}
    655
    656out:
    657	return retval;
    658}
    659
    660/* Remove a list of addresses from bind addresses list.  Do not remove the
    661 * last address.
    662 *
    663 * Basically run through each address specified in the addrs/addrcnt
    664 * array/length pair, determine if it is IPv6 or IPv4 and call
    665 * sctp_del_bind() on it.
    666 *
    667 * If any of them fails, then the operation will be reversed and the
    668 * ones that were removed will be added back.
    669 *
    670 * At least one address has to be left; if only one address is
    671 * available, the operation will return -EBUSY.
    672 *
    673 * Only sctp_setsockopt_bindx() is supposed to call this function.
    674 */
    675static int sctp_bindx_rem(struct sock *sk, struct sockaddr *addrs, int addrcnt)
    676{
    677	struct sctp_sock *sp = sctp_sk(sk);
    678	struct sctp_endpoint *ep = sp->ep;
    679	int cnt;
    680	struct sctp_bind_addr *bp = &ep->base.bind_addr;
    681	int retval = 0;
    682	void *addr_buf;
    683	union sctp_addr *sa_addr;
    684	struct sctp_af *af;
    685
    686	pr_debug("%s: sk:%p, addrs:%p, addrcnt:%d\n",
    687		 __func__, sk, addrs, addrcnt);
    688
    689	addr_buf = addrs;
    690	for (cnt = 0; cnt < addrcnt; cnt++) {
    691		/* If the bind address list is empty or if there is only one
    692		 * bind address, there is nothing more to be removed (we need
    693		 * at least one address here).
    694		 */
    695		if (list_empty(&bp->address_list) ||
    696		    (sctp_list_single_entry(&bp->address_list))) {
    697			retval = -EBUSY;
    698			goto err_bindx_rem;
    699		}
    700
    701		sa_addr = addr_buf;
    702		af = sctp_get_af_specific(sa_addr->sa.sa_family);
    703		if (!af) {
    704			retval = -EINVAL;
    705			goto err_bindx_rem;
    706		}
    707
    708		if (!af->addr_valid(sa_addr, sp, NULL)) {
    709			retval = -EADDRNOTAVAIL;
    710			goto err_bindx_rem;
    711		}
    712
    713		if (sa_addr->v4.sin_port &&
    714		    sa_addr->v4.sin_port != htons(bp->port)) {
    715			retval = -EINVAL;
    716			goto err_bindx_rem;
    717		}
    718
    719		if (!sa_addr->v4.sin_port)
    720			sa_addr->v4.sin_port = htons(bp->port);
    721
    722		/* FIXME - There is probably a need to check if sk->sk_saddr and
    723		 * sk->sk_rcv_addr are currently set to one of the addresses to
    724		 * be removed. This is something which needs to be looked into
    725		 * when we are fixing the outstanding issues with multi-homing
    726		 * socket routing and failover schemes. Refer to comments in
    727		 * sctp_do_bind(). -daisy
    728		 */
    729		retval = sctp_del_bind_addr(bp, sa_addr);
    730
    731		addr_buf += af->sockaddr_len;
    732err_bindx_rem:
    733		if (retval < 0) {
    734			/* Failed. Add the ones that has been removed back */
    735			if (cnt > 0)
    736				sctp_bindx_add(sk, addrs, cnt);
    737			return retval;
    738		}
    739	}
    740
    741	return retval;
    742}
    743
    744/* Send an ASCONF chunk with Delete IP address parameters to all the peers of
    745 * the associations that are part of the endpoint indicating that a list of
    746 * local addresses are removed from the endpoint.
    747 *
    748 * If any of the addresses is already in the bind address list of the
    749 * association, we do not send the chunk for that association.  But it will not
    750 * affect other associations.
    751 *
    752 * Only sctp_setsockopt_bindx() is supposed to call this function.
    753 */
    754static int sctp_send_asconf_del_ip(struct sock		*sk,
    755				   struct sockaddr	*addrs,
    756				   int			addrcnt)
    757{
    758	struct sctp_sock	*sp;
    759	struct sctp_endpoint	*ep;
    760	struct sctp_association	*asoc;
    761	struct sctp_transport	*transport;
    762	struct sctp_bind_addr	*bp;
    763	struct sctp_chunk	*chunk;
    764	union sctp_addr		*laddr;
    765	void			*addr_buf;
    766	struct sctp_af		*af;
    767	struct sctp_sockaddr_entry *saddr;
    768	int 			i;
    769	int 			retval = 0;
    770	int			stored = 0;
    771
    772	chunk = NULL;
    773	sp = sctp_sk(sk);
    774	ep = sp->ep;
    775
    776	if (!ep->asconf_enable)
    777		return retval;
    778
    779	pr_debug("%s: sk:%p, addrs:%p, addrcnt:%d\n",
    780		 __func__, sk, addrs, addrcnt);
    781
    782	list_for_each_entry(asoc, &ep->asocs, asocs) {
    783
    784		if (!asoc->peer.asconf_capable)
    785			continue;
    786
    787		if (asoc->peer.addip_disabled_mask & SCTP_PARAM_DEL_IP)
    788			continue;
    789
    790		if (!sctp_state(asoc, ESTABLISHED))
    791			continue;
    792
    793		/* Check if any address in the packed array of addresses is
    794		 * not present in the bind address list of the association.
    795		 * If so, do not send the asconf chunk to its peer, but
    796		 * continue with other associations.
    797		 */
    798		addr_buf = addrs;
    799		for (i = 0; i < addrcnt; i++) {
    800			laddr = addr_buf;
    801			af = sctp_get_af_specific(laddr->v4.sin_family);
    802			if (!af) {
    803				retval = -EINVAL;
    804				goto out;
    805			}
    806
    807			if (!sctp_assoc_lookup_laddr(asoc, laddr))
    808				break;
    809
    810			addr_buf += af->sockaddr_len;
    811		}
    812		if (i < addrcnt)
    813			continue;
    814
    815		/* Find one address in the association's bind address list
    816		 * that is not in the packed array of addresses. This is to
    817		 * make sure that we do not delete all the addresses in the
    818		 * association.
    819		 */
    820		bp = &asoc->base.bind_addr;
    821		laddr = sctp_find_unmatch_addr(bp, (union sctp_addr *)addrs,
    822					       addrcnt, sp);
    823		if ((laddr == NULL) && (addrcnt == 1)) {
    824			if (asoc->asconf_addr_del_pending)
    825				continue;
    826			asoc->asconf_addr_del_pending =
    827			    kzalloc(sizeof(union sctp_addr), GFP_ATOMIC);
    828			if (asoc->asconf_addr_del_pending == NULL) {
    829				retval = -ENOMEM;
    830				goto out;
    831			}
    832			asoc->asconf_addr_del_pending->sa.sa_family =
    833				    addrs->sa_family;
    834			asoc->asconf_addr_del_pending->v4.sin_port =
    835				    htons(bp->port);
    836			if (addrs->sa_family == AF_INET) {
    837				struct sockaddr_in *sin;
    838
    839				sin = (struct sockaddr_in *)addrs;
    840				asoc->asconf_addr_del_pending->v4.sin_addr.s_addr = sin->sin_addr.s_addr;
    841			} else if (addrs->sa_family == AF_INET6) {
    842				struct sockaddr_in6 *sin6;
    843
    844				sin6 = (struct sockaddr_in6 *)addrs;
    845				asoc->asconf_addr_del_pending->v6.sin6_addr = sin6->sin6_addr;
    846			}
    847
    848			pr_debug("%s: keep the last address asoc:%p %pISc at %p\n",
    849				 __func__, asoc, &asoc->asconf_addr_del_pending->sa,
    850				 asoc->asconf_addr_del_pending);
    851
    852			asoc->src_out_of_asoc_ok = 1;
    853			stored = 1;
    854			goto skip_mkasconf;
    855		}
    856
    857		if (laddr == NULL)
    858			return -EINVAL;
    859
    860		/* We do not need RCU protection throughout this loop
    861		 * because this is done under a socket lock from the
    862		 * setsockopt call.
    863		 */
    864		chunk = sctp_make_asconf_update_ip(asoc, laddr, addrs, addrcnt,
    865						   SCTP_PARAM_DEL_IP);
    866		if (!chunk) {
    867			retval = -ENOMEM;
    868			goto out;
    869		}
    870
    871skip_mkasconf:
    872		/* Reset use_as_src flag for the addresses in the bind address
    873		 * list that are to be deleted.
    874		 */
    875		addr_buf = addrs;
    876		for (i = 0; i < addrcnt; i++) {
    877			laddr = addr_buf;
    878			af = sctp_get_af_specific(laddr->v4.sin_family);
    879			list_for_each_entry(saddr, &bp->address_list, list) {
    880				if (sctp_cmp_addr_exact(&saddr->a, laddr))
    881					saddr->state = SCTP_ADDR_DEL;
    882			}
    883			addr_buf += af->sockaddr_len;
    884		}
    885
    886		/* Update the route and saddr entries for all the transports
    887		 * as some of the addresses in the bind address list are
    888		 * about to be deleted and cannot be used as source addresses.
    889		 */
    890		list_for_each_entry(transport, &asoc->peer.transport_addr_list,
    891					transports) {
    892			sctp_transport_route(transport, NULL,
    893					     sctp_sk(asoc->base.sk));
    894		}
    895
    896		if (stored)
    897			/* We don't need to transmit ASCONF */
    898			continue;
    899		retval = sctp_send_asconf(asoc, chunk);
    900	}
    901out:
    902	return retval;
    903}
    904
    905/* set addr events to assocs in the endpoint.  ep and addr_wq must be locked */
    906int sctp_asconf_mgmt(struct sctp_sock *sp, struct sctp_sockaddr_entry *addrw)
    907{
    908	struct sock *sk = sctp_opt2sk(sp);
    909	union sctp_addr *addr;
    910	struct sctp_af *af;
    911
    912	/* It is safe to write port space in caller. */
    913	addr = &addrw->a;
    914	addr->v4.sin_port = htons(sp->ep->base.bind_addr.port);
    915	af = sctp_get_af_specific(addr->sa.sa_family);
    916	if (!af)
    917		return -EINVAL;
    918	if (sctp_verify_addr(sk, addr, af->sockaddr_len))
    919		return -EINVAL;
    920
    921	if (addrw->state == SCTP_ADDR_NEW)
    922		return sctp_send_asconf_add_ip(sk, (struct sockaddr *)addr, 1);
    923	else
    924		return sctp_send_asconf_del_ip(sk, (struct sockaddr *)addr, 1);
    925}
    926
    927/* Helper for tunneling sctp_bindx() requests through sctp_setsockopt()
    928 *
    929 * API 8.1
    930 * int sctp_bindx(int sd, struct sockaddr *addrs, int addrcnt,
    931 *                int flags);
    932 *
    933 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses.
    934 * If the sd is an IPv6 socket, the addresses passed can either be IPv4
    935 * or IPv6 addresses.
    936 *
    937 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see
    938 * Section 3.1.2 for this usage.
    939 *
    940 * addrs is a pointer to an array of one or more socket addresses. Each
    941 * address is contained in its appropriate structure (i.e. struct
    942 * sockaddr_in or struct sockaddr_in6) the family of the address type
    943 * must be used to distinguish the address length (note that this
    944 * representation is termed a "packed array" of addresses). The caller
    945 * specifies the number of addresses in the array with addrcnt.
    946 *
    947 * On success, sctp_bindx() returns 0. On failure, sctp_bindx() returns
    948 * -1, and sets errno to the appropriate error code.
    949 *
    950 * For SCTP, the port given in each socket address must be the same, or
    951 * sctp_bindx() will fail, setting errno to EINVAL.
    952 *
    953 * The flags parameter is formed from the bitwise OR of zero or more of
    954 * the following currently defined flags:
    955 *
    956 * SCTP_BINDX_ADD_ADDR
    957 *
    958 * SCTP_BINDX_REM_ADDR
    959 *
    960 * SCTP_BINDX_ADD_ADDR directs SCTP to add the given addresses to the
    961 * association, and SCTP_BINDX_REM_ADDR directs SCTP to remove the given
    962 * addresses from the association. The two flags are mutually exclusive;
    963 * if both are given, sctp_bindx() will fail with EINVAL. A caller may
    964 * not remove all addresses from an association; sctp_bindx() will
    965 * reject such an attempt with EINVAL.
    966 *
    967 * An application can use sctp_bindx(SCTP_BINDX_ADD_ADDR) to associate
    968 * additional addresses with an endpoint after calling bind().  Or use
    969 * sctp_bindx(SCTP_BINDX_REM_ADDR) to remove some addresses a listening
    970 * socket is associated with so that no new association accepted will be
    971 * associated with those addresses. If the endpoint supports dynamic
    972 * address a SCTP_BINDX_REM_ADDR or SCTP_BINDX_ADD_ADDR may cause a
    973 * endpoint to send the appropriate message to the peer to change the
    974 * peers address lists.
    975 *
    976 * Adding and removing addresses from a connected association is
    977 * optional functionality. Implementations that do not support this
    978 * functionality should return EOPNOTSUPP.
    979 *
    980 * Basically do nothing but copying the addresses from user to kernel
    981 * land and invoking either sctp_bindx_add() or sctp_bindx_rem() on the sk.
    982 * This is used for tunneling the sctp_bindx() request through sctp_setsockopt()
    983 * from userspace.
    984 *
    985 * On exit there is no need to do sockfd_put(), sys_setsockopt() does
    986 * it.
    987 *
    988 * sk        The sk of the socket
    989 * addrs     The pointer to the addresses
    990 * addrssize Size of the addrs buffer
    991 * op        Operation to perform (add or remove, see the flags of
    992 *           sctp_bindx)
    993 *
    994 * Returns 0 if ok, <0 errno code on error.
    995 */
    996static int sctp_setsockopt_bindx(struct sock *sk, struct sockaddr *addrs,
    997				 int addrs_size, int op)
    998{
    999	int err;
   1000	int addrcnt = 0;
   1001	int walk_size = 0;
   1002	struct sockaddr *sa_addr;
   1003	void *addr_buf = addrs;
   1004	struct sctp_af *af;
   1005
   1006	pr_debug("%s: sk:%p addrs:%p addrs_size:%d opt:%d\n",
   1007		 __func__, sk, addr_buf, addrs_size, op);
   1008
   1009	if (unlikely(addrs_size <= 0))
   1010		return -EINVAL;
   1011
   1012	/* Walk through the addrs buffer and count the number of addresses. */
   1013	while (walk_size < addrs_size) {
   1014		if (walk_size + sizeof(sa_family_t) > addrs_size)
   1015			return -EINVAL;
   1016
   1017		sa_addr = addr_buf;
   1018		af = sctp_get_af_specific(sa_addr->sa_family);
   1019
   1020		/* If the address family is not supported or if this address
   1021		 * causes the address buffer to overflow return EINVAL.
   1022		 */
   1023		if (!af || (walk_size + af->sockaddr_len) > addrs_size)
   1024			return -EINVAL;
   1025		addrcnt++;
   1026		addr_buf += af->sockaddr_len;
   1027		walk_size += af->sockaddr_len;
   1028	}
   1029
   1030	/* Do the work. */
   1031	switch (op) {
   1032	case SCTP_BINDX_ADD_ADDR:
   1033		/* Allow security module to validate bindx addresses. */
   1034		err = security_sctp_bind_connect(sk, SCTP_SOCKOPT_BINDX_ADD,
   1035						 addrs, addrs_size);
   1036		if (err)
   1037			return err;
   1038		err = sctp_bindx_add(sk, addrs, addrcnt);
   1039		if (err)
   1040			return err;
   1041		return sctp_send_asconf_add_ip(sk, addrs, addrcnt);
   1042	case SCTP_BINDX_REM_ADDR:
   1043		err = sctp_bindx_rem(sk, addrs, addrcnt);
   1044		if (err)
   1045			return err;
   1046		return sctp_send_asconf_del_ip(sk, addrs, addrcnt);
   1047
   1048	default:
   1049		return -EINVAL;
   1050	}
   1051}
   1052
   1053static int sctp_bind_add(struct sock *sk, struct sockaddr *addrs,
   1054		int addrlen)
   1055{
   1056	int err;
   1057
   1058	lock_sock(sk);
   1059	err = sctp_setsockopt_bindx(sk, addrs, addrlen, SCTP_BINDX_ADD_ADDR);
   1060	release_sock(sk);
   1061	return err;
   1062}
   1063
   1064static int sctp_connect_new_asoc(struct sctp_endpoint *ep,
   1065				 const union sctp_addr *daddr,
   1066				 const struct sctp_initmsg *init,
   1067				 struct sctp_transport **tp)
   1068{
   1069	struct sctp_association *asoc;
   1070	struct sock *sk = ep->base.sk;
   1071	struct net *net = sock_net(sk);
   1072	enum sctp_scope scope;
   1073	int err;
   1074
   1075	if (sctp_endpoint_is_peeled_off(ep, daddr))
   1076		return -EADDRNOTAVAIL;
   1077
   1078	if (!ep->base.bind_addr.port) {
   1079		if (sctp_autobind(sk))
   1080			return -EAGAIN;
   1081	} else {
   1082		if (inet_port_requires_bind_service(net, ep->base.bind_addr.port) &&
   1083		    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
   1084			return -EACCES;
   1085	}
   1086
   1087	scope = sctp_scope(daddr);
   1088	asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL);
   1089	if (!asoc)
   1090		return -ENOMEM;
   1091
   1092	err = sctp_assoc_set_bind_addr_from_ep(asoc, scope, GFP_KERNEL);
   1093	if (err < 0)
   1094		goto free;
   1095
   1096	*tp = sctp_assoc_add_peer(asoc, daddr, GFP_KERNEL, SCTP_UNKNOWN);
   1097	if (!*tp) {
   1098		err = -ENOMEM;
   1099		goto free;
   1100	}
   1101
   1102	if (!init)
   1103		return 0;
   1104
   1105	if (init->sinit_num_ostreams) {
   1106		__u16 outcnt = init->sinit_num_ostreams;
   1107
   1108		asoc->c.sinit_num_ostreams = outcnt;
   1109		/* outcnt has been changed, need to re-init stream */
   1110		err = sctp_stream_init(&asoc->stream, outcnt, 0, GFP_KERNEL);
   1111		if (err)
   1112			goto free;
   1113	}
   1114
   1115	if (init->sinit_max_instreams)
   1116		asoc->c.sinit_max_instreams = init->sinit_max_instreams;
   1117
   1118	if (init->sinit_max_attempts)
   1119		asoc->max_init_attempts = init->sinit_max_attempts;
   1120
   1121	if (init->sinit_max_init_timeo)
   1122		asoc->max_init_timeo =
   1123			msecs_to_jiffies(init->sinit_max_init_timeo);
   1124
   1125	return 0;
   1126free:
   1127	sctp_association_free(asoc);
   1128	return err;
   1129}
   1130
   1131static int sctp_connect_add_peer(struct sctp_association *asoc,
   1132				 union sctp_addr *daddr, int addr_len)
   1133{
   1134	struct sctp_endpoint *ep = asoc->ep;
   1135	struct sctp_association *old;
   1136	struct sctp_transport *t;
   1137	int err;
   1138
   1139	err = sctp_verify_addr(ep->base.sk, daddr, addr_len);
   1140	if (err)
   1141		return err;
   1142
   1143	old = sctp_endpoint_lookup_assoc(ep, daddr, &t);
   1144	if (old && old != asoc)
   1145		return old->state >= SCTP_STATE_ESTABLISHED ? -EISCONN
   1146							    : -EALREADY;
   1147
   1148	if (sctp_endpoint_is_peeled_off(ep, daddr))
   1149		return -EADDRNOTAVAIL;
   1150
   1151	t = sctp_assoc_add_peer(asoc, daddr, GFP_KERNEL, SCTP_UNKNOWN);
   1152	if (!t)
   1153		return -ENOMEM;
   1154
   1155	return 0;
   1156}
   1157
   1158/* __sctp_connect(struct sock* sk, struct sockaddr *kaddrs, int addrs_size)
   1159 *
   1160 * Common routine for handling connect() and sctp_connectx().
   1161 * Connect will come in with just a single address.
   1162 */
   1163static int __sctp_connect(struct sock *sk, struct sockaddr *kaddrs,
   1164			  int addrs_size, int flags, sctp_assoc_t *assoc_id)
   1165{
   1166	struct sctp_sock *sp = sctp_sk(sk);
   1167	struct sctp_endpoint *ep = sp->ep;
   1168	struct sctp_transport *transport;
   1169	struct sctp_association *asoc;
   1170	void *addr_buf = kaddrs;
   1171	union sctp_addr *daddr;
   1172	struct sctp_af *af;
   1173	int walk_size, err;
   1174	long timeo;
   1175
   1176	if (sctp_sstate(sk, ESTABLISHED) || sctp_sstate(sk, CLOSING) ||
   1177	    (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)))
   1178		return -EISCONN;
   1179
   1180	daddr = addr_buf;
   1181	af = sctp_get_af_specific(daddr->sa.sa_family);
   1182	if (!af || af->sockaddr_len > addrs_size)
   1183		return -EINVAL;
   1184
   1185	err = sctp_verify_addr(sk, daddr, af->sockaddr_len);
   1186	if (err)
   1187		return err;
   1188
   1189	asoc = sctp_endpoint_lookup_assoc(ep, daddr, &transport);
   1190	if (asoc)
   1191		return asoc->state >= SCTP_STATE_ESTABLISHED ? -EISCONN
   1192							     : -EALREADY;
   1193
   1194	err = sctp_connect_new_asoc(ep, daddr, NULL, &transport);
   1195	if (err)
   1196		return err;
   1197	asoc = transport->asoc;
   1198
   1199	addr_buf += af->sockaddr_len;
   1200	walk_size = af->sockaddr_len;
   1201	while (walk_size < addrs_size) {
   1202		err = -EINVAL;
   1203		if (walk_size + sizeof(sa_family_t) > addrs_size)
   1204			goto out_free;
   1205
   1206		daddr = addr_buf;
   1207		af = sctp_get_af_specific(daddr->sa.sa_family);
   1208		if (!af || af->sockaddr_len + walk_size > addrs_size)
   1209			goto out_free;
   1210
   1211		if (asoc->peer.port != ntohs(daddr->v4.sin_port))
   1212			goto out_free;
   1213
   1214		err = sctp_connect_add_peer(asoc, daddr, af->sockaddr_len);
   1215		if (err)
   1216			goto out_free;
   1217
   1218		addr_buf  += af->sockaddr_len;
   1219		walk_size += af->sockaddr_len;
   1220	}
   1221
   1222	/* In case the user of sctp_connectx() wants an association
   1223	 * id back, assign one now.
   1224	 */
   1225	if (assoc_id) {
   1226		err = sctp_assoc_set_id(asoc, GFP_KERNEL);
   1227		if (err < 0)
   1228			goto out_free;
   1229	}
   1230
   1231	err = sctp_primitive_ASSOCIATE(sock_net(sk), asoc, NULL);
   1232	if (err < 0)
   1233		goto out_free;
   1234
   1235	/* Initialize sk's dport and daddr for getpeername() */
   1236	inet_sk(sk)->inet_dport = htons(asoc->peer.port);
   1237	sp->pf->to_sk_daddr(daddr, sk);
   1238	sk->sk_err = 0;
   1239
   1240	if (assoc_id)
   1241		*assoc_id = asoc->assoc_id;
   1242
   1243	timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
   1244	return sctp_wait_for_connect(asoc, &timeo);
   1245
   1246out_free:
   1247	pr_debug("%s: took out_free path with asoc:%p kaddrs:%p err:%d\n",
   1248		 __func__, asoc, kaddrs, err);
   1249	sctp_association_free(asoc);
   1250	return err;
   1251}
   1252
   1253/* Helper for tunneling sctp_connectx() requests through sctp_setsockopt()
   1254 *
   1255 * API 8.9
   1256 * int sctp_connectx(int sd, struct sockaddr *addrs, int addrcnt,
   1257 * 			sctp_assoc_t *asoc);
   1258 *
   1259 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses.
   1260 * If the sd is an IPv6 socket, the addresses passed can either be IPv4
   1261 * or IPv6 addresses.
   1262 *
   1263 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see
   1264 * Section 3.1.2 for this usage.
   1265 *
   1266 * addrs is a pointer to an array of one or more socket addresses. Each
   1267 * address is contained in its appropriate structure (i.e. struct
   1268 * sockaddr_in or struct sockaddr_in6) the family of the address type
   1269 * must be used to distengish the address length (note that this
   1270 * representation is termed a "packed array" of addresses). The caller
   1271 * specifies the number of addresses in the array with addrcnt.
   1272 *
   1273 * On success, sctp_connectx() returns 0. It also sets the assoc_id to
   1274 * the association id of the new association.  On failure, sctp_connectx()
   1275 * returns -1, and sets errno to the appropriate error code.  The assoc_id
   1276 * is not touched by the kernel.
   1277 *
   1278 * For SCTP, the port given in each socket address must be the same, or
   1279 * sctp_connectx() will fail, setting errno to EINVAL.
   1280 *
   1281 * An application can use sctp_connectx to initiate an association with
   1282 * an endpoint that is multi-homed.  Much like sctp_bindx() this call
   1283 * allows a caller to specify multiple addresses at which a peer can be
   1284 * reached.  The way the SCTP stack uses the list of addresses to set up
   1285 * the association is implementation dependent.  This function only
   1286 * specifies that the stack will try to make use of all the addresses in
   1287 * the list when needed.
   1288 *
   1289 * Note that the list of addresses passed in is only used for setting up
   1290 * the association.  It does not necessarily equal the set of addresses
   1291 * the peer uses for the resulting association.  If the caller wants to
   1292 * find out the set of peer addresses, it must use sctp_getpaddrs() to
   1293 * retrieve them after the association has been set up.
   1294 *
   1295 * Basically do nothing but copying the addresses from user to kernel
   1296 * land and invoking either sctp_connectx(). This is used for tunneling
   1297 * the sctp_connectx() request through sctp_setsockopt() from userspace.
   1298 *
   1299 * On exit there is no need to do sockfd_put(), sys_setsockopt() does
   1300 * it.
   1301 *
   1302 * sk        The sk of the socket
   1303 * addrs     The pointer to the addresses
   1304 * addrssize Size of the addrs buffer
   1305 *
   1306 * Returns >=0 if ok, <0 errno code on error.
   1307 */
   1308static int __sctp_setsockopt_connectx(struct sock *sk, struct sockaddr *kaddrs,
   1309				      int addrs_size, sctp_assoc_t *assoc_id)
   1310{
   1311	int err = 0, flags = 0;
   1312
   1313	pr_debug("%s: sk:%p addrs:%p addrs_size:%d\n",
   1314		 __func__, sk, kaddrs, addrs_size);
   1315
   1316	/* make sure the 1st addr's sa_family is accessible later */
   1317	if (unlikely(addrs_size < sizeof(sa_family_t)))
   1318		return -EINVAL;
   1319
   1320	/* Allow security module to validate connectx addresses. */
   1321	err = security_sctp_bind_connect(sk, SCTP_SOCKOPT_CONNECTX,
   1322					 (struct sockaddr *)kaddrs,
   1323					  addrs_size);
   1324	if (err)
   1325		return err;
   1326
   1327	/* in-kernel sockets don't generally have a file allocated to them
   1328	 * if all they do is call sock_create_kern().
   1329	 */
   1330	if (sk->sk_socket->file)
   1331		flags = sk->sk_socket->file->f_flags;
   1332
   1333	return __sctp_connect(sk, kaddrs, addrs_size, flags, assoc_id);
   1334}
   1335
   1336/*
   1337 * This is an older interface.  It's kept for backward compatibility
   1338 * to the option that doesn't provide association id.
   1339 */
   1340static int sctp_setsockopt_connectx_old(struct sock *sk,
   1341					struct sockaddr *kaddrs,
   1342					int addrs_size)
   1343{
   1344	return __sctp_setsockopt_connectx(sk, kaddrs, addrs_size, NULL);
   1345}
   1346
   1347/*
   1348 * New interface for the API.  The since the API is done with a socket
   1349 * option, to make it simple we feed back the association id is as a return
   1350 * indication to the call.  Error is always negative and association id is
   1351 * always positive.
   1352 */
   1353static int sctp_setsockopt_connectx(struct sock *sk,
   1354				    struct sockaddr *kaddrs,
   1355				    int addrs_size)
   1356{
   1357	sctp_assoc_t assoc_id = 0;
   1358	int err = 0;
   1359
   1360	err = __sctp_setsockopt_connectx(sk, kaddrs, addrs_size, &assoc_id);
   1361
   1362	if (err)
   1363		return err;
   1364	else
   1365		return assoc_id;
   1366}
   1367
   1368/*
   1369 * New (hopefully final) interface for the API.
   1370 * We use the sctp_getaddrs_old structure so that use-space library
   1371 * can avoid any unnecessary allocations. The only different part
   1372 * is that we store the actual length of the address buffer into the
   1373 * addrs_num structure member. That way we can re-use the existing
   1374 * code.
   1375 */
   1376#ifdef CONFIG_COMPAT
   1377struct compat_sctp_getaddrs_old {
   1378	sctp_assoc_t	assoc_id;
   1379	s32		addr_num;
   1380	compat_uptr_t	addrs;		/* struct sockaddr * */
   1381};
   1382#endif
   1383
   1384static int sctp_getsockopt_connectx3(struct sock *sk, int len,
   1385				     char __user *optval,
   1386				     int __user *optlen)
   1387{
   1388	struct sctp_getaddrs_old param;
   1389	sctp_assoc_t assoc_id = 0;
   1390	struct sockaddr *kaddrs;
   1391	int err = 0;
   1392
   1393#ifdef CONFIG_COMPAT
   1394	if (in_compat_syscall()) {
   1395		struct compat_sctp_getaddrs_old param32;
   1396
   1397		if (len < sizeof(param32))
   1398			return -EINVAL;
   1399		if (copy_from_user(&param32, optval, sizeof(param32)))
   1400			return -EFAULT;
   1401
   1402		param.assoc_id = param32.assoc_id;
   1403		param.addr_num = param32.addr_num;
   1404		param.addrs = compat_ptr(param32.addrs);
   1405	} else
   1406#endif
   1407	{
   1408		if (len < sizeof(param))
   1409			return -EINVAL;
   1410		if (copy_from_user(&param, optval, sizeof(param)))
   1411			return -EFAULT;
   1412	}
   1413
   1414	kaddrs = memdup_user(param.addrs, param.addr_num);
   1415	if (IS_ERR(kaddrs))
   1416		return PTR_ERR(kaddrs);
   1417
   1418	err = __sctp_setsockopt_connectx(sk, kaddrs, param.addr_num, &assoc_id);
   1419	kfree(kaddrs);
   1420	if (err == 0 || err == -EINPROGRESS) {
   1421		if (copy_to_user(optval, &assoc_id, sizeof(assoc_id)))
   1422			return -EFAULT;
   1423		if (put_user(sizeof(assoc_id), optlen))
   1424			return -EFAULT;
   1425	}
   1426
   1427	return err;
   1428}
   1429
   1430/* API 3.1.4 close() - UDP Style Syntax
   1431 * Applications use close() to perform graceful shutdown (as described in
   1432 * Section 10.1 of [SCTP]) on ALL the associations currently represented
   1433 * by a UDP-style socket.
   1434 *
   1435 * The syntax is
   1436 *
   1437 *   ret = close(int sd);
   1438 *
   1439 *   sd      - the socket descriptor of the associations to be closed.
   1440 *
   1441 * To gracefully shutdown a specific association represented by the
   1442 * UDP-style socket, an application should use the sendmsg() call,
   1443 * passing no user data, but including the appropriate flag in the
   1444 * ancillary data (see Section xxxx).
   1445 *
   1446 * If sd in the close() call is a branched-off socket representing only
   1447 * one association, the shutdown is performed on that association only.
   1448 *
   1449 * 4.1.6 close() - TCP Style Syntax
   1450 *
   1451 * Applications use close() to gracefully close down an association.
   1452 *
   1453 * The syntax is:
   1454 *
   1455 *    int close(int sd);
   1456 *
   1457 *      sd      - the socket descriptor of the association to be closed.
   1458 *
   1459 * After an application calls close() on a socket descriptor, no further
   1460 * socket operations will succeed on that descriptor.
   1461 *
   1462 * API 7.1.4 SO_LINGER
   1463 *
   1464 * An application using the TCP-style socket can use this option to
   1465 * perform the SCTP ABORT primitive.  The linger option structure is:
   1466 *
   1467 *  struct  linger {
   1468 *     int     l_onoff;                // option on/off
   1469 *     int     l_linger;               // linger time
   1470 * };
   1471 *
   1472 * To enable the option, set l_onoff to 1.  If the l_linger value is set
   1473 * to 0, calling close() is the same as the ABORT primitive.  If the
   1474 * value is set to a negative value, the setsockopt() call will return
   1475 * an error.  If the value is set to a positive value linger_time, the
   1476 * close() can be blocked for at most linger_time ms.  If the graceful
   1477 * shutdown phase does not finish during this period, close() will
   1478 * return but the graceful shutdown phase continues in the system.
   1479 */
   1480static void sctp_close(struct sock *sk, long timeout)
   1481{
   1482	struct net *net = sock_net(sk);
   1483	struct sctp_endpoint *ep;
   1484	struct sctp_association *asoc;
   1485	struct list_head *pos, *temp;
   1486	unsigned int data_was_unread;
   1487
   1488	pr_debug("%s: sk:%p, timeout:%ld\n", __func__, sk, timeout);
   1489
   1490	lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
   1491	sk->sk_shutdown = SHUTDOWN_MASK;
   1492	inet_sk_set_state(sk, SCTP_SS_CLOSING);
   1493
   1494	ep = sctp_sk(sk)->ep;
   1495
   1496	/* Clean up any skbs sitting on the receive queue.  */
   1497	data_was_unread = sctp_queue_purge_ulpevents(&sk->sk_receive_queue);
   1498	data_was_unread += sctp_queue_purge_ulpevents(&sctp_sk(sk)->pd_lobby);
   1499
   1500	/* Walk all associations on an endpoint.  */
   1501	list_for_each_safe(pos, temp, &ep->asocs) {
   1502		asoc = list_entry(pos, struct sctp_association, asocs);
   1503
   1504		if (sctp_style(sk, TCP)) {
   1505			/* A closed association can still be in the list if
   1506			 * it belongs to a TCP-style listening socket that is
   1507			 * not yet accepted. If so, free it. If not, send an
   1508			 * ABORT or SHUTDOWN based on the linger options.
   1509			 */
   1510			if (sctp_state(asoc, CLOSED)) {
   1511				sctp_association_free(asoc);
   1512				continue;
   1513			}
   1514		}
   1515
   1516		if (data_was_unread || !skb_queue_empty(&asoc->ulpq.lobby) ||
   1517		    !skb_queue_empty(&asoc->ulpq.reasm) ||
   1518		    !skb_queue_empty(&asoc->ulpq.reasm_uo) ||
   1519		    (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime)) {
   1520			struct sctp_chunk *chunk;
   1521
   1522			chunk = sctp_make_abort_user(asoc, NULL, 0);
   1523			sctp_primitive_ABORT(net, asoc, chunk);
   1524		} else
   1525			sctp_primitive_SHUTDOWN(net, asoc, NULL);
   1526	}
   1527
   1528	/* On a TCP-style socket, block for at most linger_time if set. */
   1529	if (sctp_style(sk, TCP) && timeout)
   1530		sctp_wait_for_close(sk, timeout);
   1531
   1532	/* This will run the backlog queue.  */
   1533	release_sock(sk);
   1534
   1535	/* Supposedly, no process has access to the socket, but
   1536	 * the net layers still may.
   1537	 * Also, sctp_destroy_sock() needs to be called with addr_wq_lock
   1538	 * held and that should be grabbed before socket lock.
   1539	 */
   1540	spin_lock_bh(&net->sctp.addr_wq_lock);
   1541	bh_lock_sock_nested(sk);
   1542
   1543	/* Hold the sock, since sk_common_release() will put sock_put()
   1544	 * and we have just a little more cleanup.
   1545	 */
   1546	sock_hold(sk);
   1547	sk_common_release(sk);
   1548
   1549	bh_unlock_sock(sk);
   1550	spin_unlock_bh(&net->sctp.addr_wq_lock);
   1551
   1552	sock_put(sk);
   1553
   1554	SCTP_DBG_OBJCNT_DEC(sock);
   1555}
   1556
   1557/* Handle EPIPE error. */
   1558static int sctp_error(struct sock *sk, int flags, int err)
   1559{
   1560	if (err == -EPIPE)
   1561		err = sock_error(sk) ? : -EPIPE;
   1562	if (err == -EPIPE && !(flags & MSG_NOSIGNAL))
   1563		send_sig(SIGPIPE, current, 0);
   1564	return err;
   1565}
   1566
   1567/* API 3.1.3 sendmsg() - UDP Style Syntax
   1568 *
   1569 * An application uses sendmsg() and recvmsg() calls to transmit data to
   1570 * and receive data from its peer.
   1571 *
   1572 *  ssize_t sendmsg(int socket, const struct msghdr *message,
   1573 *                  int flags);
   1574 *
   1575 *  socket  - the socket descriptor of the endpoint.
   1576 *  message - pointer to the msghdr structure which contains a single
   1577 *            user message and possibly some ancillary data.
   1578 *
   1579 *            See Section 5 for complete description of the data
   1580 *            structures.
   1581 *
   1582 *  flags   - flags sent or received with the user message, see Section
   1583 *            5 for complete description of the flags.
   1584 *
   1585 * Note:  This function could use a rewrite especially when explicit
   1586 * connect support comes in.
   1587 */
   1588/* BUG:  We do not implement the equivalent of sk_stream_wait_memory(). */
   1589
   1590static int sctp_msghdr_parse(const struct msghdr *msg,
   1591			     struct sctp_cmsgs *cmsgs);
   1592
   1593static int sctp_sendmsg_parse(struct sock *sk, struct sctp_cmsgs *cmsgs,
   1594			      struct sctp_sndrcvinfo *srinfo,
   1595			      const struct msghdr *msg, size_t msg_len)
   1596{
   1597	__u16 sflags;
   1598	int err;
   1599
   1600	if (sctp_sstate(sk, LISTENING) && sctp_style(sk, TCP))
   1601		return -EPIPE;
   1602
   1603	if (msg_len > sk->sk_sndbuf)
   1604		return -EMSGSIZE;
   1605
   1606	memset(cmsgs, 0, sizeof(*cmsgs));
   1607	err = sctp_msghdr_parse(msg, cmsgs);
   1608	if (err) {
   1609		pr_debug("%s: msghdr parse err:%x\n", __func__, err);
   1610		return err;
   1611	}
   1612
   1613	memset(srinfo, 0, sizeof(*srinfo));
   1614	if (cmsgs->srinfo) {
   1615		srinfo->sinfo_stream = cmsgs->srinfo->sinfo_stream;
   1616		srinfo->sinfo_flags = cmsgs->srinfo->sinfo_flags;
   1617		srinfo->sinfo_ppid = cmsgs->srinfo->sinfo_ppid;
   1618		srinfo->sinfo_context = cmsgs->srinfo->sinfo_context;
   1619		srinfo->sinfo_assoc_id = cmsgs->srinfo->sinfo_assoc_id;
   1620		srinfo->sinfo_timetolive = cmsgs->srinfo->sinfo_timetolive;
   1621	}
   1622
   1623	if (cmsgs->sinfo) {
   1624		srinfo->sinfo_stream = cmsgs->sinfo->snd_sid;
   1625		srinfo->sinfo_flags = cmsgs->sinfo->snd_flags;
   1626		srinfo->sinfo_ppid = cmsgs->sinfo->snd_ppid;
   1627		srinfo->sinfo_context = cmsgs->sinfo->snd_context;
   1628		srinfo->sinfo_assoc_id = cmsgs->sinfo->snd_assoc_id;
   1629	}
   1630
   1631	if (cmsgs->prinfo) {
   1632		srinfo->sinfo_timetolive = cmsgs->prinfo->pr_value;
   1633		SCTP_PR_SET_POLICY(srinfo->sinfo_flags,
   1634				   cmsgs->prinfo->pr_policy);
   1635	}
   1636
   1637	sflags = srinfo->sinfo_flags;
   1638	if (!sflags && msg_len)
   1639		return 0;
   1640
   1641	if (sctp_style(sk, TCP) && (sflags & (SCTP_EOF | SCTP_ABORT)))
   1642		return -EINVAL;
   1643
   1644	if (((sflags & SCTP_EOF) && msg_len > 0) ||
   1645	    (!(sflags & (SCTP_EOF | SCTP_ABORT)) && msg_len == 0))
   1646		return -EINVAL;
   1647
   1648	if ((sflags & SCTP_ADDR_OVER) && !msg->msg_name)
   1649		return -EINVAL;
   1650
   1651	return 0;
   1652}
   1653
   1654static int sctp_sendmsg_new_asoc(struct sock *sk, __u16 sflags,
   1655				 struct sctp_cmsgs *cmsgs,
   1656				 union sctp_addr *daddr,
   1657				 struct sctp_transport **tp)
   1658{
   1659	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   1660	struct sctp_association *asoc;
   1661	struct cmsghdr *cmsg;
   1662	__be32 flowinfo = 0;
   1663	struct sctp_af *af;
   1664	int err;
   1665
   1666	*tp = NULL;
   1667
   1668	if (sflags & (SCTP_EOF | SCTP_ABORT))
   1669		return -EINVAL;
   1670
   1671	if (sctp_style(sk, TCP) && (sctp_sstate(sk, ESTABLISHED) ||
   1672				    sctp_sstate(sk, CLOSING)))
   1673		return -EADDRNOTAVAIL;
   1674
   1675	/* Label connection socket for first association 1-to-many
   1676	 * style for client sequence socket()->sendmsg(). This
   1677	 * needs to be done before sctp_assoc_add_peer() as that will
   1678	 * set up the initial packet that needs to account for any
   1679	 * security ip options (CIPSO/CALIPSO) added to the packet.
   1680	 */
   1681	af = sctp_get_af_specific(daddr->sa.sa_family);
   1682	if (!af)
   1683		return -EINVAL;
   1684	err = security_sctp_bind_connect(sk, SCTP_SENDMSG_CONNECT,
   1685					 (struct sockaddr *)daddr,
   1686					 af->sockaddr_len);
   1687	if (err < 0)
   1688		return err;
   1689
   1690	err = sctp_connect_new_asoc(ep, daddr, cmsgs->init, tp);
   1691	if (err)
   1692		return err;
   1693	asoc = (*tp)->asoc;
   1694
   1695	if (!cmsgs->addrs_msg)
   1696		return 0;
   1697
   1698	if (daddr->sa.sa_family == AF_INET6)
   1699		flowinfo = daddr->v6.sin6_flowinfo;
   1700
   1701	/* sendv addr list parse */
   1702	for_each_cmsghdr(cmsg, cmsgs->addrs_msg) {
   1703		union sctp_addr _daddr;
   1704		int dlen;
   1705
   1706		if (cmsg->cmsg_level != IPPROTO_SCTP ||
   1707		    (cmsg->cmsg_type != SCTP_DSTADDRV4 &&
   1708		     cmsg->cmsg_type != SCTP_DSTADDRV6))
   1709			continue;
   1710
   1711		daddr = &_daddr;
   1712		memset(daddr, 0, sizeof(*daddr));
   1713		dlen = cmsg->cmsg_len - sizeof(struct cmsghdr);
   1714		if (cmsg->cmsg_type == SCTP_DSTADDRV4) {
   1715			if (dlen < sizeof(struct in_addr)) {
   1716				err = -EINVAL;
   1717				goto free;
   1718			}
   1719
   1720			dlen = sizeof(struct in_addr);
   1721			daddr->v4.sin_family = AF_INET;
   1722			daddr->v4.sin_port = htons(asoc->peer.port);
   1723			memcpy(&daddr->v4.sin_addr, CMSG_DATA(cmsg), dlen);
   1724		} else {
   1725			if (dlen < sizeof(struct in6_addr)) {
   1726				err = -EINVAL;
   1727				goto free;
   1728			}
   1729
   1730			dlen = sizeof(struct in6_addr);
   1731			daddr->v6.sin6_flowinfo = flowinfo;
   1732			daddr->v6.sin6_family = AF_INET6;
   1733			daddr->v6.sin6_port = htons(asoc->peer.port);
   1734			memcpy(&daddr->v6.sin6_addr, CMSG_DATA(cmsg), dlen);
   1735		}
   1736
   1737		err = sctp_connect_add_peer(asoc, daddr, sizeof(*daddr));
   1738		if (err)
   1739			goto free;
   1740	}
   1741
   1742	return 0;
   1743
   1744free:
   1745	sctp_association_free(asoc);
   1746	return err;
   1747}
   1748
   1749static int sctp_sendmsg_check_sflags(struct sctp_association *asoc,
   1750				     __u16 sflags, struct msghdr *msg,
   1751				     size_t msg_len)
   1752{
   1753	struct sock *sk = asoc->base.sk;
   1754	struct net *net = sock_net(sk);
   1755
   1756	if (sctp_state(asoc, CLOSED) && sctp_style(sk, TCP))
   1757		return -EPIPE;
   1758
   1759	if ((sflags & SCTP_SENDALL) && sctp_style(sk, UDP) &&
   1760	    !sctp_state(asoc, ESTABLISHED))
   1761		return 0;
   1762
   1763	if (sflags & SCTP_EOF) {
   1764		pr_debug("%s: shutting down association:%p\n", __func__, asoc);
   1765		sctp_primitive_SHUTDOWN(net, asoc, NULL);
   1766
   1767		return 0;
   1768	}
   1769
   1770	if (sflags & SCTP_ABORT) {
   1771		struct sctp_chunk *chunk;
   1772
   1773		chunk = sctp_make_abort_user(asoc, msg, msg_len);
   1774		if (!chunk)
   1775			return -ENOMEM;
   1776
   1777		pr_debug("%s: aborting association:%p\n", __func__, asoc);
   1778		sctp_primitive_ABORT(net, asoc, chunk);
   1779		iov_iter_revert(&msg->msg_iter, msg_len);
   1780
   1781		return 0;
   1782	}
   1783
   1784	return 1;
   1785}
   1786
   1787static int sctp_sendmsg_to_asoc(struct sctp_association *asoc,
   1788				struct msghdr *msg, size_t msg_len,
   1789				struct sctp_transport *transport,
   1790				struct sctp_sndrcvinfo *sinfo)
   1791{
   1792	struct sock *sk = asoc->base.sk;
   1793	struct sctp_sock *sp = sctp_sk(sk);
   1794	struct net *net = sock_net(sk);
   1795	struct sctp_datamsg *datamsg;
   1796	bool wait_connect = false;
   1797	struct sctp_chunk *chunk;
   1798	long timeo;
   1799	int err;
   1800
   1801	if (sinfo->sinfo_stream >= asoc->stream.outcnt) {
   1802		err = -EINVAL;
   1803		goto err;
   1804	}
   1805
   1806	if (unlikely(!SCTP_SO(&asoc->stream, sinfo->sinfo_stream)->ext)) {
   1807		err = sctp_stream_init_ext(&asoc->stream, sinfo->sinfo_stream);
   1808		if (err)
   1809			goto err;
   1810	}
   1811
   1812	if (sp->disable_fragments && msg_len > asoc->frag_point) {
   1813		err = -EMSGSIZE;
   1814		goto err;
   1815	}
   1816
   1817	if (asoc->pmtu_pending) {
   1818		if (sp->param_flags & SPP_PMTUD_ENABLE)
   1819			sctp_assoc_sync_pmtu(asoc);
   1820		asoc->pmtu_pending = 0;
   1821	}
   1822
   1823	if (sctp_wspace(asoc) < (int)msg_len)
   1824		sctp_prsctp_prune(asoc, sinfo, msg_len - sctp_wspace(asoc));
   1825
   1826	if (sk_under_memory_pressure(sk))
   1827		sk_mem_reclaim(sk);
   1828
   1829	if (sctp_wspace(asoc) <= 0 || !sk_wmem_schedule(sk, msg_len)) {
   1830		timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
   1831		err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len);
   1832		if (err)
   1833			goto err;
   1834	}
   1835
   1836	if (sctp_state(asoc, CLOSED)) {
   1837		err = sctp_primitive_ASSOCIATE(net, asoc, NULL);
   1838		if (err)
   1839			goto err;
   1840
   1841		if (asoc->ep->intl_enable) {
   1842			timeo = sock_sndtimeo(sk, 0);
   1843			err = sctp_wait_for_connect(asoc, &timeo);
   1844			if (err) {
   1845				err = -ESRCH;
   1846				goto err;
   1847			}
   1848		} else {
   1849			wait_connect = true;
   1850		}
   1851
   1852		pr_debug("%s: we associated primitively\n", __func__);
   1853	}
   1854
   1855	datamsg = sctp_datamsg_from_user(asoc, sinfo, &msg->msg_iter);
   1856	if (IS_ERR(datamsg)) {
   1857		err = PTR_ERR(datamsg);
   1858		goto err;
   1859	}
   1860
   1861	asoc->force_delay = !!(msg->msg_flags & MSG_MORE);
   1862
   1863	list_for_each_entry(chunk, &datamsg->chunks, frag_list) {
   1864		sctp_chunk_hold(chunk);
   1865		sctp_set_owner_w(chunk);
   1866		chunk->transport = transport;
   1867	}
   1868
   1869	err = sctp_primitive_SEND(net, asoc, datamsg);
   1870	if (err) {
   1871		sctp_datamsg_free(datamsg);
   1872		goto err;
   1873	}
   1874
   1875	pr_debug("%s: we sent primitively\n", __func__);
   1876
   1877	sctp_datamsg_put(datamsg);
   1878
   1879	if (unlikely(wait_connect)) {
   1880		timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
   1881		sctp_wait_for_connect(asoc, &timeo);
   1882	}
   1883
   1884	err = msg_len;
   1885
   1886err:
   1887	return err;
   1888}
   1889
   1890static union sctp_addr *sctp_sendmsg_get_daddr(struct sock *sk,
   1891					       const struct msghdr *msg,
   1892					       struct sctp_cmsgs *cmsgs)
   1893{
   1894	union sctp_addr *daddr = NULL;
   1895	int err;
   1896
   1897	if (!sctp_style(sk, UDP_HIGH_BANDWIDTH) && msg->msg_name) {
   1898		int len = msg->msg_namelen;
   1899
   1900		if (len > sizeof(*daddr))
   1901			len = sizeof(*daddr);
   1902
   1903		daddr = (union sctp_addr *)msg->msg_name;
   1904
   1905		err = sctp_verify_addr(sk, daddr, len);
   1906		if (err)
   1907			return ERR_PTR(err);
   1908	}
   1909
   1910	return daddr;
   1911}
   1912
   1913static void sctp_sendmsg_update_sinfo(struct sctp_association *asoc,
   1914				      struct sctp_sndrcvinfo *sinfo,
   1915				      struct sctp_cmsgs *cmsgs)
   1916{
   1917	if (!cmsgs->srinfo && !cmsgs->sinfo) {
   1918		sinfo->sinfo_stream = asoc->default_stream;
   1919		sinfo->sinfo_ppid = asoc->default_ppid;
   1920		sinfo->sinfo_context = asoc->default_context;
   1921		sinfo->sinfo_assoc_id = sctp_assoc2id(asoc);
   1922
   1923		if (!cmsgs->prinfo)
   1924			sinfo->sinfo_flags = asoc->default_flags;
   1925	}
   1926
   1927	if (!cmsgs->srinfo && !cmsgs->prinfo)
   1928		sinfo->sinfo_timetolive = asoc->default_timetolive;
   1929
   1930	if (cmsgs->authinfo) {
   1931		/* Reuse sinfo_tsn to indicate that authinfo was set and
   1932		 * sinfo_ssn to save the keyid on tx path.
   1933		 */
   1934		sinfo->sinfo_tsn = 1;
   1935		sinfo->sinfo_ssn = cmsgs->authinfo->auth_keynumber;
   1936	}
   1937}
   1938
   1939static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)
   1940{
   1941	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   1942	struct sctp_transport *transport = NULL;
   1943	struct sctp_sndrcvinfo _sinfo, *sinfo;
   1944	struct sctp_association *asoc, *tmp;
   1945	struct sctp_cmsgs cmsgs;
   1946	union sctp_addr *daddr;
   1947	bool new = false;
   1948	__u16 sflags;
   1949	int err;
   1950
   1951	/* Parse and get snd_info */
   1952	err = sctp_sendmsg_parse(sk, &cmsgs, &_sinfo, msg, msg_len);
   1953	if (err)
   1954		goto out;
   1955
   1956	sinfo  = &_sinfo;
   1957	sflags = sinfo->sinfo_flags;
   1958
   1959	/* Get daddr from msg */
   1960	daddr = sctp_sendmsg_get_daddr(sk, msg, &cmsgs);
   1961	if (IS_ERR(daddr)) {
   1962		err = PTR_ERR(daddr);
   1963		goto out;
   1964	}
   1965
   1966	lock_sock(sk);
   1967
   1968	/* SCTP_SENDALL process */
   1969	if ((sflags & SCTP_SENDALL) && sctp_style(sk, UDP)) {
   1970		list_for_each_entry_safe(asoc, tmp, &ep->asocs, asocs) {
   1971			err = sctp_sendmsg_check_sflags(asoc, sflags, msg,
   1972							msg_len);
   1973			if (err == 0)
   1974				continue;
   1975			if (err < 0)
   1976				goto out_unlock;
   1977
   1978			sctp_sendmsg_update_sinfo(asoc, sinfo, &cmsgs);
   1979
   1980			err = sctp_sendmsg_to_asoc(asoc, msg, msg_len,
   1981						   NULL, sinfo);
   1982			if (err < 0)
   1983				goto out_unlock;
   1984
   1985			iov_iter_revert(&msg->msg_iter, err);
   1986		}
   1987
   1988		goto out_unlock;
   1989	}
   1990
   1991	/* Get and check or create asoc */
   1992	if (daddr) {
   1993		asoc = sctp_endpoint_lookup_assoc(ep, daddr, &transport);
   1994		if (asoc) {
   1995			err = sctp_sendmsg_check_sflags(asoc, sflags, msg,
   1996							msg_len);
   1997			if (err <= 0)
   1998				goto out_unlock;
   1999		} else {
   2000			err = sctp_sendmsg_new_asoc(sk, sflags, &cmsgs, daddr,
   2001						    &transport);
   2002			if (err)
   2003				goto out_unlock;
   2004
   2005			asoc = transport->asoc;
   2006			new = true;
   2007		}
   2008
   2009		if (!sctp_style(sk, TCP) && !(sflags & SCTP_ADDR_OVER))
   2010			transport = NULL;
   2011	} else {
   2012		asoc = sctp_id2assoc(sk, sinfo->sinfo_assoc_id);
   2013		if (!asoc) {
   2014			err = -EPIPE;
   2015			goto out_unlock;
   2016		}
   2017
   2018		err = sctp_sendmsg_check_sflags(asoc, sflags, msg, msg_len);
   2019		if (err <= 0)
   2020			goto out_unlock;
   2021	}
   2022
   2023	/* Update snd_info with the asoc */
   2024	sctp_sendmsg_update_sinfo(asoc, sinfo, &cmsgs);
   2025
   2026	/* Send msg to the asoc */
   2027	err = sctp_sendmsg_to_asoc(asoc, msg, msg_len, transport, sinfo);
   2028	if (err < 0 && err != -ESRCH && new)
   2029		sctp_association_free(asoc);
   2030
   2031out_unlock:
   2032	release_sock(sk);
   2033out:
   2034	return sctp_error(sk, msg->msg_flags, err);
   2035}
   2036
   2037/* This is an extended version of skb_pull() that removes the data from the
   2038 * start of a skb even when data is spread across the list of skb's in the
   2039 * frag_list. len specifies the total amount of data that needs to be removed.
   2040 * when 'len' bytes could be removed from the skb, it returns 0.
   2041 * If 'len' exceeds the total skb length,  it returns the no. of bytes that
   2042 * could not be removed.
   2043 */
   2044static int sctp_skb_pull(struct sk_buff *skb, int len)
   2045{
   2046	struct sk_buff *list;
   2047	int skb_len = skb_headlen(skb);
   2048	int rlen;
   2049
   2050	if (len <= skb_len) {
   2051		__skb_pull(skb, len);
   2052		return 0;
   2053	}
   2054	len -= skb_len;
   2055	__skb_pull(skb, skb_len);
   2056
   2057	skb_walk_frags(skb, list) {
   2058		rlen = sctp_skb_pull(list, len);
   2059		skb->len -= (len-rlen);
   2060		skb->data_len -= (len-rlen);
   2061
   2062		if (!rlen)
   2063			return 0;
   2064
   2065		len = rlen;
   2066	}
   2067
   2068	return len;
   2069}
   2070
   2071/* API 3.1.3  recvmsg() - UDP Style Syntax
   2072 *
   2073 *  ssize_t recvmsg(int socket, struct msghdr *message,
   2074 *                    int flags);
   2075 *
   2076 *  socket  - the socket descriptor of the endpoint.
   2077 *  message - pointer to the msghdr structure which contains a single
   2078 *            user message and possibly some ancillary data.
   2079 *
   2080 *            See Section 5 for complete description of the data
   2081 *            structures.
   2082 *
   2083 *  flags   - flags sent or received with the user message, see Section
   2084 *            5 for complete description of the flags.
   2085 */
   2086static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
   2087			int flags, int *addr_len)
   2088{
   2089	struct sctp_ulpevent *event = NULL;
   2090	struct sctp_sock *sp = sctp_sk(sk);
   2091	struct sk_buff *skb, *head_skb;
   2092	int copied;
   2093	int err = 0;
   2094	int skb_len;
   2095
   2096	pr_debug("%s: sk:%p, msghdr:%p, len:%zd, flags:0x%x, addr_len:%p)\n",
   2097		 __func__, sk, msg, len, flags, addr_len);
   2098
   2099	lock_sock(sk);
   2100
   2101	if (sctp_style(sk, TCP) && !sctp_sstate(sk, ESTABLISHED) &&
   2102	    !sctp_sstate(sk, CLOSING) && !sctp_sstate(sk, CLOSED)) {
   2103		err = -ENOTCONN;
   2104		goto out;
   2105	}
   2106
   2107	skb = sctp_skb_recv_datagram(sk, flags, &err);
   2108	if (!skb)
   2109		goto out;
   2110
   2111	/* Get the total length of the skb including any skb's in the
   2112	 * frag_list.
   2113	 */
   2114	skb_len = skb->len;
   2115
   2116	copied = skb_len;
   2117	if (copied > len)
   2118		copied = len;
   2119
   2120	err = skb_copy_datagram_msg(skb, 0, msg, copied);
   2121
   2122	event = sctp_skb2event(skb);
   2123
   2124	if (err)
   2125		goto out_free;
   2126
   2127	if (event->chunk && event->chunk->head_skb)
   2128		head_skb = event->chunk->head_skb;
   2129	else
   2130		head_skb = skb;
   2131	sock_recv_cmsgs(msg, sk, head_skb);
   2132	if (sctp_ulpevent_is_notification(event)) {
   2133		msg->msg_flags |= MSG_NOTIFICATION;
   2134		sp->pf->event_msgname(event, msg->msg_name, addr_len);
   2135	} else {
   2136		sp->pf->skb_msgname(head_skb, msg->msg_name, addr_len);
   2137	}
   2138
   2139	/* Check if we allow SCTP_NXTINFO. */
   2140	if (sp->recvnxtinfo)
   2141		sctp_ulpevent_read_nxtinfo(event, msg, sk);
   2142	/* Check if we allow SCTP_RCVINFO. */
   2143	if (sp->recvrcvinfo)
   2144		sctp_ulpevent_read_rcvinfo(event, msg);
   2145	/* Check if we allow SCTP_SNDRCVINFO. */
   2146	if (sctp_ulpevent_type_enabled(sp->subscribe, SCTP_DATA_IO_EVENT))
   2147		sctp_ulpevent_read_sndrcvinfo(event, msg);
   2148
   2149	err = copied;
   2150
   2151	/* If skb's length exceeds the user's buffer, update the skb and
   2152	 * push it back to the receive_queue so that the next call to
   2153	 * recvmsg() will return the remaining data. Don't set MSG_EOR.
   2154	 */
   2155	if (skb_len > copied) {
   2156		msg->msg_flags &= ~MSG_EOR;
   2157		if (flags & MSG_PEEK)
   2158			goto out_free;
   2159		sctp_skb_pull(skb, copied);
   2160		skb_queue_head(&sk->sk_receive_queue, skb);
   2161
   2162		/* When only partial message is copied to the user, increase
   2163		 * rwnd by that amount. If all the data in the skb is read,
   2164		 * rwnd is updated when the event is freed.
   2165		 */
   2166		if (!sctp_ulpevent_is_notification(event))
   2167			sctp_assoc_rwnd_increase(event->asoc, copied);
   2168		goto out;
   2169	} else if ((event->msg_flags & MSG_NOTIFICATION) ||
   2170		   (event->msg_flags & MSG_EOR))
   2171		msg->msg_flags |= MSG_EOR;
   2172	else
   2173		msg->msg_flags &= ~MSG_EOR;
   2174
   2175out_free:
   2176	if (flags & MSG_PEEK) {
   2177		/* Release the skb reference acquired after peeking the skb in
   2178		 * sctp_skb_recv_datagram().
   2179		 */
   2180		kfree_skb(skb);
   2181	} else {
   2182		/* Free the event which includes releasing the reference to
   2183		 * the owner of the skb, freeing the skb and updating the
   2184		 * rwnd.
   2185		 */
   2186		sctp_ulpevent_free(event);
   2187	}
   2188out:
   2189	release_sock(sk);
   2190	return err;
   2191}
   2192
   2193/* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS)
   2194 *
   2195 * This option is a on/off flag.  If enabled no SCTP message
   2196 * fragmentation will be performed.  Instead if a message being sent
   2197 * exceeds the current PMTU size, the message will NOT be sent and
   2198 * instead a error will be indicated to the user.
   2199 */
   2200static int sctp_setsockopt_disable_fragments(struct sock *sk, int *val,
   2201					     unsigned int optlen)
   2202{
   2203	if (optlen < sizeof(int))
   2204		return -EINVAL;
   2205	sctp_sk(sk)->disable_fragments = (*val == 0) ? 0 : 1;
   2206	return 0;
   2207}
   2208
   2209static int sctp_setsockopt_events(struct sock *sk, __u8 *sn_type,
   2210				  unsigned int optlen)
   2211{
   2212	struct sctp_sock *sp = sctp_sk(sk);
   2213	struct sctp_association *asoc;
   2214	int i;
   2215
   2216	if (optlen > sizeof(struct sctp_event_subscribe))
   2217		return -EINVAL;
   2218
   2219	for (i = 0; i < optlen; i++)
   2220		sctp_ulpevent_type_set(&sp->subscribe, SCTP_SN_TYPE_BASE + i,
   2221				       sn_type[i]);
   2222
   2223	list_for_each_entry(asoc, &sp->ep->asocs, asocs)
   2224		asoc->subscribe = sctp_sk(sk)->subscribe;
   2225
   2226	/* At the time when a user app subscribes to SCTP_SENDER_DRY_EVENT,
   2227	 * if there is no data to be sent or retransmit, the stack will
   2228	 * immediately send up this notification.
   2229	 */
   2230	if (sctp_ulpevent_type_enabled(sp->subscribe, SCTP_SENDER_DRY_EVENT)) {
   2231		struct sctp_ulpevent *event;
   2232
   2233		asoc = sctp_id2assoc(sk, 0);
   2234		if (asoc && sctp_outq_is_empty(&asoc->outqueue)) {
   2235			event = sctp_ulpevent_make_sender_dry_event(asoc,
   2236					GFP_USER | __GFP_NOWARN);
   2237			if (!event)
   2238				return -ENOMEM;
   2239
   2240			asoc->stream.si->enqueue_event(&asoc->ulpq, event);
   2241		}
   2242	}
   2243
   2244	return 0;
   2245}
   2246
   2247/* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE)
   2248 *
   2249 * This socket option is applicable to the UDP-style socket only.  When
   2250 * set it will cause associations that are idle for more than the
   2251 * specified number of seconds to automatically close.  An association
   2252 * being idle is defined an association that has NOT sent or received
   2253 * user data.  The special value of '0' indicates that no automatic
   2254 * close of any associations should be performed.  The option expects an
   2255 * integer defining the number of seconds of idle time before an
   2256 * association is closed.
   2257 */
   2258static int sctp_setsockopt_autoclose(struct sock *sk, u32 *optval,
   2259				     unsigned int optlen)
   2260{
   2261	struct sctp_sock *sp = sctp_sk(sk);
   2262	struct net *net = sock_net(sk);
   2263
   2264	/* Applicable to UDP-style socket only */
   2265	if (sctp_style(sk, TCP))
   2266		return -EOPNOTSUPP;
   2267	if (optlen != sizeof(int))
   2268		return -EINVAL;
   2269
   2270	sp->autoclose = *optval;
   2271	if (sp->autoclose > net->sctp.max_autoclose)
   2272		sp->autoclose = net->sctp.max_autoclose;
   2273
   2274	return 0;
   2275}
   2276
   2277/* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS)
   2278 *
   2279 * Applications can enable or disable heartbeats for any peer address of
   2280 * an association, modify an address's heartbeat interval, force a
   2281 * heartbeat to be sent immediately, and adjust the address's maximum
   2282 * number of retransmissions sent before an address is considered
   2283 * unreachable.  The following structure is used to access and modify an
   2284 * address's parameters:
   2285 *
   2286 *  struct sctp_paddrparams {
   2287 *     sctp_assoc_t            spp_assoc_id;
   2288 *     struct sockaddr_storage spp_address;
   2289 *     uint32_t                spp_hbinterval;
   2290 *     uint16_t                spp_pathmaxrxt;
   2291 *     uint32_t                spp_pathmtu;
   2292 *     uint32_t                spp_sackdelay;
   2293 *     uint32_t                spp_flags;
   2294 *     uint32_t                spp_ipv6_flowlabel;
   2295 *     uint8_t                 spp_dscp;
   2296 * };
   2297 *
   2298 *   spp_assoc_id    - (one-to-many style socket) This is filled in the
   2299 *                     application, and identifies the association for
   2300 *                     this query.
   2301 *   spp_address     - This specifies which address is of interest.
   2302 *   spp_hbinterval  - This contains the value of the heartbeat interval,
   2303 *                     in milliseconds.  If a  value of zero
   2304 *                     is present in this field then no changes are to
   2305 *                     be made to this parameter.
   2306 *   spp_pathmaxrxt  - This contains the maximum number of
   2307 *                     retransmissions before this address shall be
   2308 *                     considered unreachable. If a  value of zero
   2309 *                     is present in this field then no changes are to
   2310 *                     be made to this parameter.
   2311 *   spp_pathmtu     - When Path MTU discovery is disabled the value
   2312 *                     specified here will be the "fixed" path mtu.
   2313 *                     Note that if the spp_address field is empty
   2314 *                     then all associations on this address will
   2315 *                     have this fixed path mtu set upon them.
   2316 *
   2317 *   spp_sackdelay   - When delayed sack is enabled, this value specifies
   2318 *                     the number of milliseconds that sacks will be delayed
   2319 *                     for. This value will apply to all addresses of an
   2320 *                     association if the spp_address field is empty. Note
   2321 *                     also, that if delayed sack is enabled and this
   2322 *                     value is set to 0, no change is made to the last
   2323 *                     recorded delayed sack timer value.
   2324 *
   2325 *   spp_flags       - These flags are used to control various features
   2326 *                     on an association. The flag field may contain
   2327 *                     zero or more of the following options.
   2328 *
   2329 *                     SPP_HB_ENABLE  - Enable heartbeats on the
   2330 *                     specified address. Note that if the address
   2331 *                     field is empty all addresses for the association
   2332 *                     have heartbeats enabled upon them.
   2333 *
   2334 *                     SPP_HB_DISABLE - Disable heartbeats on the
   2335 *                     speicifed address. Note that if the address
   2336 *                     field is empty all addresses for the association
   2337 *                     will have their heartbeats disabled. Note also
   2338 *                     that SPP_HB_ENABLE and SPP_HB_DISABLE are
   2339 *                     mutually exclusive, only one of these two should
   2340 *                     be specified. Enabling both fields will have
   2341 *                     undetermined results.
   2342 *
   2343 *                     SPP_HB_DEMAND - Request a user initiated heartbeat
   2344 *                     to be made immediately.
   2345 *
   2346 *                     SPP_HB_TIME_IS_ZERO - Specify's that the time for
   2347 *                     heartbeat delayis to be set to the value of 0
   2348 *                     milliseconds.
   2349 *
   2350 *                     SPP_PMTUD_ENABLE - This field will enable PMTU
   2351 *                     discovery upon the specified address. Note that
   2352 *                     if the address feild is empty then all addresses
   2353 *                     on the association are effected.
   2354 *
   2355 *                     SPP_PMTUD_DISABLE - This field will disable PMTU
   2356 *                     discovery upon the specified address. Note that
   2357 *                     if the address feild is empty then all addresses
   2358 *                     on the association are effected. Not also that
   2359 *                     SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually
   2360 *                     exclusive. Enabling both will have undetermined
   2361 *                     results.
   2362 *
   2363 *                     SPP_SACKDELAY_ENABLE - Setting this flag turns
   2364 *                     on delayed sack. The time specified in spp_sackdelay
   2365 *                     is used to specify the sack delay for this address. Note
   2366 *                     that if spp_address is empty then all addresses will
   2367 *                     enable delayed sack and take on the sack delay
   2368 *                     value specified in spp_sackdelay.
   2369 *                     SPP_SACKDELAY_DISABLE - Setting this flag turns
   2370 *                     off delayed sack. If the spp_address field is blank then
   2371 *                     delayed sack is disabled for the entire association. Note
   2372 *                     also that this field is mutually exclusive to
   2373 *                     SPP_SACKDELAY_ENABLE, setting both will have undefined
   2374 *                     results.
   2375 *
   2376 *                     SPP_IPV6_FLOWLABEL:  Setting this flag enables the
   2377 *                     setting of the IPV6 flow label value.  The value is
   2378 *                     contained in the spp_ipv6_flowlabel field.
   2379 *                     Upon retrieval, this flag will be set to indicate that
   2380 *                     the spp_ipv6_flowlabel field has a valid value returned.
   2381 *                     If a specific destination address is set (in the
   2382 *                     spp_address field), then the value returned is that of
   2383 *                     the address.  If just an association is specified (and
   2384 *                     no address), then the association's default flow label
   2385 *                     is returned.  If neither an association nor a destination
   2386 *                     is specified, then the socket's default flow label is
   2387 *                     returned.  For non-IPv6 sockets, this flag will be left
   2388 *                     cleared.
   2389 *
   2390 *                     SPP_DSCP:  Setting this flag enables the setting of the
   2391 *                     Differentiated Services Code Point (DSCP) value
   2392 *                     associated with either the association or a specific
   2393 *                     address.  The value is obtained in the spp_dscp field.
   2394 *                     Upon retrieval, this flag will be set to indicate that
   2395 *                     the spp_dscp field has a valid value returned.  If a
   2396 *                     specific destination address is set when called (in the
   2397 *                     spp_address field), then that specific destination
   2398 *                     address's DSCP value is returned.  If just an association
   2399 *                     is specified, then the association's default DSCP is
   2400 *                     returned.  If neither an association nor a destination is
   2401 *                     specified, then the socket's default DSCP is returned.
   2402 *
   2403 *   spp_ipv6_flowlabel
   2404 *                   - This field is used in conjunction with the
   2405 *                     SPP_IPV6_FLOWLABEL flag and contains the IPv6 flow label.
   2406 *                     The 20 least significant bits are used for the flow
   2407 *                     label.  This setting has precedence over any IPv6-layer
   2408 *                     setting.
   2409 *
   2410 *   spp_dscp        - This field is used in conjunction with the SPP_DSCP flag
   2411 *                     and contains the DSCP.  The 6 most significant bits are
   2412 *                     used for the DSCP.  This setting has precedence over any
   2413 *                     IPv4- or IPv6- layer setting.
   2414 */
   2415static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
   2416				       struct sctp_transport   *trans,
   2417				       struct sctp_association *asoc,
   2418				       struct sctp_sock        *sp,
   2419				       int                      hb_change,
   2420				       int                      pmtud_change,
   2421				       int                      sackdelay_change)
   2422{
   2423	int error;
   2424
   2425	if (params->spp_flags & SPP_HB_DEMAND && trans) {
   2426		error = sctp_primitive_REQUESTHEARTBEAT(trans->asoc->base.net,
   2427							trans->asoc, trans);
   2428		if (error)
   2429			return error;
   2430	}
   2431
   2432	/* Note that unless the spp_flag is set to SPP_HB_ENABLE the value of
   2433	 * this field is ignored.  Note also that a value of zero indicates
   2434	 * the current setting should be left unchanged.
   2435	 */
   2436	if (params->spp_flags & SPP_HB_ENABLE) {
   2437
   2438		/* Re-zero the interval if the SPP_HB_TIME_IS_ZERO is
   2439		 * set.  This lets us use 0 value when this flag
   2440		 * is set.
   2441		 */
   2442		if (params->spp_flags & SPP_HB_TIME_IS_ZERO)
   2443			params->spp_hbinterval = 0;
   2444
   2445		if (params->spp_hbinterval ||
   2446		    (params->spp_flags & SPP_HB_TIME_IS_ZERO)) {
   2447			if (trans) {
   2448				trans->hbinterval =
   2449				    msecs_to_jiffies(params->spp_hbinterval);
   2450			} else if (asoc) {
   2451				asoc->hbinterval =
   2452				    msecs_to_jiffies(params->spp_hbinterval);
   2453			} else {
   2454				sp->hbinterval = params->spp_hbinterval;
   2455			}
   2456		}
   2457	}
   2458
   2459	if (hb_change) {
   2460		if (trans) {
   2461			trans->param_flags =
   2462				(trans->param_flags & ~SPP_HB) | hb_change;
   2463		} else if (asoc) {
   2464			asoc->param_flags =
   2465				(asoc->param_flags & ~SPP_HB) | hb_change;
   2466		} else {
   2467			sp->param_flags =
   2468				(sp->param_flags & ~SPP_HB) | hb_change;
   2469		}
   2470	}
   2471
   2472	/* When Path MTU discovery is disabled the value specified here will
   2473	 * be the "fixed" path mtu (i.e. the value of the spp_flags field must
   2474	 * include the flag SPP_PMTUD_DISABLE for this field to have any
   2475	 * effect).
   2476	 */
   2477	if ((params->spp_flags & SPP_PMTUD_DISABLE) && params->spp_pathmtu) {
   2478		if (trans) {
   2479			trans->pathmtu = params->spp_pathmtu;
   2480			sctp_assoc_sync_pmtu(asoc);
   2481		} else if (asoc) {
   2482			sctp_assoc_set_pmtu(asoc, params->spp_pathmtu);
   2483		} else {
   2484			sp->pathmtu = params->spp_pathmtu;
   2485		}
   2486	}
   2487
   2488	if (pmtud_change) {
   2489		if (trans) {
   2490			int update = (trans->param_flags & SPP_PMTUD_DISABLE) &&
   2491				(params->spp_flags & SPP_PMTUD_ENABLE);
   2492			trans->param_flags =
   2493				(trans->param_flags & ~SPP_PMTUD) | pmtud_change;
   2494			if (update) {
   2495				sctp_transport_pmtu(trans, sctp_opt2sk(sp));
   2496				sctp_assoc_sync_pmtu(asoc);
   2497			}
   2498			sctp_transport_pl_reset(trans);
   2499		} else if (asoc) {
   2500			asoc->param_flags =
   2501				(asoc->param_flags & ~SPP_PMTUD) | pmtud_change;
   2502		} else {
   2503			sp->param_flags =
   2504				(sp->param_flags & ~SPP_PMTUD) | pmtud_change;
   2505		}
   2506	}
   2507
   2508	/* Note that unless the spp_flag is set to SPP_SACKDELAY_ENABLE the
   2509	 * value of this field is ignored.  Note also that a value of zero
   2510	 * indicates the current setting should be left unchanged.
   2511	 */
   2512	if ((params->spp_flags & SPP_SACKDELAY_ENABLE) && params->spp_sackdelay) {
   2513		if (trans) {
   2514			trans->sackdelay =
   2515				msecs_to_jiffies(params->spp_sackdelay);
   2516		} else if (asoc) {
   2517			asoc->sackdelay =
   2518				msecs_to_jiffies(params->spp_sackdelay);
   2519		} else {
   2520			sp->sackdelay = params->spp_sackdelay;
   2521		}
   2522	}
   2523
   2524	if (sackdelay_change) {
   2525		if (trans) {
   2526			trans->param_flags =
   2527				(trans->param_flags & ~SPP_SACKDELAY) |
   2528				sackdelay_change;
   2529		} else if (asoc) {
   2530			asoc->param_flags =
   2531				(asoc->param_flags & ~SPP_SACKDELAY) |
   2532				sackdelay_change;
   2533		} else {
   2534			sp->param_flags =
   2535				(sp->param_flags & ~SPP_SACKDELAY) |
   2536				sackdelay_change;
   2537		}
   2538	}
   2539
   2540	/* Note that a value of zero indicates the current setting should be
   2541	   left unchanged.
   2542	 */
   2543	if (params->spp_pathmaxrxt) {
   2544		if (trans) {
   2545			trans->pathmaxrxt = params->spp_pathmaxrxt;
   2546		} else if (asoc) {
   2547			asoc->pathmaxrxt = params->spp_pathmaxrxt;
   2548		} else {
   2549			sp->pathmaxrxt = params->spp_pathmaxrxt;
   2550		}
   2551	}
   2552
   2553	if (params->spp_flags & SPP_IPV6_FLOWLABEL) {
   2554		if (trans) {
   2555			if (trans->ipaddr.sa.sa_family == AF_INET6) {
   2556				trans->flowlabel = params->spp_ipv6_flowlabel &
   2557						   SCTP_FLOWLABEL_VAL_MASK;
   2558				trans->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
   2559			}
   2560		} else if (asoc) {
   2561			struct sctp_transport *t;
   2562
   2563			list_for_each_entry(t, &asoc->peer.transport_addr_list,
   2564					    transports) {
   2565				if (t->ipaddr.sa.sa_family != AF_INET6)
   2566					continue;
   2567				t->flowlabel = params->spp_ipv6_flowlabel &
   2568					       SCTP_FLOWLABEL_VAL_MASK;
   2569				t->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
   2570			}
   2571			asoc->flowlabel = params->spp_ipv6_flowlabel &
   2572					  SCTP_FLOWLABEL_VAL_MASK;
   2573			asoc->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
   2574		} else if (sctp_opt2sk(sp)->sk_family == AF_INET6) {
   2575			sp->flowlabel = params->spp_ipv6_flowlabel &
   2576					SCTP_FLOWLABEL_VAL_MASK;
   2577			sp->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
   2578		}
   2579	}
   2580
   2581	if (params->spp_flags & SPP_DSCP) {
   2582		if (trans) {
   2583			trans->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
   2584			trans->dscp |= SCTP_DSCP_SET_MASK;
   2585		} else if (asoc) {
   2586			struct sctp_transport *t;
   2587
   2588			list_for_each_entry(t, &asoc->peer.transport_addr_list,
   2589					    transports) {
   2590				t->dscp = params->spp_dscp &
   2591					  SCTP_DSCP_VAL_MASK;
   2592				t->dscp |= SCTP_DSCP_SET_MASK;
   2593			}
   2594			asoc->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
   2595			asoc->dscp |= SCTP_DSCP_SET_MASK;
   2596		} else {
   2597			sp->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
   2598			sp->dscp |= SCTP_DSCP_SET_MASK;
   2599		}
   2600	}
   2601
   2602	return 0;
   2603}
   2604
   2605static int sctp_setsockopt_peer_addr_params(struct sock *sk,
   2606					    struct sctp_paddrparams *params,
   2607					    unsigned int optlen)
   2608{
   2609	struct sctp_transport   *trans = NULL;
   2610	struct sctp_association *asoc = NULL;
   2611	struct sctp_sock        *sp = sctp_sk(sk);
   2612	int error;
   2613	int hb_change, pmtud_change, sackdelay_change;
   2614
   2615	if (optlen == ALIGN(offsetof(struct sctp_paddrparams,
   2616					    spp_ipv6_flowlabel), 4)) {
   2617		if (params->spp_flags & (SPP_DSCP | SPP_IPV6_FLOWLABEL))
   2618			return -EINVAL;
   2619	} else if (optlen != sizeof(*params)) {
   2620		return -EINVAL;
   2621	}
   2622
   2623	/* Validate flags and value parameters. */
   2624	hb_change        = params->spp_flags & SPP_HB;
   2625	pmtud_change     = params->spp_flags & SPP_PMTUD;
   2626	sackdelay_change = params->spp_flags & SPP_SACKDELAY;
   2627
   2628	if (hb_change        == SPP_HB ||
   2629	    pmtud_change     == SPP_PMTUD ||
   2630	    sackdelay_change == SPP_SACKDELAY ||
   2631	    params->spp_sackdelay > 500 ||
   2632	    (params->spp_pathmtu &&
   2633	     params->spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
   2634		return -EINVAL;
   2635
   2636	/* If an address other than INADDR_ANY is specified, and
   2637	 * no transport is found, then the request is invalid.
   2638	 */
   2639	if (!sctp_is_any(sk, (union sctp_addr *)&params->spp_address)) {
   2640		trans = sctp_addr_id2transport(sk, &params->spp_address,
   2641					       params->spp_assoc_id);
   2642		if (!trans)
   2643			return -EINVAL;
   2644	}
   2645
   2646	/* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the
   2647	 * socket is a one to many style socket, and an association
   2648	 * was not found, then the id was invalid.
   2649	 */
   2650	asoc = sctp_id2assoc(sk, params->spp_assoc_id);
   2651	if (!asoc && params->spp_assoc_id != SCTP_FUTURE_ASSOC &&
   2652	    sctp_style(sk, UDP))
   2653		return -EINVAL;
   2654
   2655	/* Heartbeat demand can only be sent on a transport or
   2656	 * association, but not a socket.
   2657	 */
   2658	if (params->spp_flags & SPP_HB_DEMAND && !trans && !asoc)
   2659		return -EINVAL;
   2660
   2661	/* Process parameters. */
   2662	error = sctp_apply_peer_addr_params(params, trans, asoc, sp,
   2663					    hb_change, pmtud_change,
   2664					    sackdelay_change);
   2665
   2666	if (error)
   2667		return error;
   2668
   2669	/* If changes are for association, also apply parameters to each
   2670	 * transport.
   2671	 */
   2672	if (!trans && asoc) {
   2673		list_for_each_entry(trans, &asoc->peer.transport_addr_list,
   2674				transports) {
   2675			sctp_apply_peer_addr_params(params, trans, asoc, sp,
   2676						    hb_change, pmtud_change,
   2677						    sackdelay_change);
   2678		}
   2679	}
   2680
   2681	return 0;
   2682}
   2683
   2684static inline __u32 sctp_spp_sackdelay_enable(__u32 param_flags)
   2685{
   2686	return (param_flags & ~SPP_SACKDELAY) | SPP_SACKDELAY_ENABLE;
   2687}
   2688
   2689static inline __u32 sctp_spp_sackdelay_disable(__u32 param_flags)
   2690{
   2691	return (param_flags & ~SPP_SACKDELAY) | SPP_SACKDELAY_DISABLE;
   2692}
   2693
   2694static void sctp_apply_asoc_delayed_ack(struct sctp_sack_info *params,
   2695					struct sctp_association *asoc)
   2696{
   2697	struct sctp_transport *trans;
   2698
   2699	if (params->sack_delay) {
   2700		asoc->sackdelay = msecs_to_jiffies(params->sack_delay);
   2701		asoc->param_flags =
   2702			sctp_spp_sackdelay_enable(asoc->param_flags);
   2703	}
   2704	if (params->sack_freq == 1) {
   2705		asoc->param_flags =
   2706			sctp_spp_sackdelay_disable(asoc->param_flags);
   2707	} else if (params->sack_freq > 1) {
   2708		asoc->sackfreq = params->sack_freq;
   2709		asoc->param_flags =
   2710			sctp_spp_sackdelay_enable(asoc->param_flags);
   2711	}
   2712
   2713	list_for_each_entry(trans, &asoc->peer.transport_addr_list,
   2714			    transports) {
   2715		if (params->sack_delay) {
   2716			trans->sackdelay = msecs_to_jiffies(params->sack_delay);
   2717			trans->param_flags =
   2718				sctp_spp_sackdelay_enable(trans->param_flags);
   2719		}
   2720		if (params->sack_freq == 1) {
   2721			trans->param_flags =
   2722				sctp_spp_sackdelay_disable(trans->param_flags);
   2723		} else if (params->sack_freq > 1) {
   2724			trans->sackfreq = params->sack_freq;
   2725			trans->param_flags =
   2726				sctp_spp_sackdelay_enable(trans->param_flags);
   2727		}
   2728	}
   2729}
   2730
   2731/*
   2732 * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
   2733 *
   2734 * This option will effect the way delayed acks are performed.  This
   2735 * option allows you to get or set the delayed ack time, in
   2736 * milliseconds.  It also allows changing the delayed ack frequency.
   2737 * Changing the frequency to 1 disables the delayed sack algorithm.  If
   2738 * the assoc_id is 0, then this sets or gets the endpoints default
   2739 * values.  If the assoc_id field is non-zero, then the set or get
   2740 * effects the specified association for the one to many model (the
   2741 * assoc_id field is ignored by the one to one model).  Note that if
   2742 * sack_delay or sack_freq are 0 when setting this option, then the
   2743 * current values will remain unchanged.
   2744 *
   2745 * struct sctp_sack_info {
   2746 *     sctp_assoc_t            sack_assoc_id;
   2747 *     uint32_t                sack_delay;
   2748 *     uint32_t                sack_freq;
   2749 * };
   2750 *
   2751 * sack_assoc_id -  This parameter, indicates which association the user
   2752 *    is performing an action upon.  Note that if this field's value is
   2753 *    zero then the endpoints default value is changed (effecting future
   2754 *    associations only).
   2755 *
   2756 * sack_delay -  This parameter contains the number of milliseconds that
   2757 *    the user is requesting the delayed ACK timer be set to.  Note that
   2758 *    this value is defined in the standard to be between 200 and 500
   2759 *    milliseconds.
   2760 *
   2761 * sack_freq -  This parameter contains the number of packets that must
   2762 *    be received before a sack is sent without waiting for the delay
   2763 *    timer to expire.  The default value for this is 2, setting this
   2764 *    value to 1 will disable the delayed sack algorithm.
   2765 */
   2766static int __sctp_setsockopt_delayed_ack(struct sock *sk,
   2767					 struct sctp_sack_info *params)
   2768{
   2769	struct sctp_sock *sp = sctp_sk(sk);
   2770	struct sctp_association *asoc;
   2771
   2772	/* Validate value parameter. */
   2773	if (params->sack_delay > 500)
   2774		return -EINVAL;
   2775
   2776	/* Get association, if sack_assoc_id != SCTP_FUTURE_ASSOC and the
   2777	 * socket is a one to many style socket, and an association
   2778	 * was not found, then the id was invalid.
   2779	 */
   2780	asoc = sctp_id2assoc(sk, params->sack_assoc_id);
   2781	if (!asoc && params->sack_assoc_id > SCTP_ALL_ASSOC &&
   2782	    sctp_style(sk, UDP))
   2783		return -EINVAL;
   2784
   2785	if (asoc) {
   2786		sctp_apply_asoc_delayed_ack(params, asoc);
   2787
   2788		return 0;
   2789	}
   2790
   2791	if (sctp_style(sk, TCP))
   2792		params->sack_assoc_id = SCTP_FUTURE_ASSOC;
   2793
   2794	if (params->sack_assoc_id == SCTP_FUTURE_ASSOC ||
   2795	    params->sack_assoc_id == SCTP_ALL_ASSOC) {
   2796		if (params->sack_delay) {
   2797			sp->sackdelay = params->sack_delay;
   2798			sp->param_flags =
   2799				sctp_spp_sackdelay_enable(sp->param_flags);
   2800		}
   2801		if (params->sack_freq == 1) {
   2802			sp->param_flags =
   2803				sctp_spp_sackdelay_disable(sp->param_flags);
   2804		} else if (params->sack_freq > 1) {
   2805			sp->sackfreq = params->sack_freq;
   2806			sp->param_flags =
   2807				sctp_spp_sackdelay_enable(sp->param_flags);
   2808		}
   2809	}
   2810
   2811	if (params->sack_assoc_id == SCTP_CURRENT_ASSOC ||
   2812	    params->sack_assoc_id == SCTP_ALL_ASSOC)
   2813		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
   2814			sctp_apply_asoc_delayed_ack(params, asoc);
   2815
   2816	return 0;
   2817}
   2818
   2819static int sctp_setsockopt_delayed_ack(struct sock *sk,
   2820				       struct sctp_sack_info *params,
   2821				       unsigned int optlen)
   2822{
   2823	if (optlen == sizeof(struct sctp_assoc_value)) {
   2824		struct sctp_assoc_value *v = (struct sctp_assoc_value *)params;
   2825		struct sctp_sack_info p;
   2826
   2827		pr_warn_ratelimited(DEPRECATED
   2828				    "%s (pid %d) "
   2829				    "Use of struct sctp_assoc_value in delayed_ack socket option.\n"
   2830				    "Use struct sctp_sack_info instead\n",
   2831				    current->comm, task_pid_nr(current));
   2832
   2833		p.sack_assoc_id = v->assoc_id;
   2834		p.sack_delay = v->assoc_value;
   2835		p.sack_freq = v->assoc_value ? 0 : 1;
   2836		return __sctp_setsockopt_delayed_ack(sk, &p);
   2837	}
   2838
   2839	if (optlen != sizeof(struct sctp_sack_info))
   2840		return -EINVAL;
   2841	if (params->sack_delay == 0 && params->sack_freq == 0)
   2842		return 0;
   2843	return __sctp_setsockopt_delayed_ack(sk, params);
   2844}
   2845
   2846/* 7.1.3 Initialization Parameters (SCTP_INITMSG)
   2847 *
   2848 * Applications can specify protocol parameters for the default association
   2849 * initialization.  The option name argument to setsockopt() and getsockopt()
   2850 * is SCTP_INITMSG.
   2851 *
   2852 * Setting initialization parameters is effective only on an unconnected
   2853 * socket (for UDP-style sockets only future associations are effected
   2854 * by the change).  With TCP-style sockets, this option is inherited by
   2855 * sockets derived from a listener socket.
   2856 */
   2857static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg *sinit,
   2858				   unsigned int optlen)
   2859{
   2860	struct sctp_sock *sp = sctp_sk(sk);
   2861
   2862	if (optlen != sizeof(struct sctp_initmsg))
   2863		return -EINVAL;
   2864
   2865	if (sinit->sinit_num_ostreams)
   2866		sp->initmsg.sinit_num_ostreams = sinit->sinit_num_ostreams;
   2867	if (sinit->sinit_max_instreams)
   2868		sp->initmsg.sinit_max_instreams = sinit->sinit_max_instreams;
   2869	if (sinit->sinit_max_attempts)
   2870		sp->initmsg.sinit_max_attempts = sinit->sinit_max_attempts;
   2871	if (sinit->sinit_max_init_timeo)
   2872		sp->initmsg.sinit_max_init_timeo = sinit->sinit_max_init_timeo;
   2873
   2874	return 0;
   2875}
   2876
   2877/*
   2878 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM)
   2879 *
   2880 *   Applications that wish to use the sendto() system call may wish to
   2881 *   specify a default set of parameters that would normally be supplied
   2882 *   through the inclusion of ancillary data.  This socket option allows
   2883 *   such an application to set the default sctp_sndrcvinfo structure.
   2884 *   The application that wishes to use this socket option simply passes
   2885 *   in to this call the sctp_sndrcvinfo structure defined in Section
   2886 *   5.2.2) The input parameters accepted by this call include
   2887 *   sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context,
   2888 *   sinfo_timetolive.  The user must provide the sinfo_assoc_id field in
   2889 *   to this call if the caller is using the UDP model.
   2890 */
   2891static int sctp_setsockopt_default_send_param(struct sock *sk,
   2892					      struct sctp_sndrcvinfo *info,
   2893					      unsigned int optlen)
   2894{
   2895	struct sctp_sock *sp = sctp_sk(sk);
   2896	struct sctp_association *asoc;
   2897
   2898	if (optlen != sizeof(*info))
   2899		return -EINVAL;
   2900	if (info->sinfo_flags &
   2901	    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
   2902	      SCTP_ABORT | SCTP_EOF))
   2903		return -EINVAL;
   2904
   2905	asoc = sctp_id2assoc(sk, info->sinfo_assoc_id);
   2906	if (!asoc && info->sinfo_assoc_id > SCTP_ALL_ASSOC &&
   2907	    sctp_style(sk, UDP))
   2908		return -EINVAL;
   2909
   2910	if (asoc) {
   2911		asoc->default_stream = info->sinfo_stream;
   2912		asoc->default_flags = info->sinfo_flags;
   2913		asoc->default_ppid = info->sinfo_ppid;
   2914		asoc->default_context = info->sinfo_context;
   2915		asoc->default_timetolive = info->sinfo_timetolive;
   2916
   2917		return 0;
   2918	}
   2919
   2920	if (sctp_style(sk, TCP))
   2921		info->sinfo_assoc_id = SCTP_FUTURE_ASSOC;
   2922
   2923	if (info->sinfo_assoc_id == SCTP_FUTURE_ASSOC ||
   2924	    info->sinfo_assoc_id == SCTP_ALL_ASSOC) {
   2925		sp->default_stream = info->sinfo_stream;
   2926		sp->default_flags = info->sinfo_flags;
   2927		sp->default_ppid = info->sinfo_ppid;
   2928		sp->default_context = info->sinfo_context;
   2929		sp->default_timetolive = info->sinfo_timetolive;
   2930	}
   2931
   2932	if (info->sinfo_assoc_id == SCTP_CURRENT_ASSOC ||
   2933	    info->sinfo_assoc_id == SCTP_ALL_ASSOC) {
   2934		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
   2935			asoc->default_stream = info->sinfo_stream;
   2936			asoc->default_flags = info->sinfo_flags;
   2937			asoc->default_ppid = info->sinfo_ppid;
   2938			asoc->default_context = info->sinfo_context;
   2939			asoc->default_timetolive = info->sinfo_timetolive;
   2940		}
   2941	}
   2942
   2943	return 0;
   2944}
   2945
   2946/* RFC6458, Section 8.1.31. Set/get Default Send Parameters
   2947 * (SCTP_DEFAULT_SNDINFO)
   2948 */
   2949static int sctp_setsockopt_default_sndinfo(struct sock *sk,
   2950					   struct sctp_sndinfo *info,
   2951					   unsigned int optlen)
   2952{
   2953	struct sctp_sock *sp = sctp_sk(sk);
   2954	struct sctp_association *asoc;
   2955
   2956	if (optlen != sizeof(*info))
   2957		return -EINVAL;
   2958	if (info->snd_flags &
   2959	    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
   2960	      SCTP_ABORT | SCTP_EOF))
   2961		return -EINVAL;
   2962
   2963	asoc = sctp_id2assoc(sk, info->snd_assoc_id);
   2964	if (!asoc && info->snd_assoc_id > SCTP_ALL_ASSOC &&
   2965	    sctp_style(sk, UDP))
   2966		return -EINVAL;
   2967
   2968	if (asoc) {
   2969		asoc->default_stream = info->snd_sid;
   2970		asoc->default_flags = info->snd_flags;
   2971		asoc->default_ppid = info->snd_ppid;
   2972		asoc->default_context = info->snd_context;
   2973
   2974		return 0;
   2975	}
   2976
   2977	if (sctp_style(sk, TCP))
   2978		info->snd_assoc_id = SCTP_FUTURE_ASSOC;
   2979
   2980	if (info->snd_assoc_id == SCTP_FUTURE_ASSOC ||
   2981	    info->snd_assoc_id == SCTP_ALL_ASSOC) {
   2982		sp->default_stream = info->snd_sid;
   2983		sp->default_flags = info->snd_flags;
   2984		sp->default_ppid = info->snd_ppid;
   2985		sp->default_context = info->snd_context;
   2986	}
   2987
   2988	if (info->snd_assoc_id == SCTP_CURRENT_ASSOC ||
   2989	    info->snd_assoc_id == SCTP_ALL_ASSOC) {
   2990		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
   2991			asoc->default_stream = info->snd_sid;
   2992			asoc->default_flags = info->snd_flags;
   2993			asoc->default_ppid = info->snd_ppid;
   2994			asoc->default_context = info->snd_context;
   2995		}
   2996	}
   2997
   2998	return 0;
   2999}
   3000
   3001/* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
   3002 *
   3003 * Requests that the local SCTP stack use the enclosed peer address as
   3004 * the association primary.  The enclosed address must be one of the
   3005 * association peer's addresses.
   3006 */
   3007static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim *prim,
   3008					unsigned int optlen)
   3009{
   3010	struct sctp_transport *trans;
   3011	struct sctp_af *af;
   3012	int err;
   3013
   3014	if (optlen != sizeof(struct sctp_prim))
   3015		return -EINVAL;
   3016
   3017	/* Allow security module to validate address but need address len. */
   3018	af = sctp_get_af_specific(prim->ssp_addr.ss_family);
   3019	if (!af)
   3020		return -EINVAL;
   3021
   3022	err = security_sctp_bind_connect(sk, SCTP_PRIMARY_ADDR,
   3023					 (struct sockaddr *)&prim->ssp_addr,
   3024					 af->sockaddr_len);
   3025	if (err)
   3026		return err;
   3027
   3028	trans = sctp_addr_id2transport(sk, &prim->ssp_addr, prim->ssp_assoc_id);
   3029	if (!trans)
   3030		return -EINVAL;
   3031
   3032	sctp_assoc_set_primary(trans->asoc, trans);
   3033
   3034	return 0;
   3035}
   3036
   3037/*
   3038 * 7.1.5 SCTP_NODELAY
   3039 *
   3040 * Turn on/off any Nagle-like algorithm.  This means that packets are
   3041 * generally sent as soon as possible and no unnecessary delays are
   3042 * introduced, at the cost of more packets in the network.  Expects an
   3043 *  integer boolean flag.
   3044 */
   3045static int sctp_setsockopt_nodelay(struct sock *sk, int *val,
   3046				   unsigned int optlen)
   3047{
   3048	if (optlen < sizeof(int))
   3049		return -EINVAL;
   3050	sctp_sk(sk)->nodelay = (*val == 0) ? 0 : 1;
   3051	return 0;
   3052}
   3053
   3054/*
   3055 *
   3056 * 7.1.1 SCTP_RTOINFO
   3057 *
   3058 * The protocol parameters used to initialize and bound retransmission
   3059 * timeout (RTO) are tunable. sctp_rtoinfo structure is used to access
   3060 * and modify these parameters.
   3061 * All parameters are time values, in milliseconds.  A value of 0, when
   3062 * modifying the parameters, indicates that the current value should not
   3063 * be changed.
   3064 *
   3065 */
   3066static int sctp_setsockopt_rtoinfo(struct sock *sk,
   3067				   struct sctp_rtoinfo *rtoinfo,
   3068				   unsigned int optlen)
   3069{
   3070	struct sctp_association *asoc;
   3071	unsigned long rto_min, rto_max;
   3072	struct sctp_sock *sp = sctp_sk(sk);
   3073
   3074	if (optlen != sizeof (struct sctp_rtoinfo))
   3075		return -EINVAL;
   3076
   3077	asoc = sctp_id2assoc(sk, rtoinfo->srto_assoc_id);
   3078
   3079	/* Set the values to the specific association */
   3080	if (!asoc && rtoinfo->srto_assoc_id != SCTP_FUTURE_ASSOC &&
   3081	    sctp_style(sk, UDP))
   3082		return -EINVAL;
   3083
   3084	rto_max = rtoinfo->srto_max;
   3085	rto_min = rtoinfo->srto_min;
   3086
   3087	if (rto_max)
   3088		rto_max = asoc ? msecs_to_jiffies(rto_max) : rto_max;
   3089	else
   3090		rto_max = asoc ? asoc->rto_max : sp->rtoinfo.srto_max;
   3091
   3092	if (rto_min)
   3093		rto_min = asoc ? msecs_to_jiffies(rto_min) : rto_min;
   3094	else
   3095		rto_min = asoc ? asoc->rto_min : sp->rtoinfo.srto_min;
   3096
   3097	if (rto_min > rto_max)
   3098		return -EINVAL;
   3099
   3100	if (asoc) {
   3101		if (rtoinfo->srto_initial != 0)
   3102			asoc->rto_initial =
   3103				msecs_to_jiffies(rtoinfo->srto_initial);
   3104		asoc->rto_max = rto_max;
   3105		asoc->rto_min = rto_min;
   3106	} else {
   3107		/* If there is no association or the association-id = 0
   3108		 * set the values to the endpoint.
   3109		 */
   3110		if (rtoinfo->srto_initial != 0)
   3111			sp->rtoinfo.srto_initial = rtoinfo->srto_initial;
   3112		sp->rtoinfo.srto_max = rto_max;
   3113		sp->rtoinfo.srto_min = rto_min;
   3114	}
   3115
   3116	return 0;
   3117}
   3118
   3119/*
   3120 *
   3121 * 7.1.2 SCTP_ASSOCINFO
   3122 *
   3123 * This option is used to tune the maximum retransmission attempts
   3124 * of the association.
   3125 * Returns an error if the new association retransmission value is
   3126 * greater than the sum of the retransmission value  of the peer.
   3127 * See [SCTP] for more information.
   3128 *
   3129 */
   3130static int sctp_setsockopt_associnfo(struct sock *sk,
   3131				     struct sctp_assocparams *assocparams,
   3132				     unsigned int optlen)
   3133{
   3134
   3135	struct sctp_association *asoc;
   3136
   3137	if (optlen != sizeof(struct sctp_assocparams))
   3138		return -EINVAL;
   3139
   3140	asoc = sctp_id2assoc(sk, assocparams->sasoc_assoc_id);
   3141
   3142	if (!asoc && assocparams->sasoc_assoc_id != SCTP_FUTURE_ASSOC &&
   3143	    sctp_style(sk, UDP))
   3144		return -EINVAL;
   3145
   3146	/* Set the values to the specific association */
   3147	if (asoc) {
   3148		if (assocparams->sasoc_asocmaxrxt != 0) {
   3149			__u32 path_sum = 0;
   3150			int   paths = 0;
   3151			struct sctp_transport *peer_addr;
   3152
   3153			list_for_each_entry(peer_addr, &asoc->peer.transport_addr_list,
   3154					transports) {
   3155				path_sum += peer_addr->pathmaxrxt;
   3156				paths++;
   3157			}
   3158
   3159			/* Only validate asocmaxrxt if we have more than
   3160			 * one path/transport.  We do this because path
   3161			 * retransmissions are only counted when we have more
   3162			 * then one path.
   3163			 */
   3164			if (paths > 1 &&
   3165			    assocparams->sasoc_asocmaxrxt > path_sum)
   3166				return -EINVAL;
   3167
   3168			asoc->max_retrans = assocparams->sasoc_asocmaxrxt;
   3169		}
   3170
   3171		if (assocparams->sasoc_cookie_life != 0)
   3172			asoc->cookie_life =
   3173				ms_to_ktime(assocparams->sasoc_cookie_life);
   3174	} else {
   3175		/* Set the values to the endpoint */
   3176		struct sctp_sock *sp = sctp_sk(sk);
   3177
   3178		if (assocparams->sasoc_asocmaxrxt != 0)
   3179			sp->assocparams.sasoc_asocmaxrxt =
   3180						assocparams->sasoc_asocmaxrxt;
   3181		if (assocparams->sasoc_cookie_life != 0)
   3182			sp->assocparams.sasoc_cookie_life =
   3183						assocparams->sasoc_cookie_life;
   3184	}
   3185	return 0;
   3186}
   3187
   3188/*
   3189 * 7.1.16 Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR)
   3190 *
   3191 * This socket option is a boolean flag which turns on or off mapped V4
   3192 * addresses.  If this option is turned on and the socket is type
   3193 * PF_INET6, then IPv4 addresses will be mapped to V6 representation.
   3194 * If this option is turned off, then no mapping will be done of V4
   3195 * addresses and a user will receive both PF_INET6 and PF_INET type
   3196 * addresses on the socket.
   3197 */
   3198static int sctp_setsockopt_mappedv4(struct sock *sk, int *val,
   3199				    unsigned int optlen)
   3200{
   3201	struct sctp_sock *sp = sctp_sk(sk);
   3202
   3203	if (optlen < sizeof(int))
   3204		return -EINVAL;
   3205	if (*val)
   3206		sp->v4mapped = 1;
   3207	else
   3208		sp->v4mapped = 0;
   3209
   3210	return 0;
   3211}
   3212
   3213/*
   3214 * 8.1.16.  Get or Set the Maximum Fragmentation Size (SCTP_MAXSEG)
   3215 * This option will get or set the maximum size to put in any outgoing
   3216 * SCTP DATA chunk.  If a message is larger than this size it will be
   3217 * fragmented by SCTP into the specified size.  Note that the underlying
   3218 * SCTP implementation may fragment into smaller sized chunks when the
   3219 * PMTU of the underlying association is smaller than the value set by
   3220 * the user.  The default value for this option is '0' which indicates
   3221 * the user is NOT limiting fragmentation and only the PMTU will effect
   3222 * SCTP's choice of DATA chunk size.  Note also that values set larger
   3223 * than the maximum size of an IP datagram will effectively let SCTP
   3224 * control fragmentation (i.e. the same as setting this option to 0).
   3225 *
   3226 * The following structure is used to access and modify this parameter:
   3227 *
   3228 * struct sctp_assoc_value {
   3229 *   sctp_assoc_t assoc_id;
   3230 *   uint32_t assoc_value;
   3231 * };
   3232 *
   3233 * assoc_id:  This parameter is ignored for one-to-one style sockets.
   3234 *    For one-to-many style sockets this parameter indicates which
   3235 *    association the user is performing an action upon.  Note that if
   3236 *    this field's value is zero then the endpoints default value is
   3237 *    changed (effecting future associations only).
   3238 * assoc_value:  This parameter specifies the maximum size in bytes.
   3239 */
   3240static int sctp_setsockopt_maxseg(struct sock *sk,
   3241				  struct sctp_assoc_value *params,
   3242				  unsigned int optlen)
   3243{
   3244	struct sctp_sock *sp = sctp_sk(sk);
   3245	struct sctp_association *asoc;
   3246	sctp_assoc_t assoc_id;
   3247	int val;
   3248
   3249	if (optlen == sizeof(int)) {
   3250		pr_warn_ratelimited(DEPRECATED
   3251				    "%s (pid %d) "
   3252				    "Use of int in maxseg socket option.\n"
   3253				    "Use struct sctp_assoc_value instead\n",
   3254				    current->comm, task_pid_nr(current));
   3255		assoc_id = SCTP_FUTURE_ASSOC;
   3256		val = *(int *)params;
   3257	} else if (optlen == sizeof(struct sctp_assoc_value)) {
   3258		assoc_id = params->assoc_id;
   3259		val = params->assoc_value;
   3260	} else {
   3261		return -EINVAL;
   3262	}
   3263
   3264	asoc = sctp_id2assoc(sk, assoc_id);
   3265	if (!asoc && assoc_id != SCTP_FUTURE_ASSOC &&
   3266	    sctp_style(sk, UDP))
   3267		return -EINVAL;
   3268
   3269	if (val) {
   3270		int min_len, max_len;
   3271		__u16 datasize = asoc ? sctp_datachk_len(&asoc->stream) :
   3272				 sizeof(struct sctp_data_chunk);
   3273
   3274		min_len = sctp_min_frag_point(sp, datasize);
   3275		max_len = SCTP_MAX_CHUNK_LEN - datasize;
   3276
   3277		if (val < min_len || val > max_len)
   3278			return -EINVAL;
   3279	}
   3280
   3281	if (asoc) {
   3282		asoc->user_frag = val;
   3283		sctp_assoc_update_frag_point(asoc);
   3284	} else {
   3285		sp->user_frag = val;
   3286	}
   3287
   3288	return 0;
   3289}
   3290
   3291
   3292/*
   3293 *  7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR)
   3294 *
   3295 *   Requests that the peer mark the enclosed address as the association
   3296 *   primary. The enclosed address must be one of the association's
   3297 *   locally bound addresses. The following structure is used to make a
   3298 *   set primary request:
   3299 */
   3300static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
   3301					     struct sctp_setpeerprim *prim,
   3302					     unsigned int optlen)
   3303{
   3304	struct sctp_sock	*sp;
   3305	struct sctp_association	*asoc = NULL;
   3306	struct sctp_chunk	*chunk;
   3307	struct sctp_af		*af;
   3308	int 			err;
   3309
   3310	sp = sctp_sk(sk);
   3311
   3312	if (!sp->ep->asconf_enable)
   3313		return -EPERM;
   3314
   3315	if (optlen != sizeof(struct sctp_setpeerprim))
   3316		return -EINVAL;
   3317
   3318	asoc = sctp_id2assoc(sk, prim->sspp_assoc_id);
   3319	if (!asoc)
   3320		return -EINVAL;
   3321
   3322	if (!asoc->peer.asconf_capable)
   3323		return -EPERM;
   3324
   3325	if (asoc->peer.addip_disabled_mask & SCTP_PARAM_SET_PRIMARY)
   3326		return -EPERM;
   3327
   3328	if (!sctp_state(asoc, ESTABLISHED))
   3329		return -ENOTCONN;
   3330
   3331	af = sctp_get_af_specific(prim->sspp_addr.ss_family);
   3332	if (!af)
   3333		return -EINVAL;
   3334
   3335	if (!af->addr_valid((union sctp_addr *)&prim->sspp_addr, sp, NULL))
   3336		return -EADDRNOTAVAIL;
   3337
   3338	if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim->sspp_addr))
   3339		return -EADDRNOTAVAIL;
   3340
   3341	/* Allow security module to validate address. */
   3342	err = security_sctp_bind_connect(sk, SCTP_SET_PEER_PRIMARY_ADDR,
   3343					 (struct sockaddr *)&prim->sspp_addr,
   3344					 af->sockaddr_len);
   3345	if (err)
   3346		return err;
   3347
   3348	/* Create an ASCONF chunk with SET_PRIMARY parameter	*/
   3349	chunk = sctp_make_asconf_set_prim(asoc,
   3350					  (union sctp_addr *)&prim->sspp_addr);
   3351	if (!chunk)
   3352		return -ENOMEM;
   3353
   3354	err = sctp_send_asconf(asoc, chunk);
   3355
   3356	pr_debug("%s: we set peer primary addr primitively\n", __func__);
   3357
   3358	return err;
   3359}
   3360
   3361static int sctp_setsockopt_adaptation_layer(struct sock *sk,
   3362					    struct sctp_setadaptation *adapt,
   3363					    unsigned int optlen)
   3364{
   3365	if (optlen != sizeof(struct sctp_setadaptation))
   3366		return -EINVAL;
   3367
   3368	sctp_sk(sk)->adaptation_ind = adapt->ssb_adaptation_ind;
   3369
   3370	return 0;
   3371}
   3372
   3373/*
   3374 * 7.1.29.  Set or Get the default context (SCTP_CONTEXT)
   3375 *
   3376 * The context field in the sctp_sndrcvinfo structure is normally only
   3377 * used when a failed message is retrieved holding the value that was
   3378 * sent down on the actual send call.  This option allows the setting of
   3379 * a default context on an association basis that will be received on
   3380 * reading messages from the peer.  This is especially helpful in the
   3381 * one-2-many model for an application to keep some reference to an
   3382 * internal state machine that is processing messages on the
   3383 * association.  Note that the setting of this value only effects
   3384 * received messages from the peer and does not effect the value that is
   3385 * saved with outbound messages.
   3386 */
   3387static int sctp_setsockopt_context(struct sock *sk,
   3388				   struct sctp_assoc_value *params,
   3389				   unsigned int optlen)
   3390{
   3391	struct sctp_sock *sp = sctp_sk(sk);
   3392	struct sctp_association *asoc;
   3393
   3394	if (optlen != sizeof(struct sctp_assoc_value))
   3395		return -EINVAL;
   3396
   3397	asoc = sctp_id2assoc(sk, params->assoc_id);
   3398	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
   3399	    sctp_style(sk, UDP))
   3400		return -EINVAL;
   3401
   3402	if (asoc) {
   3403		asoc->default_rcv_context = params->assoc_value;
   3404
   3405		return 0;
   3406	}
   3407
   3408	if (sctp_style(sk, TCP))
   3409		params->assoc_id = SCTP_FUTURE_ASSOC;
   3410
   3411	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
   3412	    params->assoc_id == SCTP_ALL_ASSOC)
   3413		sp->default_rcv_context = params->assoc_value;
   3414
   3415	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
   3416	    params->assoc_id == SCTP_ALL_ASSOC)
   3417		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
   3418			asoc->default_rcv_context = params->assoc_value;
   3419
   3420	return 0;
   3421}
   3422
   3423/*
   3424 * 7.1.24.  Get or set fragmented interleave (SCTP_FRAGMENT_INTERLEAVE)
   3425 *
   3426 * This options will at a minimum specify if the implementation is doing
   3427 * fragmented interleave.  Fragmented interleave, for a one to many
   3428 * socket, is when subsequent calls to receive a message may return
   3429 * parts of messages from different associations.  Some implementations
   3430 * may allow you to turn this value on or off.  If so, when turned off,
   3431 * no fragment interleave will occur (which will cause a head of line
   3432 * blocking amongst multiple associations sharing the same one to many
   3433 * socket).  When this option is turned on, then each receive call may
   3434 * come from a different association (thus the user must receive data
   3435 * with the extended calls (e.g. sctp_recvmsg) to keep track of which
   3436 * association each receive belongs to.
   3437 *
   3438 * This option takes a boolean value.  A non-zero value indicates that
   3439 * fragmented interleave is on.  A value of zero indicates that
   3440 * fragmented interleave is off.
   3441 *
   3442 * Note that it is important that an implementation that allows this
   3443 * option to be turned on, have it off by default.  Otherwise an unaware
   3444 * application using the one to many model may become confused and act
   3445 * incorrectly.
   3446 */
   3447static int sctp_setsockopt_fragment_interleave(struct sock *sk, int *val,
   3448					       unsigned int optlen)
   3449{
   3450	if (optlen != sizeof(int))
   3451		return -EINVAL;
   3452
   3453	sctp_sk(sk)->frag_interleave = !!*val;
   3454
   3455	if (!sctp_sk(sk)->frag_interleave)
   3456		sctp_sk(sk)->ep->intl_enable = 0;
   3457
   3458	return 0;
   3459}
   3460
   3461/*
   3462 * 8.1.21.  Set or Get the SCTP Partial Delivery Point
   3463 *       (SCTP_PARTIAL_DELIVERY_POINT)
   3464 *
   3465 * This option will set or get the SCTP partial delivery point.  This
   3466 * point is the size of a message where the partial delivery API will be
   3467 * invoked to help free up rwnd space for the peer.  Setting this to a
   3468 * lower value will cause partial deliveries to happen more often.  The
   3469 * calls argument is an integer that sets or gets the partial delivery
   3470 * point.  Note also that the call will fail if the user attempts to set
   3471 * this value larger than the socket receive buffer size.
   3472 *
   3473 * Note that any single message having a length smaller than or equal to
   3474 * the SCTP partial delivery point will be delivered in one single read
   3475 * call as long as the user provided buffer is large enough to hold the
   3476 * message.
   3477 */
   3478static int sctp_setsockopt_partial_delivery_point(struct sock *sk, u32 *val,
   3479						  unsigned int optlen)
   3480{
   3481	if (optlen != sizeof(u32))
   3482		return -EINVAL;
   3483
   3484	/* Note: We double the receive buffer from what the user sets
   3485	 * it to be, also initial rwnd is based on rcvbuf/2.
   3486	 */
   3487	if (*val > (sk->sk_rcvbuf >> 1))
   3488		return -EINVAL;
   3489
   3490	sctp_sk(sk)->pd_point = *val;
   3491
   3492	return 0; /* is this the right error code? */
   3493}
   3494
   3495/*
   3496 * 7.1.28.  Set or Get the maximum burst (SCTP_MAX_BURST)
   3497 *
   3498 * This option will allow a user to change the maximum burst of packets
   3499 * that can be emitted by this association.  Note that the default value
   3500 * is 4, and some implementations may restrict this setting so that it
   3501 * can only be lowered.
   3502 *
   3503 * NOTE: This text doesn't seem right.  Do this on a socket basis with
   3504 * future associations inheriting the socket value.
   3505 */
   3506static int sctp_setsockopt_maxburst(struct sock *sk,
   3507				    struct sctp_assoc_value *params,
   3508				    unsigned int optlen)
   3509{
   3510	struct sctp_sock *sp = sctp_sk(sk);
   3511	struct sctp_association *asoc;
   3512	sctp_assoc_t assoc_id;
   3513	u32 assoc_value;
   3514
   3515	if (optlen == sizeof(int)) {
   3516		pr_warn_ratelimited(DEPRECATED
   3517				    "%s (pid %d) "
   3518				    "Use of int in max_burst socket option deprecated.\n"
   3519				    "Use struct sctp_assoc_value instead\n",
   3520				    current->comm, task_pid_nr(current));
   3521		assoc_id = SCTP_FUTURE_ASSOC;
   3522		assoc_value = *((int *)params);
   3523	} else if (optlen == sizeof(struct sctp_assoc_value)) {
   3524		assoc_id = params->assoc_id;
   3525		assoc_value = params->assoc_value;
   3526	} else
   3527		return -EINVAL;
   3528
   3529	asoc = sctp_id2assoc(sk, assoc_id);
   3530	if (!asoc && assoc_id > SCTP_ALL_ASSOC && sctp_style(sk, UDP))
   3531		return -EINVAL;
   3532
   3533	if (asoc) {
   3534		asoc->max_burst = assoc_value;
   3535
   3536		return 0;
   3537	}
   3538
   3539	if (sctp_style(sk, TCP))
   3540		assoc_id = SCTP_FUTURE_ASSOC;
   3541
   3542	if (assoc_id == SCTP_FUTURE_ASSOC || assoc_id == SCTP_ALL_ASSOC)
   3543		sp->max_burst = assoc_value;
   3544
   3545	if (assoc_id == SCTP_CURRENT_ASSOC || assoc_id == SCTP_ALL_ASSOC)
   3546		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
   3547			asoc->max_burst = assoc_value;
   3548
   3549	return 0;
   3550}
   3551
   3552/*
   3553 * 7.1.18.  Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
   3554 *
   3555 * This set option adds a chunk type that the user is requesting to be
   3556 * received only in an authenticated way.  Changes to the list of chunks
   3557 * will only effect future associations on the socket.
   3558 */
   3559static int sctp_setsockopt_auth_chunk(struct sock *sk,
   3560				      struct sctp_authchunk *val,
   3561				      unsigned int optlen)
   3562{
   3563	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   3564
   3565	if (!ep->auth_enable)
   3566		return -EACCES;
   3567
   3568	if (optlen != sizeof(struct sctp_authchunk))
   3569		return -EINVAL;
   3570
   3571	switch (val->sauth_chunk) {
   3572	case SCTP_CID_INIT:
   3573	case SCTP_CID_INIT_ACK:
   3574	case SCTP_CID_SHUTDOWN_COMPLETE:
   3575	case SCTP_CID_AUTH:
   3576		return -EINVAL;
   3577	}
   3578
   3579	/* add this chunk id to the endpoint */
   3580	return sctp_auth_ep_add_chunkid(ep, val->sauth_chunk);
   3581}
   3582
   3583/*
   3584 * 7.1.19.  Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT)
   3585 *
   3586 * This option gets or sets the list of HMAC algorithms that the local
   3587 * endpoint requires the peer to use.
   3588 */
   3589static int sctp_setsockopt_hmac_ident(struct sock *sk,
   3590				      struct sctp_hmacalgo *hmacs,
   3591				      unsigned int optlen)
   3592{
   3593	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   3594	u32 idents;
   3595
   3596	if (!ep->auth_enable)
   3597		return -EACCES;
   3598
   3599	if (optlen < sizeof(struct sctp_hmacalgo))
   3600		return -EINVAL;
   3601	optlen = min_t(unsigned int, optlen, sizeof(struct sctp_hmacalgo) +
   3602					     SCTP_AUTH_NUM_HMACS * sizeof(u16));
   3603
   3604	idents = hmacs->shmac_num_idents;
   3605	if (idents == 0 || idents > SCTP_AUTH_NUM_HMACS ||
   3606	    (idents * sizeof(u16)) > (optlen - sizeof(struct sctp_hmacalgo)))
   3607		return -EINVAL;
   3608
   3609	return sctp_auth_ep_set_hmacs(ep, hmacs);
   3610}
   3611
   3612/*
   3613 * 7.1.20.  Set a shared key (SCTP_AUTH_KEY)
   3614 *
   3615 * This option will set a shared secret key which is used to build an
   3616 * association shared key.
   3617 */
   3618static int sctp_setsockopt_auth_key(struct sock *sk,
   3619				    struct sctp_authkey *authkey,
   3620				    unsigned int optlen)
   3621{
   3622	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   3623	struct sctp_association *asoc;
   3624	int ret = -EINVAL;
   3625
   3626	if (optlen <= sizeof(struct sctp_authkey))
   3627		return -EINVAL;
   3628	/* authkey->sca_keylength is u16, so optlen can't be bigger than
   3629	 * this.
   3630	 */
   3631	optlen = min_t(unsigned int, optlen, USHRT_MAX + sizeof(*authkey));
   3632
   3633	if (authkey->sca_keylength > optlen - sizeof(*authkey))
   3634		goto out;
   3635
   3636	asoc = sctp_id2assoc(sk, authkey->sca_assoc_id);
   3637	if (!asoc && authkey->sca_assoc_id > SCTP_ALL_ASSOC &&
   3638	    sctp_style(sk, UDP))
   3639		goto out;
   3640
   3641	if (asoc) {
   3642		ret = sctp_auth_set_key(ep, asoc, authkey);
   3643		goto out;
   3644	}
   3645
   3646	if (sctp_style(sk, TCP))
   3647		authkey->sca_assoc_id = SCTP_FUTURE_ASSOC;
   3648
   3649	if (authkey->sca_assoc_id == SCTP_FUTURE_ASSOC ||
   3650	    authkey->sca_assoc_id == SCTP_ALL_ASSOC) {
   3651		ret = sctp_auth_set_key(ep, asoc, authkey);
   3652		if (ret)
   3653			goto out;
   3654	}
   3655
   3656	ret = 0;
   3657
   3658	if (authkey->sca_assoc_id == SCTP_CURRENT_ASSOC ||
   3659	    authkey->sca_assoc_id == SCTP_ALL_ASSOC) {
   3660		list_for_each_entry(asoc, &ep->asocs, asocs) {
   3661			int res = sctp_auth_set_key(ep, asoc, authkey);
   3662
   3663			if (res && !ret)
   3664				ret = res;
   3665		}
   3666	}
   3667
   3668out:
   3669	memzero_explicit(authkey, optlen);
   3670	return ret;
   3671}
   3672
   3673/*
   3674 * 7.1.21.  Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
   3675 *
   3676 * This option will get or set the active shared key to be used to build
   3677 * the association shared key.
   3678 */
   3679static int sctp_setsockopt_active_key(struct sock *sk,
   3680				      struct sctp_authkeyid *val,
   3681				      unsigned int optlen)
   3682{
   3683	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   3684	struct sctp_association *asoc;
   3685	int ret = 0;
   3686
   3687	if (optlen != sizeof(struct sctp_authkeyid))
   3688		return -EINVAL;
   3689
   3690	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
   3691	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
   3692	    sctp_style(sk, UDP))
   3693		return -EINVAL;
   3694
   3695	if (asoc)
   3696		return sctp_auth_set_active_key(ep, asoc, val->scact_keynumber);
   3697
   3698	if (sctp_style(sk, TCP))
   3699		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
   3700
   3701	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
   3702	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
   3703		ret = sctp_auth_set_active_key(ep, asoc, val->scact_keynumber);
   3704		if (ret)
   3705			return ret;
   3706	}
   3707
   3708	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
   3709	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
   3710		list_for_each_entry(asoc, &ep->asocs, asocs) {
   3711			int res = sctp_auth_set_active_key(ep, asoc,
   3712							   val->scact_keynumber);
   3713
   3714			if (res && !ret)
   3715				ret = res;
   3716		}
   3717	}
   3718
   3719	return ret;
   3720}
   3721
   3722/*
   3723 * 7.1.22.  Delete a shared key (SCTP_AUTH_DELETE_KEY)
   3724 *
   3725 * This set option will delete a shared secret key from use.
   3726 */
   3727static int sctp_setsockopt_del_key(struct sock *sk,
   3728				   struct sctp_authkeyid *val,
   3729				   unsigned int optlen)
   3730{
   3731	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   3732	struct sctp_association *asoc;
   3733	int ret = 0;
   3734
   3735	if (optlen != sizeof(struct sctp_authkeyid))
   3736		return -EINVAL;
   3737
   3738	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
   3739	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
   3740	    sctp_style(sk, UDP))
   3741		return -EINVAL;
   3742
   3743	if (asoc)
   3744		return sctp_auth_del_key_id(ep, asoc, val->scact_keynumber);
   3745
   3746	if (sctp_style(sk, TCP))
   3747		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
   3748
   3749	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
   3750	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
   3751		ret = sctp_auth_del_key_id(ep, asoc, val->scact_keynumber);
   3752		if (ret)
   3753			return ret;
   3754	}
   3755
   3756	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
   3757	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
   3758		list_for_each_entry(asoc, &ep->asocs, asocs) {
   3759			int res = sctp_auth_del_key_id(ep, asoc,
   3760						       val->scact_keynumber);
   3761
   3762			if (res && !ret)
   3763				ret = res;
   3764		}
   3765	}
   3766
   3767	return ret;
   3768}
   3769
   3770/*
   3771 * 8.3.4  Deactivate a Shared Key (SCTP_AUTH_DEACTIVATE_KEY)
   3772 *
   3773 * This set option will deactivate a shared secret key.
   3774 */
   3775static int sctp_setsockopt_deactivate_key(struct sock *sk,
   3776					  struct sctp_authkeyid *val,
   3777					  unsigned int optlen)
   3778{
   3779	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   3780	struct sctp_association *asoc;
   3781	int ret = 0;
   3782
   3783	if (optlen != sizeof(struct sctp_authkeyid))
   3784		return -EINVAL;
   3785
   3786	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
   3787	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
   3788	    sctp_style(sk, UDP))
   3789		return -EINVAL;
   3790
   3791	if (asoc)
   3792		return sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber);
   3793
   3794	if (sctp_style(sk, TCP))
   3795		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
   3796
   3797	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
   3798	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
   3799		ret = sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber);
   3800		if (ret)
   3801			return ret;
   3802	}
   3803
   3804	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
   3805	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
   3806		list_for_each_entry(asoc, &ep->asocs, asocs) {
   3807			int res = sctp_auth_deact_key_id(ep, asoc,
   3808							 val->scact_keynumber);
   3809
   3810			if (res && !ret)
   3811				ret = res;
   3812		}
   3813	}
   3814
   3815	return ret;
   3816}
   3817
   3818/*
   3819 * 8.1.23 SCTP_AUTO_ASCONF
   3820 *
   3821 * This option will enable or disable the use of the automatic generation of
   3822 * ASCONF chunks to add and delete addresses to an existing association.  Note
   3823 * that this option has two caveats namely: a) it only affects sockets that
   3824 * are bound to all addresses available to the SCTP stack, and b) the system
   3825 * administrator may have an overriding control that turns the ASCONF feature
   3826 * off no matter what setting the socket option may have.
   3827 * This option expects an integer boolean flag, where a non-zero value turns on
   3828 * the option, and a zero value turns off the option.
   3829 * Note. In this implementation, socket operation overrides default parameter
   3830 * being set by sysctl as well as FreeBSD implementation
   3831 */
   3832static int sctp_setsockopt_auto_asconf(struct sock *sk, int *val,
   3833					unsigned int optlen)
   3834{
   3835	struct sctp_sock *sp = sctp_sk(sk);
   3836
   3837	if (optlen < sizeof(int))
   3838		return -EINVAL;
   3839	if (!sctp_is_ep_boundall(sk) && *val)
   3840		return -EINVAL;
   3841	if ((*val && sp->do_auto_asconf) || (!*val && !sp->do_auto_asconf))
   3842		return 0;
   3843
   3844	spin_lock_bh(&sock_net(sk)->sctp.addr_wq_lock);
   3845	if (*val == 0 && sp->do_auto_asconf) {
   3846		list_del(&sp->auto_asconf_list);
   3847		sp->do_auto_asconf = 0;
   3848	} else if (*val && !sp->do_auto_asconf) {
   3849		list_add_tail(&sp->auto_asconf_list,
   3850		    &sock_net(sk)->sctp.auto_asconf_splist);
   3851		sp->do_auto_asconf = 1;
   3852	}
   3853	spin_unlock_bh(&sock_net(sk)->sctp.addr_wq_lock);
   3854	return 0;
   3855}
   3856
   3857/*
   3858 * SCTP_PEER_ADDR_THLDS
   3859 *
   3860 * This option allows us to alter the partially failed threshold for one or all
   3861 * transports in an association.  See Section 6.1 of:
   3862 * http://www.ietf.org/id/draft-nishida-tsvwg-sctp-failover-05.txt
   3863 */
   3864static int sctp_setsockopt_paddr_thresholds(struct sock *sk,
   3865					    struct sctp_paddrthlds_v2 *val,
   3866					    unsigned int optlen, bool v2)
   3867{
   3868	struct sctp_transport *trans;
   3869	struct sctp_association *asoc;
   3870	int len;
   3871
   3872	len = v2 ? sizeof(*val) : sizeof(struct sctp_paddrthlds);
   3873	if (optlen < len)
   3874		return -EINVAL;
   3875
   3876	if (v2 && val->spt_pathpfthld > val->spt_pathcpthld)
   3877		return -EINVAL;
   3878
   3879	if (!sctp_is_any(sk, (const union sctp_addr *)&val->spt_address)) {
   3880		trans = sctp_addr_id2transport(sk, &val->spt_address,
   3881					       val->spt_assoc_id);
   3882		if (!trans)
   3883			return -ENOENT;
   3884
   3885		if (val->spt_pathmaxrxt)
   3886			trans->pathmaxrxt = val->spt_pathmaxrxt;
   3887		if (v2)
   3888			trans->ps_retrans = val->spt_pathcpthld;
   3889		trans->pf_retrans = val->spt_pathpfthld;
   3890
   3891		return 0;
   3892	}
   3893
   3894	asoc = sctp_id2assoc(sk, val->spt_assoc_id);
   3895	if (!asoc && val->spt_assoc_id != SCTP_FUTURE_ASSOC &&
   3896	    sctp_style(sk, UDP))
   3897		return -EINVAL;
   3898
   3899	if (asoc) {
   3900		list_for_each_entry(trans, &asoc->peer.transport_addr_list,
   3901				    transports) {
   3902			if (val->spt_pathmaxrxt)
   3903				trans->pathmaxrxt = val->spt_pathmaxrxt;
   3904			if (v2)
   3905				trans->ps_retrans = val->spt_pathcpthld;
   3906			trans->pf_retrans = val->spt_pathpfthld;
   3907		}
   3908
   3909		if (val->spt_pathmaxrxt)
   3910			asoc->pathmaxrxt = val->spt_pathmaxrxt;
   3911		if (v2)
   3912			asoc->ps_retrans = val->spt_pathcpthld;
   3913		asoc->pf_retrans = val->spt_pathpfthld;
   3914	} else {
   3915		struct sctp_sock *sp = sctp_sk(sk);
   3916
   3917		if (val->spt_pathmaxrxt)
   3918			sp->pathmaxrxt = val->spt_pathmaxrxt;
   3919		if (v2)
   3920			sp->ps_retrans = val->spt_pathcpthld;
   3921		sp->pf_retrans = val->spt_pathpfthld;
   3922	}
   3923
   3924	return 0;
   3925}
   3926
   3927static int sctp_setsockopt_recvrcvinfo(struct sock *sk, int *val,
   3928				       unsigned int optlen)
   3929{
   3930	if (optlen < sizeof(int))
   3931		return -EINVAL;
   3932
   3933	sctp_sk(sk)->recvrcvinfo = (*val == 0) ? 0 : 1;
   3934
   3935	return 0;
   3936}
   3937
   3938static int sctp_setsockopt_recvnxtinfo(struct sock *sk, int *val,
   3939				       unsigned int optlen)
   3940{
   3941	if (optlen < sizeof(int))
   3942		return -EINVAL;
   3943
   3944	sctp_sk(sk)->recvnxtinfo = (*val == 0) ? 0 : 1;
   3945
   3946	return 0;
   3947}
   3948
   3949static int sctp_setsockopt_pr_supported(struct sock *sk,
   3950					struct sctp_assoc_value *params,
   3951					unsigned int optlen)
   3952{
   3953	struct sctp_association *asoc;
   3954
   3955	if (optlen != sizeof(*params))
   3956		return -EINVAL;
   3957
   3958	asoc = sctp_id2assoc(sk, params->assoc_id);
   3959	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
   3960	    sctp_style(sk, UDP))
   3961		return -EINVAL;
   3962
   3963	sctp_sk(sk)->ep->prsctp_enable = !!params->assoc_value;
   3964
   3965	return 0;
   3966}
   3967
   3968static int sctp_setsockopt_default_prinfo(struct sock *sk,
   3969					  struct sctp_default_prinfo *info,
   3970					  unsigned int optlen)
   3971{
   3972	struct sctp_sock *sp = sctp_sk(sk);
   3973	struct sctp_association *asoc;
   3974	int retval = -EINVAL;
   3975
   3976	if (optlen != sizeof(*info))
   3977		goto out;
   3978
   3979	if (info->pr_policy & ~SCTP_PR_SCTP_MASK)
   3980		goto out;
   3981
   3982	if (info->pr_policy == SCTP_PR_SCTP_NONE)
   3983		info->pr_value = 0;
   3984
   3985	asoc = sctp_id2assoc(sk, info->pr_assoc_id);
   3986	if (!asoc && info->pr_assoc_id > SCTP_ALL_ASSOC &&
   3987	    sctp_style(sk, UDP))
   3988		goto out;
   3989
   3990	retval = 0;
   3991
   3992	if (asoc) {
   3993		SCTP_PR_SET_POLICY(asoc->default_flags, info->pr_policy);
   3994		asoc->default_timetolive = info->pr_value;
   3995		goto out;
   3996	}
   3997
   3998	if (sctp_style(sk, TCP))
   3999		info->pr_assoc_id = SCTP_FUTURE_ASSOC;
   4000
   4001	if (info->pr_assoc_id == SCTP_FUTURE_ASSOC ||
   4002	    info->pr_assoc_id == SCTP_ALL_ASSOC) {
   4003		SCTP_PR_SET_POLICY(sp->default_flags, info->pr_policy);
   4004		sp->default_timetolive = info->pr_value;
   4005	}
   4006
   4007	if (info->pr_assoc_id == SCTP_CURRENT_ASSOC ||
   4008	    info->pr_assoc_id == SCTP_ALL_ASSOC) {
   4009		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
   4010			SCTP_PR_SET_POLICY(asoc->default_flags,
   4011					   info->pr_policy);
   4012			asoc->default_timetolive = info->pr_value;
   4013		}
   4014	}
   4015
   4016out:
   4017	return retval;
   4018}
   4019
   4020static int sctp_setsockopt_reconfig_supported(struct sock *sk,
   4021					      struct sctp_assoc_value *params,
   4022					      unsigned int optlen)
   4023{
   4024	struct sctp_association *asoc;
   4025	int retval = -EINVAL;
   4026
   4027	if (optlen != sizeof(*params))
   4028		goto out;
   4029
   4030	asoc = sctp_id2assoc(sk, params->assoc_id);
   4031	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
   4032	    sctp_style(sk, UDP))
   4033		goto out;
   4034
   4035	sctp_sk(sk)->ep->reconf_enable = !!params->assoc_value;
   4036
   4037	retval = 0;
   4038
   4039out:
   4040	return retval;
   4041}
   4042
   4043static int sctp_setsockopt_enable_strreset(struct sock *sk,
   4044					   struct sctp_assoc_value *params,
   4045					   unsigned int optlen)
   4046{
   4047	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   4048	struct sctp_association *asoc;
   4049	int retval = -EINVAL;
   4050
   4051	if (optlen != sizeof(*params))
   4052		goto out;
   4053
   4054	if (params->assoc_value & (~SCTP_ENABLE_STRRESET_MASK))
   4055		goto out;
   4056
   4057	asoc = sctp_id2assoc(sk, params->assoc_id);
   4058	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
   4059	    sctp_style(sk, UDP))
   4060		goto out;
   4061
   4062	retval = 0;
   4063
   4064	if (asoc) {
   4065		asoc->strreset_enable = params->assoc_value;
   4066		goto out;
   4067	}
   4068
   4069	if (sctp_style(sk, TCP))
   4070		params->assoc_id = SCTP_FUTURE_ASSOC;
   4071
   4072	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
   4073	    params->assoc_id == SCTP_ALL_ASSOC)
   4074		ep->strreset_enable = params->assoc_value;
   4075
   4076	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
   4077	    params->assoc_id == SCTP_ALL_ASSOC)
   4078		list_for_each_entry(asoc, &ep->asocs, asocs)
   4079			asoc->strreset_enable = params->assoc_value;
   4080
   4081out:
   4082	return retval;
   4083}
   4084
   4085static int sctp_setsockopt_reset_streams(struct sock *sk,
   4086					 struct sctp_reset_streams *params,
   4087					 unsigned int optlen)
   4088{
   4089	struct sctp_association *asoc;
   4090
   4091	if (optlen < sizeof(*params))
   4092		return -EINVAL;
   4093	/* srs_number_streams is u16, so optlen can't be bigger than this. */
   4094	optlen = min_t(unsigned int, optlen, USHRT_MAX +
   4095					     sizeof(__u16) * sizeof(*params));
   4096
   4097	if (params->srs_number_streams * sizeof(__u16) >
   4098	    optlen - sizeof(*params))
   4099		return -EINVAL;
   4100
   4101	asoc = sctp_id2assoc(sk, params->srs_assoc_id);
   4102	if (!asoc)
   4103		return -EINVAL;
   4104
   4105	return sctp_send_reset_streams(asoc, params);
   4106}
   4107
   4108static int sctp_setsockopt_reset_assoc(struct sock *sk, sctp_assoc_t *associd,
   4109				       unsigned int optlen)
   4110{
   4111	struct sctp_association *asoc;
   4112
   4113	if (optlen != sizeof(*associd))
   4114		return -EINVAL;
   4115
   4116	asoc = sctp_id2assoc(sk, *associd);
   4117	if (!asoc)
   4118		return -EINVAL;
   4119
   4120	return sctp_send_reset_assoc(asoc);
   4121}
   4122
   4123static int sctp_setsockopt_add_streams(struct sock *sk,
   4124				       struct sctp_add_streams *params,
   4125				       unsigned int optlen)
   4126{
   4127	struct sctp_association *asoc;
   4128
   4129	if (optlen != sizeof(*params))
   4130		return -EINVAL;
   4131
   4132	asoc = sctp_id2assoc(sk, params->sas_assoc_id);
   4133	if (!asoc)
   4134		return -EINVAL;
   4135
   4136	return sctp_send_add_streams(asoc, params);
   4137}
   4138
   4139static int sctp_setsockopt_scheduler(struct sock *sk,
   4140				     struct sctp_assoc_value *params,
   4141				     unsigned int optlen)
   4142{
   4143	struct sctp_sock *sp = sctp_sk(sk);
   4144	struct sctp_association *asoc;
   4145	int retval = 0;
   4146
   4147	if (optlen < sizeof(*params))
   4148		return -EINVAL;
   4149
   4150	if (params->assoc_value > SCTP_SS_MAX)
   4151		return -EINVAL;
   4152
   4153	asoc = sctp_id2assoc(sk, params->assoc_id);
   4154	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
   4155	    sctp_style(sk, UDP))
   4156		return -EINVAL;
   4157
   4158	if (asoc)
   4159		return sctp_sched_set_sched(asoc, params->assoc_value);
   4160
   4161	if (sctp_style(sk, TCP))
   4162		params->assoc_id = SCTP_FUTURE_ASSOC;
   4163
   4164	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
   4165	    params->assoc_id == SCTP_ALL_ASSOC)
   4166		sp->default_ss = params->assoc_value;
   4167
   4168	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
   4169	    params->assoc_id == SCTP_ALL_ASSOC) {
   4170		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
   4171			int ret = sctp_sched_set_sched(asoc,
   4172						       params->assoc_value);
   4173
   4174			if (ret && !retval)
   4175				retval = ret;
   4176		}
   4177	}
   4178
   4179	return retval;
   4180}
   4181
   4182static int sctp_setsockopt_scheduler_value(struct sock *sk,
   4183					   struct sctp_stream_value *params,
   4184					   unsigned int optlen)
   4185{
   4186	struct sctp_association *asoc;
   4187	int retval = -EINVAL;
   4188
   4189	if (optlen < sizeof(*params))
   4190		goto out;
   4191
   4192	asoc = sctp_id2assoc(sk, params->assoc_id);
   4193	if (!asoc && params->assoc_id != SCTP_CURRENT_ASSOC &&
   4194	    sctp_style(sk, UDP))
   4195		goto out;
   4196
   4197	if (asoc) {
   4198		retval = sctp_sched_set_value(asoc, params->stream_id,
   4199					      params->stream_value, GFP_KERNEL);
   4200		goto out;
   4201	}
   4202
   4203	retval = 0;
   4204
   4205	list_for_each_entry(asoc, &sctp_sk(sk)->ep->asocs, asocs) {
   4206		int ret = sctp_sched_set_value(asoc, params->stream_id,
   4207					       params->stream_value,
   4208					       GFP_KERNEL);
   4209		if (ret && !retval) /* try to return the 1st error. */
   4210			retval = ret;
   4211	}
   4212
   4213out:
   4214	return retval;
   4215}
   4216
   4217static int sctp_setsockopt_interleaving_supported(struct sock *sk,
   4218						  struct sctp_assoc_value *p,
   4219						  unsigned int optlen)
   4220{
   4221	struct sctp_sock *sp = sctp_sk(sk);
   4222	struct sctp_association *asoc;
   4223
   4224	if (optlen < sizeof(*p))
   4225		return -EINVAL;
   4226
   4227	asoc = sctp_id2assoc(sk, p->assoc_id);
   4228	if (!asoc && p->assoc_id != SCTP_FUTURE_ASSOC && sctp_style(sk, UDP))
   4229		return -EINVAL;
   4230
   4231	if (!sock_net(sk)->sctp.intl_enable || !sp->frag_interleave) {
   4232		return -EPERM;
   4233	}
   4234
   4235	sp->ep->intl_enable = !!p->assoc_value;
   4236	return 0;
   4237}
   4238
   4239static int sctp_setsockopt_reuse_port(struct sock *sk, int *val,
   4240				      unsigned int optlen)
   4241{
   4242	if (!sctp_style(sk, TCP))
   4243		return -EOPNOTSUPP;
   4244
   4245	if (sctp_sk(sk)->ep->base.bind_addr.port)
   4246		return -EFAULT;
   4247
   4248	if (optlen < sizeof(int))
   4249		return -EINVAL;
   4250
   4251	sctp_sk(sk)->reuse = !!*val;
   4252
   4253	return 0;
   4254}
   4255
   4256static int sctp_assoc_ulpevent_type_set(struct sctp_event *param,
   4257					struct sctp_association *asoc)
   4258{
   4259	struct sctp_ulpevent *event;
   4260
   4261	sctp_ulpevent_type_set(&asoc->subscribe, param->se_type, param->se_on);
   4262
   4263	if (param->se_type == SCTP_SENDER_DRY_EVENT && param->se_on) {
   4264		if (sctp_outq_is_empty(&asoc->outqueue)) {
   4265			event = sctp_ulpevent_make_sender_dry_event(asoc,
   4266					GFP_USER | __GFP_NOWARN);
   4267			if (!event)
   4268				return -ENOMEM;
   4269
   4270			asoc->stream.si->enqueue_event(&asoc->ulpq, event);
   4271		}
   4272	}
   4273
   4274	return 0;
   4275}
   4276
   4277static int sctp_setsockopt_event(struct sock *sk, struct sctp_event *param,
   4278				 unsigned int optlen)
   4279{
   4280	struct sctp_sock *sp = sctp_sk(sk);
   4281	struct sctp_association *asoc;
   4282	int retval = 0;
   4283
   4284	if (optlen < sizeof(*param))
   4285		return -EINVAL;
   4286
   4287	if (param->se_type < SCTP_SN_TYPE_BASE ||
   4288	    param->se_type > SCTP_SN_TYPE_MAX)
   4289		return -EINVAL;
   4290
   4291	asoc = sctp_id2assoc(sk, param->se_assoc_id);
   4292	if (!asoc && param->se_assoc_id > SCTP_ALL_ASSOC &&
   4293	    sctp_style(sk, UDP))
   4294		return -EINVAL;
   4295
   4296	if (asoc)
   4297		return sctp_assoc_ulpevent_type_set(param, asoc);
   4298
   4299	if (sctp_style(sk, TCP))
   4300		param->se_assoc_id = SCTP_FUTURE_ASSOC;
   4301
   4302	if (param->se_assoc_id == SCTP_FUTURE_ASSOC ||
   4303	    param->se_assoc_id == SCTP_ALL_ASSOC)
   4304		sctp_ulpevent_type_set(&sp->subscribe,
   4305				       param->se_type, param->se_on);
   4306
   4307	if (param->se_assoc_id == SCTP_CURRENT_ASSOC ||
   4308	    param->se_assoc_id == SCTP_ALL_ASSOC) {
   4309		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
   4310			int ret = sctp_assoc_ulpevent_type_set(param, asoc);
   4311
   4312			if (ret && !retval)
   4313				retval = ret;
   4314		}
   4315	}
   4316
   4317	return retval;
   4318}
   4319
   4320static int sctp_setsockopt_asconf_supported(struct sock *sk,
   4321					    struct sctp_assoc_value *params,
   4322					    unsigned int optlen)
   4323{
   4324	struct sctp_association *asoc;
   4325	struct sctp_endpoint *ep;
   4326	int retval = -EINVAL;
   4327
   4328	if (optlen != sizeof(*params))
   4329		goto out;
   4330
   4331	asoc = sctp_id2assoc(sk, params->assoc_id);
   4332	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
   4333	    sctp_style(sk, UDP))
   4334		goto out;
   4335
   4336	ep = sctp_sk(sk)->ep;
   4337	ep->asconf_enable = !!params->assoc_value;
   4338
   4339	if (ep->asconf_enable && ep->auth_enable) {
   4340		sctp_auth_ep_add_chunkid(ep, SCTP_CID_ASCONF);
   4341		sctp_auth_ep_add_chunkid(ep, SCTP_CID_ASCONF_ACK);
   4342	}
   4343
   4344	retval = 0;
   4345
   4346out:
   4347	return retval;
   4348}
   4349
   4350static int sctp_setsockopt_auth_supported(struct sock *sk,
   4351					  struct sctp_assoc_value *params,
   4352					  unsigned int optlen)
   4353{
   4354	struct sctp_association *asoc;
   4355	struct sctp_endpoint *ep;
   4356	int retval = -EINVAL;
   4357
   4358	if (optlen != sizeof(*params))
   4359		goto out;
   4360
   4361	asoc = sctp_id2assoc(sk, params->assoc_id);
   4362	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
   4363	    sctp_style(sk, UDP))
   4364		goto out;
   4365
   4366	ep = sctp_sk(sk)->ep;
   4367	if (params->assoc_value) {
   4368		retval = sctp_auth_init(ep, GFP_KERNEL);
   4369		if (retval)
   4370			goto out;
   4371		if (ep->asconf_enable) {
   4372			sctp_auth_ep_add_chunkid(ep, SCTP_CID_ASCONF);
   4373			sctp_auth_ep_add_chunkid(ep, SCTP_CID_ASCONF_ACK);
   4374		}
   4375	}
   4376
   4377	ep->auth_enable = !!params->assoc_value;
   4378	retval = 0;
   4379
   4380out:
   4381	return retval;
   4382}
   4383
   4384static int sctp_setsockopt_ecn_supported(struct sock *sk,
   4385					 struct sctp_assoc_value *params,
   4386					 unsigned int optlen)
   4387{
   4388	struct sctp_association *asoc;
   4389	int retval = -EINVAL;
   4390
   4391	if (optlen != sizeof(*params))
   4392		goto out;
   4393
   4394	asoc = sctp_id2assoc(sk, params->assoc_id);
   4395	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
   4396	    sctp_style(sk, UDP))
   4397		goto out;
   4398
   4399	sctp_sk(sk)->ep->ecn_enable = !!params->assoc_value;
   4400	retval = 0;
   4401
   4402out:
   4403	return retval;
   4404}
   4405
   4406static int sctp_setsockopt_pf_expose(struct sock *sk,
   4407				     struct sctp_assoc_value *params,
   4408				     unsigned int optlen)
   4409{
   4410	struct sctp_association *asoc;
   4411	int retval = -EINVAL;
   4412
   4413	if (optlen != sizeof(*params))
   4414		goto out;
   4415
   4416	if (params->assoc_value > SCTP_PF_EXPOSE_MAX)
   4417		goto out;
   4418
   4419	asoc = sctp_id2assoc(sk, params->assoc_id);
   4420	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
   4421	    sctp_style(sk, UDP))
   4422		goto out;
   4423
   4424	if (asoc)
   4425		asoc->pf_expose = params->assoc_value;
   4426	else
   4427		sctp_sk(sk)->pf_expose = params->assoc_value;
   4428	retval = 0;
   4429
   4430out:
   4431	return retval;
   4432}
   4433
   4434static int sctp_setsockopt_encap_port(struct sock *sk,
   4435				      struct sctp_udpencaps *encap,
   4436				      unsigned int optlen)
   4437{
   4438	struct sctp_association *asoc;
   4439	struct sctp_transport *t;
   4440	__be16 encap_port;
   4441
   4442	if (optlen != sizeof(*encap))
   4443		return -EINVAL;
   4444
   4445	/* If an address other than INADDR_ANY is specified, and
   4446	 * no transport is found, then the request is invalid.
   4447	 */
   4448	encap_port = (__force __be16)encap->sue_port;
   4449	if (!sctp_is_any(sk, (union sctp_addr *)&encap->sue_address)) {
   4450		t = sctp_addr_id2transport(sk, &encap->sue_address,
   4451					   encap->sue_assoc_id);
   4452		if (!t)
   4453			return -EINVAL;
   4454
   4455		t->encap_port = encap_port;
   4456		return 0;
   4457	}
   4458
   4459	/* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the
   4460	 * socket is a one to many style socket, and an association
   4461	 * was not found, then the id was invalid.
   4462	 */
   4463	asoc = sctp_id2assoc(sk, encap->sue_assoc_id);
   4464	if (!asoc && encap->sue_assoc_id != SCTP_FUTURE_ASSOC &&
   4465	    sctp_style(sk, UDP))
   4466		return -EINVAL;
   4467
   4468	/* If changes are for association, also apply encap_port to
   4469	 * each transport.
   4470	 */
   4471	if (asoc) {
   4472		list_for_each_entry(t, &asoc->peer.transport_addr_list,
   4473				    transports)
   4474			t->encap_port = encap_port;
   4475
   4476		asoc->encap_port = encap_port;
   4477		return 0;
   4478	}
   4479
   4480	sctp_sk(sk)->encap_port = encap_port;
   4481	return 0;
   4482}
   4483
   4484static int sctp_setsockopt_probe_interval(struct sock *sk,
   4485					  struct sctp_probeinterval *params,
   4486					  unsigned int optlen)
   4487{
   4488	struct sctp_association *asoc;
   4489	struct sctp_transport *t;
   4490	__u32 probe_interval;
   4491
   4492	if (optlen != sizeof(*params))
   4493		return -EINVAL;
   4494
   4495	probe_interval = params->spi_interval;
   4496	if (probe_interval && probe_interval < SCTP_PROBE_TIMER_MIN)
   4497		return -EINVAL;
   4498
   4499	/* If an address other than INADDR_ANY is specified, and
   4500	 * no transport is found, then the request is invalid.
   4501	 */
   4502	if (!sctp_is_any(sk, (union sctp_addr *)&params->spi_address)) {
   4503		t = sctp_addr_id2transport(sk, &params->spi_address,
   4504					   params->spi_assoc_id);
   4505		if (!t)
   4506			return -EINVAL;
   4507
   4508		t->probe_interval = msecs_to_jiffies(probe_interval);
   4509		sctp_transport_pl_reset(t);
   4510		return 0;
   4511	}
   4512
   4513	/* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the
   4514	 * socket is a one to many style socket, and an association
   4515	 * was not found, then the id was invalid.
   4516	 */
   4517	asoc = sctp_id2assoc(sk, params->spi_assoc_id);
   4518	if (!asoc && params->spi_assoc_id != SCTP_FUTURE_ASSOC &&
   4519	    sctp_style(sk, UDP))
   4520		return -EINVAL;
   4521
   4522	/* If changes are for association, also apply probe_interval to
   4523	 * each transport.
   4524	 */
   4525	if (asoc) {
   4526		list_for_each_entry(t, &asoc->peer.transport_addr_list, transports) {
   4527			t->probe_interval = msecs_to_jiffies(probe_interval);
   4528			sctp_transport_pl_reset(t);
   4529		}
   4530
   4531		asoc->probe_interval = msecs_to_jiffies(probe_interval);
   4532		return 0;
   4533	}
   4534
   4535	sctp_sk(sk)->probe_interval = probe_interval;
   4536	return 0;
   4537}
   4538
   4539/* API 6.2 setsockopt(), getsockopt()
   4540 *
   4541 * Applications use setsockopt() and getsockopt() to set or retrieve
   4542 * socket options.  Socket options are used to change the default
   4543 * behavior of sockets calls.  They are described in Section 7.
   4544 *
   4545 * The syntax is:
   4546 *
   4547 *   ret = getsockopt(int sd, int level, int optname, void __user *optval,
   4548 *                    int __user *optlen);
   4549 *   ret = setsockopt(int sd, int level, int optname, const void __user *optval,
   4550 *                    int optlen);
   4551 *
   4552 *   sd      - the socket descript.
   4553 *   level   - set to IPPROTO_SCTP for all SCTP options.
   4554 *   optname - the option name.
   4555 *   optval  - the buffer to store the value of the option.
   4556 *   optlen  - the size of the buffer.
   4557 */
   4558static int sctp_setsockopt(struct sock *sk, int level, int optname,
   4559			   sockptr_t optval, unsigned int optlen)
   4560{
   4561	void *kopt = NULL;
   4562	int retval = 0;
   4563
   4564	pr_debug("%s: sk:%p, optname:%d\n", __func__, sk, optname);
   4565
   4566	/* I can hardly begin to describe how wrong this is.  This is
   4567	 * so broken as to be worse than useless.  The API draft
   4568	 * REALLY is NOT helpful here...  I am not convinced that the
   4569	 * semantics of setsockopt() with a level OTHER THAN SOL_SCTP
   4570	 * are at all well-founded.
   4571	 */
   4572	if (level != SOL_SCTP) {
   4573		struct sctp_af *af = sctp_sk(sk)->pf->af;
   4574
   4575		return af->setsockopt(sk, level, optname, optval, optlen);
   4576	}
   4577
   4578	if (optlen > 0) {
   4579		/* Trim it to the biggest size sctp sockopt may need if necessary */
   4580		optlen = min_t(unsigned int, optlen,
   4581			       PAGE_ALIGN(USHRT_MAX +
   4582					  sizeof(__u16) * sizeof(struct sctp_reset_streams)));
   4583		kopt = memdup_sockptr(optval, optlen);
   4584		if (IS_ERR(kopt))
   4585			return PTR_ERR(kopt);
   4586	}
   4587
   4588	lock_sock(sk);
   4589
   4590	switch (optname) {
   4591	case SCTP_SOCKOPT_BINDX_ADD:
   4592		/* 'optlen' is the size of the addresses buffer. */
   4593		retval = sctp_setsockopt_bindx(sk, kopt, optlen,
   4594					       SCTP_BINDX_ADD_ADDR);
   4595		break;
   4596
   4597	case SCTP_SOCKOPT_BINDX_REM:
   4598		/* 'optlen' is the size of the addresses buffer. */
   4599		retval = sctp_setsockopt_bindx(sk, kopt, optlen,
   4600					       SCTP_BINDX_REM_ADDR);
   4601		break;
   4602
   4603	case SCTP_SOCKOPT_CONNECTX_OLD:
   4604		/* 'optlen' is the size of the addresses buffer. */
   4605		retval = sctp_setsockopt_connectx_old(sk, kopt, optlen);
   4606		break;
   4607
   4608	case SCTP_SOCKOPT_CONNECTX:
   4609		/* 'optlen' is the size of the addresses buffer. */
   4610		retval = sctp_setsockopt_connectx(sk, kopt, optlen);
   4611		break;
   4612
   4613	case SCTP_DISABLE_FRAGMENTS:
   4614		retval = sctp_setsockopt_disable_fragments(sk, kopt, optlen);
   4615		break;
   4616
   4617	case SCTP_EVENTS:
   4618		retval = sctp_setsockopt_events(sk, kopt, optlen);
   4619		break;
   4620
   4621	case SCTP_AUTOCLOSE:
   4622		retval = sctp_setsockopt_autoclose(sk, kopt, optlen);
   4623		break;
   4624
   4625	case SCTP_PEER_ADDR_PARAMS:
   4626		retval = sctp_setsockopt_peer_addr_params(sk, kopt, optlen);
   4627		break;
   4628
   4629	case SCTP_DELAYED_SACK:
   4630		retval = sctp_setsockopt_delayed_ack(sk, kopt, optlen);
   4631		break;
   4632	case SCTP_PARTIAL_DELIVERY_POINT:
   4633		retval = sctp_setsockopt_partial_delivery_point(sk, kopt, optlen);
   4634		break;
   4635
   4636	case SCTP_INITMSG:
   4637		retval = sctp_setsockopt_initmsg(sk, kopt, optlen);
   4638		break;
   4639	case SCTP_DEFAULT_SEND_PARAM:
   4640		retval = sctp_setsockopt_default_send_param(sk, kopt, optlen);
   4641		break;
   4642	case SCTP_DEFAULT_SNDINFO:
   4643		retval = sctp_setsockopt_default_sndinfo(sk, kopt, optlen);
   4644		break;
   4645	case SCTP_PRIMARY_ADDR:
   4646		retval = sctp_setsockopt_primary_addr(sk, kopt, optlen);
   4647		break;
   4648	case SCTP_SET_PEER_PRIMARY_ADDR:
   4649		retval = sctp_setsockopt_peer_primary_addr(sk, kopt, optlen);
   4650		break;
   4651	case SCTP_NODELAY:
   4652		retval = sctp_setsockopt_nodelay(sk, kopt, optlen);
   4653		break;
   4654	case SCTP_RTOINFO:
   4655		retval = sctp_setsockopt_rtoinfo(sk, kopt, optlen);
   4656		break;
   4657	case SCTP_ASSOCINFO:
   4658		retval = sctp_setsockopt_associnfo(sk, kopt, optlen);
   4659		break;
   4660	case SCTP_I_WANT_MAPPED_V4_ADDR:
   4661		retval = sctp_setsockopt_mappedv4(sk, kopt, optlen);
   4662		break;
   4663	case SCTP_MAXSEG:
   4664		retval = sctp_setsockopt_maxseg(sk, kopt, optlen);
   4665		break;
   4666	case SCTP_ADAPTATION_LAYER:
   4667		retval = sctp_setsockopt_adaptation_layer(sk, kopt, optlen);
   4668		break;
   4669	case SCTP_CONTEXT:
   4670		retval = sctp_setsockopt_context(sk, kopt, optlen);
   4671		break;
   4672	case SCTP_FRAGMENT_INTERLEAVE:
   4673		retval = sctp_setsockopt_fragment_interleave(sk, kopt, optlen);
   4674		break;
   4675	case SCTP_MAX_BURST:
   4676		retval = sctp_setsockopt_maxburst(sk, kopt, optlen);
   4677		break;
   4678	case SCTP_AUTH_CHUNK:
   4679		retval = sctp_setsockopt_auth_chunk(sk, kopt, optlen);
   4680		break;
   4681	case SCTP_HMAC_IDENT:
   4682		retval = sctp_setsockopt_hmac_ident(sk, kopt, optlen);
   4683		break;
   4684	case SCTP_AUTH_KEY:
   4685		retval = sctp_setsockopt_auth_key(sk, kopt, optlen);
   4686		break;
   4687	case SCTP_AUTH_ACTIVE_KEY:
   4688		retval = sctp_setsockopt_active_key(sk, kopt, optlen);
   4689		break;
   4690	case SCTP_AUTH_DELETE_KEY:
   4691		retval = sctp_setsockopt_del_key(sk, kopt, optlen);
   4692		break;
   4693	case SCTP_AUTH_DEACTIVATE_KEY:
   4694		retval = sctp_setsockopt_deactivate_key(sk, kopt, optlen);
   4695		break;
   4696	case SCTP_AUTO_ASCONF:
   4697		retval = sctp_setsockopt_auto_asconf(sk, kopt, optlen);
   4698		break;
   4699	case SCTP_PEER_ADDR_THLDS:
   4700		retval = sctp_setsockopt_paddr_thresholds(sk, kopt, optlen,
   4701							  false);
   4702		break;
   4703	case SCTP_PEER_ADDR_THLDS_V2:
   4704		retval = sctp_setsockopt_paddr_thresholds(sk, kopt, optlen,
   4705							  true);
   4706		break;
   4707	case SCTP_RECVRCVINFO:
   4708		retval = sctp_setsockopt_recvrcvinfo(sk, kopt, optlen);
   4709		break;
   4710	case SCTP_RECVNXTINFO:
   4711		retval = sctp_setsockopt_recvnxtinfo(sk, kopt, optlen);
   4712		break;
   4713	case SCTP_PR_SUPPORTED:
   4714		retval = sctp_setsockopt_pr_supported(sk, kopt, optlen);
   4715		break;
   4716	case SCTP_DEFAULT_PRINFO:
   4717		retval = sctp_setsockopt_default_prinfo(sk, kopt, optlen);
   4718		break;
   4719	case SCTP_RECONFIG_SUPPORTED:
   4720		retval = sctp_setsockopt_reconfig_supported(sk, kopt, optlen);
   4721		break;
   4722	case SCTP_ENABLE_STREAM_RESET:
   4723		retval = sctp_setsockopt_enable_strreset(sk, kopt, optlen);
   4724		break;
   4725	case SCTP_RESET_STREAMS:
   4726		retval = sctp_setsockopt_reset_streams(sk, kopt, optlen);
   4727		break;
   4728	case SCTP_RESET_ASSOC:
   4729		retval = sctp_setsockopt_reset_assoc(sk, kopt, optlen);
   4730		break;
   4731	case SCTP_ADD_STREAMS:
   4732		retval = sctp_setsockopt_add_streams(sk, kopt, optlen);
   4733		break;
   4734	case SCTP_STREAM_SCHEDULER:
   4735		retval = sctp_setsockopt_scheduler(sk, kopt, optlen);
   4736		break;
   4737	case SCTP_STREAM_SCHEDULER_VALUE:
   4738		retval = sctp_setsockopt_scheduler_value(sk, kopt, optlen);
   4739		break;
   4740	case SCTP_INTERLEAVING_SUPPORTED:
   4741		retval = sctp_setsockopt_interleaving_supported(sk, kopt,
   4742								optlen);
   4743		break;
   4744	case SCTP_REUSE_PORT:
   4745		retval = sctp_setsockopt_reuse_port(sk, kopt, optlen);
   4746		break;
   4747	case SCTP_EVENT:
   4748		retval = sctp_setsockopt_event(sk, kopt, optlen);
   4749		break;
   4750	case SCTP_ASCONF_SUPPORTED:
   4751		retval = sctp_setsockopt_asconf_supported(sk, kopt, optlen);
   4752		break;
   4753	case SCTP_AUTH_SUPPORTED:
   4754		retval = sctp_setsockopt_auth_supported(sk, kopt, optlen);
   4755		break;
   4756	case SCTP_ECN_SUPPORTED:
   4757		retval = sctp_setsockopt_ecn_supported(sk, kopt, optlen);
   4758		break;
   4759	case SCTP_EXPOSE_POTENTIALLY_FAILED_STATE:
   4760		retval = sctp_setsockopt_pf_expose(sk, kopt, optlen);
   4761		break;
   4762	case SCTP_REMOTE_UDP_ENCAPS_PORT:
   4763		retval = sctp_setsockopt_encap_port(sk, kopt, optlen);
   4764		break;
   4765	case SCTP_PLPMTUD_PROBE_INTERVAL:
   4766		retval = sctp_setsockopt_probe_interval(sk, kopt, optlen);
   4767		break;
   4768	default:
   4769		retval = -ENOPROTOOPT;
   4770		break;
   4771	}
   4772
   4773	release_sock(sk);
   4774	kfree(kopt);
   4775	return retval;
   4776}
   4777
   4778/* API 3.1.6 connect() - UDP Style Syntax
   4779 *
   4780 * An application may use the connect() call in the UDP model to initiate an
   4781 * association without sending data.
   4782 *
   4783 * The syntax is:
   4784 *
   4785 * ret = connect(int sd, const struct sockaddr *nam, socklen_t len);
   4786 *
   4787 * sd: the socket descriptor to have a new association added to.
   4788 *
   4789 * nam: the address structure (either struct sockaddr_in or struct
   4790 *    sockaddr_in6 defined in RFC2553 [7]).
   4791 *
   4792 * len: the size of the address.
   4793 */
   4794static int sctp_connect(struct sock *sk, struct sockaddr *addr,
   4795			int addr_len, int flags)
   4796{
   4797	struct sctp_af *af;
   4798	int err = -EINVAL;
   4799
   4800	lock_sock(sk);
   4801	pr_debug("%s: sk:%p, sockaddr:%p, addr_len:%d\n", __func__, sk,
   4802		 addr, addr_len);
   4803
   4804	/* Validate addr_len before calling common connect/connectx routine. */
   4805	af = sctp_get_af_specific(addr->sa_family);
   4806	if (af && addr_len >= af->sockaddr_len)
   4807		err = __sctp_connect(sk, addr, af->sockaddr_len, flags, NULL);
   4808
   4809	release_sock(sk);
   4810	return err;
   4811}
   4812
   4813int sctp_inet_connect(struct socket *sock, struct sockaddr *uaddr,
   4814		      int addr_len, int flags)
   4815{
   4816	if (addr_len < sizeof(uaddr->sa_family))
   4817		return -EINVAL;
   4818
   4819	if (uaddr->sa_family == AF_UNSPEC)
   4820		return -EOPNOTSUPP;
   4821
   4822	return sctp_connect(sock->sk, uaddr, addr_len, flags);
   4823}
   4824
   4825/* FIXME: Write comments. */
   4826static int sctp_disconnect(struct sock *sk, int flags)
   4827{
   4828	return -EOPNOTSUPP; /* STUB */
   4829}
   4830
   4831/* 4.1.4 accept() - TCP Style Syntax
   4832 *
   4833 * Applications use accept() call to remove an established SCTP
   4834 * association from the accept queue of the endpoint.  A new socket
   4835 * descriptor will be returned from accept() to represent the newly
   4836 * formed association.
   4837 */
   4838static struct sock *sctp_accept(struct sock *sk, int flags, int *err, bool kern)
   4839{
   4840	struct sctp_sock *sp;
   4841	struct sctp_endpoint *ep;
   4842	struct sock *newsk = NULL;
   4843	struct sctp_association *asoc;
   4844	long timeo;
   4845	int error = 0;
   4846
   4847	lock_sock(sk);
   4848
   4849	sp = sctp_sk(sk);
   4850	ep = sp->ep;
   4851
   4852	if (!sctp_style(sk, TCP)) {
   4853		error = -EOPNOTSUPP;
   4854		goto out;
   4855	}
   4856
   4857	if (!sctp_sstate(sk, LISTENING)) {
   4858		error = -EINVAL;
   4859		goto out;
   4860	}
   4861
   4862	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
   4863
   4864	error = sctp_wait_for_accept(sk, timeo);
   4865	if (error)
   4866		goto out;
   4867
   4868	/* We treat the list of associations on the endpoint as the accept
   4869	 * queue and pick the first association on the list.
   4870	 */
   4871	asoc = list_entry(ep->asocs.next, struct sctp_association, asocs);
   4872
   4873	newsk = sp->pf->create_accept_sk(sk, asoc, kern);
   4874	if (!newsk) {
   4875		error = -ENOMEM;
   4876		goto out;
   4877	}
   4878
   4879	/* Populate the fields of the newsk from the oldsk and migrate the
   4880	 * asoc to the newsk.
   4881	 */
   4882	error = sctp_sock_migrate(sk, newsk, asoc, SCTP_SOCKET_TCP);
   4883	if (error) {
   4884		sk_common_release(newsk);
   4885		newsk = NULL;
   4886	}
   4887
   4888out:
   4889	release_sock(sk);
   4890	*err = error;
   4891	return newsk;
   4892}
   4893
   4894/* The SCTP ioctl handler. */
   4895static int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg)
   4896{
   4897	int rc = -ENOTCONN;
   4898
   4899	lock_sock(sk);
   4900
   4901	/*
   4902	 * SEQPACKET-style sockets in LISTENING state are valid, for
   4903	 * SCTP, so only discard TCP-style sockets in LISTENING state.
   4904	 */
   4905	if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))
   4906		goto out;
   4907
   4908	switch (cmd) {
   4909	case SIOCINQ: {
   4910		struct sk_buff *skb;
   4911		unsigned int amount = 0;
   4912
   4913		skb = skb_peek(&sk->sk_receive_queue);
   4914		if (skb != NULL) {
   4915			/*
   4916			 * We will only return the amount of this packet since
   4917			 * that is all that will be read.
   4918			 */
   4919			amount = skb->len;
   4920		}
   4921		rc = put_user(amount, (int __user *)arg);
   4922		break;
   4923	}
   4924	default:
   4925		rc = -ENOIOCTLCMD;
   4926		break;
   4927	}
   4928out:
   4929	release_sock(sk);
   4930	return rc;
   4931}
   4932
   4933/* This is the function which gets called during socket creation to
   4934 * initialized the SCTP-specific portion of the sock.
   4935 * The sock structure should already be zero-filled memory.
   4936 */
   4937static int sctp_init_sock(struct sock *sk)
   4938{
   4939	struct net *net = sock_net(sk);
   4940	struct sctp_sock *sp;
   4941
   4942	pr_debug("%s: sk:%p\n", __func__, sk);
   4943
   4944	sp = sctp_sk(sk);
   4945
   4946	/* Initialize the SCTP per socket area.  */
   4947	switch (sk->sk_type) {
   4948	case SOCK_SEQPACKET:
   4949		sp->type = SCTP_SOCKET_UDP;
   4950		break;
   4951	case SOCK_STREAM:
   4952		sp->type = SCTP_SOCKET_TCP;
   4953		break;
   4954	default:
   4955		return -ESOCKTNOSUPPORT;
   4956	}
   4957
   4958	sk->sk_gso_type = SKB_GSO_SCTP;
   4959
   4960	/* Initialize default send parameters. These parameters can be
   4961	 * modified with the SCTP_DEFAULT_SEND_PARAM socket option.
   4962	 */
   4963	sp->default_stream = 0;
   4964	sp->default_ppid = 0;
   4965	sp->default_flags = 0;
   4966	sp->default_context = 0;
   4967	sp->default_timetolive = 0;
   4968
   4969	sp->default_rcv_context = 0;
   4970	sp->max_burst = net->sctp.max_burst;
   4971
   4972	sp->sctp_hmac_alg = net->sctp.sctp_hmac_alg;
   4973
   4974	/* Initialize default setup parameters. These parameters
   4975	 * can be modified with the SCTP_INITMSG socket option or
   4976	 * overridden by the SCTP_INIT CMSG.
   4977	 */
   4978	sp->initmsg.sinit_num_ostreams   = sctp_max_outstreams;
   4979	sp->initmsg.sinit_max_instreams  = sctp_max_instreams;
   4980	sp->initmsg.sinit_max_attempts   = net->sctp.max_retrans_init;
   4981	sp->initmsg.sinit_max_init_timeo = net->sctp.rto_max;
   4982
   4983	/* Initialize default RTO related parameters.  These parameters can
   4984	 * be modified for with the SCTP_RTOINFO socket option.
   4985	 */
   4986	sp->rtoinfo.srto_initial = net->sctp.rto_initial;
   4987	sp->rtoinfo.srto_max     = net->sctp.rto_max;
   4988	sp->rtoinfo.srto_min     = net->sctp.rto_min;
   4989
   4990	/* Initialize default association related parameters. These parameters
   4991	 * can be modified with the SCTP_ASSOCINFO socket option.
   4992	 */
   4993	sp->assocparams.sasoc_asocmaxrxt = net->sctp.max_retrans_association;
   4994	sp->assocparams.sasoc_number_peer_destinations = 0;
   4995	sp->assocparams.sasoc_peer_rwnd = 0;
   4996	sp->assocparams.sasoc_local_rwnd = 0;
   4997	sp->assocparams.sasoc_cookie_life = net->sctp.valid_cookie_life;
   4998
   4999	/* Initialize default event subscriptions. By default, all the
   5000	 * options are off.
   5001	 */
   5002	sp->subscribe = 0;
   5003
   5004	/* Default Peer Address Parameters.  These defaults can
   5005	 * be modified via SCTP_PEER_ADDR_PARAMS
   5006	 */
   5007	sp->hbinterval  = net->sctp.hb_interval;
   5008	sp->udp_port    = htons(net->sctp.udp_port);
   5009	sp->encap_port  = htons(net->sctp.encap_port);
   5010	sp->pathmaxrxt  = net->sctp.max_retrans_path;
   5011	sp->pf_retrans  = net->sctp.pf_retrans;
   5012	sp->ps_retrans  = net->sctp.ps_retrans;
   5013	sp->pf_expose   = net->sctp.pf_expose;
   5014	sp->pathmtu     = 0; /* allow default discovery */
   5015	sp->sackdelay   = net->sctp.sack_timeout;
   5016	sp->sackfreq	= 2;
   5017	sp->param_flags = SPP_HB_ENABLE |
   5018			  SPP_PMTUD_ENABLE |
   5019			  SPP_SACKDELAY_ENABLE;
   5020	sp->default_ss = SCTP_SS_DEFAULT;
   5021
   5022	/* If enabled no SCTP message fragmentation will be performed.
   5023	 * Configure through SCTP_DISABLE_FRAGMENTS socket option.
   5024	 */
   5025	sp->disable_fragments = 0;
   5026
   5027	/* Enable Nagle algorithm by default.  */
   5028	sp->nodelay           = 0;
   5029
   5030	sp->recvrcvinfo = 0;
   5031	sp->recvnxtinfo = 0;
   5032
   5033	/* Enable by default. */
   5034	sp->v4mapped          = 1;
   5035
   5036	/* Auto-close idle associations after the configured
   5037	 * number of seconds.  A value of 0 disables this
   5038	 * feature.  Configure through the SCTP_AUTOCLOSE socket option,
   5039	 * for UDP-style sockets only.
   5040	 */
   5041	sp->autoclose         = 0;
   5042
   5043	/* User specified fragmentation limit. */
   5044	sp->user_frag         = 0;
   5045
   5046	sp->adaptation_ind = 0;
   5047
   5048	sp->pf = sctp_get_pf_specific(sk->sk_family);
   5049
   5050	/* Control variables for partial data delivery. */
   5051	atomic_set(&sp->pd_mode, 0);
   5052	skb_queue_head_init(&sp->pd_lobby);
   5053	sp->frag_interleave = 0;
   5054	sp->probe_interval = net->sctp.probe_interval;
   5055
   5056	/* Create a per socket endpoint structure.  Even if we
   5057	 * change the data structure relationships, this may still
   5058	 * be useful for storing pre-connect address information.
   5059	 */
   5060	sp->ep = sctp_endpoint_new(sk, GFP_KERNEL);
   5061	if (!sp->ep)
   5062		return -ENOMEM;
   5063
   5064	sp->hmac = NULL;
   5065
   5066	sk->sk_destruct = sctp_destruct_sock;
   5067
   5068	SCTP_DBG_OBJCNT_INC(sock);
   5069
   5070	sk_sockets_allocated_inc(sk);
   5071	sock_prot_inuse_add(net, sk->sk_prot, 1);
   5072
   5073	return 0;
   5074}
   5075
   5076/* Cleanup any SCTP per socket resources. Must be called with
   5077 * sock_net(sk)->sctp.addr_wq_lock held if sp->do_auto_asconf is true
   5078 */
   5079static void sctp_destroy_sock(struct sock *sk)
   5080{
   5081	struct sctp_sock *sp;
   5082
   5083	pr_debug("%s: sk:%p\n", __func__, sk);
   5084
   5085	/* Release our hold on the endpoint. */
   5086	sp = sctp_sk(sk);
   5087	/* This could happen during socket init, thus we bail out
   5088	 * early, since the rest of the below is not setup either.
   5089	 */
   5090	if (sp->ep == NULL)
   5091		return;
   5092
   5093	if (sp->do_auto_asconf) {
   5094		sp->do_auto_asconf = 0;
   5095		list_del(&sp->auto_asconf_list);
   5096	}
   5097	sctp_endpoint_free(sp->ep);
   5098	sk_sockets_allocated_dec(sk);
   5099	sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
   5100}
   5101
   5102/* Triggered when there are no references on the socket anymore */
   5103static void sctp_destruct_sock(struct sock *sk)
   5104{
   5105	struct sctp_sock *sp = sctp_sk(sk);
   5106
   5107	/* Free up the HMAC transform. */
   5108	crypto_free_shash(sp->hmac);
   5109
   5110	inet_sock_destruct(sk);
   5111}
   5112
   5113/* API 4.1.7 shutdown() - TCP Style Syntax
   5114 *     int shutdown(int socket, int how);
   5115 *
   5116 *     sd      - the socket descriptor of the association to be closed.
   5117 *     how     - Specifies the type of shutdown.  The  values  are
   5118 *               as follows:
   5119 *               SHUT_RD
   5120 *                     Disables further receive operations. No SCTP
   5121 *                     protocol action is taken.
   5122 *               SHUT_WR
   5123 *                     Disables further send operations, and initiates
   5124 *                     the SCTP shutdown sequence.
   5125 *               SHUT_RDWR
   5126 *                     Disables further send  and  receive  operations
   5127 *                     and initiates the SCTP shutdown sequence.
   5128 */
   5129static void sctp_shutdown(struct sock *sk, int how)
   5130{
   5131	struct net *net = sock_net(sk);
   5132	struct sctp_endpoint *ep;
   5133
   5134	if (!sctp_style(sk, TCP))
   5135		return;
   5136
   5137	ep = sctp_sk(sk)->ep;
   5138	if (how & SEND_SHUTDOWN && !list_empty(&ep->asocs)) {
   5139		struct sctp_association *asoc;
   5140
   5141		inet_sk_set_state(sk, SCTP_SS_CLOSING);
   5142		asoc = list_entry(ep->asocs.next,
   5143				  struct sctp_association, asocs);
   5144		sctp_primitive_SHUTDOWN(net, asoc, NULL);
   5145	}
   5146}
   5147
   5148int sctp_get_sctp_info(struct sock *sk, struct sctp_association *asoc,
   5149		       struct sctp_info *info)
   5150{
   5151	struct sctp_transport *prim;
   5152	struct list_head *pos;
   5153	int mask;
   5154
   5155	memset(info, 0, sizeof(*info));
   5156	if (!asoc) {
   5157		struct sctp_sock *sp = sctp_sk(sk);
   5158
   5159		info->sctpi_s_autoclose = sp->autoclose;
   5160		info->sctpi_s_adaptation_ind = sp->adaptation_ind;
   5161		info->sctpi_s_pd_point = sp->pd_point;
   5162		info->sctpi_s_nodelay = sp->nodelay;
   5163		info->sctpi_s_disable_fragments = sp->disable_fragments;
   5164		info->sctpi_s_v4mapped = sp->v4mapped;
   5165		info->sctpi_s_frag_interleave = sp->frag_interleave;
   5166		info->sctpi_s_type = sp->type;
   5167
   5168		return 0;
   5169	}
   5170
   5171	info->sctpi_tag = asoc->c.my_vtag;
   5172	info->sctpi_state = asoc->state;
   5173	info->sctpi_rwnd = asoc->a_rwnd;
   5174	info->sctpi_unackdata = asoc->unack_data;
   5175	info->sctpi_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map);
   5176	info->sctpi_instrms = asoc->stream.incnt;
   5177	info->sctpi_outstrms = asoc->stream.outcnt;
   5178	list_for_each(pos, &asoc->base.inqueue.in_chunk_list)
   5179		info->sctpi_inqueue++;
   5180	list_for_each(pos, &asoc->outqueue.out_chunk_list)
   5181		info->sctpi_outqueue++;
   5182	info->sctpi_overall_error = asoc->overall_error_count;
   5183	info->sctpi_max_burst = asoc->max_burst;
   5184	info->sctpi_maxseg = asoc->frag_point;
   5185	info->sctpi_peer_rwnd = asoc->peer.rwnd;
   5186	info->sctpi_peer_tag = asoc->c.peer_vtag;
   5187
   5188	mask = asoc->peer.ecn_capable << 1;
   5189	mask = (mask | asoc->peer.ipv4_address) << 1;
   5190	mask = (mask | asoc->peer.ipv6_address) << 1;
   5191	mask = (mask | asoc->peer.hostname_address) << 1;
   5192	mask = (mask | asoc->peer.asconf_capable) << 1;
   5193	mask = (mask | asoc->peer.prsctp_capable) << 1;
   5194	mask = (mask | asoc->peer.auth_capable);
   5195	info->sctpi_peer_capable = mask;
   5196	mask = asoc->peer.sack_needed << 1;
   5197	mask = (mask | asoc->peer.sack_generation) << 1;
   5198	mask = (mask | asoc->peer.zero_window_announced);
   5199	info->sctpi_peer_sack = mask;
   5200
   5201	info->sctpi_isacks = asoc->stats.isacks;
   5202	info->sctpi_osacks = asoc->stats.osacks;
   5203	info->sctpi_opackets = asoc->stats.opackets;
   5204	info->sctpi_ipackets = asoc->stats.ipackets;
   5205	info->sctpi_rtxchunks = asoc->stats.rtxchunks;
   5206	info->sctpi_outofseqtsns = asoc->stats.outofseqtsns;
   5207	info->sctpi_idupchunks = asoc->stats.idupchunks;
   5208	info->sctpi_gapcnt = asoc->stats.gapcnt;
   5209	info->sctpi_ouodchunks = asoc->stats.ouodchunks;
   5210	info->sctpi_iuodchunks = asoc->stats.iuodchunks;
   5211	info->sctpi_oodchunks = asoc->stats.oodchunks;
   5212	info->sctpi_iodchunks = asoc->stats.iodchunks;
   5213	info->sctpi_octrlchunks = asoc->stats.octrlchunks;
   5214	info->sctpi_ictrlchunks = asoc->stats.ictrlchunks;
   5215
   5216	prim = asoc->peer.primary_path;
   5217	memcpy(&info->sctpi_p_address, &prim->ipaddr, sizeof(prim->ipaddr));
   5218	info->sctpi_p_state = prim->state;
   5219	info->sctpi_p_cwnd = prim->cwnd;
   5220	info->sctpi_p_srtt = prim->srtt;
   5221	info->sctpi_p_rto = jiffies_to_msecs(prim->rto);
   5222	info->sctpi_p_hbinterval = prim->hbinterval;
   5223	info->sctpi_p_pathmaxrxt = prim->pathmaxrxt;
   5224	info->sctpi_p_sackdelay = jiffies_to_msecs(prim->sackdelay);
   5225	info->sctpi_p_ssthresh = prim->ssthresh;
   5226	info->sctpi_p_partial_bytes_acked = prim->partial_bytes_acked;
   5227	info->sctpi_p_flight_size = prim->flight_size;
   5228	info->sctpi_p_error = prim->error_count;
   5229
   5230	return 0;
   5231}
   5232EXPORT_SYMBOL_GPL(sctp_get_sctp_info);
   5233
   5234/* use callback to avoid exporting the core structure */
   5235void sctp_transport_walk_start(struct rhashtable_iter *iter) __acquires(RCU)
   5236{
   5237	rhltable_walk_enter(&sctp_transport_hashtable, iter);
   5238
   5239	rhashtable_walk_start(iter);
   5240}
   5241
   5242void sctp_transport_walk_stop(struct rhashtable_iter *iter) __releases(RCU)
   5243{
   5244	rhashtable_walk_stop(iter);
   5245	rhashtable_walk_exit(iter);
   5246}
   5247
   5248struct sctp_transport *sctp_transport_get_next(struct net *net,
   5249					       struct rhashtable_iter *iter)
   5250{
   5251	struct sctp_transport *t;
   5252
   5253	t = rhashtable_walk_next(iter);
   5254	for (; t; t = rhashtable_walk_next(iter)) {
   5255		if (IS_ERR(t)) {
   5256			if (PTR_ERR(t) == -EAGAIN)
   5257				continue;
   5258			break;
   5259		}
   5260
   5261		if (!sctp_transport_hold(t))
   5262			continue;
   5263
   5264		if (net_eq(t->asoc->base.net, net) &&
   5265		    t->asoc->peer.primary_path == t)
   5266			break;
   5267
   5268		sctp_transport_put(t);
   5269	}
   5270
   5271	return t;
   5272}
   5273
   5274struct sctp_transport *sctp_transport_get_idx(struct net *net,
   5275					      struct rhashtable_iter *iter,
   5276					      int pos)
   5277{
   5278	struct sctp_transport *t;
   5279
   5280	if (!pos)
   5281		return SEQ_START_TOKEN;
   5282
   5283	while ((t = sctp_transport_get_next(net, iter)) && !IS_ERR(t)) {
   5284		if (!--pos)
   5285			break;
   5286		sctp_transport_put(t);
   5287	}
   5288
   5289	return t;
   5290}
   5291
   5292int sctp_for_each_endpoint(int (*cb)(struct sctp_endpoint *, void *),
   5293			   void *p) {
   5294	int err = 0;
   5295	int hash = 0;
   5296	struct sctp_endpoint *ep;
   5297	struct sctp_hashbucket *head;
   5298
   5299	for (head = sctp_ep_hashtable; hash < sctp_ep_hashsize;
   5300	     hash++, head++) {
   5301		read_lock_bh(&head->lock);
   5302		sctp_for_each_hentry(ep, &head->chain) {
   5303			err = cb(ep, p);
   5304			if (err)
   5305				break;
   5306		}
   5307		read_unlock_bh(&head->lock);
   5308	}
   5309
   5310	return err;
   5311}
   5312EXPORT_SYMBOL_GPL(sctp_for_each_endpoint);
   5313
   5314int sctp_transport_lookup_process(sctp_callback_t cb, struct net *net,
   5315				  const union sctp_addr *laddr,
   5316				  const union sctp_addr *paddr, void *p)
   5317{
   5318	struct sctp_transport *transport;
   5319	struct sctp_endpoint *ep;
   5320	int err = -ENOENT;
   5321
   5322	rcu_read_lock();
   5323	transport = sctp_addrs_lookup_transport(net, laddr, paddr);
   5324	if (!transport) {
   5325		rcu_read_unlock();
   5326		return err;
   5327	}
   5328	ep = transport->asoc->ep;
   5329	if (!sctp_endpoint_hold(ep)) { /* asoc can be peeled off */
   5330		sctp_transport_put(transport);
   5331		rcu_read_unlock();
   5332		return err;
   5333	}
   5334	rcu_read_unlock();
   5335
   5336	err = cb(ep, transport, p);
   5337	sctp_endpoint_put(ep);
   5338	sctp_transport_put(transport);
   5339	return err;
   5340}
   5341EXPORT_SYMBOL_GPL(sctp_transport_lookup_process);
   5342
   5343int sctp_transport_traverse_process(sctp_callback_t cb, sctp_callback_t cb_done,
   5344				    struct net *net, int *pos, void *p)
   5345{
   5346	struct rhashtable_iter hti;
   5347	struct sctp_transport *tsp;
   5348	struct sctp_endpoint *ep;
   5349	int ret;
   5350
   5351again:
   5352	ret = 0;
   5353	sctp_transport_walk_start(&hti);
   5354
   5355	tsp = sctp_transport_get_idx(net, &hti, *pos + 1);
   5356	for (; !IS_ERR_OR_NULL(tsp); tsp = sctp_transport_get_next(net, &hti)) {
   5357		ep = tsp->asoc->ep;
   5358		if (sctp_endpoint_hold(ep)) { /* asoc can be peeled off */
   5359			ret = cb(ep, tsp, p);
   5360			if (ret)
   5361				break;
   5362			sctp_endpoint_put(ep);
   5363		}
   5364		(*pos)++;
   5365		sctp_transport_put(tsp);
   5366	}
   5367	sctp_transport_walk_stop(&hti);
   5368
   5369	if (ret) {
   5370		if (cb_done && !cb_done(ep, tsp, p)) {
   5371			(*pos)++;
   5372			sctp_endpoint_put(ep);
   5373			sctp_transport_put(tsp);
   5374			goto again;
   5375		}
   5376		sctp_endpoint_put(ep);
   5377		sctp_transport_put(tsp);
   5378	}
   5379
   5380	return ret;
   5381}
   5382EXPORT_SYMBOL_GPL(sctp_transport_traverse_process);
   5383
   5384/* 7.2.1 Association Status (SCTP_STATUS)
   5385
   5386 * Applications can retrieve current status information about an
   5387 * association, including association state, peer receiver window size,
   5388 * number of unacked data chunks, and number of data chunks pending
   5389 * receipt.  This information is read-only.
   5390 */
   5391static int sctp_getsockopt_sctp_status(struct sock *sk, int len,
   5392				       char __user *optval,
   5393				       int __user *optlen)
   5394{
   5395	struct sctp_status status;
   5396	struct sctp_association *asoc = NULL;
   5397	struct sctp_transport *transport;
   5398	sctp_assoc_t associd;
   5399	int retval = 0;
   5400
   5401	if (len < sizeof(status)) {
   5402		retval = -EINVAL;
   5403		goto out;
   5404	}
   5405
   5406	len = sizeof(status);
   5407	if (copy_from_user(&status, optval, len)) {
   5408		retval = -EFAULT;
   5409		goto out;
   5410	}
   5411
   5412	associd = status.sstat_assoc_id;
   5413	asoc = sctp_id2assoc(sk, associd);
   5414	if (!asoc) {
   5415		retval = -EINVAL;
   5416		goto out;
   5417	}
   5418
   5419	transport = asoc->peer.primary_path;
   5420
   5421	status.sstat_assoc_id = sctp_assoc2id(asoc);
   5422	status.sstat_state = sctp_assoc_to_state(asoc);
   5423	status.sstat_rwnd =  asoc->peer.rwnd;
   5424	status.sstat_unackdata = asoc->unack_data;
   5425
   5426	status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map);
   5427	status.sstat_instrms = asoc->stream.incnt;
   5428	status.sstat_outstrms = asoc->stream.outcnt;
   5429	status.sstat_fragmentation_point = asoc->frag_point;
   5430	status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
   5431	memcpy(&status.sstat_primary.spinfo_address, &transport->ipaddr,
   5432			transport->af_specific->sockaddr_len);
   5433	/* Map ipv4 address into v4-mapped-on-v6 address.  */
   5434	sctp_get_pf_specific(sk->sk_family)->addr_to_user(sctp_sk(sk),
   5435		(union sctp_addr *)&status.sstat_primary.spinfo_address);
   5436	status.sstat_primary.spinfo_state = transport->state;
   5437	status.sstat_primary.spinfo_cwnd = transport->cwnd;
   5438	status.sstat_primary.spinfo_srtt = transport->srtt;
   5439	status.sstat_primary.spinfo_rto = jiffies_to_msecs(transport->rto);
   5440	status.sstat_primary.spinfo_mtu = transport->pathmtu;
   5441
   5442	if (status.sstat_primary.spinfo_state == SCTP_UNKNOWN)
   5443		status.sstat_primary.spinfo_state = SCTP_ACTIVE;
   5444
   5445	if (put_user(len, optlen)) {
   5446		retval = -EFAULT;
   5447		goto out;
   5448	}
   5449
   5450	pr_debug("%s: len:%d, state:%d, rwnd:%d, assoc_id:%d\n",
   5451		 __func__, len, status.sstat_state, status.sstat_rwnd,
   5452		 status.sstat_assoc_id);
   5453
   5454	if (copy_to_user(optval, &status, len)) {
   5455		retval = -EFAULT;
   5456		goto out;
   5457	}
   5458
   5459out:
   5460	return retval;
   5461}
   5462
   5463
   5464/* 7.2.2 Peer Address Information (SCTP_GET_PEER_ADDR_INFO)
   5465 *
   5466 * Applications can retrieve information about a specific peer address
   5467 * of an association, including its reachability state, congestion
   5468 * window, and retransmission timer values.  This information is
   5469 * read-only.
   5470 */
   5471static int sctp_getsockopt_peer_addr_info(struct sock *sk, int len,
   5472					  char __user *optval,
   5473					  int __user *optlen)
   5474{
   5475	struct sctp_paddrinfo pinfo;
   5476	struct sctp_transport *transport;
   5477	int retval = 0;
   5478
   5479	if (len < sizeof(pinfo)) {
   5480		retval = -EINVAL;
   5481		goto out;
   5482	}
   5483
   5484	len = sizeof(pinfo);
   5485	if (copy_from_user(&pinfo, optval, len)) {
   5486		retval = -EFAULT;
   5487		goto out;
   5488	}
   5489
   5490	transport = sctp_addr_id2transport(sk, &pinfo.spinfo_address,
   5491					   pinfo.spinfo_assoc_id);
   5492	if (!transport) {
   5493		retval = -EINVAL;
   5494		goto out;
   5495	}
   5496
   5497	if (transport->state == SCTP_PF &&
   5498	    transport->asoc->pf_expose == SCTP_PF_EXPOSE_DISABLE) {
   5499		retval = -EACCES;
   5500		goto out;
   5501	}
   5502
   5503	pinfo.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
   5504	pinfo.spinfo_state = transport->state;
   5505	pinfo.spinfo_cwnd = transport->cwnd;
   5506	pinfo.spinfo_srtt = transport->srtt;
   5507	pinfo.spinfo_rto = jiffies_to_msecs(transport->rto);
   5508	pinfo.spinfo_mtu = transport->pathmtu;
   5509
   5510	if (pinfo.spinfo_state == SCTP_UNKNOWN)
   5511		pinfo.spinfo_state = SCTP_ACTIVE;
   5512
   5513	if (put_user(len, optlen)) {
   5514		retval = -EFAULT;
   5515		goto out;
   5516	}
   5517
   5518	if (copy_to_user(optval, &pinfo, len)) {
   5519		retval = -EFAULT;
   5520		goto out;
   5521	}
   5522
   5523out:
   5524	return retval;
   5525}
   5526
   5527/* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS)
   5528 *
   5529 * This option is a on/off flag.  If enabled no SCTP message
   5530 * fragmentation will be performed.  Instead if a message being sent
   5531 * exceeds the current PMTU size, the message will NOT be sent and
   5532 * instead a error will be indicated to the user.
   5533 */
   5534static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
   5535					char __user *optval, int __user *optlen)
   5536{
   5537	int val;
   5538
   5539	if (len < sizeof(int))
   5540		return -EINVAL;
   5541
   5542	len = sizeof(int);
   5543	val = (sctp_sk(sk)->disable_fragments == 1);
   5544	if (put_user(len, optlen))
   5545		return -EFAULT;
   5546	if (copy_to_user(optval, &val, len))
   5547		return -EFAULT;
   5548	return 0;
   5549}
   5550
   5551/* 7.1.15 Set notification and ancillary events (SCTP_EVENTS)
   5552 *
   5553 * This socket option is used to specify various notifications and
   5554 * ancillary data the user wishes to receive.
   5555 */
   5556static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
   5557				  int __user *optlen)
   5558{
   5559	struct sctp_event_subscribe subscribe;
   5560	__u8 *sn_type = (__u8 *)&subscribe;
   5561	int i;
   5562
   5563	if (len == 0)
   5564		return -EINVAL;
   5565	if (len > sizeof(struct sctp_event_subscribe))
   5566		len = sizeof(struct sctp_event_subscribe);
   5567	if (put_user(len, optlen))
   5568		return -EFAULT;
   5569
   5570	for (i = 0; i < len; i++)
   5571		sn_type[i] = sctp_ulpevent_type_enabled(sctp_sk(sk)->subscribe,
   5572							SCTP_SN_TYPE_BASE + i);
   5573
   5574	if (copy_to_user(optval, &subscribe, len))
   5575		return -EFAULT;
   5576
   5577	return 0;
   5578}
   5579
   5580/* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE)
   5581 *
   5582 * This socket option is applicable to the UDP-style socket only.  When
   5583 * set it will cause associations that are idle for more than the
   5584 * specified number of seconds to automatically close.  An association
   5585 * being idle is defined an association that has NOT sent or received
   5586 * user data.  The special value of '0' indicates that no automatic
   5587 * close of any associations should be performed.  The option expects an
   5588 * integer defining the number of seconds of idle time before an
   5589 * association is closed.
   5590 */
   5591static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen)
   5592{
   5593	/* Applicable to UDP-style socket only */
   5594	if (sctp_style(sk, TCP))
   5595		return -EOPNOTSUPP;
   5596	if (len < sizeof(int))
   5597		return -EINVAL;
   5598	len = sizeof(int);
   5599	if (put_user(len, optlen))
   5600		return -EFAULT;
   5601	if (put_user(sctp_sk(sk)->autoclose, (int __user *)optval))
   5602		return -EFAULT;
   5603	return 0;
   5604}
   5605
   5606/* Helper routine to branch off an association to a new socket.  */
   5607int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id, struct socket **sockp)
   5608{
   5609	struct sctp_association *asoc = sctp_id2assoc(sk, id);
   5610	struct sctp_sock *sp = sctp_sk(sk);
   5611	struct socket *sock;
   5612	int err = 0;
   5613
   5614	/* Do not peel off from one netns to another one. */
   5615	if (!net_eq(current->nsproxy->net_ns, sock_net(sk)))
   5616		return -EINVAL;
   5617
   5618	if (!asoc)
   5619		return -EINVAL;
   5620
   5621	/* An association cannot be branched off from an already peeled-off
   5622	 * socket, nor is this supported for tcp style sockets.
   5623	 */
   5624	if (!sctp_style(sk, UDP))
   5625		return -EINVAL;
   5626
   5627	/* Create a new socket.  */
   5628	err = sock_create(sk->sk_family, SOCK_SEQPACKET, IPPROTO_SCTP, &sock);
   5629	if (err < 0)
   5630		return err;
   5631
   5632	sctp_copy_sock(sock->sk, sk, asoc);
   5633
   5634	/* Make peeled-off sockets more like 1-1 accepted sockets.
   5635	 * Set the daddr and initialize id to something more random and also
   5636	 * copy over any ip options.
   5637	 */
   5638	sp->pf->to_sk_daddr(&asoc->peer.primary_addr, sock->sk);
   5639	sp->pf->copy_ip_options(sk, sock->sk);
   5640
   5641	/* Populate the fields of the newsk from the oldsk and migrate the
   5642	 * asoc to the newsk.
   5643	 */
   5644	err = sctp_sock_migrate(sk, sock->sk, asoc,
   5645				SCTP_SOCKET_UDP_HIGH_BANDWIDTH);
   5646	if (err) {
   5647		sock_release(sock);
   5648		sock = NULL;
   5649	}
   5650
   5651	*sockp = sock;
   5652
   5653	return err;
   5654}
   5655EXPORT_SYMBOL(sctp_do_peeloff);
   5656
   5657static int sctp_getsockopt_peeloff_common(struct sock *sk, sctp_peeloff_arg_t *peeloff,
   5658					  struct file **newfile, unsigned flags)
   5659{
   5660	struct socket *newsock;
   5661	int retval;
   5662
   5663	retval = sctp_do_peeloff(sk, peeloff->associd, &newsock);
   5664	if (retval < 0)
   5665		goto out;
   5666
   5667	/* Map the socket to an unused fd that can be returned to the user.  */
   5668	retval = get_unused_fd_flags(flags & SOCK_CLOEXEC);
   5669	if (retval < 0) {
   5670		sock_release(newsock);
   5671		goto out;
   5672	}
   5673
   5674	*newfile = sock_alloc_file(newsock, 0, NULL);
   5675	if (IS_ERR(*newfile)) {
   5676		put_unused_fd(retval);
   5677		retval = PTR_ERR(*newfile);
   5678		*newfile = NULL;
   5679		return retval;
   5680	}
   5681
   5682	pr_debug("%s: sk:%p, newsk:%p, sd:%d\n", __func__, sk, newsock->sk,
   5683		 retval);
   5684
   5685	peeloff->sd = retval;
   5686
   5687	if (flags & SOCK_NONBLOCK)
   5688		(*newfile)->f_flags |= O_NONBLOCK;
   5689out:
   5690	return retval;
   5691}
   5692
   5693static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval, int __user *optlen)
   5694{
   5695	sctp_peeloff_arg_t peeloff;
   5696	struct file *newfile = NULL;
   5697	int retval = 0;
   5698
   5699	if (len < sizeof(sctp_peeloff_arg_t))
   5700		return -EINVAL;
   5701	len = sizeof(sctp_peeloff_arg_t);
   5702	if (copy_from_user(&peeloff, optval, len))
   5703		return -EFAULT;
   5704
   5705	retval = sctp_getsockopt_peeloff_common(sk, &peeloff, &newfile, 0);
   5706	if (retval < 0)
   5707		goto out;
   5708
   5709	/* Return the fd mapped to the new socket.  */
   5710	if (put_user(len, optlen)) {
   5711		fput(newfile);
   5712		put_unused_fd(retval);
   5713		return -EFAULT;
   5714	}
   5715
   5716	if (copy_to_user(optval, &peeloff, len)) {
   5717		fput(newfile);
   5718		put_unused_fd(retval);
   5719		return -EFAULT;
   5720	}
   5721	fd_install(retval, newfile);
   5722out:
   5723	return retval;
   5724}
   5725
   5726static int sctp_getsockopt_peeloff_flags(struct sock *sk, int len,
   5727					 char __user *optval, int __user *optlen)
   5728{
   5729	sctp_peeloff_flags_arg_t peeloff;
   5730	struct file *newfile = NULL;
   5731	int retval = 0;
   5732
   5733	if (len < sizeof(sctp_peeloff_flags_arg_t))
   5734		return -EINVAL;
   5735	len = sizeof(sctp_peeloff_flags_arg_t);
   5736	if (copy_from_user(&peeloff, optval, len))
   5737		return -EFAULT;
   5738
   5739	retval = sctp_getsockopt_peeloff_common(sk, &peeloff.p_arg,
   5740						&newfile, peeloff.flags);
   5741	if (retval < 0)
   5742		goto out;
   5743
   5744	/* Return the fd mapped to the new socket.  */
   5745	if (put_user(len, optlen)) {
   5746		fput(newfile);
   5747		put_unused_fd(retval);
   5748		return -EFAULT;
   5749	}
   5750
   5751	if (copy_to_user(optval, &peeloff, len)) {
   5752		fput(newfile);
   5753		put_unused_fd(retval);
   5754		return -EFAULT;
   5755	}
   5756	fd_install(retval, newfile);
   5757out:
   5758	return retval;
   5759}
   5760
   5761/* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS)
   5762 *
   5763 * Applications can enable or disable heartbeats for any peer address of
   5764 * an association, modify an address's heartbeat interval, force a
   5765 * heartbeat to be sent immediately, and adjust the address's maximum
   5766 * number of retransmissions sent before an address is considered
   5767 * unreachable.  The following structure is used to access and modify an
   5768 * address's parameters:
   5769 *
   5770 *  struct sctp_paddrparams {
   5771 *     sctp_assoc_t            spp_assoc_id;
   5772 *     struct sockaddr_storage spp_address;
   5773 *     uint32_t                spp_hbinterval;
   5774 *     uint16_t                spp_pathmaxrxt;
   5775 *     uint32_t                spp_pathmtu;
   5776 *     uint32_t                spp_sackdelay;
   5777 *     uint32_t                spp_flags;
   5778 * };
   5779 *
   5780 *   spp_assoc_id    - (one-to-many style socket) This is filled in the
   5781 *                     application, and identifies the association for
   5782 *                     this query.
   5783 *   spp_address     - This specifies which address is of interest.
   5784 *   spp_hbinterval  - This contains the value of the heartbeat interval,
   5785 *                     in milliseconds.  If a  value of zero
   5786 *                     is present in this field then no changes are to
   5787 *                     be made to this parameter.
   5788 *   spp_pathmaxrxt  - This contains the maximum number of
   5789 *                     retransmissions before this address shall be
   5790 *                     considered unreachable. If a  value of zero
   5791 *                     is present in this field then no changes are to
   5792 *                     be made to this parameter.
   5793 *   spp_pathmtu     - When Path MTU discovery is disabled the value
   5794 *                     specified here will be the "fixed" path mtu.
   5795 *                     Note that if the spp_address field is empty
   5796 *                     then all associations on this address will
   5797 *                     have this fixed path mtu set upon them.
   5798 *
   5799 *   spp_sackdelay   - When delayed sack is enabled, this value specifies
   5800 *                     the number of milliseconds that sacks will be delayed
   5801 *                     for. This value will apply to all addresses of an
   5802 *                     association if the spp_address field is empty. Note
   5803 *                     also, that if delayed sack is enabled and this
   5804 *                     value is set to 0, no change is made to the last
   5805 *                     recorded delayed sack timer value.
   5806 *
   5807 *   spp_flags       - These flags are used to control various features
   5808 *                     on an association. The flag field may contain
   5809 *                     zero or more of the following options.
   5810 *
   5811 *                     SPP_HB_ENABLE  - Enable heartbeats on the
   5812 *                     specified address. Note that if the address
   5813 *                     field is empty all addresses for the association
   5814 *                     have heartbeats enabled upon them.
   5815 *
   5816 *                     SPP_HB_DISABLE - Disable heartbeats on the
   5817 *                     speicifed address. Note that if the address
   5818 *                     field is empty all addresses for the association
   5819 *                     will have their heartbeats disabled. Note also
   5820 *                     that SPP_HB_ENABLE and SPP_HB_DISABLE are
   5821 *                     mutually exclusive, only one of these two should
   5822 *                     be specified. Enabling both fields will have
   5823 *                     undetermined results.
   5824 *
   5825 *                     SPP_HB_DEMAND - Request a user initiated heartbeat
   5826 *                     to be made immediately.
   5827 *
   5828 *                     SPP_PMTUD_ENABLE - This field will enable PMTU
   5829 *                     discovery upon the specified address. Note that
   5830 *                     if the address feild is empty then all addresses
   5831 *                     on the association are effected.
   5832 *
   5833 *                     SPP_PMTUD_DISABLE - This field will disable PMTU
   5834 *                     discovery upon the specified address. Note that
   5835 *                     if the address feild is empty then all addresses
   5836 *                     on the association are effected. Not also that
   5837 *                     SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually
   5838 *                     exclusive. Enabling both will have undetermined
   5839 *                     results.
   5840 *
   5841 *                     SPP_SACKDELAY_ENABLE - Setting this flag turns
   5842 *                     on delayed sack. The time specified in spp_sackdelay
   5843 *                     is used to specify the sack delay for this address. Note
   5844 *                     that if spp_address is empty then all addresses will
   5845 *                     enable delayed sack and take on the sack delay
   5846 *                     value specified in spp_sackdelay.
   5847 *                     SPP_SACKDELAY_DISABLE - Setting this flag turns
   5848 *                     off delayed sack. If the spp_address field is blank then
   5849 *                     delayed sack is disabled for the entire association. Note
   5850 *                     also that this field is mutually exclusive to
   5851 *                     SPP_SACKDELAY_ENABLE, setting both will have undefined
   5852 *                     results.
   5853 *
   5854 *                     SPP_IPV6_FLOWLABEL:  Setting this flag enables the
   5855 *                     setting of the IPV6 flow label value.  The value is
   5856 *                     contained in the spp_ipv6_flowlabel field.
   5857 *                     Upon retrieval, this flag will be set to indicate that
   5858 *                     the spp_ipv6_flowlabel field has a valid value returned.
   5859 *                     If a specific destination address is set (in the
   5860 *                     spp_address field), then the value returned is that of
   5861 *                     the address.  If just an association is specified (and
   5862 *                     no address), then the association's default flow label
   5863 *                     is returned.  If neither an association nor a destination
   5864 *                     is specified, then the socket's default flow label is
   5865 *                     returned.  For non-IPv6 sockets, this flag will be left
   5866 *                     cleared.
   5867 *
   5868 *                     SPP_DSCP:  Setting this flag enables the setting of the
   5869 *                     Differentiated Services Code Point (DSCP) value
   5870 *                     associated with either the association or a specific
   5871 *                     address.  The value is obtained in the spp_dscp field.
   5872 *                     Upon retrieval, this flag will be set to indicate that
   5873 *                     the spp_dscp field has a valid value returned.  If a
   5874 *                     specific destination address is set when called (in the
   5875 *                     spp_address field), then that specific destination
   5876 *                     address's DSCP value is returned.  If just an association
   5877 *                     is specified, then the association's default DSCP is
   5878 *                     returned.  If neither an association nor a destination is
   5879 *                     specified, then the socket's default DSCP is returned.
   5880 *
   5881 *   spp_ipv6_flowlabel
   5882 *                   - This field is used in conjunction with the
   5883 *                     SPP_IPV6_FLOWLABEL flag and contains the IPv6 flow label.
   5884 *                     The 20 least significant bits are used for the flow
   5885 *                     label.  This setting has precedence over any IPv6-layer
   5886 *                     setting.
   5887 *
   5888 *   spp_dscp        - This field is used in conjunction with the SPP_DSCP flag
   5889 *                     and contains the DSCP.  The 6 most significant bits are
   5890 *                     used for the DSCP.  This setting has precedence over any
   5891 *                     IPv4- or IPv6- layer setting.
   5892 */
   5893static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len,
   5894					    char __user *optval, int __user *optlen)
   5895{
   5896	struct sctp_paddrparams  params;
   5897	struct sctp_transport   *trans = NULL;
   5898	struct sctp_association *asoc = NULL;
   5899	struct sctp_sock        *sp = sctp_sk(sk);
   5900
   5901	if (len >= sizeof(params))
   5902		len = sizeof(params);
   5903	else if (len >= ALIGN(offsetof(struct sctp_paddrparams,
   5904				       spp_ipv6_flowlabel), 4))
   5905		len = ALIGN(offsetof(struct sctp_paddrparams,
   5906				     spp_ipv6_flowlabel), 4);
   5907	else
   5908		return -EINVAL;
   5909
   5910	if (copy_from_user(&params, optval, len))
   5911		return -EFAULT;
   5912
   5913	/* If an address other than INADDR_ANY is specified, and
   5914	 * no transport is found, then the request is invalid.
   5915	 */
   5916	if (!sctp_is_any(sk, (union sctp_addr *)&params.spp_address)) {
   5917		trans = sctp_addr_id2transport(sk, &params.spp_address,
   5918					       params.spp_assoc_id);
   5919		if (!trans) {
   5920			pr_debug("%s: failed no transport\n", __func__);
   5921			return -EINVAL;
   5922		}
   5923	}
   5924
   5925	/* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the
   5926	 * socket is a one to many style socket, and an association
   5927	 * was not found, then the id was invalid.
   5928	 */
   5929	asoc = sctp_id2assoc(sk, params.spp_assoc_id);
   5930	if (!asoc && params.spp_assoc_id != SCTP_FUTURE_ASSOC &&
   5931	    sctp_style(sk, UDP)) {
   5932		pr_debug("%s: failed no association\n", __func__);
   5933		return -EINVAL;
   5934	}
   5935
   5936	if (trans) {
   5937		/* Fetch transport values. */
   5938		params.spp_hbinterval = jiffies_to_msecs(trans->hbinterval);
   5939		params.spp_pathmtu    = trans->pathmtu;
   5940		params.spp_pathmaxrxt = trans->pathmaxrxt;
   5941		params.spp_sackdelay  = jiffies_to_msecs(trans->sackdelay);
   5942
   5943		/*draft-11 doesn't say what to return in spp_flags*/
   5944		params.spp_flags      = trans->param_flags;
   5945		if (trans->flowlabel & SCTP_FLOWLABEL_SET_MASK) {
   5946			params.spp_ipv6_flowlabel = trans->flowlabel &
   5947						    SCTP_FLOWLABEL_VAL_MASK;
   5948			params.spp_flags |= SPP_IPV6_FLOWLABEL;
   5949		}
   5950		if (trans->dscp & SCTP_DSCP_SET_MASK) {
   5951			params.spp_dscp	= trans->dscp & SCTP_DSCP_VAL_MASK;
   5952			params.spp_flags |= SPP_DSCP;
   5953		}
   5954	} else if (asoc) {
   5955		/* Fetch association values. */
   5956		params.spp_hbinterval = jiffies_to_msecs(asoc->hbinterval);
   5957		params.spp_pathmtu    = asoc->pathmtu;
   5958		params.spp_pathmaxrxt = asoc->pathmaxrxt;
   5959		params.spp_sackdelay  = jiffies_to_msecs(asoc->sackdelay);
   5960
   5961		/*draft-11 doesn't say what to return in spp_flags*/
   5962		params.spp_flags      = asoc->param_flags;
   5963		if (asoc->flowlabel & SCTP_FLOWLABEL_SET_MASK) {
   5964			params.spp_ipv6_flowlabel = asoc->flowlabel &
   5965						    SCTP_FLOWLABEL_VAL_MASK;
   5966			params.spp_flags |= SPP_IPV6_FLOWLABEL;
   5967		}
   5968		if (asoc->dscp & SCTP_DSCP_SET_MASK) {
   5969			params.spp_dscp	= asoc->dscp & SCTP_DSCP_VAL_MASK;
   5970			params.spp_flags |= SPP_DSCP;
   5971		}
   5972	} else {
   5973		/* Fetch socket values. */
   5974		params.spp_hbinterval = sp->hbinterval;
   5975		params.spp_pathmtu    = sp->pathmtu;
   5976		params.spp_sackdelay  = sp->sackdelay;
   5977		params.spp_pathmaxrxt = sp->pathmaxrxt;
   5978
   5979		/*draft-11 doesn't say what to return in spp_flags*/
   5980		params.spp_flags      = sp->param_flags;
   5981		if (sp->flowlabel & SCTP_FLOWLABEL_SET_MASK) {
   5982			params.spp_ipv6_flowlabel = sp->flowlabel &
   5983						    SCTP_FLOWLABEL_VAL_MASK;
   5984			params.spp_flags |= SPP_IPV6_FLOWLABEL;
   5985		}
   5986		if (sp->dscp & SCTP_DSCP_SET_MASK) {
   5987			params.spp_dscp	= sp->dscp & SCTP_DSCP_VAL_MASK;
   5988			params.spp_flags |= SPP_DSCP;
   5989		}
   5990	}
   5991
   5992	if (copy_to_user(optval, &params, len))
   5993		return -EFAULT;
   5994
   5995	if (put_user(len, optlen))
   5996		return -EFAULT;
   5997
   5998	return 0;
   5999}
   6000
   6001/*
   6002 * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
   6003 *
   6004 * This option will effect the way delayed acks are performed.  This
   6005 * option allows you to get or set the delayed ack time, in
   6006 * milliseconds.  It also allows changing the delayed ack frequency.
   6007 * Changing the frequency to 1 disables the delayed sack algorithm.  If
   6008 * the assoc_id is 0, then this sets or gets the endpoints default
   6009 * values.  If the assoc_id field is non-zero, then the set or get
   6010 * effects the specified association for the one to many model (the
   6011 * assoc_id field is ignored by the one to one model).  Note that if
   6012 * sack_delay or sack_freq are 0 when setting this option, then the
   6013 * current values will remain unchanged.
   6014 *
   6015 * struct sctp_sack_info {
   6016 *     sctp_assoc_t            sack_assoc_id;
   6017 *     uint32_t                sack_delay;
   6018 *     uint32_t                sack_freq;
   6019 * };
   6020 *
   6021 * sack_assoc_id -  This parameter, indicates which association the user
   6022 *    is performing an action upon.  Note that if this field's value is
   6023 *    zero then the endpoints default value is changed (effecting future
   6024 *    associations only).
   6025 *
   6026 * sack_delay -  This parameter contains the number of milliseconds that
   6027 *    the user is requesting the delayed ACK timer be set to.  Note that
   6028 *    this value is defined in the standard to be between 200 and 500
   6029 *    milliseconds.
   6030 *
   6031 * sack_freq -  This parameter contains the number of packets that must
   6032 *    be received before a sack is sent without waiting for the delay
   6033 *    timer to expire.  The default value for this is 2, setting this
   6034 *    value to 1 will disable the delayed sack algorithm.
   6035 */
   6036static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
   6037					    char __user *optval,
   6038					    int __user *optlen)
   6039{
   6040	struct sctp_sack_info    params;
   6041	struct sctp_association *asoc = NULL;
   6042	struct sctp_sock        *sp = sctp_sk(sk);
   6043
   6044	if (len >= sizeof(struct sctp_sack_info)) {
   6045		len = sizeof(struct sctp_sack_info);
   6046
   6047		if (copy_from_user(&params, optval, len))
   6048			return -EFAULT;
   6049	} else if (len == sizeof(struct sctp_assoc_value)) {
   6050		pr_warn_ratelimited(DEPRECATED
   6051				    "%s (pid %d) "
   6052				    "Use of struct sctp_assoc_value in delayed_ack socket option.\n"
   6053				    "Use struct sctp_sack_info instead\n",
   6054				    current->comm, task_pid_nr(current));
   6055		if (copy_from_user(&params, optval, len))
   6056			return -EFAULT;
   6057	} else
   6058		return -EINVAL;
   6059
   6060	/* Get association, if sack_assoc_id != SCTP_FUTURE_ASSOC and the
   6061	 * socket is a one to many style socket, and an association
   6062	 * was not found, then the id was invalid.
   6063	 */
   6064	asoc = sctp_id2assoc(sk, params.sack_assoc_id);
   6065	if (!asoc && params.sack_assoc_id != SCTP_FUTURE_ASSOC &&
   6066	    sctp_style(sk, UDP))
   6067		return -EINVAL;
   6068
   6069	if (asoc) {
   6070		/* Fetch association values. */
   6071		if (asoc->param_flags & SPP_SACKDELAY_ENABLE) {
   6072			params.sack_delay = jiffies_to_msecs(asoc->sackdelay);
   6073			params.sack_freq = asoc->sackfreq;
   6074
   6075		} else {
   6076			params.sack_delay = 0;
   6077			params.sack_freq = 1;
   6078		}
   6079	} else {
   6080		/* Fetch socket values. */
   6081		if (sp->param_flags & SPP_SACKDELAY_ENABLE) {
   6082			params.sack_delay  = sp->sackdelay;
   6083			params.sack_freq = sp->sackfreq;
   6084		} else {
   6085			params.sack_delay  = 0;
   6086			params.sack_freq = 1;
   6087		}
   6088	}
   6089
   6090	if (copy_to_user(optval, &params, len))
   6091		return -EFAULT;
   6092
   6093	if (put_user(len, optlen))
   6094		return -EFAULT;
   6095
   6096	return 0;
   6097}
   6098
   6099/* 7.1.3 Initialization Parameters (SCTP_INITMSG)
   6100 *
   6101 * Applications can specify protocol parameters for the default association
   6102 * initialization.  The option name argument to setsockopt() and getsockopt()
   6103 * is SCTP_INITMSG.
   6104 *
   6105 * Setting initialization parameters is effective only on an unconnected
   6106 * socket (for UDP-style sockets only future associations are effected
   6107 * by the change).  With TCP-style sockets, this option is inherited by
   6108 * sockets derived from a listener socket.
   6109 */
   6110static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen)
   6111{
   6112	if (len < sizeof(struct sctp_initmsg))
   6113		return -EINVAL;
   6114	len = sizeof(struct sctp_initmsg);
   6115	if (put_user(len, optlen))
   6116		return -EFAULT;
   6117	if (copy_to_user(optval, &sctp_sk(sk)->initmsg, len))
   6118		return -EFAULT;
   6119	return 0;
   6120}
   6121
   6122
   6123static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
   6124				      char __user *optval, int __user *optlen)
   6125{
   6126	struct sctp_association *asoc;
   6127	int cnt = 0;
   6128	struct sctp_getaddrs getaddrs;
   6129	struct sctp_transport *from;
   6130	void __user *to;
   6131	union sctp_addr temp;
   6132	struct sctp_sock *sp = sctp_sk(sk);
   6133	int addrlen;
   6134	size_t space_left;
   6135	int bytes_copied;
   6136
   6137	if (len < sizeof(struct sctp_getaddrs))
   6138		return -EINVAL;
   6139
   6140	if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs)))
   6141		return -EFAULT;
   6142
   6143	/* For UDP-style sockets, id specifies the association to query.  */
   6144	asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
   6145	if (!asoc)
   6146		return -EINVAL;
   6147
   6148	to = optval + offsetof(struct sctp_getaddrs, addrs);
   6149	space_left = len - offsetof(struct sctp_getaddrs, addrs);
   6150
   6151	list_for_each_entry(from, &asoc->peer.transport_addr_list,
   6152				transports) {
   6153		memcpy(&temp, &from->ipaddr, sizeof(temp));
   6154		addrlen = sctp_get_pf_specific(sk->sk_family)
   6155			      ->addr_to_user(sp, &temp);
   6156		if (space_left < addrlen)
   6157			return -ENOMEM;
   6158		if (copy_to_user(to, &temp, addrlen))
   6159			return -EFAULT;
   6160		to += addrlen;
   6161		cnt++;
   6162		space_left -= addrlen;
   6163	}
   6164
   6165	if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num))
   6166		return -EFAULT;
   6167	bytes_copied = ((char __user *)to) - optval;
   6168	if (put_user(bytes_copied, optlen))
   6169		return -EFAULT;
   6170
   6171	return 0;
   6172}
   6173
   6174static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to,
   6175			    size_t space_left, int *bytes_copied)
   6176{
   6177	struct sctp_sockaddr_entry *addr;
   6178	union sctp_addr temp;
   6179	int cnt = 0;
   6180	int addrlen;
   6181	struct net *net = sock_net(sk);
   6182
   6183	rcu_read_lock();
   6184	list_for_each_entry_rcu(addr, &net->sctp.local_addr_list, list) {
   6185		if (!addr->valid)
   6186			continue;
   6187
   6188		if ((PF_INET == sk->sk_family) &&
   6189		    (AF_INET6 == addr->a.sa.sa_family))
   6190			continue;
   6191		if ((PF_INET6 == sk->sk_family) &&
   6192		    inet_v6_ipv6only(sk) &&
   6193		    (AF_INET == addr->a.sa.sa_family))
   6194			continue;
   6195		memcpy(&temp, &addr->a, sizeof(temp));
   6196		if (!temp.v4.sin_port)
   6197			temp.v4.sin_port = htons(port);
   6198
   6199		addrlen = sctp_get_pf_specific(sk->sk_family)
   6200			      ->addr_to_user(sctp_sk(sk), &temp);
   6201
   6202		if (space_left < addrlen) {
   6203			cnt =  -ENOMEM;
   6204			break;
   6205		}
   6206		memcpy(to, &temp, addrlen);
   6207
   6208		to += addrlen;
   6209		cnt++;
   6210		space_left -= addrlen;
   6211		*bytes_copied += addrlen;
   6212	}
   6213	rcu_read_unlock();
   6214
   6215	return cnt;
   6216}
   6217
   6218
   6219static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
   6220				       char __user *optval, int __user *optlen)
   6221{
   6222	struct sctp_bind_addr *bp;
   6223	struct sctp_association *asoc;
   6224	int cnt = 0;
   6225	struct sctp_getaddrs getaddrs;
   6226	struct sctp_sockaddr_entry *addr;
   6227	void __user *to;
   6228	union sctp_addr temp;
   6229	struct sctp_sock *sp = sctp_sk(sk);
   6230	int addrlen;
   6231	int err = 0;
   6232	size_t space_left;
   6233	int bytes_copied = 0;
   6234	void *addrs;
   6235	void *buf;
   6236
   6237	if (len < sizeof(struct sctp_getaddrs))
   6238		return -EINVAL;
   6239
   6240	if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs)))
   6241		return -EFAULT;
   6242
   6243	/*
   6244	 *  For UDP-style sockets, id specifies the association to query.
   6245	 *  If the id field is set to the value '0' then the locally bound
   6246	 *  addresses are returned without regard to any particular
   6247	 *  association.
   6248	 */
   6249	if (0 == getaddrs.assoc_id) {
   6250		bp = &sctp_sk(sk)->ep->base.bind_addr;
   6251	} else {
   6252		asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
   6253		if (!asoc)
   6254			return -EINVAL;
   6255		bp = &asoc->base.bind_addr;
   6256	}
   6257
   6258	to = optval + offsetof(struct sctp_getaddrs, addrs);
   6259	space_left = len - offsetof(struct sctp_getaddrs, addrs);
   6260
   6261	addrs = kmalloc(space_left, GFP_USER | __GFP_NOWARN);
   6262	if (!addrs)
   6263		return -ENOMEM;
   6264
   6265	/* If the endpoint is bound to 0.0.0.0 or ::0, get the valid
   6266	 * addresses from the global local address list.
   6267	 */
   6268	if (sctp_list_single_entry(&bp->address_list)) {
   6269		addr = list_entry(bp->address_list.next,
   6270				  struct sctp_sockaddr_entry, list);
   6271		if (sctp_is_any(sk, &addr->a)) {
   6272			cnt = sctp_copy_laddrs(sk, bp->port, addrs,
   6273						space_left, &bytes_copied);
   6274			if (cnt < 0) {
   6275				err = cnt;
   6276				goto out;
   6277			}
   6278			goto copy_getaddrs;
   6279		}
   6280	}
   6281
   6282	buf = addrs;
   6283	/* Protection on the bound address list is not needed since
   6284	 * in the socket option context we hold a socket lock and
   6285	 * thus the bound address list can't change.
   6286	 */
   6287	list_for_each_entry(addr, &bp->address_list, list) {
   6288		memcpy(&temp, &addr->a, sizeof(temp));
   6289		addrlen = sctp_get_pf_specific(sk->sk_family)
   6290			      ->addr_to_user(sp, &temp);
   6291		if (space_left < addrlen) {
   6292			err =  -ENOMEM; /*fixme: right error?*/
   6293			goto out;
   6294		}
   6295		memcpy(buf, &temp, addrlen);
   6296		buf += addrlen;
   6297		bytes_copied += addrlen;
   6298		cnt++;
   6299		space_left -= addrlen;
   6300	}
   6301
   6302copy_getaddrs:
   6303	if (copy_to_user(to, addrs, bytes_copied)) {
   6304		err = -EFAULT;
   6305		goto out;
   6306	}
   6307	if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) {
   6308		err = -EFAULT;
   6309		goto out;
   6310	}
   6311	/* XXX: We should have accounted for sizeof(struct sctp_getaddrs) too,
   6312	 * but we can't change it anymore.
   6313	 */
   6314	if (put_user(bytes_copied, optlen))
   6315		err = -EFAULT;
   6316out:
   6317	kfree(addrs);
   6318	return err;
   6319}
   6320
   6321/* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
   6322 *
   6323 * Requests that the local SCTP stack use the enclosed peer address as
   6324 * the association primary.  The enclosed address must be one of the
   6325 * association peer's addresses.
   6326 */
   6327static int sctp_getsockopt_primary_addr(struct sock *sk, int len,
   6328					char __user *optval, int __user *optlen)
   6329{
   6330	struct sctp_prim prim;
   6331	struct sctp_association *asoc;
   6332	struct sctp_sock *sp = sctp_sk(sk);
   6333
   6334	if (len < sizeof(struct sctp_prim))
   6335		return -EINVAL;
   6336
   6337	len = sizeof(struct sctp_prim);
   6338
   6339	if (copy_from_user(&prim, optval, len))
   6340		return -EFAULT;
   6341
   6342	asoc = sctp_id2assoc(sk, prim.ssp_assoc_id);
   6343	if (!asoc)
   6344		return -EINVAL;
   6345
   6346	if (!asoc->peer.primary_path)
   6347		return -ENOTCONN;
   6348
   6349	memcpy(&prim.ssp_addr, &asoc->peer.primary_path->ipaddr,
   6350		asoc->peer.primary_path->af_specific->sockaddr_len);
   6351
   6352	sctp_get_pf_specific(sk->sk_family)->addr_to_user(sp,
   6353			(union sctp_addr *)&prim.ssp_addr);
   6354
   6355	if (put_user(len, optlen))
   6356		return -EFAULT;
   6357	if (copy_to_user(optval, &prim, len))
   6358		return -EFAULT;
   6359
   6360	return 0;
   6361}
   6362
   6363/*
   6364 * 7.1.11  Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER)
   6365 *
   6366 * Requests that the local endpoint set the specified Adaptation Layer
   6367 * Indication parameter for all future INIT and INIT-ACK exchanges.
   6368 */
   6369static int sctp_getsockopt_adaptation_layer(struct sock *sk, int len,
   6370				  char __user *optval, int __user *optlen)
   6371{
   6372	struct sctp_setadaptation adaptation;
   6373
   6374	if (len < sizeof(struct sctp_setadaptation))
   6375		return -EINVAL;
   6376
   6377	len = sizeof(struct sctp_setadaptation);
   6378
   6379	adaptation.ssb_adaptation_ind = sctp_sk(sk)->adaptation_ind;
   6380
   6381	if (put_user(len, optlen))
   6382		return -EFAULT;
   6383	if (copy_to_user(optval, &adaptation, len))
   6384		return -EFAULT;
   6385
   6386	return 0;
   6387}
   6388
   6389/*
   6390 *
   6391 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM)
   6392 *
   6393 *   Applications that wish to use the sendto() system call may wish to
   6394 *   specify a default set of parameters that would normally be supplied
   6395 *   through the inclusion of ancillary data.  This socket option allows
   6396 *   such an application to set the default sctp_sndrcvinfo structure.
   6397
   6398
   6399 *   The application that wishes to use this socket option simply passes
   6400 *   in to this call the sctp_sndrcvinfo structure defined in Section
   6401 *   5.2.2) The input parameters accepted by this call include
   6402 *   sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context,
   6403 *   sinfo_timetolive.  The user must provide the sinfo_assoc_id field in
   6404 *   to this call if the caller is using the UDP model.
   6405 *
   6406 *   For getsockopt, it get the default sctp_sndrcvinfo structure.
   6407 */
   6408static int sctp_getsockopt_default_send_param(struct sock *sk,
   6409					int len, char __user *optval,
   6410					int __user *optlen)
   6411{
   6412	struct sctp_sock *sp = sctp_sk(sk);
   6413	struct sctp_association *asoc;
   6414	struct sctp_sndrcvinfo info;
   6415
   6416	if (len < sizeof(info))
   6417		return -EINVAL;
   6418
   6419	len = sizeof(info);
   6420
   6421	if (copy_from_user(&info, optval, len))
   6422		return -EFAULT;
   6423
   6424	asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
   6425	if (!asoc && info.sinfo_assoc_id != SCTP_FUTURE_ASSOC &&
   6426	    sctp_style(sk, UDP))
   6427		return -EINVAL;
   6428
   6429	if (asoc) {
   6430		info.sinfo_stream = asoc->default_stream;
   6431		info.sinfo_flags = asoc->default_flags;
   6432		info.sinfo_ppid = asoc->default_ppid;
   6433		info.sinfo_context = asoc->default_context;
   6434		info.sinfo_timetolive = asoc->default_timetolive;
   6435	} else {
   6436		info.sinfo_stream = sp->default_stream;
   6437		info.sinfo_flags = sp->default_flags;
   6438		info.sinfo_ppid = sp->default_ppid;
   6439		info.sinfo_context = sp->default_context;
   6440		info.sinfo_timetolive = sp->default_timetolive;
   6441	}
   6442
   6443	if (put_user(len, optlen))
   6444		return -EFAULT;
   6445	if (copy_to_user(optval, &info, len))
   6446		return -EFAULT;
   6447
   6448	return 0;
   6449}
   6450
   6451/* RFC6458, Section 8.1.31. Set/get Default Send Parameters
   6452 * (SCTP_DEFAULT_SNDINFO)
   6453 */
   6454static int sctp_getsockopt_default_sndinfo(struct sock *sk, int len,
   6455					   char __user *optval,
   6456					   int __user *optlen)
   6457{
   6458	struct sctp_sock *sp = sctp_sk(sk);
   6459	struct sctp_association *asoc;
   6460	struct sctp_sndinfo info;
   6461
   6462	if (len < sizeof(info))
   6463		return -EINVAL;
   6464
   6465	len = sizeof(info);
   6466
   6467	if (copy_from_user(&info, optval, len))
   6468		return -EFAULT;
   6469
   6470	asoc = sctp_id2assoc(sk, info.snd_assoc_id);
   6471	if (!asoc && info.snd_assoc_id != SCTP_FUTURE_ASSOC &&
   6472	    sctp_style(sk, UDP))
   6473		return -EINVAL;
   6474
   6475	if (asoc) {
   6476		info.snd_sid = asoc->default_stream;
   6477		info.snd_flags = asoc->default_flags;
   6478		info.snd_ppid = asoc->default_ppid;
   6479		info.snd_context = asoc->default_context;
   6480	} else {
   6481		info.snd_sid = sp->default_stream;
   6482		info.snd_flags = sp->default_flags;
   6483		info.snd_ppid = sp->default_ppid;
   6484		info.snd_context = sp->default_context;
   6485	}
   6486
   6487	if (put_user(len, optlen))
   6488		return -EFAULT;
   6489	if (copy_to_user(optval, &info, len))
   6490		return -EFAULT;
   6491
   6492	return 0;
   6493}
   6494
   6495/*
   6496 *
   6497 * 7.1.5 SCTP_NODELAY
   6498 *
   6499 * Turn on/off any Nagle-like algorithm.  This means that packets are
   6500 * generally sent as soon as possible and no unnecessary delays are
   6501 * introduced, at the cost of more packets in the network.  Expects an
   6502 * integer boolean flag.
   6503 */
   6504
   6505static int sctp_getsockopt_nodelay(struct sock *sk, int len,
   6506				   char __user *optval, int __user *optlen)
   6507{
   6508	int val;
   6509
   6510	if (len < sizeof(int))
   6511		return -EINVAL;
   6512
   6513	len = sizeof(int);
   6514	val = (sctp_sk(sk)->nodelay == 1);
   6515	if (put_user(len, optlen))
   6516		return -EFAULT;
   6517	if (copy_to_user(optval, &val, len))
   6518		return -EFAULT;
   6519	return 0;
   6520}
   6521
   6522/*
   6523 *
   6524 * 7.1.1 SCTP_RTOINFO
   6525 *
   6526 * The protocol parameters used to initialize and bound retransmission
   6527 * timeout (RTO) are tunable. sctp_rtoinfo structure is used to access
   6528 * and modify these parameters.
   6529 * All parameters are time values, in milliseconds.  A value of 0, when
   6530 * modifying the parameters, indicates that the current value should not
   6531 * be changed.
   6532 *
   6533 */
   6534static int sctp_getsockopt_rtoinfo(struct sock *sk, int len,
   6535				char __user *optval,
   6536				int __user *optlen) {
   6537	struct sctp_rtoinfo rtoinfo;
   6538	struct sctp_association *asoc;
   6539
   6540	if (len < sizeof (struct sctp_rtoinfo))
   6541		return -EINVAL;
   6542
   6543	len = sizeof(struct sctp_rtoinfo);
   6544
   6545	if (copy_from_user(&rtoinfo, optval, len))
   6546		return -EFAULT;
   6547
   6548	asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id);
   6549
   6550	if (!asoc && rtoinfo.srto_assoc_id != SCTP_FUTURE_ASSOC &&
   6551	    sctp_style(sk, UDP))
   6552		return -EINVAL;
   6553
   6554	/* Values corresponding to the specific association. */
   6555	if (asoc) {
   6556		rtoinfo.srto_initial = jiffies_to_msecs(asoc->rto_initial);
   6557		rtoinfo.srto_max = jiffies_to_msecs(asoc->rto_max);
   6558		rtoinfo.srto_min = jiffies_to_msecs(asoc->rto_min);
   6559	} else {
   6560		/* Values corresponding to the endpoint. */
   6561		struct sctp_sock *sp = sctp_sk(sk);
   6562
   6563		rtoinfo.srto_initial = sp->rtoinfo.srto_initial;
   6564		rtoinfo.srto_max = sp->rtoinfo.srto_max;
   6565		rtoinfo.srto_min = sp->rtoinfo.srto_min;
   6566	}
   6567
   6568	if (put_user(len, optlen))
   6569		return -EFAULT;
   6570
   6571	if (copy_to_user(optval, &rtoinfo, len))
   6572		return -EFAULT;
   6573
   6574	return 0;
   6575}
   6576
   6577/*
   6578 *
   6579 * 7.1.2 SCTP_ASSOCINFO
   6580 *
   6581 * This option is used to tune the maximum retransmission attempts
   6582 * of the association.
   6583 * Returns an error if the new association retransmission value is
   6584 * greater than the sum of the retransmission value  of the peer.
   6585 * See [SCTP] for more information.
   6586 *
   6587 */
   6588static int sctp_getsockopt_associnfo(struct sock *sk, int len,
   6589				     char __user *optval,
   6590				     int __user *optlen)
   6591{
   6592
   6593	struct sctp_assocparams assocparams;
   6594	struct sctp_association *asoc;
   6595	struct list_head *pos;
   6596	int cnt = 0;
   6597
   6598	if (len < sizeof (struct sctp_assocparams))
   6599		return -EINVAL;
   6600
   6601	len = sizeof(struct sctp_assocparams);
   6602
   6603	if (copy_from_user(&assocparams, optval, len))
   6604		return -EFAULT;
   6605
   6606	asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id);
   6607
   6608	if (!asoc && assocparams.sasoc_assoc_id != SCTP_FUTURE_ASSOC &&
   6609	    sctp_style(sk, UDP))
   6610		return -EINVAL;
   6611
   6612	/* Values correspoinding to the specific association */
   6613	if (asoc) {
   6614		assocparams.sasoc_asocmaxrxt = asoc->max_retrans;
   6615		assocparams.sasoc_peer_rwnd = asoc->peer.rwnd;
   6616		assocparams.sasoc_local_rwnd = asoc->a_rwnd;
   6617		assocparams.sasoc_cookie_life = ktime_to_ms(asoc->cookie_life);
   6618
   6619		list_for_each(pos, &asoc->peer.transport_addr_list) {
   6620			cnt++;
   6621		}
   6622
   6623		assocparams.sasoc_number_peer_destinations = cnt;
   6624	} else {
   6625		/* Values corresponding to the endpoint */
   6626		struct sctp_sock *sp = sctp_sk(sk);
   6627
   6628		assocparams.sasoc_asocmaxrxt = sp->assocparams.sasoc_asocmaxrxt;
   6629		assocparams.sasoc_peer_rwnd = sp->assocparams.sasoc_peer_rwnd;
   6630		assocparams.sasoc_local_rwnd = sp->assocparams.sasoc_local_rwnd;
   6631		assocparams.sasoc_cookie_life =
   6632					sp->assocparams.sasoc_cookie_life;
   6633		assocparams.sasoc_number_peer_destinations =
   6634					sp->assocparams.
   6635					sasoc_number_peer_destinations;
   6636	}
   6637
   6638	if (put_user(len, optlen))
   6639		return -EFAULT;
   6640
   6641	if (copy_to_user(optval, &assocparams, len))
   6642		return -EFAULT;
   6643
   6644	return 0;
   6645}
   6646
   6647/*
   6648 * 7.1.16 Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR)
   6649 *
   6650 * This socket option is a boolean flag which turns on or off mapped V4
   6651 * addresses.  If this option is turned on and the socket is type
   6652 * PF_INET6, then IPv4 addresses will be mapped to V6 representation.
   6653 * If this option is turned off, then no mapping will be done of V4
   6654 * addresses and a user will receive both PF_INET6 and PF_INET type
   6655 * addresses on the socket.
   6656 */
   6657static int sctp_getsockopt_mappedv4(struct sock *sk, int len,
   6658				    char __user *optval, int __user *optlen)
   6659{
   6660	int val;
   6661	struct sctp_sock *sp = sctp_sk(sk);
   6662
   6663	if (len < sizeof(int))
   6664		return -EINVAL;
   6665
   6666	len = sizeof(int);
   6667	val = sp->v4mapped;
   6668	if (put_user(len, optlen))
   6669		return -EFAULT;
   6670	if (copy_to_user(optval, &val, len))
   6671		return -EFAULT;
   6672
   6673	return 0;
   6674}
   6675
   6676/*
   6677 * 7.1.29.  Set or Get the default context (SCTP_CONTEXT)
   6678 * (chapter and verse is quoted at sctp_setsockopt_context())
   6679 */
   6680static int sctp_getsockopt_context(struct sock *sk, int len,
   6681				   char __user *optval, int __user *optlen)
   6682{
   6683	struct sctp_assoc_value params;
   6684	struct sctp_association *asoc;
   6685
   6686	if (len < sizeof(struct sctp_assoc_value))
   6687		return -EINVAL;
   6688
   6689	len = sizeof(struct sctp_assoc_value);
   6690
   6691	if (copy_from_user(&params, optval, len))
   6692		return -EFAULT;
   6693
   6694	asoc = sctp_id2assoc(sk, params.assoc_id);
   6695	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   6696	    sctp_style(sk, UDP))
   6697		return -EINVAL;
   6698
   6699	params.assoc_value = asoc ? asoc->default_rcv_context
   6700				  : sctp_sk(sk)->default_rcv_context;
   6701
   6702	if (put_user(len, optlen))
   6703		return -EFAULT;
   6704	if (copy_to_user(optval, &params, len))
   6705		return -EFAULT;
   6706
   6707	return 0;
   6708}
   6709
   6710/*
   6711 * 8.1.16.  Get or Set the Maximum Fragmentation Size (SCTP_MAXSEG)
   6712 * This option will get or set the maximum size to put in any outgoing
   6713 * SCTP DATA chunk.  If a message is larger than this size it will be
   6714 * fragmented by SCTP into the specified size.  Note that the underlying
   6715 * SCTP implementation may fragment into smaller sized chunks when the
   6716 * PMTU of the underlying association is smaller than the value set by
   6717 * the user.  The default value for this option is '0' which indicates
   6718 * the user is NOT limiting fragmentation and only the PMTU will effect
   6719 * SCTP's choice of DATA chunk size.  Note also that values set larger
   6720 * than the maximum size of an IP datagram will effectively let SCTP
   6721 * control fragmentation (i.e. the same as setting this option to 0).
   6722 *
   6723 * The following structure is used to access and modify this parameter:
   6724 *
   6725 * struct sctp_assoc_value {
   6726 *   sctp_assoc_t assoc_id;
   6727 *   uint32_t assoc_value;
   6728 * };
   6729 *
   6730 * assoc_id:  This parameter is ignored for one-to-one style sockets.
   6731 *    For one-to-many style sockets this parameter indicates which
   6732 *    association the user is performing an action upon.  Note that if
   6733 *    this field's value is zero then the endpoints default value is
   6734 *    changed (effecting future associations only).
   6735 * assoc_value:  This parameter specifies the maximum size in bytes.
   6736 */
   6737static int sctp_getsockopt_maxseg(struct sock *sk, int len,
   6738				  char __user *optval, int __user *optlen)
   6739{
   6740	struct sctp_assoc_value params;
   6741	struct sctp_association *asoc;
   6742
   6743	if (len == sizeof(int)) {
   6744		pr_warn_ratelimited(DEPRECATED
   6745				    "%s (pid %d) "
   6746				    "Use of int in maxseg socket option.\n"
   6747				    "Use struct sctp_assoc_value instead\n",
   6748				    current->comm, task_pid_nr(current));
   6749		params.assoc_id = SCTP_FUTURE_ASSOC;
   6750	} else if (len >= sizeof(struct sctp_assoc_value)) {
   6751		len = sizeof(struct sctp_assoc_value);
   6752		if (copy_from_user(&params, optval, len))
   6753			return -EFAULT;
   6754	} else
   6755		return -EINVAL;
   6756
   6757	asoc = sctp_id2assoc(sk, params.assoc_id);
   6758	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   6759	    sctp_style(sk, UDP))
   6760		return -EINVAL;
   6761
   6762	if (asoc)
   6763		params.assoc_value = asoc->frag_point;
   6764	else
   6765		params.assoc_value = sctp_sk(sk)->user_frag;
   6766
   6767	if (put_user(len, optlen))
   6768		return -EFAULT;
   6769	if (len == sizeof(int)) {
   6770		if (copy_to_user(optval, &params.assoc_value, len))
   6771			return -EFAULT;
   6772	} else {
   6773		if (copy_to_user(optval, &params, len))
   6774			return -EFAULT;
   6775	}
   6776
   6777	return 0;
   6778}
   6779
   6780/*
   6781 * 7.1.24.  Get or set fragmented interleave (SCTP_FRAGMENT_INTERLEAVE)
   6782 * (chapter and verse is quoted at sctp_setsockopt_fragment_interleave())
   6783 */
   6784static int sctp_getsockopt_fragment_interleave(struct sock *sk, int len,
   6785					       char __user *optval, int __user *optlen)
   6786{
   6787	int val;
   6788
   6789	if (len < sizeof(int))
   6790		return -EINVAL;
   6791
   6792	len = sizeof(int);
   6793
   6794	val = sctp_sk(sk)->frag_interleave;
   6795	if (put_user(len, optlen))
   6796		return -EFAULT;
   6797	if (copy_to_user(optval, &val, len))
   6798		return -EFAULT;
   6799
   6800	return 0;
   6801}
   6802
   6803/*
   6804 * 7.1.25.  Set or Get the sctp partial delivery point
   6805 * (chapter and verse is quoted at sctp_setsockopt_partial_delivery_point())
   6806 */
   6807static int sctp_getsockopt_partial_delivery_point(struct sock *sk, int len,
   6808						  char __user *optval,
   6809						  int __user *optlen)
   6810{
   6811	u32 val;
   6812
   6813	if (len < sizeof(u32))
   6814		return -EINVAL;
   6815
   6816	len = sizeof(u32);
   6817
   6818	val = sctp_sk(sk)->pd_point;
   6819	if (put_user(len, optlen))
   6820		return -EFAULT;
   6821	if (copy_to_user(optval, &val, len))
   6822		return -EFAULT;
   6823
   6824	return 0;
   6825}
   6826
   6827/*
   6828 * 7.1.28.  Set or Get the maximum burst (SCTP_MAX_BURST)
   6829 * (chapter and verse is quoted at sctp_setsockopt_maxburst())
   6830 */
   6831static int sctp_getsockopt_maxburst(struct sock *sk, int len,
   6832				    char __user *optval,
   6833				    int __user *optlen)
   6834{
   6835	struct sctp_assoc_value params;
   6836	struct sctp_association *asoc;
   6837
   6838	if (len == sizeof(int)) {
   6839		pr_warn_ratelimited(DEPRECATED
   6840				    "%s (pid %d) "
   6841				    "Use of int in max_burst socket option.\n"
   6842				    "Use struct sctp_assoc_value instead\n",
   6843				    current->comm, task_pid_nr(current));
   6844		params.assoc_id = SCTP_FUTURE_ASSOC;
   6845	} else if (len >= sizeof(struct sctp_assoc_value)) {
   6846		len = sizeof(struct sctp_assoc_value);
   6847		if (copy_from_user(&params, optval, len))
   6848			return -EFAULT;
   6849	} else
   6850		return -EINVAL;
   6851
   6852	asoc = sctp_id2assoc(sk, params.assoc_id);
   6853	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   6854	    sctp_style(sk, UDP))
   6855		return -EINVAL;
   6856
   6857	params.assoc_value = asoc ? asoc->max_burst : sctp_sk(sk)->max_burst;
   6858
   6859	if (len == sizeof(int)) {
   6860		if (copy_to_user(optval, &params.assoc_value, len))
   6861			return -EFAULT;
   6862	} else {
   6863		if (copy_to_user(optval, &params, len))
   6864			return -EFAULT;
   6865	}
   6866
   6867	return 0;
   6868
   6869}
   6870
   6871static int sctp_getsockopt_hmac_ident(struct sock *sk, int len,
   6872				    char __user *optval, int __user *optlen)
   6873{
   6874	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   6875	struct sctp_hmacalgo  __user *p = (void __user *)optval;
   6876	struct sctp_hmac_algo_param *hmacs;
   6877	__u16 data_len = 0;
   6878	u32 num_idents;
   6879	int i;
   6880
   6881	if (!ep->auth_enable)
   6882		return -EACCES;
   6883
   6884	hmacs = ep->auth_hmacs_list;
   6885	data_len = ntohs(hmacs->param_hdr.length) -
   6886		   sizeof(struct sctp_paramhdr);
   6887
   6888	if (len < sizeof(struct sctp_hmacalgo) + data_len)
   6889		return -EINVAL;
   6890
   6891	len = sizeof(struct sctp_hmacalgo) + data_len;
   6892	num_idents = data_len / sizeof(u16);
   6893
   6894	if (put_user(len, optlen))
   6895		return -EFAULT;
   6896	if (put_user(num_idents, &p->shmac_num_idents))
   6897		return -EFAULT;
   6898	for (i = 0; i < num_idents; i++) {
   6899		__u16 hmacid = ntohs(hmacs->hmac_ids[i]);
   6900
   6901		if (copy_to_user(&p->shmac_idents[i], &hmacid, sizeof(__u16)))
   6902			return -EFAULT;
   6903	}
   6904	return 0;
   6905}
   6906
   6907static int sctp_getsockopt_active_key(struct sock *sk, int len,
   6908				    char __user *optval, int __user *optlen)
   6909{
   6910	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   6911	struct sctp_authkeyid val;
   6912	struct sctp_association *asoc;
   6913
   6914	if (len < sizeof(struct sctp_authkeyid))
   6915		return -EINVAL;
   6916
   6917	len = sizeof(struct sctp_authkeyid);
   6918	if (copy_from_user(&val, optval, len))
   6919		return -EFAULT;
   6920
   6921	asoc = sctp_id2assoc(sk, val.scact_assoc_id);
   6922	if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP))
   6923		return -EINVAL;
   6924
   6925	if (asoc) {
   6926		if (!asoc->peer.auth_capable)
   6927			return -EACCES;
   6928		val.scact_keynumber = asoc->active_key_id;
   6929	} else {
   6930		if (!ep->auth_enable)
   6931			return -EACCES;
   6932		val.scact_keynumber = ep->active_key_id;
   6933	}
   6934
   6935	if (put_user(len, optlen))
   6936		return -EFAULT;
   6937	if (copy_to_user(optval, &val, len))
   6938		return -EFAULT;
   6939
   6940	return 0;
   6941}
   6942
   6943static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
   6944				    char __user *optval, int __user *optlen)
   6945{
   6946	struct sctp_authchunks __user *p = (void __user *)optval;
   6947	struct sctp_authchunks val;
   6948	struct sctp_association *asoc;
   6949	struct sctp_chunks_param *ch;
   6950	u32    num_chunks = 0;
   6951	char __user *to;
   6952
   6953	if (len < sizeof(struct sctp_authchunks))
   6954		return -EINVAL;
   6955
   6956	if (copy_from_user(&val, optval, sizeof(val)))
   6957		return -EFAULT;
   6958
   6959	to = p->gauth_chunks;
   6960	asoc = sctp_id2assoc(sk, val.gauth_assoc_id);
   6961	if (!asoc)
   6962		return -EINVAL;
   6963
   6964	if (!asoc->peer.auth_capable)
   6965		return -EACCES;
   6966
   6967	ch = asoc->peer.peer_chunks;
   6968	if (!ch)
   6969		goto num;
   6970
   6971	/* See if the user provided enough room for all the data */
   6972	num_chunks = ntohs(ch->param_hdr.length) - sizeof(struct sctp_paramhdr);
   6973	if (len < num_chunks)
   6974		return -EINVAL;
   6975
   6976	if (copy_to_user(to, ch->chunks, num_chunks))
   6977		return -EFAULT;
   6978num:
   6979	len = sizeof(struct sctp_authchunks) + num_chunks;
   6980	if (put_user(len, optlen))
   6981		return -EFAULT;
   6982	if (put_user(num_chunks, &p->gauth_number_of_chunks))
   6983		return -EFAULT;
   6984	return 0;
   6985}
   6986
   6987static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
   6988				    char __user *optval, int __user *optlen)
   6989{
   6990	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   6991	struct sctp_authchunks __user *p = (void __user *)optval;
   6992	struct sctp_authchunks val;
   6993	struct sctp_association *asoc;
   6994	struct sctp_chunks_param *ch;
   6995	u32    num_chunks = 0;
   6996	char __user *to;
   6997
   6998	if (len < sizeof(struct sctp_authchunks))
   6999		return -EINVAL;
   7000
   7001	if (copy_from_user(&val, optval, sizeof(val)))
   7002		return -EFAULT;
   7003
   7004	to = p->gauth_chunks;
   7005	asoc = sctp_id2assoc(sk, val.gauth_assoc_id);
   7006	if (!asoc && val.gauth_assoc_id != SCTP_FUTURE_ASSOC &&
   7007	    sctp_style(sk, UDP))
   7008		return -EINVAL;
   7009
   7010	if (asoc) {
   7011		if (!asoc->peer.auth_capable)
   7012			return -EACCES;
   7013		ch = (struct sctp_chunks_param *)asoc->c.auth_chunks;
   7014	} else {
   7015		if (!ep->auth_enable)
   7016			return -EACCES;
   7017		ch = ep->auth_chunk_list;
   7018	}
   7019	if (!ch)
   7020		goto num;
   7021
   7022	num_chunks = ntohs(ch->param_hdr.length) - sizeof(struct sctp_paramhdr);
   7023	if (len < sizeof(struct sctp_authchunks) + num_chunks)
   7024		return -EINVAL;
   7025
   7026	if (copy_to_user(to, ch->chunks, num_chunks))
   7027		return -EFAULT;
   7028num:
   7029	len = sizeof(struct sctp_authchunks) + num_chunks;
   7030	if (put_user(len, optlen))
   7031		return -EFAULT;
   7032	if (put_user(num_chunks, &p->gauth_number_of_chunks))
   7033		return -EFAULT;
   7034
   7035	return 0;
   7036}
   7037
   7038/*
   7039 * 8.2.5.  Get the Current Number of Associations (SCTP_GET_ASSOC_NUMBER)
   7040 * This option gets the current number of associations that are attached
   7041 * to a one-to-many style socket.  The option value is an uint32_t.
   7042 */
   7043static int sctp_getsockopt_assoc_number(struct sock *sk, int len,
   7044				    char __user *optval, int __user *optlen)
   7045{
   7046	struct sctp_sock *sp = sctp_sk(sk);
   7047	struct sctp_association *asoc;
   7048	u32 val = 0;
   7049
   7050	if (sctp_style(sk, TCP))
   7051		return -EOPNOTSUPP;
   7052
   7053	if (len < sizeof(u32))
   7054		return -EINVAL;
   7055
   7056	len = sizeof(u32);
   7057
   7058	list_for_each_entry(asoc, &(sp->ep->asocs), asocs) {
   7059		val++;
   7060	}
   7061
   7062	if (put_user(len, optlen))
   7063		return -EFAULT;
   7064	if (copy_to_user(optval, &val, len))
   7065		return -EFAULT;
   7066
   7067	return 0;
   7068}
   7069
   7070/*
   7071 * 8.1.23 SCTP_AUTO_ASCONF
   7072 * See the corresponding setsockopt entry as description
   7073 */
   7074static int sctp_getsockopt_auto_asconf(struct sock *sk, int len,
   7075				   char __user *optval, int __user *optlen)
   7076{
   7077	int val = 0;
   7078
   7079	if (len < sizeof(int))
   7080		return -EINVAL;
   7081
   7082	len = sizeof(int);
   7083	if (sctp_sk(sk)->do_auto_asconf && sctp_is_ep_boundall(sk))
   7084		val = 1;
   7085	if (put_user(len, optlen))
   7086		return -EFAULT;
   7087	if (copy_to_user(optval, &val, len))
   7088		return -EFAULT;
   7089	return 0;
   7090}
   7091
   7092/*
   7093 * 8.2.6. Get the Current Identifiers of Associations
   7094 *        (SCTP_GET_ASSOC_ID_LIST)
   7095 *
   7096 * This option gets the current list of SCTP association identifiers of
   7097 * the SCTP associations handled by a one-to-many style socket.
   7098 */
   7099static int sctp_getsockopt_assoc_ids(struct sock *sk, int len,
   7100				    char __user *optval, int __user *optlen)
   7101{
   7102	struct sctp_sock *sp = sctp_sk(sk);
   7103	struct sctp_association *asoc;
   7104	struct sctp_assoc_ids *ids;
   7105	u32 num = 0;
   7106
   7107	if (sctp_style(sk, TCP))
   7108		return -EOPNOTSUPP;
   7109
   7110	if (len < sizeof(struct sctp_assoc_ids))
   7111		return -EINVAL;
   7112
   7113	list_for_each_entry(asoc, &(sp->ep->asocs), asocs) {
   7114		num++;
   7115	}
   7116
   7117	if (len < sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num)
   7118		return -EINVAL;
   7119
   7120	len = sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num;
   7121
   7122	ids = kmalloc(len, GFP_USER | __GFP_NOWARN);
   7123	if (unlikely(!ids))
   7124		return -ENOMEM;
   7125
   7126	ids->gaids_number_of_ids = num;
   7127	num = 0;
   7128	list_for_each_entry(asoc, &(sp->ep->asocs), asocs) {
   7129		ids->gaids_assoc_id[num++] = asoc->assoc_id;
   7130	}
   7131
   7132	if (put_user(len, optlen) || copy_to_user(optval, ids, len)) {
   7133		kfree(ids);
   7134		return -EFAULT;
   7135	}
   7136
   7137	kfree(ids);
   7138	return 0;
   7139}
   7140
   7141/*
   7142 * SCTP_PEER_ADDR_THLDS
   7143 *
   7144 * This option allows us to fetch the partially failed threshold for one or all
   7145 * transports in an association.  See Section 6.1 of:
   7146 * http://www.ietf.org/id/draft-nishida-tsvwg-sctp-failover-05.txt
   7147 */
   7148static int sctp_getsockopt_paddr_thresholds(struct sock *sk,
   7149					    char __user *optval, int len,
   7150					    int __user *optlen, bool v2)
   7151{
   7152	struct sctp_paddrthlds_v2 val;
   7153	struct sctp_transport *trans;
   7154	struct sctp_association *asoc;
   7155	int min;
   7156
   7157	min = v2 ? sizeof(val) : sizeof(struct sctp_paddrthlds);
   7158	if (len < min)
   7159		return -EINVAL;
   7160	len = min;
   7161	if (copy_from_user(&val, optval, len))
   7162		return -EFAULT;
   7163
   7164	if (!sctp_is_any(sk, (const union sctp_addr *)&val.spt_address)) {
   7165		trans = sctp_addr_id2transport(sk, &val.spt_address,
   7166					       val.spt_assoc_id);
   7167		if (!trans)
   7168			return -ENOENT;
   7169
   7170		val.spt_pathmaxrxt = trans->pathmaxrxt;
   7171		val.spt_pathpfthld = trans->pf_retrans;
   7172		val.spt_pathcpthld = trans->ps_retrans;
   7173
   7174		goto out;
   7175	}
   7176
   7177	asoc = sctp_id2assoc(sk, val.spt_assoc_id);
   7178	if (!asoc && val.spt_assoc_id != SCTP_FUTURE_ASSOC &&
   7179	    sctp_style(sk, UDP))
   7180		return -EINVAL;
   7181
   7182	if (asoc) {
   7183		val.spt_pathpfthld = asoc->pf_retrans;
   7184		val.spt_pathmaxrxt = asoc->pathmaxrxt;
   7185		val.spt_pathcpthld = asoc->ps_retrans;
   7186	} else {
   7187		struct sctp_sock *sp = sctp_sk(sk);
   7188
   7189		val.spt_pathpfthld = sp->pf_retrans;
   7190		val.spt_pathmaxrxt = sp->pathmaxrxt;
   7191		val.spt_pathcpthld = sp->ps_retrans;
   7192	}
   7193
   7194out:
   7195	if (put_user(len, optlen) || copy_to_user(optval, &val, len))
   7196		return -EFAULT;
   7197
   7198	return 0;
   7199}
   7200
   7201/*
   7202 * SCTP_GET_ASSOC_STATS
   7203 *
   7204 * This option retrieves local per endpoint statistics. It is modeled
   7205 * after OpenSolaris' implementation
   7206 */
   7207static int sctp_getsockopt_assoc_stats(struct sock *sk, int len,
   7208				       char __user *optval,
   7209				       int __user *optlen)
   7210{
   7211	struct sctp_assoc_stats sas;
   7212	struct sctp_association *asoc = NULL;
   7213
   7214	/* User must provide at least the assoc id */
   7215	if (len < sizeof(sctp_assoc_t))
   7216		return -EINVAL;
   7217
   7218	/* Allow the struct to grow and fill in as much as possible */
   7219	len = min_t(size_t, len, sizeof(sas));
   7220
   7221	if (copy_from_user(&sas, optval, len))
   7222		return -EFAULT;
   7223
   7224	asoc = sctp_id2assoc(sk, sas.sas_assoc_id);
   7225	if (!asoc)
   7226		return -EINVAL;
   7227
   7228	sas.sas_rtxchunks = asoc->stats.rtxchunks;
   7229	sas.sas_gapcnt = asoc->stats.gapcnt;
   7230	sas.sas_outofseqtsns = asoc->stats.outofseqtsns;
   7231	sas.sas_osacks = asoc->stats.osacks;
   7232	sas.sas_isacks = asoc->stats.isacks;
   7233	sas.sas_octrlchunks = asoc->stats.octrlchunks;
   7234	sas.sas_ictrlchunks = asoc->stats.ictrlchunks;
   7235	sas.sas_oodchunks = asoc->stats.oodchunks;
   7236	sas.sas_iodchunks = asoc->stats.iodchunks;
   7237	sas.sas_ouodchunks = asoc->stats.ouodchunks;
   7238	sas.sas_iuodchunks = asoc->stats.iuodchunks;
   7239	sas.sas_idupchunks = asoc->stats.idupchunks;
   7240	sas.sas_opackets = asoc->stats.opackets;
   7241	sas.sas_ipackets = asoc->stats.ipackets;
   7242
   7243	/* New high max rto observed, will return 0 if not a single
   7244	 * RTO update took place. obs_rto_ipaddr will be bogus
   7245	 * in such a case
   7246	 */
   7247	sas.sas_maxrto = asoc->stats.max_obs_rto;
   7248	memcpy(&sas.sas_obs_rto_ipaddr, &asoc->stats.obs_rto_ipaddr,
   7249		sizeof(struct sockaddr_storage));
   7250
   7251	/* Mark beginning of a new observation period */
   7252	asoc->stats.max_obs_rto = asoc->rto_min;
   7253
   7254	if (put_user(len, optlen))
   7255		return -EFAULT;
   7256
   7257	pr_debug("%s: len:%d, assoc_id:%d\n", __func__, len, sas.sas_assoc_id);
   7258
   7259	if (copy_to_user(optval, &sas, len))
   7260		return -EFAULT;
   7261
   7262	return 0;
   7263}
   7264
   7265static int sctp_getsockopt_recvrcvinfo(struct sock *sk,	int len,
   7266				       char __user *optval,
   7267				       int __user *optlen)
   7268{
   7269	int val = 0;
   7270
   7271	if (len < sizeof(int))
   7272		return -EINVAL;
   7273
   7274	len = sizeof(int);
   7275	if (sctp_sk(sk)->recvrcvinfo)
   7276		val = 1;
   7277	if (put_user(len, optlen))
   7278		return -EFAULT;
   7279	if (copy_to_user(optval, &val, len))
   7280		return -EFAULT;
   7281
   7282	return 0;
   7283}
   7284
   7285static int sctp_getsockopt_recvnxtinfo(struct sock *sk,	int len,
   7286				       char __user *optval,
   7287				       int __user *optlen)
   7288{
   7289	int val = 0;
   7290
   7291	if (len < sizeof(int))
   7292		return -EINVAL;
   7293
   7294	len = sizeof(int);
   7295	if (sctp_sk(sk)->recvnxtinfo)
   7296		val = 1;
   7297	if (put_user(len, optlen))
   7298		return -EFAULT;
   7299	if (copy_to_user(optval, &val, len))
   7300		return -EFAULT;
   7301
   7302	return 0;
   7303}
   7304
   7305static int sctp_getsockopt_pr_supported(struct sock *sk, int len,
   7306					char __user *optval,
   7307					int __user *optlen)
   7308{
   7309	struct sctp_assoc_value params;
   7310	struct sctp_association *asoc;
   7311	int retval = -EFAULT;
   7312
   7313	if (len < sizeof(params)) {
   7314		retval = -EINVAL;
   7315		goto out;
   7316	}
   7317
   7318	len = sizeof(params);
   7319	if (copy_from_user(&params, optval, len))
   7320		goto out;
   7321
   7322	asoc = sctp_id2assoc(sk, params.assoc_id);
   7323	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7324	    sctp_style(sk, UDP)) {
   7325		retval = -EINVAL;
   7326		goto out;
   7327	}
   7328
   7329	params.assoc_value = asoc ? asoc->peer.prsctp_capable
   7330				  : sctp_sk(sk)->ep->prsctp_enable;
   7331
   7332	if (put_user(len, optlen))
   7333		goto out;
   7334
   7335	if (copy_to_user(optval, &params, len))
   7336		goto out;
   7337
   7338	retval = 0;
   7339
   7340out:
   7341	return retval;
   7342}
   7343
   7344static int sctp_getsockopt_default_prinfo(struct sock *sk, int len,
   7345					  char __user *optval,
   7346					  int __user *optlen)
   7347{
   7348	struct sctp_default_prinfo info;
   7349	struct sctp_association *asoc;
   7350	int retval = -EFAULT;
   7351
   7352	if (len < sizeof(info)) {
   7353		retval = -EINVAL;
   7354		goto out;
   7355	}
   7356
   7357	len = sizeof(info);
   7358	if (copy_from_user(&info, optval, len))
   7359		goto out;
   7360
   7361	asoc = sctp_id2assoc(sk, info.pr_assoc_id);
   7362	if (!asoc && info.pr_assoc_id != SCTP_FUTURE_ASSOC &&
   7363	    sctp_style(sk, UDP)) {
   7364		retval = -EINVAL;
   7365		goto out;
   7366	}
   7367
   7368	if (asoc) {
   7369		info.pr_policy = SCTP_PR_POLICY(asoc->default_flags);
   7370		info.pr_value = asoc->default_timetolive;
   7371	} else {
   7372		struct sctp_sock *sp = sctp_sk(sk);
   7373
   7374		info.pr_policy = SCTP_PR_POLICY(sp->default_flags);
   7375		info.pr_value = sp->default_timetolive;
   7376	}
   7377
   7378	if (put_user(len, optlen))
   7379		goto out;
   7380
   7381	if (copy_to_user(optval, &info, len))
   7382		goto out;
   7383
   7384	retval = 0;
   7385
   7386out:
   7387	return retval;
   7388}
   7389
   7390static int sctp_getsockopt_pr_assocstatus(struct sock *sk, int len,
   7391					  char __user *optval,
   7392					  int __user *optlen)
   7393{
   7394	struct sctp_prstatus params;
   7395	struct sctp_association *asoc;
   7396	int policy;
   7397	int retval = -EINVAL;
   7398
   7399	if (len < sizeof(params))
   7400		goto out;
   7401
   7402	len = sizeof(params);
   7403	if (copy_from_user(&params, optval, len)) {
   7404		retval = -EFAULT;
   7405		goto out;
   7406	}
   7407
   7408	policy = params.sprstat_policy;
   7409	if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
   7410	    ((policy & SCTP_PR_SCTP_ALL) && (policy & SCTP_PR_SCTP_MASK)))
   7411		goto out;
   7412
   7413	asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
   7414	if (!asoc)
   7415		goto out;
   7416
   7417	if (policy == SCTP_PR_SCTP_ALL) {
   7418		params.sprstat_abandoned_unsent = 0;
   7419		params.sprstat_abandoned_sent = 0;
   7420		for (policy = 0; policy <= SCTP_PR_INDEX(MAX); policy++) {
   7421			params.sprstat_abandoned_unsent +=
   7422				asoc->abandoned_unsent[policy];
   7423			params.sprstat_abandoned_sent +=
   7424				asoc->abandoned_sent[policy];
   7425		}
   7426	} else {
   7427		params.sprstat_abandoned_unsent =
   7428			asoc->abandoned_unsent[__SCTP_PR_INDEX(policy)];
   7429		params.sprstat_abandoned_sent =
   7430			asoc->abandoned_sent[__SCTP_PR_INDEX(policy)];
   7431	}
   7432
   7433	if (put_user(len, optlen)) {
   7434		retval = -EFAULT;
   7435		goto out;
   7436	}
   7437
   7438	if (copy_to_user(optval, &params, len)) {
   7439		retval = -EFAULT;
   7440		goto out;
   7441	}
   7442
   7443	retval = 0;
   7444
   7445out:
   7446	return retval;
   7447}
   7448
   7449static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,
   7450					   char __user *optval,
   7451					   int __user *optlen)
   7452{
   7453	struct sctp_stream_out_ext *streamoute;
   7454	struct sctp_association *asoc;
   7455	struct sctp_prstatus params;
   7456	int retval = -EINVAL;
   7457	int policy;
   7458
   7459	if (len < sizeof(params))
   7460		goto out;
   7461
   7462	len = sizeof(params);
   7463	if (copy_from_user(&params, optval, len)) {
   7464		retval = -EFAULT;
   7465		goto out;
   7466	}
   7467
   7468	policy = params.sprstat_policy;
   7469	if (!policy || (policy & ~(SCTP_PR_SCTP_MASK | SCTP_PR_SCTP_ALL)) ||
   7470	    ((policy & SCTP_PR_SCTP_ALL) && (policy & SCTP_PR_SCTP_MASK)))
   7471		goto out;
   7472
   7473	asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
   7474	if (!asoc || params.sprstat_sid >= asoc->stream.outcnt)
   7475		goto out;
   7476
   7477	streamoute = SCTP_SO(&asoc->stream, params.sprstat_sid)->ext;
   7478	if (!streamoute) {
   7479		/* Not allocated yet, means all stats are 0 */
   7480		params.sprstat_abandoned_unsent = 0;
   7481		params.sprstat_abandoned_sent = 0;
   7482		retval = 0;
   7483		goto out;
   7484	}
   7485
   7486	if (policy == SCTP_PR_SCTP_ALL) {
   7487		params.sprstat_abandoned_unsent = 0;
   7488		params.sprstat_abandoned_sent = 0;
   7489		for (policy = 0; policy <= SCTP_PR_INDEX(MAX); policy++) {
   7490			params.sprstat_abandoned_unsent +=
   7491				streamoute->abandoned_unsent[policy];
   7492			params.sprstat_abandoned_sent +=
   7493				streamoute->abandoned_sent[policy];
   7494		}
   7495	} else {
   7496		params.sprstat_abandoned_unsent =
   7497			streamoute->abandoned_unsent[__SCTP_PR_INDEX(policy)];
   7498		params.sprstat_abandoned_sent =
   7499			streamoute->abandoned_sent[__SCTP_PR_INDEX(policy)];
   7500	}
   7501
   7502	if (put_user(len, optlen) || copy_to_user(optval, &params, len)) {
   7503		retval = -EFAULT;
   7504		goto out;
   7505	}
   7506
   7507	retval = 0;
   7508
   7509out:
   7510	return retval;
   7511}
   7512
   7513static int sctp_getsockopt_reconfig_supported(struct sock *sk, int len,
   7514					      char __user *optval,
   7515					      int __user *optlen)
   7516{
   7517	struct sctp_assoc_value params;
   7518	struct sctp_association *asoc;
   7519	int retval = -EFAULT;
   7520
   7521	if (len < sizeof(params)) {
   7522		retval = -EINVAL;
   7523		goto out;
   7524	}
   7525
   7526	len = sizeof(params);
   7527	if (copy_from_user(&params, optval, len))
   7528		goto out;
   7529
   7530	asoc = sctp_id2assoc(sk, params.assoc_id);
   7531	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7532	    sctp_style(sk, UDP)) {
   7533		retval = -EINVAL;
   7534		goto out;
   7535	}
   7536
   7537	params.assoc_value = asoc ? asoc->peer.reconf_capable
   7538				  : sctp_sk(sk)->ep->reconf_enable;
   7539
   7540	if (put_user(len, optlen))
   7541		goto out;
   7542
   7543	if (copy_to_user(optval, &params, len))
   7544		goto out;
   7545
   7546	retval = 0;
   7547
   7548out:
   7549	return retval;
   7550}
   7551
   7552static int sctp_getsockopt_enable_strreset(struct sock *sk, int len,
   7553					   char __user *optval,
   7554					   int __user *optlen)
   7555{
   7556	struct sctp_assoc_value params;
   7557	struct sctp_association *asoc;
   7558	int retval = -EFAULT;
   7559
   7560	if (len < sizeof(params)) {
   7561		retval = -EINVAL;
   7562		goto out;
   7563	}
   7564
   7565	len = sizeof(params);
   7566	if (copy_from_user(&params, optval, len))
   7567		goto out;
   7568
   7569	asoc = sctp_id2assoc(sk, params.assoc_id);
   7570	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7571	    sctp_style(sk, UDP)) {
   7572		retval = -EINVAL;
   7573		goto out;
   7574	}
   7575
   7576	params.assoc_value = asoc ? asoc->strreset_enable
   7577				  : sctp_sk(sk)->ep->strreset_enable;
   7578
   7579	if (put_user(len, optlen))
   7580		goto out;
   7581
   7582	if (copy_to_user(optval, &params, len))
   7583		goto out;
   7584
   7585	retval = 0;
   7586
   7587out:
   7588	return retval;
   7589}
   7590
   7591static int sctp_getsockopt_scheduler(struct sock *sk, int len,
   7592				     char __user *optval,
   7593				     int __user *optlen)
   7594{
   7595	struct sctp_assoc_value params;
   7596	struct sctp_association *asoc;
   7597	int retval = -EFAULT;
   7598
   7599	if (len < sizeof(params)) {
   7600		retval = -EINVAL;
   7601		goto out;
   7602	}
   7603
   7604	len = sizeof(params);
   7605	if (copy_from_user(&params, optval, len))
   7606		goto out;
   7607
   7608	asoc = sctp_id2assoc(sk, params.assoc_id);
   7609	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7610	    sctp_style(sk, UDP)) {
   7611		retval = -EINVAL;
   7612		goto out;
   7613	}
   7614
   7615	params.assoc_value = asoc ? sctp_sched_get_sched(asoc)
   7616				  : sctp_sk(sk)->default_ss;
   7617
   7618	if (put_user(len, optlen))
   7619		goto out;
   7620
   7621	if (copy_to_user(optval, &params, len))
   7622		goto out;
   7623
   7624	retval = 0;
   7625
   7626out:
   7627	return retval;
   7628}
   7629
   7630static int sctp_getsockopt_scheduler_value(struct sock *sk, int len,
   7631					   char __user *optval,
   7632					   int __user *optlen)
   7633{
   7634	struct sctp_stream_value params;
   7635	struct sctp_association *asoc;
   7636	int retval = -EFAULT;
   7637
   7638	if (len < sizeof(params)) {
   7639		retval = -EINVAL;
   7640		goto out;
   7641	}
   7642
   7643	len = sizeof(params);
   7644	if (copy_from_user(&params, optval, len))
   7645		goto out;
   7646
   7647	asoc = sctp_id2assoc(sk, params.assoc_id);
   7648	if (!asoc) {
   7649		retval = -EINVAL;
   7650		goto out;
   7651	}
   7652
   7653	retval = sctp_sched_get_value(asoc, params.stream_id,
   7654				      &params.stream_value);
   7655	if (retval)
   7656		goto out;
   7657
   7658	if (put_user(len, optlen)) {
   7659		retval = -EFAULT;
   7660		goto out;
   7661	}
   7662
   7663	if (copy_to_user(optval, &params, len)) {
   7664		retval = -EFAULT;
   7665		goto out;
   7666	}
   7667
   7668out:
   7669	return retval;
   7670}
   7671
   7672static int sctp_getsockopt_interleaving_supported(struct sock *sk, int len,
   7673						  char __user *optval,
   7674						  int __user *optlen)
   7675{
   7676	struct sctp_assoc_value params;
   7677	struct sctp_association *asoc;
   7678	int retval = -EFAULT;
   7679
   7680	if (len < sizeof(params)) {
   7681		retval = -EINVAL;
   7682		goto out;
   7683	}
   7684
   7685	len = sizeof(params);
   7686	if (copy_from_user(&params, optval, len))
   7687		goto out;
   7688
   7689	asoc = sctp_id2assoc(sk, params.assoc_id);
   7690	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7691	    sctp_style(sk, UDP)) {
   7692		retval = -EINVAL;
   7693		goto out;
   7694	}
   7695
   7696	params.assoc_value = asoc ? asoc->peer.intl_capable
   7697				  : sctp_sk(sk)->ep->intl_enable;
   7698
   7699	if (put_user(len, optlen))
   7700		goto out;
   7701
   7702	if (copy_to_user(optval, &params, len))
   7703		goto out;
   7704
   7705	retval = 0;
   7706
   7707out:
   7708	return retval;
   7709}
   7710
   7711static int sctp_getsockopt_reuse_port(struct sock *sk, int len,
   7712				      char __user *optval,
   7713				      int __user *optlen)
   7714{
   7715	int val;
   7716
   7717	if (len < sizeof(int))
   7718		return -EINVAL;
   7719
   7720	len = sizeof(int);
   7721	val = sctp_sk(sk)->reuse;
   7722	if (put_user(len, optlen))
   7723		return -EFAULT;
   7724
   7725	if (copy_to_user(optval, &val, len))
   7726		return -EFAULT;
   7727
   7728	return 0;
   7729}
   7730
   7731static int sctp_getsockopt_event(struct sock *sk, int len, char __user *optval,
   7732				 int __user *optlen)
   7733{
   7734	struct sctp_association *asoc;
   7735	struct sctp_event param;
   7736	__u16 subscribe;
   7737
   7738	if (len < sizeof(param))
   7739		return -EINVAL;
   7740
   7741	len = sizeof(param);
   7742	if (copy_from_user(&param, optval, len))
   7743		return -EFAULT;
   7744
   7745	if (param.se_type < SCTP_SN_TYPE_BASE ||
   7746	    param.se_type > SCTP_SN_TYPE_MAX)
   7747		return -EINVAL;
   7748
   7749	asoc = sctp_id2assoc(sk, param.se_assoc_id);
   7750	if (!asoc && param.se_assoc_id != SCTP_FUTURE_ASSOC &&
   7751	    sctp_style(sk, UDP))
   7752		return -EINVAL;
   7753
   7754	subscribe = asoc ? asoc->subscribe : sctp_sk(sk)->subscribe;
   7755	param.se_on = sctp_ulpevent_type_enabled(subscribe, param.se_type);
   7756
   7757	if (put_user(len, optlen))
   7758		return -EFAULT;
   7759
   7760	if (copy_to_user(optval, &param, len))
   7761		return -EFAULT;
   7762
   7763	return 0;
   7764}
   7765
   7766static int sctp_getsockopt_asconf_supported(struct sock *sk, int len,
   7767					    char __user *optval,
   7768					    int __user *optlen)
   7769{
   7770	struct sctp_assoc_value params;
   7771	struct sctp_association *asoc;
   7772	int retval = -EFAULT;
   7773
   7774	if (len < sizeof(params)) {
   7775		retval = -EINVAL;
   7776		goto out;
   7777	}
   7778
   7779	len = sizeof(params);
   7780	if (copy_from_user(&params, optval, len))
   7781		goto out;
   7782
   7783	asoc = sctp_id2assoc(sk, params.assoc_id);
   7784	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7785	    sctp_style(sk, UDP)) {
   7786		retval = -EINVAL;
   7787		goto out;
   7788	}
   7789
   7790	params.assoc_value = asoc ? asoc->peer.asconf_capable
   7791				  : sctp_sk(sk)->ep->asconf_enable;
   7792
   7793	if (put_user(len, optlen))
   7794		goto out;
   7795
   7796	if (copy_to_user(optval, &params, len))
   7797		goto out;
   7798
   7799	retval = 0;
   7800
   7801out:
   7802	return retval;
   7803}
   7804
   7805static int sctp_getsockopt_auth_supported(struct sock *sk, int len,
   7806					  char __user *optval,
   7807					  int __user *optlen)
   7808{
   7809	struct sctp_assoc_value params;
   7810	struct sctp_association *asoc;
   7811	int retval = -EFAULT;
   7812
   7813	if (len < sizeof(params)) {
   7814		retval = -EINVAL;
   7815		goto out;
   7816	}
   7817
   7818	len = sizeof(params);
   7819	if (copy_from_user(&params, optval, len))
   7820		goto out;
   7821
   7822	asoc = sctp_id2assoc(sk, params.assoc_id);
   7823	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7824	    sctp_style(sk, UDP)) {
   7825		retval = -EINVAL;
   7826		goto out;
   7827	}
   7828
   7829	params.assoc_value = asoc ? asoc->peer.auth_capable
   7830				  : sctp_sk(sk)->ep->auth_enable;
   7831
   7832	if (put_user(len, optlen))
   7833		goto out;
   7834
   7835	if (copy_to_user(optval, &params, len))
   7836		goto out;
   7837
   7838	retval = 0;
   7839
   7840out:
   7841	return retval;
   7842}
   7843
   7844static int sctp_getsockopt_ecn_supported(struct sock *sk, int len,
   7845					 char __user *optval,
   7846					 int __user *optlen)
   7847{
   7848	struct sctp_assoc_value params;
   7849	struct sctp_association *asoc;
   7850	int retval = -EFAULT;
   7851
   7852	if (len < sizeof(params)) {
   7853		retval = -EINVAL;
   7854		goto out;
   7855	}
   7856
   7857	len = sizeof(params);
   7858	if (copy_from_user(&params, optval, len))
   7859		goto out;
   7860
   7861	asoc = sctp_id2assoc(sk, params.assoc_id);
   7862	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7863	    sctp_style(sk, UDP)) {
   7864		retval = -EINVAL;
   7865		goto out;
   7866	}
   7867
   7868	params.assoc_value = asoc ? asoc->peer.ecn_capable
   7869				  : sctp_sk(sk)->ep->ecn_enable;
   7870
   7871	if (put_user(len, optlen))
   7872		goto out;
   7873
   7874	if (copy_to_user(optval, &params, len))
   7875		goto out;
   7876
   7877	retval = 0;
   7878
   7879out:
   7880	return retval;
   7881}
   7882
   7883static int sctp_getsockopt_pf_expose(struct sock *sk, int len,
   7884				     char __user *optval,
   7885				     int __user *optlen)
   7886{
   7887	struct sctp_assoc_value params;
   7888	struct sctp_association *asoc;
   7889	int retval = -EFAULT;
   7890
   7891	if (len < sizeof(params)) {
   7892		retval = -EINVAL;
   7893		goto out;
   7894	}
   7895
   7896	len = sizeof(params);
   7897	if (copy_from_user(&params, optval, len))
   7898		goto out;
   7899
   7900	asoc = sctp_id2assoc(sk, params.assoc_id);
   7901	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
   7902	    sctp_style(sk, UDP)) {
   7903		retval = -EINVAL;
   7904		goto out;
   7905	}
   7906
   7907	params.assoc_value = asoc ? asoc->pf_expose
   7908				  : sctp_sk(sk)->pf_expose;
   7909
   7910	if (put_user(len, optlen))
   7911		goto out;
   7912
   7913	if (copy_to_user(optval, &params, len))
   7914		goto out;
   7915
   7916	retval = 0;
   7917
   7918out:
   7919	return retval;
   7920}
   7921
   7922static int sctp_getsockopt_encap_port(struct sock *sk, int len,
   7923				      char __user *optval, int __user *optlen)
   7924{
   7925	struct sctp_association *asoc;
   7926	struct sctp_udpencaps encap;
   7927	struct sctp_transport *t;
   7928	__be16 encap_port;
   7929
   7930	if (len < sizeof(encap))
   7931		return -EINVAL;
   7932
   7933	len = sizeof(encap);
   7934	if (copy_from_user(&encap, optval, len))
   7935		return -EFAULT;
   7936
   7937	/* If an address other than INADDR_ANY is specified, and
   7938	 * no transport is found, then the request is invalid.
   7939	 */
   7940	if (!sctp_is_any(sk, (union sctp_addr *)&encap.sue_address)) {
   7941		t = sctp_addr_id2transport(sk, &encap.sue_address,
   7942					   encap.sue_assoc_id);
   7943		if (!t) {
   7944			pr_debug("%s: failed no transport\n", __func__);
   7945			return -EINVAL;
   7946		}
   7947
   7948		encap_port = t->encap_port;
   7949		goto out;
   7950	}
   7951
   7952	/* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the
   7953	 * socket is a one to many style socket, and an association
   7954	 * was not found, then the id was invalid.
   7955	 */
   7956	asoc = sctp_id2assoc(sk, encap.sue_assoc_id);
   7957	if (!asoc && encap.sue_assoc_id != SCTP_FUTURE_ASSOC &&
   7958	    sctp_style(sk, UDP)) {
   7959		pr_debug("%s: failed no association\n", __func__);
   7960		return -EINVAL;
   7961	}
   7962
   7963	if (asoc) {
   7964		encap_port = asoc->encap_port;
   7965		goto out;
   7966	}
   7967
   7968	encap_port = sctp_sk(sk)->encap_port;
   7969
   7970out:
   7971	encap.sue_port = (__force uint16_t)encap_port;
   7972	if (copy_to_user(optval, &encap, len))
   7973		return -EFAULT;
   7974
   7975	if (put_user(len, optlen))
   7976		return -EFAULT;
   7977
   7978	return 0;
   7979}
   7980
   7981static int sctp_getsockopt_probe_interval(struct sock *sk, int len,
   7982					  char __user *optval,
   7983					  int __user *optlen)
   7984{
   7985	struct sctp_probeinterval params;
   7986	struct sctp_association *asoc;
   7987	struct sctp_transport *t;
   7988	__u32 probe_interval;
   7989
   7990	if (len < sizeof(params))
   7991		return -EINVAL;
   7992
   7993	len = sizeof(params);
   7994	if (copy_from_user(&params, optval, len))
   7995		return -EFAULT;
   7996
   7997	/* If an address other than INADDR_ANY is specified, and
   7998	 * no transport is found, then the request is invalid.
   7999	 */
   8000	if (!sctp_is_any(sk, (union sctp_addr *)&params.spi_address)) {
   8001		t = sctp_addr_id2transport(sk, &params.spi_address,
   8002					   params.spi_assoc_id);
   8003		if (!t) {
   8004			pr_debug("%s: failed no transport\n", __func__);
   8005			return -EINVAL;
   8006		}
   8007
   8008		probe_interval = jiffies_to_msecs(t->probe_interval);
   8009		goto out;
   8010	}
   8011
   8012	/* Get association, if assoc_id != SCTP_FUTURE_ASSOC and the
   8013	 * socket is a one to many style socket, and an association
   8014	 * was not found, then the id was invalid.
   8015	 */
   8016	asoc = sctp_id2assoc(sk, params.spi_assoc_id);
   8017	if (!asoc && params.spi_assoc_id != SCTP_FUTURE_ASSOC &&
   8018	    sctp_style(sk, UDP)) {
   8019		pr_debug("%s: failed no association\n", __func__);
   8020		return -EINVAL;
   8021	}
   8022
   8023	if (asoc) {
   8024		probe_interval = jiffies_to_msecs(asoc->probe_interval);
   8025		goto out;
   8026	}
   8027
   8028	probe_interval = sctp_sk(sk)->probe_interval;
   8029
   8030out:
   8031	params.spi_interval = probe_interval;
   8032	if (copy_to_user(optval, &params, len))
   8033		return -EFAULT;
   8034
   8035	if (put_user(len, optlen))
   8036		return -EFAULT;
   8037
   8038	return 0;
   8039}
   8040
   8041static int sctp_getsockopt(struct sock *sk, int level, int optname,
   8042			   char __user *optval, int __user *optlen)
   8043{
   8044	int retval = 0;
   8045	int len;
   8046
   8047	pr_debug("%s: sk:%p, optname:%d\n", __func__, sk, optname);
   8048
   8049	/* I can hardly begin to describe how wrong this is.  This is
   8050	 * so broken as to be worse than useless.  The API draft
   8051	 * REALLY is NOT helpful here...  I am not convinced that the
   8052	 * semantics of getsockopt() with a level OTHER THAN SOL_SCTP
   8053	 * are at all well-founded.
   8054	 */
   8055	if (level != SOL_SCTP) {
   8056		struct sctp_af *af = sctp_sk(sk)->pf->af;
   8057
   8058		retval = af->getsockopt(sk, level, optname, optval, optlen);
   8059		return retval;
   8060	}
   8061
   8062	if (get_user(len, optlen))
   8063		return -EFAULT;
   8064
   8065	if (len < 0)
   8066		return -EINVAL;
   8067
   8068	lock_sock(sk);
   8069
   8070	switch (optname) {
   8071	case SCTP_STATUS:
   8072		retval = sctp_getsockopt_sctp_status(sk, len, optval, optlen);
   8073		break;
   8074	case SCTP_DISABLE_FRAGMENTS:
   8075		retval = sctp_getsockopt_disable_fragments(sk, len, optval,
   8076							   optlen);
   8077		break;
   8078	case SCTP_EVENTS:
   8079		retval = sctp_getsockopt_events(sk, len, optval, optlen);
   8080		break;
   8081	case SCTP_AUTOCLOSE:
   8082		retval = sctp_getsockopt_autoclose(sk, len, optval, optlen);
   8083		break;
   8084	case SCTP_SOCKOPT_PEELOFF:
   8085		retval = sctp_getsockopt_peeloff(sk, len, optval, optlen);
   8086		break;
   8087	case SCTP_SOCKOPT_PEELOFF_FLAGS:
   8088		retval = sctp_getsockopt_peeloff_flags(sk, len, optval, optlen);
   8089		break;
   8090	case SCTP_PEER_ADDR_PARAMS:
   8091		retval = sctp_getsockopt_peer_addr_params(sk, len, optval,
   8092							  optlen);
   8093		break;
   8094	case SCTP_DELAYED_SACK:
   8095		retval = sctp_getsockopt_delayed_ack(sk, len, optval,
   8096							  optlen);
   8097		break;
   8098	case SCTP_INITMSG:
   8099		retval = sctp_getsockopt_initmsg(sk, len, optval, optlen);
   8100		break;
   8101	case SCTP_GET_PEER_ADDRS:
   8102		retval = sctp_getsockopt_peer_addrs(sk, len, optval,
   8103						    optlen);
   8104		break;
   8105	case SCTP_GET_LOCAL_ADDRS:
   8106		retval = sctp_getsockopt_local_addrs(sk, len, optval,
   8107						     optlen);
   8108		break;
   8109	case SCTP_SOCKOPT_CONNECTX3:
   8110		retval = sctp_getsockopt_connectx3(sk, len, optval, optlen);
   8111		break;
   8112	case SCTP_DEFAULT_SEND_PARAM:
   8113		retval = sctp_getsockopt_default_send_param(sk, len,
   8114							    optval, optlen);
   8115		break;
   8116	case SCTP_DEFAULT_SNDINFO:
   8117		retval = sctp_getsockopt_default_sndinfo(sk, len,
   8118							 optval, optlen);
   8119		break;
   8120	case SCTP_PRIMARY_ADDR:
   8121		retval = sctp_getsockopt_primary_addr(sk, len, optval, optlen);
   8122		break;
   8123	case SCTP_NODELAY:
   8124		retval = sctp_getsockopt_nodelay(sk, len, optval, optlen);
   8125		break;
   8126	case SCTP_RTOINFO:
   8127		retval = sctp_getsockopt_rtoinfo(sk, len, optval, optlen);
   8128		break;
   8129	case SCTP_ASSOCINFO:
   8130		retval = sctp_getsockopt_associnfo(sk, len, optval, optlen);
   8131		break;
   8132	case SCTP_I_WANT_MAPPED_V4_ADDR:
   8133		retval = sctp_getsockopt_mappedv4(sk, len, optval, optlen);
   8134		break;
   8135	case SCTP_MAXSEG:
   8136		retval = sctp_getsockopt_maxseg(sk, len, optval, optlen);
   8137		break;
   8138	case SCTP_GET_PEER_ADDR_INFO:
   8139		retval = sctp_getsockopt_peer_addr_info(sk, len, optval,
   8140							optlen);
   8141		break;
   8142	case SCTP_ADAPTATION_LAYER:
   8143		retval = sctp_getsockopt_adaptation_layer(sk, len, optval,
   8144							optlen);
   8145		break;
   8146	case SCTP_CONTEXT:
   8147		retval = sctp_getsockopt_context(sk, len, optval, optlen);
   8148		break;
   8149	case SCTP_FRAGMENT_INTERLEAVE:
   8150		retval = sctp_getsockopt_fragment_interleave(sk, len, optval,
   8151							     optlen);
   8152		break;
   8153	case SCTP_PARTIAL_DELIVERY_POINT:
   8154		retval = sctp_getsockopt_partial_delivery_point(sk, len, optval,
   8155								optlen);
   8156		break;
   8157	case SCTP_MAX_BURST:
   8158		retval = sctp_getsockopt_maxburst(sk, len, optval, optlen);
   8159		break;
   8160	case SCTP_AUTH_KEY:
   8161	case SCTP_AUTH_CHUNK:
   8162	case SCTP_AUTH_DELETE_KEY:
   8163	case SCTP_AUTH_DEACTIVATE_KEY:
   8164		retval = -EOPNOTSUPP;
   8165		break;
   8166	case SCTP_HMAC_IDENT:
   8167		retval = sctp_getsockopt_hmac_ident(sk, len, optval, optlen);
   8168		break;
   8169	case SCTP_AUTH_ACTIVE_KEY:
   8170		retval = sctp_getsockopt_active_key(sk, len, optval, optlen);
   8171		break;
   8172	case SCTP_PEER_AUTH_CHUNKS:
   8173		retval = sctp_getsockopt_peer_auth_chunks(sk, len, optval,
   8174							optlen);
   8175		break;
   8176	case SCTP_LOCAL_AUTH_CHUNKS:
   8177		retval = sctp_getsockopt_local_auth_chunks(sk, len, optval,
   8178							optlen);
   8179		break;
   8180	case SCTP_GET_ASSOC_NUMBER:
   8181		retval = sctp_getsockopt_assoc_number(sk, len, optval, optlen);
   8182		break;
   8183	case SCTP_GET_ASSOC_ID_LIST:
   8184		retval = sctp_getsockopt_assoc_ids(sk, len, optval, optlen);
   8185		break;
   8186	case SCTP_AUTO_ASCONF:
   8187		retval = sctp_getsockopt_auto_asconf(sk, len, optval, optlen);
   8188		break;
   8189	case SCTP_PEER_ADDR_THLDS:
   8190		retval = sctp_getsockopt_paddr_thresholds(sk, optval, len,
   8191							  optlen, false);
   8192		break;
   8193	case SCTP_PEER_ADDR_THLDS_V2:
   8194		retval = sctp_getsockopt_paddr_thresholds(sk, optval, len,
   8195							  optlen, true);
   8196		break;
   8197	case SCTP_GET_ASSOC_STATS:
   8198		retval = sctp_getsockopt_assoc_stats(sk, len, optval, optlen);
   8199		break;
   8200	case SCTP_RECVRCVINFO:
   8201		retval = sctp_getsockopt_recvrcvinfo(sk, len, optval, optlen);
   8202		break;
   8203	case SCTP_RECVNXTINFO:
   8204		retval = sctp_getsockopt_recvnxtinfo(sk, len, optval, optlen);
   8205		break;
   8206	case SCTP_PR_SUPPORTED:
   8207		retval = sctp_getsockopt_pr_supported(sk, len, optval, optlen);
   8208		break;
   8209	case SCTP_DEFAULT_PRINFO:
   8210		retval = sctp_getsockopt_default_prinfo(sk, len, optval,
   8211							optlen);
   8212		break;
   8213	case SCTP_PR_ASSOC_STATUS:
   8214		retval = sctp_getsockopt_pr_assocstatus(sk, len, optval,
   8215							optlen);
   8216		break;
   8217	case SCTP_PR_STREAM_STATUS:
   8218		retval = sctp_getsockopt_pr_streamstatus(sk, len, optval,
   8219							 optlen);
   8220		break;
   8221	case SCTP_RECONFIG_SUPPORTED:
   8222		retval = sctp_getsockopt_reconfig_supported(sk, len, optval,
   8223							    optlen);
   8224		break;
   8225	case SCTP_ENABLE_STREAM_RESET:
   8226		retval = sctp_getsockopt_enable_strreset(sk, len, optval,
   8227							 optlen);
   8228		break;
   8229	case SCTP_STREAM_SCHEDULER:
   8230		retval = sctp_getsockopt_scheduler(sk, len, optval,
   8231						   optlen);
   8232		break;
   8233	case SCTP_STREAM_SCHEDULER_VALUE:
   8234		retval = sctp_getsockopt_scheduler_value(sk, len, optval,
   8235							 optlen);
   8236		break;
   8237	case SCTP_INTERLEAVING_SUPPORTED:
   8238		retval = sctp_getsockopt_interleaving_supported(sk, len, optval,
   8239								optlen);
   8240		break;
   8241	case SCTP_REUSE_PORT:
   8242		retval = sctp_getsockopt_reuse_port(sk, len, optval, optlen);
   8243		break;
   8244	case SCTP_EVENT:
   8245		retval = sctp_getsockopt_event(sk, len, optval, optlen);
   8246		break;
   8247	case SCTP_ASCONF_SUPPORTED:
   8248		retval = sctp_getsockopt_asconf_supported(sk, len, optval,
   8249							  optlen);
   8250		break;
   8251	case SCTP_AUTH_SUPPORTED:
   8252		retval = sctp_getsockopt_auth_supported(sk, len, optval,
   8253							optlen);
   8254		break;
   8255	case SCTP_ECN_SUPPORTED:
   8256		retval = sctp_getsockopt_ecn_supported(sk, len, optval, optlen);
   8257		break;
   8258	case SCTP_EXPOSE_POTENTIALLY_FAILED_STATE:
   8259		retval = sctp_getsockopt_pf_expose(sk, len, optval, optlen);
   8260		break;
   8261	case SCTP_REMOTE_UDP_ENCAPS_PORT:
   8262		retval = sctp_getsockopt_encap_port(sk, len, optval, optlen);
   8263		break;
   8264	case SCTP_PLPMTUD_PROBE_INTERVAL:
   8265		retval = sctp_getsockopt_probe_interval(sk, len, optval, optlen);
   8266		break;
   8267	default:
   8268		retval = -ENOPROTOOPT;
   8269		break;
   8270	}
   8271
   8272	release_sock(sk);
   8273	return retval;
   8274}
   8275
   8276static int sctp_hash(struct sock *sk)
   8277{
   8278	/* STUB */
   8279	return 0;
   8280}
   8281
   8282static void sctp_unhash(struct sock *sk)
   8283{
   8284	/* STUB */
   8285}
   8286
   8287/* Check if port is acceptable.  Possibly find first available port.
   8288 *
   8289 * The port hash table (contained in the 'global' SCTP protocol storage
   8290 * returned by struct sctp_protocol *sctp_get_protocol()). The hash
   8291 * table is an array of 4096 lists (sctp_bind_hashbucket). Each
   8292 * list (the list number is the port number hashed out, so as you
   8293 * would expect from a hash function, all the ports in a given list have
   8294 * such a number that hashes out to the same list number; you were
   8295 * expecting that, right?); so each list has a set of ports, with a
   8296 * link to the socket (struct sock) that uses it, the port number and
   8297 * a fastreuse flag (FIXME: NPI ipg).
   8298 */
   8299static struct sctp_bind_bucket *sctp_bucket_create(
   8300	struct sctp_bind_hashbucket *head, struct net *, unsigned short snum);
   8301
   8302static int sctp_get_port_local(struct sock *sk, union sctp_addr *addr)
   8303{
   8304	struct sctp_sock *sp = sctp_sk(sk);
   8305	bool reuse = (sk->sk_reuse || sp->reuse);
   8306	struct sctp_bind_hashbucket *head; /* hash list */
   8307	struct net *net = sock_net(sk);
   8308	kuid_t uid = sock_i_uid(sk);
   8309	struct sctp_bind_bucket *pp;
   8310	unsigned short snum;
   8311	int ret;
   8312
   8313	snum = ntohs(addr->v4.sin_port);
   8314
   8315	pr_debug("%s: begins, snum:%d\n", __func__, snum);
   8316
   8317	if (snum == 0) {
   8318		/* Search for an available port. */
   8319		int low, high, remaining, index;
   8320		unsigned int rover;
   8321
   8322		inet_get_local_port_range(net, &low, &high);
   8323		remaining = (high - low) + 1;
   8324		rover = prandom_u32() % remaining + low;
   8325
   8326		do {
   8327			rover++;
   8328			if ((rover < low) || (rover > high))
   8329				rover = low;
   8330			if (inet_is_local_reserved_port(net, rover))
   8331				continue;
   8332			index = sctp_phashfn(net, rover);
   8333			head = &sctp_port_hashtable[index];
   8334			spin_lock_bh(&head->lock);
   8335			sctp_for_each_hentry(pp, &head->chain)
   8336				if ((pp->port == rover) &&
   8337				    net_eq(net, pp->net))
   8338					goto next;
   8339			break;
   8340		next:
   8341			spin_unlock_bh(&head->lock);
   8342			cond_resched();
   8343		} while (--remaining > 0);
   8344
   8345		/* Exhausted local port range during search? */
   8346		ret = 1;
   8347		if (remaining <= 0)
   8348			return ret;
   8349
   8350		/* OK, here is the one we will use.  HEAD (the port
   8351		 * hash table list entry) is non-NULL and we hold it's
   8352		 * mutex.
   8353		 */
   8354		snum = rover;
   8355	} else {
   8356		/* We are given an specific port number; we verify
   8357		 * that it is not being used. If it is used, we will
   8358		 * exahust the search in the hash list corresponding
   8359		 * to the port number (snum) - we detect that with the
   8360		 * port iterator, pp being NULL.
   8361		 */
   8362		head = &sctp_port_hashtable[sctp_phashfn(net, snum)];
   8363		spin_lock_bh(&head->lock);
   8364		sctp_for_each_hentry(pp, &head->chain) {
   8365			if ((pp->port == snum) && net_eq(pp->net, net))
   8366				goto pp_found;
   8367		}
   8368	}
   8369	pp = NULL;
   8370	goto pp_not_found;
   8371pp_found:
   8372	if (!hlist_empty(&pp->owner)) {
   8373		/* We had a port hash table hit - there is an
   8374		 * available port (pp != NULL) and it is being
   8375		 * used by other socket (pp->owner not empty); that other
   8376		 * socket is going to be sk2.
   8377		 */
   8378		struct sock *sk2;
   8379
   8380		pr_debug("%s: found a possible match\n", __func__);
   8381
   8382		if ((pp->fastreuse && reuse &&
   8383		     sk->sk_state != SCTP_SS_LISTENING) ||
   8384		    (pp->fastreuseport && sk->sk_reuseport &&
   8385		     uid_eq(pp->fastuid, uid)))
   8386			goto success;
   8387
   8388		/* Run through the list of sockets bound to the port
   8389		 * (pp->port) [via the pointers bind_next and
   8390		 * bind_pprev in the struct sock *sk2 (pp->sk)]. On each one,
   8391		 * we get the endpoint they describe and run through
   8392		 * the endpoint's list of IP (v4 or v6) addresses,
   8393		 * comparing each of the addresses with the address of
   8394		 * the socket sk. If we find a match, then that means
   8395		 * that this port/socket (sk) combination are already
   8396		 * in an endpoint.
   8397		 */
   8398		sk_for_each_bound(sk2, &pp->owner) {
   8399			struct sctp_sock *sp2 = sctp_sk(sk2);
   8400			struct sctp_endpoint *ep2 = sp2->ep;
   8401
   8402			if (sk == sk2 ||
   8403			    (reuse && (sk2->sk_reuse || sp2->reuse) &&
   8404			     sk2->sk_state != SCTP_SS_LISTENING) ||
   8405			    (sk->sk_reuseport && sk2->sk_reuseport &&
   8406			     uid_eq(uid, sock_i_uid(sk2))))
   8407				continue;
   8408
   8409			if (sctp_bind_addr_conflict(&ep2->base.bind_addr,
   8410						    addr, sp2, sp)) {
   8411				ret = 1;
   8412				goto fail_unlock;
   8413			}
   8414		}
   8415
   8416		pr_debug("%s: found a match\n", __func__);
   8417	}
   8418pp_not_found:
   8419	/* If there was a hash table miss, create a new port.  */
   8420	ret = 1;
   8421	if (!pp && !(pp = sctp_bucket_create(head, net, snum)))
   8422		goto fail_unlock;
   8423
   8424	/* In either case (hit or miss), make sure fastreuse is 1 only
   8425	 * if sk->sk_reuse is too (that is, if the caller requested
   8426	 * SO_REUSEADDR on this socket -sk-).
   8427	 */
   8428	if (hlist_empty(&pp->owner)) {
   8429		if (reuse && sk->sk_state != SCTP_SS_LISTENING)
   8430			pp->fastreuse = 1;
   8431		else
   8432			pp->fastreuse = 0;
   8433
   8434		if (sk->sk_reuseport) {
   8435			pp->fastreuseport = 1;
   8436			pp->fastuid = uid;
   8437		} else {
   8438			pp->fastreuseport = 0;
   8439		}
   8440	} else {
   8441		if (pp->fastreuse &&
   8442		    (!reuse || sk->sk_state == SCTP_SS_LISTENING))
   8443			pp->fastreuse = 0;
   8444
   8445		if (pp->fastreuseport &&
   8446		    (!sk->sk_reuseport || !uid_eq(pp->fastuid, uid)))
   8447			pp->fastreuseport = 0;
   8448	}
   8449
   8450	/* We are set, so fill up all the data in the hash table
   8451	 * entry, tie the socket list information with the rest of the
   8452	 * sockets FIXME: Blurry, NPI (ipg).
   8453	 */
   8454success:
   8455	if (!sp->bind_hash) {
   8456		inet_sk(sk)->inet_num = snum;
   8457		sk_add_bind_node(sk, &pp->owner);
   8458		sp->bind_hash = pp;
   8459	}
   8460	ret = 0;
   8461
   8462fail_unlock:
   8463	spin_unlock_bh(&head->lock);
   8464	return ret;
   8465}
   8466
   8467/* Assign a 'snum' port to the socket.  If snum == 0, an ephemeral
   8468 * port is requested.
   8469 */
   8470static int sctp_get_port(struct sock *sk, unsigned short snum)
   8471{
   8472	union sctp_addr addr;
   8473	struct sctp_af *af = sctp_sk(sk)->pf->af;
   8474
   8475	/* Set up a dummy address struct from the sk. */
   8476	af->from_sk(&addr, sk);
   8477	addr.v4.sin_port = htons(snum);
   8478
   8479	/* Note: sk->sk_num gets filled in if ephemeral port request. */
   8480	return sctp_get_port_local(sk, &addr);
   8481}
   8482
   8483/*
   8484 *  Move a socket to LISTENING state.
   8485 */
   8486static int sctp_listen_start(struct sock *sk, int backlog)
   8487{
   8488	struct sctp_sock *sp = sctp_sk(sk);
   8489	struct sctp_endpoint *ep = sp->ep;
   8490	struct crypto_shash *tfm = NULL;
   8491	char alg[32];
   8492
   8493	/* Allocate HMAC for generating cookie. */
   8494	if (!sp->hmac && sp->sctp_hmac_alg) {
   8495		sprintf(alg, "hmac(%s)", sp->sctp_hmac_alg);
   8496		tfm = crypto_alloc_shash(alg, 0, 0);
   8497		if (IS_ERR(tfm)) {
   8498			net_info_ratelimited("failed to load transform for %s: %ld\n",
   8499					     sp->sctp_hmac_alg, PTR_ERR(tfm));
   8500			return -ENOSYS;
   8501		}
   8502		sctp_sk(sk)->hmac = tfm;
   8503	}
   8504
   8505	/*
   8506	 * If a bind() or sctp_bindx() is not called prior to a listen()
   8507	 * call that allows new associations to be accepted, the system
   8508	 * picks an ephemeral port and will choose an address set equivalent
   8509	 * to binding with a wildcard address.
   8510	 *
   8511	 * This is not currently spelled out in the SCTP sockets
   8512	 * extensions draft, but follows the practice as seen in TCP
   8513	 * sockets.
   8514	 *
   8515	 */
   8516	inet_sk_set_state(sk, SCTP_SS_LISTENING);
   8517	if (!ep->base.bind_addr.port) {
   8518		if (sctp_autobind(sk))
   8519			return -EAGAIN;
   8520	} else {
   8521		if (sctp_get_port(sk, inet_sk(sk)->inet_num)) {
   8522			inet_sk_set_state(sk, SCTP_SS_CLOSED);
   8523			return -EADDRINUSE;
   8524		}
   8525	}
   8526
   8527	WRITE_ONCE(sk->sk_max_ack_backlog, backlog);
   8528	return sctp_hash_endpoint(ep);
   8529}
   8530
   8531/*
   8532 * 4.1.3 / 5.1.3 listen()
   8533 *
   8534 *   By default, new associations are not accepted for UDP style sockets.
   8535 *   An application uses listen() to mark a socket as being able to
   8536 *   accept new associations.
   8537 *
   8538 *   On TCP style sockets, applications use listen() to ready the SCTP
   8539 *   endpoint for accepting inbound associations.
   8540 *
   8541 *   On both types of endpoints a backlog of '0' disables listening.
   8542 *
   8543 *  Move a socket to LISTENING state.
   8544 */
   8545int sctp_inet_listen(struct socket *sock, int backlog)
   8546{
   8547	struct sock *sk = sock->sk;
   8548	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
   8549	int err = -EINVAL;
   8550
   8551	if (unlikely(backlog < 0))
   8552		return err;
   8553
   8554	lock_sock(sk);
   8555
   8556	/* Peeled-off sockets are not allowed to listen().  */
   8557	if (sctp_style(sk, UDP_HIGH_BANDWIDTH))
   8558		goto out;
   8559
   8560	if (sock->state != SS_UNCONNECTED)
   8561		goto out;
   8562
   8563	if (!sctp_sstate(sk, LISTENING) && !sctp_sstate(sk, CLOSED))
   8564		goto out;
   8565
   8566	/* If backlog is zero, disable listening. */
   8567	if (!backlog) {
   8568		if (sctp_sstate(sk, CLOSED))
   8569			goto out;
   8570
   8571		err = 0;
   8572		sctp_unhash_endpoint(ep);
   8573		sk->sk_state = SCTP_SS_CLOSED;
   8574		if (sk->sk_reuse || sctp_sk(sk)->reuse)
   8575			sctp_sk(sk)->bind_hash->fastreuse = 1;
   8576		goto out;
   8577	}
   8578
   8579	/* If we are already listening, just update the backlog */
   8580	if (sctp_sstate(sk, LISTENING))
   8581		WRITE_ONCE(sk->sk_max_ack_backlog, backlog);
   8582	else {
   8583		err = sctp_listen_start(sk, backlog);
   8584		if (err)
   8585			goto out;
   8586	}
   8587
   8588	err = 0;
   8589out:
   8590	release_sock(sk);
   8591	return err;
   8592}
   8593
   8594/*
   8595 * This function is done by modeling the current datagram_poll() and the
   8596 * tcp_poll().  Note that, based on these implementations, we don't
   8597 * lock the socket in this function, even though it seems that,
   8598 * ideally, locking or some other mechanisms can be used to ensure
   8599 * the integrity of the counters (sndbuf and wmem_alloc) used
   8600 * in this place.  We assume that we don't need locks either until proven
   8601 * otherwise.
   8602 *
   8603 * Another thing to note is that we include the Async I/O support
   8604 * here, again, by modeling the current TCP/UDP code.  We don't have
   8605 * a good way to test with it yet.
   8606 */
   8607__poll_t sctp_poll(struct file *file, struct socket *sock, poll_table *wait)
   8608{
   8609	struct sock *sk = sock->sk;
   8610	struct sctp_sock *sp = sctp_sk(sk);
   8611	__poll_t mask;
   8612
   8613	poll_wait(file, sk_sleep(sk), wait);
   8614
   8615	sock_rps_record_flow(sk);
   8616
   8617	/* A TCP-style listening socket becomes readable when the accept queue
   8618	 * is not empty.
   8619	 */
   8620	if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))
   8621		return (!list_empty(&sp->ep->asocs)) ?
   8622			(EPOLLIN | EPOLLRDNORM) : 0;
   8623
   8624	mask = 0;
   8625
   8626	/* Is there any exceptional events?  */
   8627	if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue))
   8628		mask |= EPOLLERR |
   8629			(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
   8630	if (sk->sk_shutdown & RCV_SHUTDOWN)
   8631		mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
   8632	if (sk->sk_shutdown == SHUTDOWN_MASK)
   8633		mask |= EPOLLHUP;
   8634
   8635	/* Is it readable?  Reconsider this code with TCP-style support.  */
   8636	if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
   8637		mask |= EPOLLIN | EPOLLRDNORM;
   8638
   8639	/* The association is either gone or not ready.  */
   8640	if (!sctp_style(sk, UDP) && sctp_sstate(sk, CLOSED))
   8641		return mask;
   8642
   8643	/* Is it writable?  */
   8644	if (sctp_writeable(sk)) {
   8645		mask |= EPOLLOUT | EPOLLWRNORM;
   8646	} else {
   8647		sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
   8648		/*
   8649		 * Since the socket is not locked, the buffer
   8650		 * might be made available after the writeable check and
   8651		 * before the bit is set.  This could cause a lost I/O
   8652		 * signal.  tcp_poll() has a race breaker for this race
   8653		 * condition.  Based on their implementation, we put
   8654		 * in the following code to cover it as well.
   8655		 */
   8656		if (sctp_writeable(sk))
   8657			mask |= EPOLLOUT | EPOLLWRNORM;
   8658	}
   8659	return mask;
   8660}
   8661
   8662/********************************************************************
   8663 * 2nd Level Abstractions
   8664 ********************************************************************/
   8665
   8666static struct sctp_bind_bucket *sctp_bucket_create(
   8667	struct sctp_bind_hashbucket *head, struct net *net, unsigned short snum)
   8668{
   8669	struct sctp_bind_bucket *pp;
   8670
   8671	pp = kmem_cache_alloc(sctp_bucket_cachep, GFP_ATOMIC);
   8672	if (pp) {
   8673		SCTP_DBG_OBJCNT_INC(bind_bucket);
   8674		pp->port = snum;
   8675		pp->fastreuse = 0;
   8676		INIT_HLIST_HEAD(&pp->owner);
   8677		pp->net = net;
   8678		hlist_add_head(&pp->node, &head->chain);
   8679	}
   8680	return pp;
   8681}
   8682
   8683/* Caller must hold hashbucket lock for this tb with local BH disabled */
   8684static void sctp_bucket_destroy(struct sctp_bind_bucket *pp)
   8685{
   8686	if (pp && hlist_empty(&pp->owner)) {
   8687		__hlist_del(&pp->node);
   8688		kmem_cache_free(sctp_bucket_cachep, pp);
   8689		SCTP_DBG_OBJCNT_DEC(bind_bucket);
   8690	}
   8691}
   8692
   8693/* Release this socket's reference to a local port.  */
   8694static inline void __sctp_put_port(struct sock *sk)
   8695{
   8696	struct sctp_bind_hashbucket *head =
   8697		&sctp_port_hashtable[sctp_phashfn(sock_net(sk),
   8698						  inet_sk(sk)->inet_num)];
   8699	struct sctp_bind_bucket *pp;
   8700
   8701	spin_lock(&head->lock);
   8702	pp = sctp_sk(sk)->bind_hash;
   8703	__sk_del_bind_node(sk);
   8704	sctp_sk(sk)->bind_hash = NULL;
   8705	inet_sk(sk)->inet_num = 0;
   8706	sctp_bucket_destroy(pp);
   8707	spin_unlock(&head->lock);
   8708}
   8709
   8710void sctp_put_port(struct sock *sk)
   8711{
   8712	local_bh_disable();
   8713	__sctp_put_port(sk);
   8714	local_bh_enable();
   8715}
   8716
   8717/*
   8718 * The system picks an ephemeral port and choose an address set equivalent
   8719 * to binding with a wildcard address.
   8720 * One of those addresses will be the primary address for the association.
   8721 * This automatically enables the multihoming capability of SCTP.
   8722 */
   8723static int sctp_autobind(struct sock *sk)
   8724{
   8725	union sctp_addr autoaddr;
   8726	struct sctp_af *af;
   8727	__be16 port;
   8728
   8729	/* Initialize a local sockaddr structure to INADDR_ANY. */
   8730	af = sctp_sk(sk)->pf->af;
   8731
   8732	port = htons(inet_sk(sk)->inet_num);
   8733	af->inaddr_any(&autoaddr, port);
   8734
   8735	return sctp_do_bind(sk, &autoaddr, af->sockaddr_len);
   8736}
   8737
   8738/* Parse out IPPROTO_SCTP CMSG headers.  Perform only minimal validation.
   8739 *
   8740 * From RFC 2292
   8741 * 4.2 The cmsghdr Structure *
   8742 *
   8743 * When ancillary data is sent or received, any number of ancillary data
   8744 * objects can be specified by the msg_control and msg_controllen members of
   8745 * the msghdr structure, because each object is preceded by
   8746 * a cmsghdr structure defining the object's length (the cmsg_len member).
   8747 * Historically Berkeley-derived implementations have passed only one object
   8748 * at a time, but this API allows multiple objects to be
   8749 * passed in a single call to sendmsg() or recvmsg(). The following example
   8750 * shows two ancillary data objects in a control buffer.
   8751 *
   8752 *   |<--------------------------- msg_controllen -------------------------->|
   8753 *   |                                                                       |
   8754 *
   8755 *   |<----- ancillary data object ----->|<----- ancillary data object ----->|
   8756 *
   8757 *   |<---------- CMSG_SPACE() --------->|<---------- CMSG_SPACE() --------->|
   8758 *   |                                   |                                   |
   8759 *
   8760 *   |<---------- cmsg_len ---------->|  |<--------- cmsg_len ----------->|  |
   8761 *
   8762 *   |<--------- CMSG_LEN() --------->|  |<-------- CMSG_LEN() ---------->|  |
   8763 *   |                                |  |                                |  |
   8764 *
   8765 *   +-----+-----+-----+--+-----------+--+-----+-----+-----+--+-----------+--+
   8766 *   |cmsg_|cmsg_|cmsg_|XX|           |XX|cmsg_|cmsg_|cmsg_|XX|           |XX|
   8767 *
   8768 *   |len  |level|type |XX|cmsg_data[]|XX|len  |level|type |XX|cmsg_data[]|XX|
   8769 *
   8770 *   +-----+-----+-----+--+-----------+--+-----+-----+-----+--+-----------+--+
   8771 *    ^
   8772 *    |
   8773 *
   8774 * msg_control
   8775 * points here
   8776 */
   8777static int sctp_msghdr_parse(const struct msghdr *msg, struct sctp_cmsgs *cmsgs)
   8778{
   8779	struct msghdr *my_msg = (struct msghdr *)msg;
   8780	struct cmsghdr *cmsg;
   8781
   8782	for_each_cmsghdr(cmsg, my_msg) {
   8783		if (!CMSG_OK(my_msg, cmsg))
   8784			return -EINVAL;
   8785
   8786		/* Should we parse this header or ignore?  */
   8787		if (cmsg->cmsg_level != IPPROTO_SCTP)
   8788			continue;
   8789
   8790		/* Strictly check lengths following example in SCM code.  */
   8791		switch (cmsg->cmsg_type) {
   8792		case SCTP_INIT:
   8793			/* SCTP Socket API Extension
   8794			 * 5.3.1 SCTP Initiation Structure (SCTP_INIT)
   8795			 *
   8796			 * This cmsghdr structure provides information for
   8797			 * initializing new SCTP associations with sendmsg().
   8798			 * The SCTP_INITMSG socket option uses this same data
   8799			 * structure.  This structure is not used for
   8800			 * recvmsg().
   8801			 *
   8802			 * cmsg_level    cmsg_type      cmsg_data[]
   8803			 * ------------  ------------   ----------------------
   8804			 * IPPROTO_SCTP  SCTP_INIT      struct sctp_initmsg
   8805			 */
   8806			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_initmsg)))
   8807				return -EINVAL;
   8808
   8809			cmsgs->init = CMSG_DATA(cmsg);
   8810			break;
   8811
   8812		case SCTP_SNDRCV:
   8813			/* SCTP Socket API Extension
   8814			 * 5.3.2 SCTP Header Information Structure(SCTP_SNDRCV)
   8815			 *
   8816			 * This cmsghdr structure specifies SCTP options for
   8817			 * sendmsg() and describes SCTP header information
   8818			 * about a received message through recvmsg().
   8819			 *
   8820			 * cmsg_level    cmsg_type      cmsg_data[]
   8821			 * ------------  ------------   ----------------------
   8822			 * IPPROTO_SCTP  SCTP_SNDRCV    struct sctp_sndrcvinfo
   8823			 */
   8824			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_sndrcvinfo)))
   8825				return -EINVAL;
   8826
   8827			cmsgs->srinfo = CMSG_DATA(cmsg);
   8828
   8829			if (cmsgs->srinfo->sinfo_flags &
   8830			    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
   8831			      SCTP_SACK_IMMEDIATELY | SCTP_SENDALL |
   8832			      SCTP_PR_SCTP_MASK | SCTP_ABORT | SCTP_EOF))
   8833				return -EINVAL;
   8834			break;
   8835
   8836		case SCTP_SNDINFO:
   8837			/* SCTP Socket API Extension
   8838			 * 5.3.4 SCTP Send Information Structure (SCTP_SNDINFO)
   8839			 *
   8840			 * This cmsghdr structure specifies SCTP options for
   8841			 * sendmsg(). This structure and SCTP_RCVINFO replaces
   8842			 * SCTP_SNDRCV which has been deprecated.
   8843			 *
   8844			 * cmsg_level    cmsg_type      cmsg_data[]
   8845			 * ------------  ------------   ---------------------
   8846			 * IPPROTO_SCTP  SCTP_SNDINFO    struct sctp_sndinfo
   8847			 */
   8848			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_sndinfo)))
   8849				return -EINVAL;
   8850
   8851			cmsgs->sinfo = CMSG_DATA(cmsg);
   8852
   8853			if (cmsgs->sinfo->snd_flags &
   8854			    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
   8855			      SCTP_SACK_IMMEDIATELY | SCTP_SENDALL |
   8856			      SCTP_PR_SCTP_MASK | SCTP_ABORT | SCTP_EOF))
   8857				return -EINVAL;
   8858			break;
   8859		case SCTP_PRINFO:
   8860			/* SCTP Socket API Extension
   8861			 * 5.3.7 SCTP PR-SCTP Information Structure (SCTP_PRINFO)
   8862			 *
   8863			 * This cmsghdr structure specifies SCTP options for sendmsg().
   8864			 *
   8865			 * cmsg_level    cmsg_type      cmsg_data[]
   8866			 * ------------  ------------   ---------------------
   8867			 * IPPROTO_SCTP  SCTP_PRINFO    struct sctp_prinfo
   8868			 */
   8869			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_prinfo)))
   8870				return -EINVAL;
   8871
   8872			cmsgs->prinfo = CMSG_DATA(cmsg);
   8873			if (cmsgs->prinfo->pr_policy & ~SCTP_PR_SCTP_MASK)
   8874				return -EINVAL;
   8875
   8876			if (cmsgs->prinfo->pr_policy == SCTP_PR_SCTP_NONE)
   8877				cmsgs->prinfo->pr_value = 0;
   8878			break;
   8879		case SCTP_AUTHINFO:
   8880			/* SCTP Socket API Extension
   8881			 * 5.3.8 SCTP AUTH Information Structure (SCTP_AUTHINFO)
   8882			 *
   8883			 * This cmsghdr structure specifies SCTP options for sendmsg().
   8884			 *
   8885			 * cmsg_level    cmsg_type      cmsg_data[]
   8886			 * ------------  ------------   ---------------------
   8887			 * IPPROTO_SCTP  SCTP_AUTHINFO  struct sctp_authinfo
   8888			 */
   8889			if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct sctp_authinfo)))
   8890				return -EINVAL;
   8891
   8892			cmsgs->authinfo = CMSG_DATA(cmsg);
   8893			break;
   8894		case SCTP_DSTADDRV4:
   8895		case SCTP_DSTADDRV6:
   8896			/* SCTP Socket API Extension
   8897			 * 5.3.9/10 SCTP Destination IPv4/6 Address Structure (SCTP_DSTADDRV4/6)
   8898			 *
   8899			 * This cmsghdr structure specifies SCTP options for sendmsg().
   8900			 *
   8901			 * cmsg_level    cmsg_type         cmsg_data[]
   8902			 * ------------  ------------   ---------------------
   8903			 * IPPROTO_SCTP  SCTP_DSTADDRV4 struct in_addr
   8904			 * ------------  ------------   ---------------------
   8905			 * IPPROTO_SCTP  SCTP_DSTADDRV6 struct in6_addr
   8906			 */
   8907			cmsgs->addrs_msg = my_msg;
   8908			break;
   8909		default:
   8910			return -EINVAL;
   8911		}
   8912	}
   8913
   8914	return 0;
   8915}
   8916
   8917/*
   8918 * Wait for a packet..
   8919 * Note: This function is the same function as in core/datagram.c
   8920 * with a few modifications to make lksctp work.
   8921 */
   8922static int sctp_wait_for_packet(struct sock *sk, int *err, long *timeo_p)
   8923{
   8924	int error;
   8925	DEFINE_WAIT(wait);
   8926
   8927	prepare_to_wait_exclusive(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
   8928
   8929	/* Socket errors? */
   8930	error = sock_error(sk);
   8931	if (error)
   8932		goto out;
   8933
   8934	if (!skb_queue_empty(&sk->sk_receive_queue))
   8935		goto ready;
   8936
   8937	/* Socket shut down?  */
   8938	if (sk->sk_shutdown & RCV_SHUTDOWN)
   8939		goto out;
   8940
   8941	/* Sequenced packets can come disconnected.  If so we report the
   8942	 * problem.
   8943	 */
   8944	error = -ENOTCONN;
   8945
   8946	/* Is there a good reason to think that we may receive some data?  */
   8947	if (list_empty(&sctp_sk(sk)->ep->asocs) && !sctp_sstate(sk, LISTENING))
   8948		goto out;
   8949
   8950	/* Handle signals.  */
   8951	if (signal_pending(current))
   8952		goto interrupted;
   8953
   8954	/* Let another process have a go.  Since we are going to sleep
   8955	 * anyway.  Note: This may cause odd behaviors if the message
   8956	 * does not fit in the user's buffer, but this seems to be the
   8957	 * only way to honor MSG_DONTWAIT realistically.
   8958	 */
   8959	release_sock(sk);
   8960	*timeo_p = schedule_timeout(*timeo_p);
   8961	lock_sock(sk);
   8962
   8963ready:
   8964	finish_wait(sk_sleep(sk), &wait);
   8965	return 0;
   8966
   8967interrupted:
   8968	error = sock_intr_errno(*timeo_p);
   8969
   8970out:
   8971	finish_wait(sk_sleep(sk), &wait);
   8972	*err = error;
   8973	return error;
   8974}
   8975
   8976/* Receive a datagram.
   8977 * Note: This is pretty much the same routine as in core/datagram.c
   8978 * with a few changes to make lksctp work.
   8979 */
   8980struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags, int *err)
   8981{
   8982	int error;
   8983	struct sk_buff *skb;
   8984	long timeo;
   8985
   8986	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
   8987
   8988	pr_debug("%s: timeo:%ld, max:%ld\n", __func__, timeo,
   8989		 MAX_SCHEDULE_TIMEOUT);
   8990
   8991	do {
   8992		/* Again only user level code calls this function,
   8993		 * so nothing interrupt level
   8994		 * will suddenly eat the receive_queue.
   8995		 *
   8996		 *  Look at current nfs client by the way...
   8997		 *  However, this function was correct in any case. 8)
   8998		 */
   8999		if (flags & MSG_PEEK) {
   9000			skb = skb_peek(&sk->sk_receive_queue);
   9001			if (skb)
   9002				refcount_inc(&skb->users);
   9003		} else {
   9004			skb = __skb_dequeue(&sk->sk_receive_queue);
   9005		}
   9006
   9007		if (skb)
   9008			return skb;
   9009
   9010		/* Caller is allowed not to check sk->sk_err before calling. */
   9011		error = sock_error(sk);
   9012		if (error)
   9013			goto no_packet;
   9014
   9015		if (sk->sk_shutdown & RCV_SHUTDOWN)
   9016			break;
   9017
   9018		if (sk_can_busy_loop(sk)) {
   9019			sk_busy_loop(sk, flags & MSG_DONTWAIT);
   9020
   9021			if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
   9022				continue;
   9023		}
   9024
   9025		/* User doesn't want to wait.  */
   9026		error = -EAGAIN;
   9027		if (!timeo)
   9028			goto no_packet;
   9029	} while (sctp_wait_for_packet(sk, err, &timeo) == 0);
   9030
   9031	return NULL;
   9032
   9033no_packet:
   9034	*err = error;
   9035	return NULL;
   9036}
   9037
   9038/* If sndbuf has changed, wake up per association sndbuf waiters.  */
   9039static void __sctp_write_space(struct sctp_association *asoc)
   9040{
   9041	struct sock *sk = asoc->base.sk;
   9042
   9043	if (sctp_wspace(asoc) <= 0)
   9044		return;
   9045
   9046	if (waitqueue_active(&asoc->wait))
   9047		wake_up_interruptible(&asoc->wait);
   9048
   9049	if (sctp_writeable(sk)) {
   9050		struct socket_wq *wq;
   9051
   9052		rcu_read_lock();
   9053		wq = rcu_dereference(sk->sk_wq);
   9054		if (wq) {
   9055			if (waitqueue_active(&wq->wait))
   9056				wake_up_interruptible(&wq->wait);
   9057
   9058			/* Note that we try to include the Async I/O support
   9059			 * here by modeling from the current TCP/UDP code.
   9060			 * We have not tested with it yet.
   9061			 */
   9062			if (!(sk->sk_shutdown & SEND_SHUTDOWN))
   9063				sock_wake_async(wq, SOCK_WAKE_SPACE, POLL_OUT);
   9064		}
   9065		rcu_read_unlock();
   9066	}
   9067}
   9068
   9069static void sctp_wake_up_waiters(struct sock *sk,
   9070				 struct sctp_association *asoc)
   9071{
   9072	struct sctp_association *tmp = asoc;
   9073
   9074	/* We do accounting for the sndbuf space per association,
   9075	 * so we only need to wake our own association.
   9076	 */
   9077	if (asoc->ep->sndbuf_policy)
   9078		return __sctp_write_space(asoc);
   9079
   9080	/* If association goes down and is just flushing its
   9081	 * outq, then just normally notify others.
   9082	 */
   9083	if (asoc->base.dead)
   9084		return sctp_write_space(sk);
   9085
   9086	/* Accounting for the sndbuf space is per socket, so we
   9087	 * need to wake up others, try to be fair and in case of
   9088	 * other associations, let them have a go first instead
   9089	 * of just doing a sctp_write_space() call.
   9090	 *
   9091	 * Note that we reach sctp_wake_up_waiters() only when
   9092	 * associations free up queued chunks, thus we are under
   9093	 * lock and the list of associations on a socket is
   9094	 * guaranteed not to change.
   9095	 */
   9096	for (tmp = list_next_entry(tmp, asocs); 1;
   9097	     tmp = list_next_entry(tmp, asocs)) {
   9098		/* Manually skip the head element. */
   9099		if (&tmp->asocs == &((sctp_sk(sk))->ep->asocs))
   9100			continue;
   9101		/* Wake up association. */
   9102		__sctp_write_space(tmp);
   9103		/* We've reached the end. */
   9104		if (tmp == asoc)
   9105			break;
   9106	}
   9107}
   9108
   9109/* Do accounting for the sndbuf space.
   9110 * Decrement the used sndbuf space of the corresponding association by the
   9111 * data size which was just transmitted(freed).
   9112 */
   9113static void sctp_wfree(struct sk_buff *skb)
   9114{
   9115	struct sctp_chunk *chunk = skb_shinfo(skb)->destructor_arg;
   9116	struct sctp_association *asoc = chunk->asoc;
   9117	struct sock *sk = asoc->base.sk;
   9118
   9119	sk_mem_uncharge(sk, skb->truesize);
   9120	sk->sk_wmem_queued -= skb->truesize + sizeof(struct sctp_chunk);
   9121	asoc->sndbuf_used -= skb->truesize + sizeof(struct sctp_chunk);
   9122	WARN_ON(refcount_sub_and_test(sizeof(struct sctp_chunk),
   9123				      &sk->sk_wmem_alloc));
   9124
   9125	if (chunk->shkey) {
   9126		struct sctp_shared_key *shkey = chunk->shkey;
   9127
   9128		/* refcnt == 2 and !list_empty mean after this release, it's
   9129		 * not being used anywhere, and it's time to notify userland
   9130		 * that this shkey can be freed if it's been deactivated.
   9131		 */
   9132		if (shkey->deactivated && !list_empty(&shkey->key_list) &&
   9133		    refcount_read(&shkey->refcnt) == 2) {
   9134			struct sctp_ulpevent *ev;
   9135
   9136			ev = sctp_ulpevent_make_authkey(asoc, shkey->key_id,
   9137							SCTP_AUTH_FREE_KEY,
   9138							GFP_KERNEL);
   9139			if (ev)
   9140				asoc->stream.si->enqueue_event(&asoc->ulpq, ev);
   9141		}
   9142		sctp_auth_shkey_release(chunk->shkey);
   9143	}
   9144
   9145	sock_wfree(skb);
   9146	sctp_wake_up_waiters(sk, asoc);
   9147
   9148	sctp_association_put(asoc);
   9149}
   9150
   9151/* Do accounting for the receive space on the socket.
   9152 * Accounting for the association is done in ulpevent.c
   9153 * We set this as a destructor for the cloned data skbs so that
   9154 * accounting is done at the correct time.
   9155 */
   9156void sctp_sock_rfree(struct sk_buff *skb)
   9157{
   9158	struct sock *sk = skb->sk;
   9159	struct sctp_ulpevent *event = sctp_skb2event(skb);
   9160
   9161	atomic_sub(event->rmem_len, &sk->sk_rmem_alloc);
   9162
   9163	/*
   9164	 * Mimic the behavior of sock_rfree
   9165	 */
   9166	sk_mem_uncharge(sk, event->rmem_len);
   9167}
   9168
   9169
   9170/* Helper function to wait for space in the sndbuf.  */
   9171static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
   9172				size_t msg_len)
   9173{
   9174	struct sock *sk = asoc->base.sk;
   9175	long current_timeo = *timeo_p;
   9176	DEFINE_WAIT(wait);
   9177	int err = 0;
   9178
   9179	pr_debug("%s: asoc:%p, timeo:%ld, msg_len:%zu\n", __func__, asoc,
   9180		 *timeo_p, msg_len);
   9181
   9182	/* Increment the association's refcnt.  */
   9183	sctp_association_hold(asoc);
   9184
   9185	/* Wait on the association specific sndbuf space. */
   9186	for (;;) {
   9187		prepare_to_wait_exclusive(&asoc->wait, &wait,
   9188					  TASK_INTERRUPTIBLE);
   9189		if (asoc->base.dead)
   9190			goto do_dead;
   9191		if (!*timeo_p)
   9192			goto do_nonblock;
   9193		if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING)
   9194			goto do_error;
   9195		if (signal_pending(current))
   9196			goto do_interrupted;
   9197		if (sk_under_memory_pressure(sk))
   9198			sk_mem_reclaim(sk);
   9199		if ((int)msg_len <= sctp_wspace(asoc) &&
   9200		    sk_wmem_schedule(sk, msg_len))
   9201			break;
   9202
   9203		/* Let another process have a go.  Since we are going
   9204		 * to sleep anyway.
   9205		 */
   9206		release_sock(sk);
   9207		current_timeo = schedule_timeout(current_timeo);
   9208		lock_sock(sk);
   9209		if (sk != asoc->base.sk)
   9210			goto do_error;
   9211
   9212		*timeo_p = current_timeo;
   9213	}
   9214
   9215out:
   9216	finish_wait(&asoc->wait, &wait);
   9217
   9218	/* Release the association's refcnt.  */
   9219	sctp_association_put(asoc);
   9220
   9221	return err;
   9222
   9223do_dead:
   9224	err = -ESRCH;
   9225	goto out;
   9226
   9227do_error:
   9228	err = -EPIPE;
   9229	goto out;
   9230
   9231do_interrupted:
   9232	err = sock_intr_errno(*timeo_p);
   9233	goto out;
   9234
   9235do_nonblock:
   9236	err = -EAGAIN;
   9237	goto out;
   9238}
   9239
   9240void sctp_data_ready(struct sock *sk)
   9241{
   9242	struct socket_wq *wq;
   9243
   9244	rcu_read_lock();
   9245	wq = rcu_dereference(sk->sk_wq);
   9246	if (skwq_has_sleeper(wq))
   9247		wake_up_interruptible_sync_poll(&wq->wait, EPOLLIN |
   9248						EPOLLRDNORM | EPOLLRDBAND);
   9249	sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN);
   9250	rcu_read_unlock();
   9251}
   9252
   9253/* If socket sndbuf has changed, wake up all per association waiters.  */
   9254void sctp_write_space(struct sock *sk)
   9255{
   9256	struct sctp_association *asoc;
   9257
   9258	/* Wake up the tasks in each wait queue.  */
   9259	list_for_each_entry(asoc, &((sctp_sk(sk))->ep->asocs), asocs) {
   9260		__sctp_write_space(asoc);
   9261	}
   9262}
   9263
   9264/* Is there any sndbuf space available on the socket?
   9265 *
   9266 * Note that sk_wmem_alloc is the sum of the send buffers on all of the
   9267 * associations on the same socket.  For a UDP-style socket with
   9268 * multiple associations, it is possible for it to be "unwriteable"
   9269 * prematurely.  I assume that this is acceptable because
   9270 * a premature "unwriteable" is better than an accidental "writeable" which
   9271 * would cause an unwanted block under certain circumstances.  For the 1-1
   9272 * UDP-style sockets or TCP-style sockets, this code should work.
   9273 *  - Daisy
   9274 */
   9275static bool sctp_writeable(struct sock *sk)
   9276{
   9277	return sk->sk_sndbuf > sk->sk_wmem_queued;
   9278}
   9279
   9280/* Wait for an association to go into ESTABLISHED state. If timeout is 0,
   9281 * returns immediately with EINPROGRESS.
   9282 */
   9283static int sctp_wait_for_connect(struct sctp_association *asoc, long *timeo_p)
   9284{
   9285	struct sock *sk = asoc->base.sk;
   9286	int err = 0;
   9287	long current_timeo = *timeo_p;
   9288	DEFINE_WAIT(wait);
   9289
   9290	pr_debug("%s: asoc:%p, timeo:%ld\n", __func__, asoc, *timeo_p);
   9291
   9292	/* Increment the association's refcnt.  */
   9293	sctp_association_hold(asoc);
   9294
   9295	for (;;) {
   9296		prepare_to_wait_exclusive(&asoc->wait, &wait,
   9297					  TASK_INTERRUPTIBLE);
   9298		if (!*timeo_p)
   9299			goto do_nonblock;
   9300		if (sk->sk_shutdown & RCV_SHUTDOWN)
   9301			break;
   9302		if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING ||
   9303		    asoc->base.dead)
   9304			goto do_error;
   9305		if (signal_pending(current))
   9306			goto do_interrupted;
   9307
   9308		if (sctp_state(asoc, ESTABLISHED))
   9309			break;
   9310
   9311		/* Let another process have a go.  Since we are going
   9312		 * to sleep anyway.
   9313		 */
   9314		release_sock(sk);
   9315		current_timeo = schedule_timeout(current_timeo);
   9316		lock_sock(sk);
   9317
   9318		*timeo_p = current_timeo;
   9319	}
   9320
   9321out:
   9322	finish_wait(&asoc->wait, &wait);
   9323
   9324	/* Release the association's refcnt.  */
   9325	sctp_association_put(asoc);
   9326
   9327	return err;
   9328
   9329do_error:
   9330	if (asoc->init_err_counter + 1 > asoc->max_init_attempts)
   9331		err = -ETIMEDOUT;
   9332	else
   9333		err = -ECONNREFUSED;
   9334	goto out;
   9335
   9336do_interrupted:
   9337	err = sock_intr_errno(*timeo_p);
   9338	goto out;
   9339
   9340do_nonblock:
   9341	err = -EINPROGRESS;
   9342	goto out;
   9343}
   9344
   9345static int sctp_wait_for_accept(struct sock *sk, long timeo)
   9346{
   9347	struct sctp_endpoint *ep;
   9348	int err = 0;
   9349	DEFINE_WAIT(wait);
   9350
   9351	ep = sctp_sk(sk)->ep;
   9352
   9353
   9354	for (;;) {
   9355		prepare_to_wait_exclusive(sk_sleep(sk), &wait,
   9356					  TASK_INTERRUPTIBLE);
   9357
   9358		if (list_empty(&ep->asocs)) {
   9359			release_sock(sk);
   9360			timeo = schedule_timeout(timeo);
   9361			lock_sock(sk);
   9362		}
   9363
   9364		err = -EINVAL;
   9365		if (!sctp_sstate(sk, LISTENING))
   9366			break;
   9367
   9368		err = 0;
   9369		if (!list_empty(&ep->asocs))
   9370			break;
   9371
   9372		err = sock_intr_errno(timeo);
   9373		if (signal_pending(current))
   9374			break;
   9375
   9376		err = -EAGAIN;
   9377		if (!timeo)
   9378			break;
   9379	}
   9380
   9381	finish_wait(sk_sleep(sk), &wait);
   9382
   9383	return err;
   9384}
   9385
   9386static void sctp_wait_for_close(struct sock *sk, long timeout)
   9387{
   9388	DEFINE_WAIT(wait);
   9389
   9390	do {
   9391		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
   9392		if (list_empty(&sctp_sk(sk)->ep->asocs))
   9393			break;
   9394		release_sock(sk);
   9395		timeout = schedule_timeout(timeout);
   9396		lock_sock(sk);
   9397	} while (!signal_pending(current) && timeout);
   9398
   9399	finish_wait(sk_sleep(sk), &wait);
   9400}
   9401
   9402static void sctp_skb_set_owner_r_frag(struct sk_buff *skb, struct sock *sk)
   9403{
   9404	struct sk_buff *frag;
   9405
   9406	if (!skb->data_len)
   9407		goto done;
   9408
   9409	/* Don't forget the fragments. */
   9410	skb_walk_frags(skb, frag)
   9411		sctp_skb_set_owner_r_frag(frag, sk);
   9412
   9413done:
   9414	sctp_skb_set_owner_r(skb, sk);
   9415}
   9416
   9417void sctp_copy_sock(struct sock *newsk, struct sock *sk,
   9418		    struct sctp_association *asoc)
   9419{
   9420	struct inet_sock *inet = inet_sk(sk);
   9421	struct inet_sock *newinet;
   9422	struct sctp_sock *sp = sctp_sk(sk);
   9423
   9424	newsk->sk_type = sk->sk_type;
   9425	newsk->sk_bound_dev_if = sk->sk_bound_dev_if;
   9426	newsk->sk_flags = sk->sk_flags;
   9427	newsk->sk_tsflags = sk->sk_tsflags;
   9428	newsk->sk_no_check_tx = sk->sk_no_check_tx;
   9429	newsk->sk_no_check_rx = sk->sk_no_check_rx;
   9430	newsk->sk_reuse = sk->sk_reuse;
   9431	sctp_sk(newsk)->reuse = sp->reuse;
   9432
   9433	newsk->sk_shutdown = sk->sk_shutdown;
   9434	newsk->sk_destruct = sctp_destruct_sock;
   9435	newsk->sk_family = sk->sk_family;
   9436	newsk->sk_protocol = IPPROTO_SCTP;
   9437	newsk->sk_backlog_rcv = sk->sk_prot->backlog_rcv;
   9438	newsk->sk_sndbuf = sk->sk_sndbuf;
   9439	newsk->sk_rcvbuf = sk->sk_rcvbuf;
   9440	newsk->sk_lingertime = sk->sk_lingertime;
   9441	newsk->sk_rcvtimeo = sk->sk_rcvtimeo;
   9442	newsk->sk_sndtimeo = sk->sk_sndtimeo;
   9443	newsk->sk_rxhash = sk->sk_rxhash;
   9444
   9445	newinet = inet_sk(newsk);
   9446
   9447	/* Initialize sk's sport, dport, rcv_saddr and daddr for
   9448	 * getsockname() and getpeername()
   9449	 */
   9450	newinet->inet_sport = inet->inet_sport;
   9451	newinet->inet_saddr = inet->inet_saddr;
   9452	newinet->inet_rcv_saddr = inet->inet_rcv_saddr;
   9453	newinet->inet_dport = htons(asoc->peer.port);
   9454	newinet->pmtudisc = inet->pmtudisc;
   9455	newinet->inet_id = prandom_u32();
   9456
   9457	newinet->uc_ttl = inet->uc_ttl;
   9458	newinet->mc_loop = 1;
   9459	newinet->mc_ttl = 1;
   9460	newinet->mc_index = 0;
   9461	newinet->mc_list = NULL;
   9462
   9463	if (newsk->sk_flags & SK_FLAGS_TIMESTAMP)
   9464		net_enable_timestamp();
   9465
   9466	/* Set newsk security attributes from original sk and connection
   9467	 * security attribute from asoc.
   9468	 */
   9469	security_sctp_sk_clone(asoc, sk, newsk);
   9470}
   9471
   9472static inline void sctp_copy_descendant(struct sock *sk_to,
   9473					const struct sock *sk_from)
   9474{
   9475	size_t ancestor_size = sizeof(struct inet_sock);
   9476
   9477	ancestor_size += sk_from->sk_prot->obj_size;
   9478	ancestor_size -= offsetof(struct sctp_sock, pd_lobby);
   9479	__inet_sk_copy_descendant(sk_to, sk_from, ancestor_size);
   9480}
   9481
   9482/* Populate the fields of the newsk from the oldsk and migrate the assoc
   9483 * and its messages to the newsk.
   9484 */
   9485static int sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
   9486			     struct sctp_association *assoc,
   9487			     enum sctp_socket_type type)
   9488{
   9489	struct sctp_sock *oldsp = sctp_sk(oldsk);
   9490	struct sctp_sock *newsp = sctp_sk(newsk);
   9491	struct sctp_bind_bucket *pp; /* hash list port iterator */
   9492	struct sctp_endpoint *newep = newsp->ep;
   9493	struct sk_buff *skb, *tmp;
   9494	struct sctp_ulpevent *event;
   9495	struct sctp_bind_hashbucket *head;
   9496	int err;
   9497
   9498	/* Migrate socket buffer sizes and all the socket level options to the
   9499	 * new socket.
   9500	 */
   9501	newsk->sk_sndbuf = oldsk->sk_sndbuf;
   9502	newsk->sk_rcvbuf = oldsk->sk_rcvbuf;
   9503	/* Brute force copy old sctp opt. */
   9504	sctp_copy_descendant(newsk, oldsk);
   9505
   9506	/* Restore the ep value that was overwritten with the above structure
   9507	 * copy.
   9508	 */
   9509	newsp->ep = newep;
   9510	newsp->hmac = NULL;
   9511
   9512	/* Hook this new socket in to the bind_hash list. */
   9513	head = &sctp_port_hashtable[sctp_phashfn(sock_net(oldsk),
   9514						 inet_sk(oldsk)->inet_num)];
   9515	spin_lock_bh(&head->lock);
   9516	pp = sctp_sk(oldsk)->bind_hash;
   9517	sk_add_bind_node(newsk, &pp->owner);
   9518	sctp_sk(newsk)->bind_hash = pp;
   9519	inet_sk(newsk)->inet_num = inet_sk(oldsk)->inet_num;
   9520	spin_unlock_bh(&head->lock);
   9521
   9522	/* Copy the bind_addr list from the original endpoint to the new
   9523	 * endpoint so that we can handle restarts properly
   9524	 */
   9525	err = sctp_bind_addr_dup(&newsp->ep->base.bind_addr,
   9526				 &oldsp->ep->base.bind_addr, GFP_KERNEL);
   9527	if (err)
   9528		return err;
   9529
   9530	/* New ep's auth_hmacs should be set if old ep's is set, in case
   9531	 * that net->sctp.auth_enable has been changed to 0 by users and
   9532	 * new ep's auth_hmacs couldn't be set in sctp_endpoint_init().
   9533	 */
   9534	if (oldsp->ep->auth_hmacs) {
   9535		err = sctp_auth_init_hmacs(newsp->ep, GFP_KERNEL);
   9536		if (err)
   9537			return err;
   9538	}
   9539
   9540	sctp_auto_asconf_init(newsp);
   9541
   9542	/* Move any messages in the old socket's receive queue that are for the
   9543	 * peeled off association to the new socket's receive queue.
   9544	 */
   9545	sctp_skb_for_each(skb, &oldsk->sk_receive_queue, tmp) {
   9546		event = sctp_skb2event(skb);
   9547		if (event->asoc == assoc) {
   9548			__skb_unlink(skb, &oldsk->sk_receive_queue);
   9549			__skb_queue_tail(&newsk->sk_receive_queue, skb);
   9550			sctp_skb_set_owner_r_frag(skb, newsk);
   9551		}
   9552	}
   9553
   9554	/* Clean up any messages pending delivery due to partial
   9555	 * delivery.   Three cases:
   9556	 * 1) No partial deliver;  no work.
   9557	 * 2) Peeling off partial delivery; keep pd_lobby in new pd_lobby.
   9558	 * 3) Peeling off non-partial delivery; move pd_lobby to receive_queue.
   9559	 */
   9560	atomic_set(&sctp_sk(newsk)->pd_mode, assoc->ulpq.pd_mode);
   9561
   9562	if (atomic_read(&sctp_sk(oldsk)->pd_mode)) {
   9563		struct sk_buff_head *queue;
   9564
   9565		/* Decide which queue to move pd_lobby skbs to. */
   9566		if (assoc->ulpq.pd_mode) {
   9567			queue = &newsp->pd_lobby;
   9568		} else
   9569			queue = &newsk->sk_receive_queue;
   9570
   9571		/* Walk through the pd_lobby, looking for skbs that
   9572		 * need moved to the new socket.
   9573		 */
   9574		sctp_skb_for_each(skb, &oldsp->pd_lobby, tmp) {
   9575			event = sctp_skb2event(skb);
   9576			if (event->asoc == assoc) {
   9577				__skb_unlink(skb, &oldsp->pd_lobby);
   9578				__skb_queue_tail(queue, skb);
   9579				sctp_skb_set_owner_r_frag(skb, newsk);
   9580			}
   9581		}
   9582
   9583		/* Clear up any skbs waiting for the partial
   9584		 * delivery to finish.
   9585		 */
   9586		if (assoc->ulpq.pd_mode)
   9587			sctp_clear_pd(oldsk, NULL);
   9588
   9589	}
   9590
   9591	sctp_for_each_rx_skb(assoc, newsk, sctp_skb_set_owner_r_frag);
   9592
   9593	/* Set the type of socket to indicate that it is peeled off from the
   9594	 * original UDP-style socket or created with the accept() call on a
   9595	 * TCP-style socket..
   9596	 */
   9597	newsp->type = type;
   9598
   9599	/* Mark the new socket "in-use" by the user so that any packets
   9600	 * that may arrive on the association after we've moved it are
   9601	 * queued to the backlog.  This prevents a potential race between
   9602	 * backlog processing on the old socket and new-packet processing
   9603	 * on the new socket.
   9604	 *
   9605	 * The caller has just allocated newsk so we can guarantee that other
   9606	 * paths won't try to lock it and then oldsk.
   9607	 */
   9608	lock_sock_nested(newsk, SINGLE_DEPTH_NESTING);
   9609	sctp_for_each_tx_datachunk(assoc, true, sctp_clear_owner_w);
   9610	sctp_assoc_migrate(assoc, newsk);
   9611	sctp_for_each_tx_datachunk(assoc, false, sctp_set_owner_w);
   9612
   9613	/* If the association on the newsk is already closed before accept()
   9614	 * is called, set RCV_SHUTDOWN flag.
   9615	 */
   9616	if (sctp_state(assoc, CLOSED) && sctp_style(newsk, TCP)) {
   9617		inet_sk_set_state(newsk, SCTP_SS_CLOSED);
   9618		newsk->sk_shutdown |= RCV_SHUTDOWN;
   9619	} else {
   9620		inet_sk_set_state(newsk, SCTP_SS_ESTABLISHED);
   9621	}
   9622
   9623	release_sock(newsk);
   9624
   9625	return 0;
   9626}
   9627
   9628
   9629/* This proto struct describes the ULP interface for SCTP.  */
   9630struct proto sctp_prot = {
   9631	.name        =	"SCTP",
   9632	.owner       =	THIS_MODULE,
   9633	.close       =	sctp_close,
   9634	.disconnect  =	sctp_disconnect,
   9635	.accept      =	sctp_accept,
   9636	.ioctl       =	sctp_ioctl,
   9637	.init        =	sctp_init_sock,
   9638	.destroy     =	sctp_destroy_sock,
   9639	.shutdown    =	sctp_shutdown,
   9640	.setsockopt  =	sctp_setsockopt,
   9641	.getsockopt  =	sctp_getsockopt,
   9642	.sendmsg     =	sctp_sendmsg,
   9643	.recvmsg     =	sctp_recvmsg,
   9644	.bind        =	sctp_bind,
   9645	.bind_add    =  sctp_bind_add,
   9646	.backlog_rcv =	sctp_backlog_rcv,
   9647	.hash        =	sctp_hash,
   9648	.unhash      =	sctp_unhash,
   9649	.no_autobind =	true,
   9650	.obj_size    =  sizeof(struct sctp_sock),
   9651	.useroffset  =  offsetof(struct sctp_sock, subscribe),
   9652	.usersize    =  offsetof(struct sctp_sock, initmsg) -
   9653				offsetof(struct sctp_sock, subscribe) +
   9654				sizeof_field(struct sctp_sock, initmsg),
   9655	.sysctl_mem  =  sysctl_sctp_mem,
   9656	.sysctl_rmem =  sysctl_sctp_rmem,
   9657	.sysctl_wmem =  sysctl_sctp_wmem,
   9658	.memory_pressure = &sctp_memory_pressure,
   9659	.enter_memory_pressure = sctp_enter_memory_pressure,
   9660	.memory_allocated = &sctp_memory_allocated,
   9661	.sockets_allocated = &sctp_sockets_allocated,
   9662};
   9663
   9664#if IS_ENABLED(CONFIG_IPV6)
   9665
   9666#include <net/transp_v6.h>
   9667static void sctp_v6_destroy_sock(struct sock *sk)
   9668{
   9669	sctp_destroy_sock(sk);
   9670	inet6_destroy_sock(sk);
   9671}
   9672
   9673struct proto sctpv6_prot = {
   9674	.name		= "SCTPv6",
   9675	.owner		= THIS_MODULE,
   9676	.close		= sctp_close,
   9677	.disconnect	= sctp_disconnect,
   9678	.accept		= sctp_accept,
   9679	.ioctl		= sctp_ioctl,
   9680	.init		= sctp_init_sock,
   9681	.destroy	= sctp_v6_destroy_sock,
   9682	.shutdown	= sctp_shutdown,
   9683	.setsockopt	= sctp_setsockopt,
   9684	.getsockopt	= sctp_getsockopt,
   9685	.sendmsg	= sctp_sendmsg,
   9686	.recvmsg	= sctp_recvmsg,
   9687	.bind		= sctp_bind,
   9688	.bind_add	= sctp_bind_add,
   9689	.backlog_rcv	= sctp_backlog_rcv,
   9690	.hash		= sctp_hash,
   9691	.unhash		= sctp_unhash,
   9692	.no_autobind	= true,
   9693	.obj_size	= sizeof(struct sctp6_sock),
   9694	.useroffset	= offsetof(struct sctp6_sock, sctp.subscribe),
   9695	.usersize	= offsetof(struct sctp6_sock, sctp.initmsg) -
   9696				offsetof(struct sctp6_sock, sctp.subscribe) +
   9697				sizeof_field(struct sctp6_sock, sctp.initmsg),
   9698	.sysctl_mem	= sysctl_sctp_mem,
   9699	.sysctl_rmem	= sysctl_sctp_rmem,
   9700	.sysctl_wmem	= sysctl_sctp_wmem,
   9701	.memory_pressure = &sctp_memory_pressure,
   9702	.enter_memory_pressure = sctp_enter_memory_pressure,
   9703	.memory_allocated = &sctp_memory_allocated,
   9704	.sockets_allocated = &sctp_sockets_allocated,
   9705};
   9706#endif /* IS_ENABLED(CONFIG_IPV6) */