linux/net/sctp/socket.c
<<
>>
Prefs
   1/* SCTP kernel implementation
   2 * (C) Copyright IBM Corp. 2001, 2004
   3 * Copyright (c) 1999-2000 Cisco, Inc.
   4 * Copyright (c) 1999-2001 Motorola, Inc.
   5 * Copyright (c) 2001-2003 Intel Corp.
   6 * Copyright (c) 2001-2002 Nokia, Inc.
   7 * Copyright (c) 2001 La Monte H.P. Yarroll
   8 *
   9 * This file is part of the SCTP kernel implementation
  10 *
  11 * These functions interface with the sockets layer to implement the
  12 * SCTP Extensions for the Sockets API.
  13 *
  14 * Note that the descriptions from the specification are USER level
  15 * functions--this file is the functions which populate the struct proto
  16 * for SCTP which is the BOTTOM of the sockets interface.
  17 *
  18 * This SCTP implementation is free software;
  19 * you can redistribute it and/or modify it under the terms of
  20 * the GNU General Public License as published by
  21 * the Free Software Foundation; either version 2, or (at your option)
  22 * any later version.
  23 *
  24 * This SCTP implementation is distributed in the hope that it
  25 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  26 *                 ************************
  27 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  28 * See the GNU General Public License for more details.
  29 *
  30 * You should have received a copy of the GNU General Public License
  31 * along with GNU CC; see the file COPYING.  If not, write to
  32 * the Free Software Foundation, 59 Temple Place - Suite 330,
  33 * Boston, MA 02111-1307, USA.
  34 *
  35 * Please send any bug reports or fixes you make to the
  36 * email address(es):
  37 *    lksctp developers <lksctp-developers@lists.sourceforge.net>
  38 *
  39 * Or submit a bug report through the following website:
  40 *    http://www.sf.net/projects/lksctp
  41 *
  42 * Written or modified by:
  43 *    La Monte H.P. Yarroll <piggy@acm.org>
  44 *    Narasimha Budihal     <narsi@refcode.org>
  45 *    Karl Knutson          <karl@athena.chicago.il.us>
  46 *    Jon Grimm             <jgrimm@us.ibm.com>
  47 *    Xingang Guo           <xingang.guo@intel.com>
  48 *    Daisy Chang           <daisyc@us.ibm.com>
  49 *    Sridhar Samudrala     <samudrala@us.ibm.com>
  50 *    Inaky Perez-Gonzalez  <inaky.gonzalez@intel.com>
  51 *    Ardelle Fan           <ardelle.fan@intel.com>
  52 *    Ryan Layer            <rmlayer@us.ibm.com>
  53 *    Anup Pemmaiah         <pemmaiah@cc.usu.edu>
  54 *    Kevin Gao             <kevin.gao@intel.com>
  55 *
  56 * Any bugs reported given to us we will try to fix... any fixes shared will
  57 * be incorporated into the next SCTP release.
  58 */
  59
  60#include <linux/types.h>
  61#include <linux/kernel.h>
  62#include <linux/wait.h>
  63#include <linux/time.h>
  64#include <linux/ip.h>
  65#include <linux/capability.h>
  66#include <linux/fcntl.h>
  67#include <linux/poll.h>
  68#include <linux/init.h>
  69#include <linux/crypto.h>
  70#include <linux/slab.h>
  71
  72#include <net/ip.h>
  73#include <net/icmp.h>
  74#include <net/route.h>
  75#include <net/ipv6.h>
  76#include <net/inet_common.h>
  77
  78#include <linux/socket.h> /* for sa_family_t */
  79#include <net/sock.h>
  80#include <net/sctp/sctp.h>
  81#include <net/sctp/sm.h>
  82
  83/* WARNING:  Please do not remove the SCTP_STATIC attribute to
  84 * any of the functions below as they are used to export functions
  85 * used by a project regression testsuite.
  86 */
  87
  88/* Forward declarations for internal helper functions. */
  89static int sctp_writeable(struct sock *sk);
  90static void sctp_wfree(struct sk_buff *skb);
  91static int sctp_wait_for_sndbuf(struct sctp_association *, long *timeo_p,
  92                                size_t msg_len);
  93static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p);
  94static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p);
  95static int sctp_wait_for_accept(struct sock *sk, long timeo);
  96static void sctp_wait_for_close(struct sock *sk, long timeo);
  97static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
  98                                        union sctp_addr *addr, int len);
  99static int sctp_bindx_add(struct sock *, struct sockaddr *, int);
 100static int sctp_bindx_rem(struct sock *, struct sockaddr *, int);
 101static int sctp_send_asconf_add_ip(struct sock *, struct sockaddr *, int);
 102static int sctp_send_asconf_del_ip(struct sock *, struct sockaddr *, int);
 103static int sctp_send_asconf(struct sctp_association *asoc,
 104                            struct sctp_chunk *chunk);
 105static int sctp_do_bind(struct sock *, union sctp_addr *, int);
 106static int sctp_autobind(struct sock *sk);
 107static void sctp_sock_migrate(struct sock *, struct sock *,
 108                              struct sctp_association *, sctp_socket_type_t);
 109static char *sctp_hmac_alg = SCTP_COOKIE_HMAC_ALG;
 110
 111extern struct kmem_cache *sctp_bucket_cachep;
 112extern int sysctl_sctp_mem[3];
 113extern int sysctl_sctp_rmem[3];
 114extern int sysctl_sctp_wmem[3];
 115
 116static int sctp_memory_pressure;
 117static atomic_t sctp_memory_allocated;
 118struct percpu_counter sctp_sockets_allocated;
 119
 120static void sctp_enter_memory_pressure(struct sock *sk)
 121{
 122        sctp_memory_pressure = 1;
 123}
 124
 125
 126/* Get the sndbuf space available at the time on the association.  */
 127static inline int sctp_wspace(struct sctp_association *asoc)
 128{
 129        int amt;
 130
 131        if (asoc->ep->sndbuf_policy)
 132                amt = asoc->sndbuf_used;
 133        else
 134                amt = sk_wmem_alloc_get(asoc->base.sk);
 135
 136        if (amt >= asoc->base.sk->sk_sndbuf) {
 137                if (asoc->base.sk->sk_userlocks & SOCK_SNDBUF_LOCK)
 138                        amt = 0;
 139                else {
 140                        amt = sk_stream_wspace(asoc->base.sk);
 141                        if (amt < 0)
 142                                amt = 0;
 143                }
 144        } else {
 145                amt = asoc->base.sk->sk_sndbuf - amt;
 146        }
 147        return amt;
 148}
 149
 150/* Increment the used sndbuf space count of the corresponding association by
 151 * the size of the outgoing data chunk.
 152 * Also, set the skb destructor for sndbuf accounting later.
 153 *
 154 * Since it is always 1-1 between chunk and skb, and also a new skb is always
 155 * allocated for chunk bundling in sctp_packet_transmit(), we can use the
 156 * destructor in the data chunk skb for the purpose of the sndbuf space
 157 * tracking.
 158 */
 159static inline void sctp_set_owner_w(struct sctp_chunk *chunk)
 160{
 161        struct sctp_association *asoc = chunk->asoc;
 162        struct sock *sk = asoc->base.sk;
 163
 164        /* The sndbuf space is tracked per association.  */
 165        sctp_association_hold(asoc);
 166
 167        skb_set_owner_w(chunk->skb, sk);
 168
 169        chunk->skb->destructor = sctp_wfree;
 170        /* Save the chunk pointer in skb for sctp_wfree to use later.  */
 171        *((struct sctp_chunk **)(chunk->skb->cb)) = chunk;
 172
 173        asoc->sndbuf_used += SCTP_DATA_SNDSIZE(chunk) +
 174                                sizeof(struct sk_buff) +
 175                                sizeof(struct sctp_chunk);
 176
 177        atomic_add(sizeof(struct sctp_chunk), &sk->sk_wmem_alloc);
 178        sk->sk_wmem_queued += chunk->skb->truesize;
 179        sk_mem_charge(sk, chunk->skb->truesize);
 180}
 181
 182/* Verify that this is a valid address. */
 183static inline int sctp_verify_addr(struct sock *sk, union sctp_addr *addr,
 184                                   int len)
 185{
 186        struct sctp_af *af;
 187
 188        /* Verify basic sockaddr. */
 189        af = sctp_sockaddr_af(sctp_sk(sk), addr, len);
 190        if (!af)
 191                return -EINVAL;
 192
 193        /* Is this a valid SCTP address?  */
 194        if (!af->addr_valid(addr, sctp_sk(sk), NULL))
 195                return -EINVAL;
 196
 197        if (!sctp_sk(sk)->pf->send_verify(sctp_sk(sk), (addr)))
 198                return -EINVAL;
 199
 200        return 0;
 201}
 202
 203/* Look up the association by its id.  If this is not a UDP-style
 204 * socket, the ID field is always ignored.
 205 */
 206struct sctp_association *sctp_id2assoc(struct sock *sk, sctp_assoc_t id)
 207{
 208        struct sctp_association *asoc = NULL;
 209
 210        /* If this is not a UDP-style socket, assoc id should be ignored. */
 211        if (!sctp_style(sk, UDP)) {
 212                /* Return NULL if the socket state is not ESTABLISHED. It
 213                 * could be a TCP-style listening socket or a socket which
 214                 * hasn't yet called connect() to establish an association.
 215                 */
 216                if (!sctp_sstate(sk, ESTABLISHED))
 217                        return NULL;
 218
 219                /* Get the first and the only association from the list. */
 220                if (!list_empty(&sctp_sk(sk)->ep->asocs))
 221                        asoc = list_entry(sctp_sk(sk)->ep->asocs.next,
 222                                          struct sctp_association, asocs);
 223                return asoc;
 224        }
 225
 226        /* Otherwise this is a UDP-style socket. */
 227        if (!id || (id == (sctp_assoc_t)-1))
 228                return NULL;
 229
 230        spin_lock_bh(&sctp_assocs_id_lock);
 231        asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id);
 232        spin_unlock_bh(&sctp_assocs_id_lock);
 233
 234        if (!asoc || (asoc->base.sk != sk) || asoc->base.dead)
 235                return NULL;
 236
 237        return asoc;
 238}
 239
 240/* Look up the transport from an address and an assoc id. If both address and
 241 * id are specified, the associations matching the address and the id should be
 242 * the same.
 243 */
 244static struct sctp_transport *sctp_addr_id2transport(struct sock *sk,
 245                                              struct sockaddr_storage *addr,
 246                                              sctp_assoc_t id)
 247{
 248        struct sctp_association *addr_asoc = NULL, *id_asoc = NULL;
 249        struct sctp_transport *transport;
 250        union sctp_addr *laddr = (union sctp_addr *)addr;
 251
 252        addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep,
 253                                               laddr,
 254                                               &transport);
 255
 256        if (!addr_asoc)
 257                return NULL;
 258
 259        id_asoc = sctp_id2assoc(sk, id);
 260        if (id_asoc && (id_asoc != addr_asoc))
 261                return NULL;
 262
 263        sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
 264                                                (union sctp_addr *)addr);
 265
 266        return transport;
 267}
 268
 269/* API 3.1.2 bind() - UDP Style Syntax
 270 * The syntax of bind() is,
 271 *
 272 *   ret = bind(int sd, struct sockaddr *addr, int addrlen);
 273 *
 274 *   sd      - the socket descriptor returned by socket().
 275 *   addr    - the address structure (struct sockaddr_in or struct
 276 *             sockaddr_in6 [RFC 2553]),
 277 *   addr_len - the size of the address structure.
 278 */
 279SCTP_STATIC int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len)
 280{
 281        int retval = 0;
 282
 283        sctp_lock_sock(sk);
 284
 285        SCTP_DEBUG_PRINTK("sctp_bind(sk: %p, addr: %p, addr_len: %d)\n",
 286                          sk, addr, addr_len);
 287
 288        /* Disallow binding twice. */
 289        if (!sctp_sk(sk)->ep->base.bind_addr.port)
 290                retval = sctp_do_bind(sk, (union sctp_addr *)addr,
 291                                      addr_len);
 292        else
 293                retval = -EINVAL;
 294
 295        sctp_release_sock(sk);
 296
 297        return retval;
 298}
 299
 300static long sctp_get_port_local(struct sock *, union sctp_addr *);
 301
 302/* Verify this is a valid sockaddr. */
 303static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt,
 304                                        union sctp_addr *addr, int len)
 305{
 306        struct sctp_af *af;
 307
 308        /* Check minimum size.  */
 309        if (len < sizeof (struct sockaddr))
 310                return NULL;
 311
 312        /* V4 mapped address are really of AF_INET family */
 313        if (addr->sa.sa_family == AF_INET6 &&
 314            ipv6_addr_v4mapped(&addr->v6.sin6_addr)) {
 315                if (!opt->pf->af_supported(AF_INET, opt))
 316                        return NULL;
 317        } else {
 318                /* Does this PF support this AF? */
 319                if (!opt->pf->af_supported(addr->sa.sa_family, opt))
 320                        return NULL;
 321        }
 322
 323        /* If we get this far, af is valid. */
 324        af = sctp_get_af_specific(addr->sa.sa_family);
 325
 326        if (len < af->sockaddr_len)
 327                return NULL;
 328
 329        return af;
 330}
 331
 332/* Bind a local address either to an endpoint or to an association.  */
 333SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len)
 334{
 335        struct sctp_sock *sp = sctp_sk(sk);
 336        struct sctp_endpoint *ep = sp->ep;
 337        struct sctp_bind_addr *bp = &ep->base.bind_addr;
 338        struct sctp_af *af;
 339        unsigned short snum;
 340        int ret = 0;
 341
 342        /* Common sockaddr verification. */
 343        af = sctp_sockaddr_af(sp, addr, len);
 344        if (!af) {
 345                SCTP_DEBUG_PRINTK("sctp_do_bind(sk: %p, newaddr: %p, len: %d) EINVAL\n",
 346                                  sk, addr, len);
 347                return -EINVAL;
 348        }
 349
 350        snum = ntohs(addr->v4.sin_port);
 351
 352        SCTP_DEBUG_PRINTK_IPADDR("sctp_do_bind(sk: %p, new addr: ",
 353                                 ", port: %d, new port: %d, len: %d)\n",
 354                                 sk,
 355                                 addr,
 356                                 bp->port, snum,
 357                                 len);
 358
 359        /* PF specific bind() address verification. */
 360        if (!sp->pf->bind_verify(sp, addr))
 361                return -EADDRNOTAVAIL;
 362
 363        /* We must either be unbound, or bind to the same port.
 364         * It's OK to allow 0 ports if we are already bound.
 365         * We'll just inhert an already bound port in this case
 366         */
 367        if (bp->port) {
 368                if (!snum)
 369                        snum = bp->port;
 370                else if (snum != bp->port) {
 371                        SCTP_DEBUG_PRINTK("sctp_do_bind:"
 372                                  " New port %d does not match existing port "
 373                                  "%d.\n", snum, bp->port);
 374                        return -EINVAL;
 375                }
 376        }
 377
 378        if (snum && snum < PROT_SOCK && !capable(CAP_NET_BIND_SERVICE))
 379                return -EACCES;
 380
 381        /* See if the address matches any of the addresses we may have
 382         * already bound before checking against other endpoints.
 383         */
 384        if (sctp_bind_addr_match(bp, addr, sp))
 385                return -EINVAL;
 386
 387        /* Make sure we are allowed to bind here.
 388         * The function sctp_get_port_local() does duplicate address
 389         * detection.
 390         */
 391        addr->v4.sin_port = htons(snum);
 392        if ((ret = sctp_get_port_local(sk, addr))) {
 393                return -EADDRINUSE;
 394        }
 395
 396        /* Refresh ephemeral port.  */
 397        if (!bp->port)
 398                bp->port = inet_sk(sk)->inet_num;
 399
 400        /* Add the address to the bind address list.
 401         * Use GFP_ATOMIC since BHs will be disabled.
 402         */
 403        ret = sctp_add_bind_addr(bp, addr, SCTP_ADDR_SRC, GFP_ATOMIC);
 404
 405        /* Copy back into socket for getsockname() use. */
 406        if (!ret) {
 407                inet_sk(sk)->inet_sport = htons(inet_sk(sk)->inet_num);
 408                af->to_sk_saddr(addr, sk);
 409        }
 410
 411        return ret;
 412}
 413
 414 /* ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks
 415 *
 416 * R1) One and only one ASCONF Chunk MAY be in transit and unacknowledged
 417 * at any one time.  If a sender, after sending an ASCONF chunk, decides
 418 * it needs to transfer another ASCONF Chunk, it MUST wait until the
 419 * ASCONF-ACK Chunk returns from the previous ASCONF Chunk before sending a
 420 * subsequent ASCONF. Note this restriction binds each side, so at any
 421 * time two ASCONF may be in-transit on any given association (one sent
 422 * from each endpoint).
 423 */
 424static int sctp_send_asconf(struct sctp_association *asoc,
 425                            struct sctp_chunk *chunk)
 426{
 427        int             retval = 0;
 428
 429        /* If there is an outstanding ASCONF chunk, queue it for later
 430         * transmission.
 431         */
 432        if (asoc->addip_last_asconf) {
 433                list_add_tail(&chunk->list, &asoc->addip_chunk_list);
 434                goto out;
 435        }
 436
 437        /* Hold the chunk until an ASCONF_ACK is received. */
 438        sctp_chunk_hold(chunk);
 439        retval = sctp_primitive_ASCONF(asoc, chunk);
 440        if (retval)
 441                sctp_chunk_free(chunk);
 442        else
 443                asoc->addip_last_asconf = chunk;
 444
 445out:
 446        return retval;
 447}
 448
 449/* Add a list of addresses as bind addresses to local endpoint or
 450 * association.
 451 *
 452 * Basically run through each address specified in the addrs/addrcnt
 453 * array/length pair, determine if it is IPv6 or IPv4 and call
 454 * sctp_do_bind() on it.
 455 *
 456 * If any of them fails, then the operation will be reversed and the
 457 * ones that were added will be removed.
 458 *
 459 * Only sctp_setsockopt_bindx() is supposed to call this function.
 460 */
 461static int sctp_bindx_add(struct sock *sk, struct sockaddr *addrs, int addrcnt)
 462{
 463        int cnt;
 464        int retval = 0;
 465        void *addr_buf;
 466        struct sockaddr *sa_addr;
 467        struct sctp_af *af;
 468
 469        SCTP_DEBUG_PRINTK("sctp_bindx_add (sk: %p, addrs: %p, addrcnt: %d)\n",
 470                          sk, addrs, addrcnt);
 471
 472        addr_buf = addrs;
 473        for (cnt = 0; cnt < addrcnt; cnt++) {
 474                /* The list may contain either IPv4 or IPv6 address;
 475                 * determine the address length for walking thru the list.
 476                 */
 477                sa_addr = (struct sockaddr *)addr_buf;
 478                af = sctp_get_af_specific(sa_addr->sa_family);
 479                if (!af) {
 480                        retval = -EINVAL;
 481                        goto err_bindx_add;
 482                }
 483
 484                retval = sctp_do_bind(sk, (union sctp_addr *)sa_addr,
 485                                      af->sockaddr_len);
 486
 487                addr_buf += af->sockaddr_len;
 488
 489err_bindx_add:
 490                if (retval < 0) {
 491                        /* Failed. Cleanup the ones that have been added */
 492                        if (cnt > 0)
 493                                sctp_bindx_rem(sk, addrs, cnt);
 494                        return retval;
 495                }
 496        }
 497
 498        return retval;
 499}
 500
 501/* Send an ASCONF chunk with Add IP address parameters to all the peers of the
 502 * associations that are part of the endpoint indicating that a list of local
 503 * addresses are added to the endpoint.
 504 *
 505 * If any of the addresses is already in the bind address list of the
 506 * association, we do not send the chunk for that association.  But it will not
 507 * affect other associations.
 508 *
 509 * Only sctp_setsockopt_bindx() is supposed to call this function.
 510 */
 511static int sctp_send_asconf_add_ip(struct sock          *sk,
 512                                   struct sockaddr      *addrs,
 513                                   int                  addrcnt)
 514{
 515        struct sctp_sock                *sp;
 516        struct sctp_endpoint            *ep;
 517        struct sctp_association         *asoc;
 518        struct sctp_bind_addr           *bp;
 519        struct sctp_chunk               *chunk;
 520        struct sctp_sockaddr_entry      *laddr;
 521        union sctp_addr                 *addr;
 522        union sctp_addr                 saveaddr;
 523        void                            *addr_buf;
 524        struct sctp_af                  *af;
 525        struct list_head                *p;
 526        int                             i;
 527        int                             retval = 0;
 528
 529        if (!sctp_addip_enable)
 530                return retval;
 531
 532        sp = sctp_sk(sk);
 533        ep = sp->ep;
 534
 535        SCTP_DEBUG_PRINTK("%s: (sk: %p, addrs: %p, addrcnt: %d)\n",
 536                          __func__, sk, addrs, addrcnt);
 537
 538        list_for_each_entry(asoc, &ep->asocs, asocs) {
 539
 540                if (!asoc->peer.asconf_capable)
 541                        continue;
 542
 543                if (asoc->peer.addip_disabled_mask & SCTP_PARAM_ADD_IP)
 544                        continue;
 545
 546                if (!sctp_state(asoc, ESTABLISHED))
 547                        continue;
 548
 549                /* Check if any address in the packed array of addresses is
 550                 * in the bind address list of the association. If so,
 551                 * do not send the asconf chunk to its peer, but continue with
 552                 * other associations.
 553                 */
 554                addr_buf = addrs;
 555                for (i = 0; i < addrcnt; i++) {
 556                        addr = (union sctp_addr *)addr_buf;
 557                        af = sctp_get_af_specific(addr->v4.sin_family);
 558                        if (!af) {
 559                                retval = -EINVAL;
 560                                goto out;
 561                        }
 562
 563                        if (sctp_assoc_lookup_laddr(asoc, addr))
 564                                break;
 565
 566                        addr_buf += af->sockaddr_len;
 567                }
 568                if (i < addrcnt)
 569                        continue;
 570
 571                /* Use the first valid address in bind addr list of
 572                 * association as Address Parameter of ASCONF CHUNK.
 573                 */
 574                bp = &asoc->base.bind_addr;
 575                p = bp->address_list.next;
 576                laddr = list_entry(p, struct sctp_sockaddr_entry, list);
 577                chunk = sctp_make_asconf_update_ip(asoc, &laddr->a, addrs,
 578                                                   addrcnt, SCTP_PARAM_ADD_IP);
 579                if (!chunk) {
 580                        retval = -ENOMEM;
 581                        goto out;
 582                }
 583
 584                retval = sctp_send_asconf(asoc, chunk);
 585                if (retval)
 586                        goto out;
 587
 588                /* Add the new addresses to the bind address list with
 589                 * use_as_src set to 0.
 590                 */
 591                addr_buf = addrs;
 592                for (i = 0; i < addrcnt; i++) {
 593                        addr = (union sctp_addr *)addr_buf;
 594                        af = sctp_get_af_specific(addr->v4.sin_family);
 595                        memcpy(&saveaddr, addr, af->sockaddr_len);
 596                        retval = sctp_add_bind_addr(bp, &saveaddr,
 597                                                    SCTP_ADDR_NEW, GFP_ATOMIC);
 598                        addr_buf += af->sockaddr_len;
 599                }
 600        }
 601
 602out:
 603        return retval;
 604}
 605
 606/* Remove a list of addresses from bind addresses list.  Do not remove the
 607 * last address.
 608 *
 609 * Basically run through each address specified in the addrs/addrcnt
 610 * array/length pair, determine if it is IPv6 or IPv4 and call
 611 * sctp_del_bind() on it.
 612 *
 613 * If any of them fails, then the operation will be reversed and the
 614 * ones that were removed will be added back.
 615 *
 616 * At least one address has to be left; if only one address is
 617 * available, the operation will return -EBUSY.
 618 *
 619 * Only sctp_setsockopt_bindx() is supposed to call this function.
 620 */
 621static int sctp_bindx_rem(struct sock *sk, struct sockaddr *addrs, int addrcnt)
 622{
 623        struct sctp_sock *sp = sctp_sk(sk);
 624        struct sctp_endpoint *ep = sp->ep;
 625        int cnt;
 626        struct sctp_bind_addr *bp = &ep->base.bind_addr;
 627        int retval = 0;
 628        void *addr_buf;
 629        union sctp_addr *sa_addr;
 630        struct sctp_af *af;
 631
 632        SCTP_DEBUG_PRINTK("sctp_bindx_rem (sk: %p, addrs: %p, addrcnt: %d)\n",
 633                          sk, addrs, addrcnt);
 634
 635        addr_buf = addrs;
 636        for (cnt = 0; cnt < addrcnt; cnt++) {
 637                /* If the bind address list is empty or if there is only one
 638                 * bind address, there is nothing more to be removed (we need
 639                 * at least one address here).
 640                 */
 641                if (list_empty(&bp->address_list) ||
 642                    (sctp_list_single_entry(&bp->address_list))) {
 643                        retval = -EBUSY;
 644                        goto err_bindx_rem;
 645                }
 646
 647                sa_addr = (union sctp_addr *)addr_buf;
 648                af = sctp_get_af_specific(sa_addr->sa.sa_family);
 649                if (!af) {
 650                        retval = -EINVAL;
 651                        goto err_bindx_rem;
 652                }
 653
 654                if (!af->addr_valid(sa_addr, sp, NULL)) {
 655                        retval = -EADDRNOTAVAIL;
 656                        goto err_bindx_rem;
 657                }
 658
 659                if (sa_addr->v4.sin_port != htons(bp->port)) {
 660                        retval = -EINVAL;
 661                        goto err_bindx_rem;
 662                }
 663
 664                /* FIXME - There is probably a need to check if sk->sk_saddr and
 665                 * sk->sk_rcv_addr are currently set to one of the addresses to
 666                 * be removed. This is something which needs to be looked into
 667                 * when we are fixing the outstanding issues with multi-homing
 668                 * socket routing and failover schemes. Refer to comments in
 669                 * sctp_do_bind(). -daisy
 670                 */
 671                retval = sctp_del_bind_addr(bp, sa_addr);
 672
 673                addr_buf += af->sockaddr_len;
 674err_bindx_rem:
 675                if (retval < 0) {
 676                        /* Failed. Add the ones that has been removed back */
 677                        if (cnt > 0)
 678                                sctp_bindx_add(sk, addrs, cnt);
 679                        return retval;
 680                }
 681        }
 682
 683        return retval;
 684}
 685
 686/* Send an ASCONF chunk with Delete IP address parameters to all the peers of
 687 * the associations that are part of the endpoint indicating that a list of
 688 * local addresses are removed from the endpoint.
 689 *
 690 * If any of the addresses is already in the bind address list of the
 691 * association, we do not send the chunk for that association.  But it will not
 692 * affect other associations.
 693 *
 694 * Only sctp_setsockopt_bindx() is supposed to call this function.
 695 */
 696static int sctp_send_asconf_del_ip(struct sock          *sk,
 697                                   struct sockaddr      *addrs,
 698                                   int                  addrcnt)
 699{
 700        struct sctp_sock        *sp;
 701        struct sctp_endpoint    *ep;
 702        struct sctp_association *asoc;
 703        struct sctp_transport   *transport;
 704        struct sctp_bind_addr   *bp;
 705        struct sctp_chunk       *chunk;
 706        union sctp_addr         *laddr;
 707        void                    *addr_buf;
 708        struct sctp_af          *af;
 709        struct sctp_sockaddr_entry *saddr;
 710        int                     i;
 711        int                     retval = 0;
 712
 713        if (!sctp_addip_enable)
 714                return retval;
 715
 716        sp = sctp_sk(sk);
 717        ep = sp->ep;
 718
 719        SCTP_DEBUG_PRINTK("%s: (sk: %p, addrs: %p, addrcnt: %d)\n",
 720                          __func__, sk, addrs, addrcnt);
 721
 722        list_for_each_entry(asoc, &ep->asocs, asocs) {
 723
 724                if (!asoc->peer.asconf_capable)
 725                        continue;
 726
 727                if (asoc->peer.addip_disabled_mask & SCTP_PARAM_DEL_IP)
 728                        continue;
 729
 730                if (!sctp_state(asoc, ESTABLISHED))
 731                        continue;
 732
 733                /* Check if any address in the packed array of addresses is
 734                 * not present in the bind address list of the association.
 735                 * If so, do not send the asconf chunk to its peer, but
 736                 * continue with other associations.
 737                 */
 738                addr_buf = addrs;
 739                for (i = 0; i < addrcnt; i++) {
 740                        laddr = (union sctp_addr *)addr_buf;
 741                        af = sctp_get_af_specific(laddr->v4.sin_family);
 742                        if (!af) {
 743                                retval = -EINVAL;
 744                                goto out;
 745                        }
 746
 747                        if (!sctp_assoc_lookup_laddr(asoc, laddr))
 748                                break;
 749
 750                        addr_buf += af->sockaddr_len;
 751                }
 752                if (i < addrcnt)
 753                        continue;
 754
 755                /* Find one address in the association's bind address list
 756                 * that is not in the packed array of addresses. This is to
 757                 * make sure that we do not delete all the addresses in the
 758                 * association.
 759                 */
 760                bp = &asoc->base.bind_addr;
 761                laddr = sctp_find_unmatch_addr(bp, (union sctp_addr *)addrs,
 762                                               addrcnt, sp);
 763                if (!laddr)
 764                        continue;
 765
 766                /* We do not need RCU protection throughout this loop
 767                 * because this is done under a socket lock from the
 768                 * setsockopt call.
 769                 */
 770                chunk = sctp_make_asconf_update_ip(asoc, laddr, addrs, addrcnt,
 771                                                   SCTP_PARAM_DEL_IP);
 772                if (!chunk) {
 773                        retval = -ENOMEM;
 774                        goto out;
 775                }
 776
 777                /* Reset use_as_src flag for the addresses in the bind address
 778                 * list that are to be deleted.
 779                 */
 780                addr_buf = addrs;
 781                for (i = 0; i < addrcnt; i++) {
 782                        laddr = (union sctp_addr *)addr_buf;
 783                        af = sctp_get_af_specific(laddr->v4.sin_family);
 784                        list_for_each_entry(saddr, &bp->address_list, list) {
 785                                if (sctp_cmp_addr_exact(&saddr->a, laddr))
 786                                        saddr->state = SCTP_ADDR_DEL;
 787                        }
 788                        addr_buf += af->sockaddr_len;
 789                }
 790
 791                /* Update the route and saddr entries for all the transports
 792                 * as some of the addresses in the bind address list are
 793                 * about to be deleted and cannot be used as source addresses.
 794                 */
 795                list_for_each_entry(transport, &asoc->peer.transport_addr_list,
 796                                        transports) {
 797                        dst_release(transport->dst);
 798                        sctp_transport_route(transport, NULL,
 799                                             sctp_sk(asoc->base.sk));
 800                }
 801
 802                retval = sctp_send_asconf(asoc, chunk);
 803        }
 804out:
 805        return retval;
 806}
 807
 808/* Helper for tunneling sctp_bindx() requests through sctp_setsockopt()
 809 *
 810 * API 8.1
 811 * int sctp_bindx(int sd, struct sockaddr *addrs, int addrcnt,
 812 *                int flags);
 813 *
 814 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses.
 815 * If the sd is an IPv6 socket, the addresses passed can either be IPv4
 816 * or IPv6 addresses.
 817 *
 818 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see
 819 * Section 3.1.2 for this usage.
 820 *
 821 * addrs is a pointer to an array of one or more socket addresses. Each
 822 * address is contained in its appropriate structure (i.e. struct
 823 * sockaddr_in or struct sockaddr_in6) the family of the address type
 824 * must be used to distinguish the address length (note that this
 825 * representation is termed a "packed array" of addresses). The caller
 826 * specifies the number of addresses in the array with addrcnt.
 827 *
 828 * On success, sctp_bindx() returns 0. On failure, sctp_bindx() returns
 829 * -1, and sets errno to the appropriate error code.
 830 *
 831 * For SCTP, the port given in each socket address must be the same, or
 832 * sctp_bindx() will fail, setting errno to EINVAL.
 833 *
 834 * The flags parameter is formed from the bitwise OR of zero or more of
 835 * the following currently defined flags:
 836 *
 837 * SCTP_BINDX_ADD_ADDR
 838 *
 839 * SCTP_BINDX_REM_ADDR
 840 *
 841 * SCTP_BINDX_ADD_ADDR directs SCTP to add the given addresses to the
 842 * association, and SCTP_BINDX_REM_ADDR directs SCTP to remove the given
 843 * addresses from the association. The two flags are mutually exclusive;
 844 * if both are given, sctp_bindx() will fail with EINVAL. A caller may
 845 * not remove all addresses from an association; sctp_bindx() will
 846 * reject such an attempt with EINVAL.
 847 *
 848 * An application can use sctp_bindx(SCTP_BINDX_ADD_ADDR) to associate
 849 * additional addresses with an endpoint after calling bind().  Or use
 850 * sctp_bindx(SCTP_BINDX_REM_ADDR) to remove some addresses a listening
 851 * socket is associated with so that no new association accepted will be
 852 * associated with those addresses. If the endpoint supports dynamic
 853 * address a SCTP_BINDX_REM_ADDR or SCTP_BINDX_ADD_ADDR may cause a
 854 * endpoint to send the appropriate message to the peer to change the
 855 * peers address lists.
 856 *
 857 * Adding and removing addresses from a connected association is
 858 * optional functionality. Implementations that do not support this
 859 * functionality should return EOPNOTSUPP.
 860 *
 861 * Basically do nothing but copying the addresses from user to kernel
 862 * land and invoking either sctp_bindx_add() or sctp_bindx_rem() on the sk.
 863 * This is used for tunneling the sctp_bindx() request through sctp_setsockopt()
 864 * from userspace.
 865 *
 866 * We don't use copy_from_user() for optimization: we first do the
 867 * sanity checks (buffer size -fast- and access check-healthy
 868 * pointer); if all of those succeed, then we can alloc the memory
 869 * (expensive operation) needed to copy the data to kernel. Then we do
 870 * the copying without checking the user space area
 871 * (__copy_from_user()).
 872 *
 873 * On exit there is no need to do sockfd_put(), sys_setsockopt() does
 874 * it.
 875 *
 876 * sk        The sk of the socket
 877 * addrs     The pointer to the addresses in user land
 878 * addrssize Size of the addrs buffer
 879 * op        Operation to perform (add or remove, see the flags of
 880 *           sctp_bindx)
 881 *
 882 * Returns 0 if ok, <0 errno code on error.
 883 */
 884SCTP_STATIC int sctp_setsockopt_bindx(struct sock* sk,
 885                                      struct sockaddr __user *addrs,
 886                                      int addrs_size, int op)
 887{
 888        struct sockaddr *kaddrs;
 889        int err;
 890        int addrcnt = 0;
 891        int walk_size = 0;
 892        struct sockaddr *sa_addr;
 893        void *addr_buf;
 894        struct sctp_af *af;
 895
 896        SCTP_DEBUG_PRINTK("sctp_setsocktopt_bindx: sk %p addrs %p"
 897                          " addrs_size %d opt %d\n", sk, addrs, addrs_size, op);
 898
 899        if (unlikely(addrs_size <= 0))
 900                return -EINVAL;
 901
 902        /* Check the user passed a healthy pointer.  */
 903        if (unlikely(!access_ok(VERIFY_READ, addrs, addrs_size)))
 904                return -EFAULT;
 905
 906        /* Alloc space for the address array in kernel memory.  */
 907        kaddrs = kmalloc(addrs_size, GFP_KERNEL);
 908        if (unlikely(!kaddrs))
 909                return -ENOMEM;
 910
 911        if (__copy_from_user(kaddrs, addrs, addrs_size)) {
 912                kfree(kaddrs);
 913                return -EFAULT;
 914        }
 915
 916        /* Walk through the addrs buffer and count the number of addresses. */
 917        addr_buf = kaddrs;
 918        while (walk_size < addrs_size) {
 919                sa_addr = (struct sockaddr *)addr_buf;
 920                af = sctp_get_af_specific(sa_addr->sa_family);
 921
 922                /* If the address family is not supported or if this address
 923                 * causes the address buffer to overflow return EINVAL.
 924                 */
 925                if (!af || (walk_size + af->sockaddr_len) > addrs_size) {
 926                        kfree(kaddrs);
 927                        return -EINVAL;
 928                }
 929                addrcnt++;
 930                addr_buf += af->sockaddr_len;
 931                walk_size += af->sockaddr_len;
 932        }
 933
 934        /* Do the work. */
 935        switch (op) {
 936        case SCTP_BINDX_ADD_ADDR:
 937                err = sctp_bindx_add(sk, kaddrs, addrcnt);
 938                if (err)
 939                        goto out;
 940                err = sctp_send_asconf_add_ip(sk, kaddrs, addrcnt);
 941                break;
 942
 943        case SCTP_BINDX_REM_ADDR:
 944                err = sctp_bindx_rem(sk, kaddrs, addrcnt);
 945                if (err)
 946                        goto out;
 947                err = sctp_send_asconf_del_ip(sk, kaddrs, addrcnt);
 948                break;
 949
 950        default:
 951                err = -EINVAL;
 952                break;
 953        }
 954
 955out:
 956        kfree(kaddrs);
 957
 958        return err;
 959}
 960
 961/* __sctp_connect(struct sock* sk, struct sockaddr *kaddrs, int addrs_size)
 962 *
 963 * Common routine for handling connect() and sctp_connectx().
 964 * Connect will come in with just a single address.
 965 */
 966static int __sctp_connect(struct sock* sk,
 967                          struct sockaddr *kaddrs,
 968                          int addrs_size,
 969                          sctp_assoc_t *assoc_id)
 970{
 971        struct sctp_sock *sp;
 972        struct sctp_endpoint *ep;
 973        struct sctp_association *asoc = NULL;
 974        struct sctp_association *asoc2;
 975        struct sctp_transport *transport;
 976        union sctp_addr to;
 977        struct sctp_af *af;
 978        sctp_scope_t scope;
 979        long timeo;
 980        int err = 0;
 981        int addrcnt = 0;
 982        int walk_size = 0;
 983        union sctp_addr *sa_addr = NULL;
 984        void *addr_buf;
 985        unsigned short port;
 986        unsigned int f_flags = 0;
 987
 988        sp = sctp_sk(sk);
 989        ep = sp->ep;
 990
 991        /* connect() cannot be done on a socket that is already in ESTABLISHED
 992         * state - UDP-style peeled off socket or a TCP-style socket that
 993         * is already connected.
 994         * It cannot be done even on a TCP-style listening socket.
 995         */
 996        if (sctp_sstate(sk, ESTABLISHED) ||
 997            (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))) {
 998                err = -EISCONN;
 999                goto out_free;
1000        }
1001
1002        /* Walk through the addrs buffer and count the number of addresses. */
1003        addr_buf = kaddrs;
1004        while (walk_size < addrs_size) {
1005                sa_addr = (union sctp_addr *)addr_buf;
1006                af = sctp_get_af_specific(sa_addr->sa.sa_family);
1007                port = ntohs(sa_addr->v4.sin_port);
1008
1009                /* If the address family is not supported or if this address
1010                 * causes the address buffer to overflow return EINVAL.
1011                 */
1012                if (!af || (walk_size + af->sockaddr_len) > addrs_size) {
1013                        err = -EINVAL;
1014                        goto out_free;
1015                }
1016
1017                /* Save current address so we can work with it */
1018                memcpy(&to, sa_addr, af->sockaddr_len);
1019
1020                err = sctp_verify_addr(sk, &to, af->sockaddr_len);
1021                if (err)
1022                        goto out_free;
1023
1024                /* Make sure the destination port is correctly set
1025                 * in all addresses.
1026                 */
1027                if (asoc && asoc->peer.port && asoc->peer.port != port)
1028                        goto out_free;
1029
1030
1031                /* Check if there already is a matching association on the
1032                 * endpoint (other than the one created here).
1033                 */
1034                asoc2 = sctp_endpoint_lookup_assoc(ep, &to, &transport);
1035                if (asoc2 && asoc2 != asoc) {
1036                        if (asoc2->state >= SCTP_STATE_ESTABLISHED)
1037                                err = -EISCONN;
1038                        else
1039                                err = -EALREADY;
1040                        goto out_free;
1041                }
1042
1043                /* If we could not find a matching association on the endpoint,
1044                 * make sure that there is no peeled-off association matching
1045                 * the peer address even on another socket.
1046                 */
1047                if (sctp_endpoint_is_peeled_off(ep, &to)) {
1048                        err = -EADDRNOTAVAIL;
1049                        goto out_free;
1050                }
1051
1052                if (!asoc) {
1053                        /* If a bind() or sctp_bindx() is not called prior to
1054                         * an sctp_connectx() call, the system picks an
1055                         * ephemeral port and will choose an address set
1056                         * equivalent to binding with a wildcard address.
1057                         */
1058                        if (!ep->base.bind_addr.port) {
1059                                if (sctp_autobind(sk)) {
1060                                        err = -EAGAIN;
1061                                        goto out_free;
1062                                }
1063                        } else {
1064                                /*
1065                                 * If an unprivileged user inherits a 1-many
1066                                 * style socket with open associations on a
1067                                 * privileged port, it MAY be permitted to
1068                                 * accept new associations, but it SHOULD NOT
1069                                 * be permitted to open new associations.
1070                                 */
1071                                if (ep->base.bind_addr.port < PROT_SOCK &&
1072                                    !capable(CAP_NET_BIND_SERVICE)) {
1073                                        err = -EACCES;
1074                                        goto out_free;
1075                                }
1076                        }
1077
1078                        scope = sctp_scope(&to);
1079                        asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL);
1080                        if (!asoc) {
1081                                err = -ENOMEM;
1082                                goto out_free;
1083                        }
1084
1085                        err = sctp_assoc_set_bind_addr_from_ep(asoc, scope,
1086                                                              GFP_KERNEL);
1087                        if (err < 0) {
1088                                goto out_free;
1089                        }
1090
1091                }
1092
1093                /* Prime the peer's transport structures.  */
1094                transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL,
1095                                                SCTP_UNKNOWN);
1096                if (!transport) {
1097                        err = -ENOMEM;
1098                        goto out_free;
1099                }
1100
1101                addrcnt++;
1102                addr_buf += af->sockaddr_len;
1103                walk_size += af->sockaddr_len;
1104        }
1105
1106        /* In case the user of sctp_connectx() wants an association
1107         * id back, assign one now.
1108         */
1109        if (assoc_id) {
1110                err = sctp_assoc_set_id(asoc, GFP_KERNEL);
1111                if (err < 0)
1112                        goto out_free;
1113        }
1114
1115        err = sctp_primitive_ASSOCIATE(asoc, NULL);
1116        if (err < 0) {
1117                goto out_free;
1118        }
1119
1120        /* Initialize sk's dport and daddr for getpeername() */
1121        inet_sk(sk)->inet_dport = htons(asoc->peer.port);
1122        af = sctp_get_af_specific(sa_addr->sa.sa_family);
1123        af->to_sk_daddr(sa_addr, sk);
1124        sk->sk_err = 0;
1125
1126        /* in-kernel sockets don't generally have a file allocated to them
1127         * if all they do is call sock_create_kern().
1128         */
1129        if (sk->sk_socket->file)
1130                f_flags = sk->sk_socket->file->f_flags;
1131
1132        timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK);
1133
1134        err = sctp_wait_for_connect(asoc, &timeo);
1135        if ((err == 0 || err == -EINPROGRESS) && assoc_id)
1136                *assoc_id = asoc->assoc_id;
1137
1138        /* Don't free association on exit. */
1139        asoc = NULL;
1140
1141out_free:
1142
1143        SCTP_DEBUG_PRINTK("About to exit __sctp_connect() free asoc: %p"
1144                          " kaddrs: %p err: %d\n",
1145                          asoc, kaddrs, err);
1146        if (asoc)
1147                sctp_association_free(asoc);
1148        return err;
1149}
1150
1151/* Helper for tunneling sctp_connectx() requests through sctp_setsockopt()
1152 *
1153 * API 8.9
1154 * int sctp_connectx(int sd, struct sockaddr *addrs, int addrcnt,
1155 *                      sctp_assoc_t *asoc);
1156 *
1157 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses.
1158 * If the sd is an IPv6 socket, the addresses passed can either be IPv4
1159 * or IPv6 addresses.
1160 *
1161 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see
1162 * Section 3.1.2 for this usage.
1163 *
1164 * addrs is a pointer to an array of one or more socket addresses. Each
1165 * address is contained in its appropriate structure (i.e. struct
1166 * sockaddr_in or struct sockaddr_in6) the family of the address type
1167 * must be used to distengish the address length (note that this
1168 * representation is termed a "packed array" of addresses). The caller
1169 * specifies the number of addresses in the array with addrcnt.
1170 *
1171 * On success, sctp_connectx() returns 0. It also sets the assoc_id to
1172 * the association id of the new association.  On failure, sctp_connectx()
1173 * returns -1, and sets errno to the appropriate error code.  The assoc_id
1174 * is not touched by the kernel.
1175 *
1176 * For SCTP, the port given in each socket address must be the same, or
1177 * sctp_connectx() will fail, setting errno to EINVAL.
1178 *
1179 * An application can use sctp_connectx to initiate an association with
1180 * an endpoint that is multi-homed.  Much like sctp_bindx() this call
1181 * allows a caller to specify multiple addresses at which a peer can be
1182 * reached.  The way the SCTP stack uses the list of addresses to set up
1183 * the association is implementation dependant.  This function only
1184 * specifies that the stack will try to make use of all the addresses in
1185 * the list when needed.
1186 *
1187 * Note that the list of addresses passed in is only used for setting up
1188 * the association.  It does not necessarily equal the set of addresses
1189 * the peer uses for the resulting association.  If the caller wants to
1190 * find out the set of peer addresses, it must use sctp_getpaddrs() to
1191 * retrieve them after the association has been set up.
1192 *
1193 * Basically do nothing but copying the addresses from user to kernel
1194 * land and invoking either sctp_connectx(). This is used for tunneling
1195 * the sctp_connectx() request through sctp_setsockopt() from userspace.
1196 *
1197 * We don't use copy_from_user() for optimization: we first do the
1198 * sanity checks (buffer size -fast- and access check-healthy
1199 * pointer); if all of those succeed, then we can alloc the memory
1200 * (expensive operation) needed to copy the data to kernel. Then we do
1201 * the copying without checking the user space area
1202 * (__copy_from_user()).
1203 *
1204 * On exit there is no need to do sockfd_put(), sys_setsockopt() does
1205 * it.
1206 *
1207 * sk        The sk of the socket
1208 * addrs     The pointer to the addresses in user land
1209 * addrssize Size of the addrs buffer
1210 *
1211 * Returns >=0 if ok, <0 errno code on error.
1212 */
1213SCTP_STATIC int __sctp_setsockopt_connectx(struct sock* sk,
1214                                      struct sockaddr __user *addrs,
1215                                      int addrs_size,
1216                                      sctp_assoc_t *assoc_id)
1217{
1218        int err = 0;
1219        struct sockaddr *kaddrs;
1220
1221        SCTP_DEBUG_PRINTK("%s - sk %p addrs %p addrs_size %d\n",
1222                          __func__, sk, addrs, addrs_size);
1223
1224        if (unlikely(addrs_size <= 0))
1225                return -EINVAL;
1226
1227        /* Check the user passed a healthy pointer.  */
1228        if (unlikely(!access_ok(VERIFY_READ, addrs, addrs_size)))
1229                return -EFAULT;
1230
1231        /* Alloc space for the address array in kernel memory.  */
1232        kaddrs = kmalloc(addrs_size, GFP_KERNEL);
1233        if (unlikely(!kaddrs))
1234                return -ENOMEM;
1235
1236        if (__copy_from_user(kaddrs, addrs, addrs_size)) {
1237                err = -EFAULT;
1238        } else {
1239                err = __sctp_connect(sk, kaddrs, addrs_size, assoc_id);
1240        }
1241
1242        kfree(kaddrs);
1243
1244        return err;
1245}
1246
1247/*
1248 * This is an older interface.  It's kept for backward compatibility
1249 * to the option that doesn't provide association id.
1250 */
1251SCTP_STATIC int sctp_setsockopt_connectx_old(struct sock* sk,
1252                                      struct sockaddr __user *addrs,
1253                                      int addrs_size)
1254{
1255        return __sctp_setsockopt_connectx(sk, addrs, addrs_size, NULL);
1256}
1257
1258/*
1259 * New interface for the API.  The since the API is done with a socket
1260 * option, to make it simple we feed back the association id is as a return
1261 * indication to the call.  Error is always negative and association id is
1262 * always positive.
1263 */
1264SCTP_STATIC int sctp_setsockopt_connectx(struct sock* sk,
1265                                      struct sockaddr __user *addrs,
1266                                      int addrs_size)
1267{
1268        sctp_assoc_t assoc_id = 0;
1269        int err = 0;
1270
1271        err = __sctp_setsockopt_connectx(sk, addrs, addrs_size, &assoc_id);
1272
1273        if (err)
1274                return err;
1275        else
1276                return assoc_id;
1277}
1278
1279/*
1280 * New (hopefully final) interface for the API.
1281 * We use the sctp_getaddrs_old structure so that use-space library
1282 * can avoid any unnecessary allocations.   The only defferent part
1283 * is that we store the actual length of the address buffer into the
1284 * addrs_num structure member.  That way we can re-use the existing
1285 * code.
1286 */
1287SCTP_STATIC int sctp_getsockopt_connectx3(struct sock* sk, int len,
1288                                        char __user *optval,
1289                                        int __user *optlen)
1290{
1291        struct sctp_getaddrs_old param;
1292        sctp_assoc_t assoc_id = 0;
1293        int err = 0;
1294
1295        if (len < sizeof(param))
1296                return -EINVAL;
1297
1298        if (copy_from_user(&param, optval, sizeof(param)))
1299                return -EFAULT;
1300
1301        err = __sctp_setsockopt_connectx(sk,
1302                        (struct sockaddr __user *)param.addrs,
1303                        param.addr_num, &assoc_id);
1304
1305        if (err == 0 || err == -EINPROGRESS) {
1306                if (copy_to_user(optval, &assoc_id, sizeof(assoc_id)))
1307                        return -EFAULT;
1308                if (put_user(sizeof(assoc_id), optlen))
1309                        return -EFAULT;
1310        }
1311
1312        return err;
1313}
1314
1315/* API 3.1.4 close() - UDP Style Syntax
1316 * Applications use close() to perform graceful shutdown (as described in
1317 * Section 10.1 of [SCTP]) on ALL the associations currently represented
1318 * by a UDP-style socket.
1319 *
1320 * The syntax is
1321 *
1322 *   ret = close(int sd);
1323 *
1324 *   sd      - the socket descriptor of the associations to be closed.
1325 *
1326 * To gracefully shutdown a specific association represented by the
1327 * UDP-style socket, an application should use the sendmsg() call,
1328 * passing no user data, but including the appropriate flag in the
1329 * ancillary data (see Section xxxx).
1330 *
1331 * If sd in the close() call is a branched-off socket representing only
1332 * one association, the shutdown is performed on that association only.
1333 *
1334 * 4.1.6 close() - TCP Style Syntax
1335 *
1336 * Applications use close() to gracefully close down an association.
1337 *
1338 * The syntax is:
1339 *
1340 *    int close(int sd);
1341 *
1342 *      sd      - the socket descriptor of the association to be closed.
1343 *
1344 * After an application calls close() on a socket descriptor, no further
1345 * socket operations will succeed on that descriptor.
1346 *
1347 * API 7.1.4 SO_LINGER
1348 *
1349 * An application using the TCP-style socket can use this option to
1350 * perform the SCTP ABORT primitive.  The linger option structure is:
1351 *
1352 *  struct  linger {
1353 *     int     l_onoff;                // option on/off
1354 *     int     l_linger;               // linger time
1355 * };
1356 *
1357 * To enable the option, set l_onoff to 1.  If the l_linger value is set
1358 * to 0, calling close() is the same as the ABORT primitive.  If the
1359 * value is set to a negative value, the setsockopt() call will return
1360 * an error.  If the value is set to a positive value linger_time, the
1361 * close() can be blocked for at most linger_time ms.  If the graceful
1362 * shutdown phase does not finish during this period, close() will
1363 * return but the graceful shutdown phase continues in the system.
1364 */
1365SCTP_STATIC void sctp_close(struct sock *sk, long timeout)
1366{
1367        struct sctp_endpoint *ep;
1368        struct sctp_association *asoc;
1369        struct list_head *pos, *temp;
1370
1371        SCTP_DEBUG_PRINTK("sctp_close(sk: 0x%p, timeout:%ld)\n", sk, timeout);
1372
1373        sctp_lock_sock(sk);
1374        sk->sk_shutdown = SHUTDOWN_MASK;
1375        sk->sk_state = SCTP_SS_CLOSING;
1376
1377        ep = sctp_sk(sk)->ep;
1378
1379        /* Walk all associations on an endpoint.  */
1380        list_for_each_safe(pos, temp, &ep->asocs) {
1381                asoc = list_entry(pos, struct sctp_association, asocs);
1382
1383                if (sctp_style(sk, TCP)) {
1384                        /* A closed association can still be in the list if
1385                         * it belongs to a TCP-style listening socket that is
1386                         * not yet accepted. If so, free it. If not, send an
1387                         * ABORT or SHUTDOWN based on the linger options.
1388                         */
1389                        if (sctp_state(asoc, CLOSED)) {
1390                                sctp_unhash_established(asoc);
1391                                sctp_association_free(asoc);
1392                                continue;
1393                        }
1394                }
1395
1396                if (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime) {
1397                        struct sctp_chunk *chunk;
1398
1399                        chunk = sctp_make_abort_user(asoc, NULL, 0);
1400                        if (chunk)
1401                                sctp_primitive_ABORT(asoc, chunk);
1402                } else
1403                        sctp_primitive_SHUTDOWN(asoc, NULL);
1404        }
1405
1406        /* Clean up any skbs sitting on the receive queue.  */
1407        sctp_queue_purge_ulpevents(&sk->sk_receive_queue);
1408        sctp_queue_purge_ulpevents(&sctp_sk(sk)->pd_lobby);
1409
1410        /* On a TCP-style socket, block for at most linger_time if set. */
1411        if (sctp_style(sk, TCP) && timeout)
1412                sctp_wait_for_close(sk, timeout);
1413
1414        /* This will run the backlog queue.  */
1415        sctp_release_sock(sk);
1416
1417        /* Supposedly, no process has access to the socket, but
1418         * the net layers still may.
1419         */
1420        sctp_local_bh_disable();
1421        sctp_bh_lock_sock(sk);
1422
1423        /* Hold the sock, since sk_common_release() will put sock_put()
1424         * and we have just a little more cleanup.
1425         */
1426        sock_hold(sk);
1427        sk_common_release(sk);
1428
1429        sctp_bh_unlock_sock(sk);
1430        sctp_local_bh_enable();
1431
1432        sock_put(sk);
1433
1434        SCTP_DBG_OBJCNT_DEC(sock);
1435}
1436
1437/* Handle EPIPE error. */
1438static int sctp_error(struct sock *sk, int flags, int err)
1439{
1440        if (err == -EPIPE)
1441                err = sock_error(sk) ? : -EPIPE;
1442        if (err == -EPIPE && !(flags & MSG_NOSIGNAL))
1443                send_sig(SIGPIPE, current, 0);
1444        return err;
1445}
1446
1447/* API 3.1.3 sendmsg() - UDP Style Syntax
1448 *
1449 * An application uses sendmsg() and recvmsg() calls to transmit data to
1450 * and receive data from its peer.
1451 *
1452 *  ssize_t sendmsg(int socket, const struct msghdr *message,
1453 *                  int flags);
1454 *
1455 *  socket  - the socket descriptor of the endpoint.
1456 *  message - pointer to the msghdr structure which contains a single
1457 *            user message and possibly some ancillary data.
1458 *
1459 *            See Section 5 for complete description of the data
1460 *            structures.
1461 *
1462 *  flags   - flags sent or received with the user message, see Section
1463 *            5 for complete description of the flags.
1464 *
1465 * Note:  This function could use a rewrite especially when explicit
1466 * connect support comes in.
1467 */
1468/* BUG:  We do not implement the equivalent of sk_stream_wait_memory(). */
1469
1470SCTP_STATIC int sctp_msghdr_parse(const struct msghdr *, sctp_cmsgs_t *);
1471
1472SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk,
1473                             struct msghdr *msg, size_t msg_len)
1474{
1475        struct sctp_sock *sp;
1476        struct sctp_endpoint *ep;
1477        struct sctp_association *new_asoc=NULL, *asoc=NULL;
1478        struct sctp_transport *transport, *chunk_tp;
1479        struct sctp_chunk *chunk;
1480        union sctp_addr to;
1481        struct sockaddr *msg_name = NULL;
1482        struct sctp_sndrcvinfo default_sinfo = { 0 };
1483        struct sctp_sndrcvinfo *sinfo;
1484        struct sctp_initmsg *sinit;
1485        sctp_assoc_t associd = 0;
1486        sctp_cmsgs_t cmsgs = { NULL };
1487        int err;
1488        sctp_scope_t scope;
1489        long timeo;
1490        __u16 sinfo_flags = 0;
1491        struct sctp_datamsg *datamsg;
1492        int msg_flags = msg->msg_flags;
1493
1494        SCTP_DEBUG_PRINTK("sctp_sendmsg(sk: %p, msg: %p, msg_len: %zu)\n",
1495                          sk, msg, msg_len);
1496
1497        err = 0;
1498        sp = sctp_sk(sk);
1499        ep = sp->ep;
1500
1501        SCTP_DEBUG_PRINTK("Using endpoint: %p.\n", ep);
1502
1503        /* We cannot send a message over a TCP-style listening socket. */
1504        if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) {
1505                err = -EPIPE;
1506                goto out_nounlock;
1507        }
1508
1509        /* Parse out the SCTP CMSGs.  */
1510        err = sctp_msghdr_parse(msg, &cmsgs);
1511
1512        if (err) {
1513                SCTP_DEBUG_PRINTK("msghdr parse err = %x\n", err);
1514                goto out_nounlock;
1515        }
1516
1517        /* Fetch the destination address for this packet.  This
1518         * address only selects the association--it is not necessarily
1519         * the address we will send to.
1520         * For a peeled-off socket, msg_name is ignored.
1521         */
1522        if (!sctp_style(sk, UDP_HIGH_BANDWIDTH) && msg->msg_name) {
1523                int msg_namelen = msg->msg_namelen;
1524
1525                err = sctp_verify_addr(sk, (union sctp_addr *)msg->msg_name,
1526                                       msg_namelen);
1527                if (err)
1528                        return err;
1529
1530                if (msg_namelen > sizeof(to))
1531                        msg_namelen = sizeof(to);
1532                memcpy(&to, msg->msg_name, msg_namelen);
1533                msg_name = msg->msg_name;
1534        }
1535
1536        sinfo = cmsgs.info;
1537        sinit = cmsgs.init;
1538
1539        /* Did the user specify SNDRCVINFO?  */
1540        if (sinfo) {
1541                sinfo_flags = sinfo->sinfo_flags;
1542                associd = sinfo->sinfo_assoc_id;
1543        }
1544
1545        SCTP_DEBUG_PRINTK("msg_len: %zu, sinfo_flags: 0x%x\n",
1546                          msg_len, sinfo_flags);
1547
1548        /* SCTP_EOF or SCTP_ABORT cannot be set on a TCP-style socket. */
1549        if (sctp_style(sk, TCP) && (sinfo_flags & (SCTP_EOF | SCTP_ABORT))) {
1550                err = -EINVAL;
1551                goto out_nounlock;
1552        }
1553
1554        /* If SCTP_EOF is set, no data can be sent. Disallow sending zero
1555         * length messages when SCTP_EOF|SCTP_ABORT is not set.
1556         * If SCTP_ABORT is set, the message length could be non zero with
1557         * the msg_iov set to the user abort reason.
1558         */
1559        if (((sinfo_flags & SCTP_EOF) && (msg_len > 0)) ||
1560            (!(sinfo_flags & (SCTP_EOF|SCTP_ABORT)) && (msg_len == 0))) {
1561                err = -EINVAL;
1562                goto out_nounlock;
1563        }
1564
1565        /* If SCTP_ADDR_OVER is set, there must be an address
1566         * specified in msg_name.
1567         */
1568        if ((sinfo_flags & SCTP_ADDR_OVER) && (!msg->msg_name)) {
1569                err = -EINVAL;
1570                goto out_nounlock;
1571        }
1572
1573        transport = NULL;
1574
1575        SCTP_DEBUG_PRINTK("About to look up association.\n");
1576
1577        sctp_lock_sock(sk);
1578
1579        /* If a msg_name has been specified, assume this is to be used.  */
1580        if (msg_name) {
1581                /* Look for a matching association on the endpoint. */
1582                asoc = sctp_endpoint_lookup_assoc(ep, &to, &transport);
1583                if (!asoc) {
1584                        /* If we could not find a matching association on the
1585                         * endpoint, make sure that it is not a TCP-style
1586                         * socket that already has an association or there is
1587                         * no peeled-off association on another socket.
1588                         */
1589                        if ((sctp_style(sk, TCP) &&
1590                             sctp_sstate(sk, ESTABLISHED)) ||
1591                            sctp_endpoint_is_peeled_off(ep, &to)) {
1592                                err = -EADDRNOTAVAIL;
1593                                goto out_unlock;
1594                        }
1595                }
1596        } else {
1597                asoc = sctp_id2assoc(sk, associd);
1598                if (!asoc) {
1599                        err = -EPIPE;
1600                        goto out_unlock;
1601                }
1602        }
1603
1604        if (asoc) {
1605                SCTP_DEBUG_PRINTK("Just looked up association: %p.\n", asoc);
1606
1607                /* We cannot send a message on a TCP-style SCTP_SS_ESTABLISHED
1608                 * socket that has an association in CLOSED state. This can
1609                 * happen when an accepted socket has an association that is
1610                 * already CLOSED.
1611                 */
1612                if (sctp_state(asoc, CLOSED) && sctp_style(sk, TCP)) {
1613                        err = -EPIPE;
1614                        goto out_unlock;
1615                }
1616
1617                if (sinfo_flags & SCTP_EOF) {
1618                        SCTP_DEBUG_PRINTK("Shutting down association: %p\n",
1619                                          asoc);
1620                        sctp_primitive_SHUTDOWN(asoc, NULL);
1621                        err = 0;
1622                        goto out_unlock;
1623                }
1624                if (sinfo_flags & SCTP_ABORT) {
1625
1626                        chunk = sctp_make_abort_user(asoc, msg, msg_len);
1627                        if (!chunk) {
1628                                err = -ENOMEM;
1629                                goto out_unlock;
1630                        }
1631
1632                        SCTP_DEBUG_PRINTK("Aborting association: %p\n", asoc);
1633                        sctp_primitive_ABORT(asoc, chunk);
1634                        err = 0;
1635                        goto out_unlock;
1636                }
1637        }
1638
1639        /* Do we need to create the association?  */
1640        if (!asoc) {
1641                SCTP_DEBUG_PRINTK("There is no association yet.\n");
1642
1643                if (sinfo_flags & (SCTP_EOF | SCTP_ABORT)) {
1644                        err = -EINVAL;
1645                        goto out_unlock;
1646                }
1647
1648                /* Check for invalid stream against the stream counts,
1649                 * either the default or the user specified stream counts.
1650                 */
1651                if (sinfo) {
1652                        if (!sinit || (sinit && !sinit->sinit_num_ostreams)) {
1653                                /* Check against the defaults. */
1654                                if (sinfo->sinfo_stream >=
1655                                    sp->initmsg.sinit_num_ostreams) {
1656                                        err = -EINVAL;
1657                                        goto out_unlock;
1658                                }
1659                        } else {
1660                                /* Check against the requested.  */
1661                                if (sinfo->sinfo_stream >=
1662                                    sinit->sinit_num_ostreams) {
1663                                        err = -EINVAL;
1664                                        goto out_unlock;
1665                                }
1666                        }
1667                }
1668
1669                /*
1670                 * API 3.1.2 bind() - UDP Style Syntax
1671                 * If a bind() or sctp_bindx() is not called prior to a
1672                 * sendmsg() call that initiates a new association, the
1673                 * system picks an ephemeral port and will choose an address
1674                 * set equivalent to binding with a wildcard address.
1675                 */
1676                if (!ep->base.bind_addr.port) {
1677                        if (sctp_autobind(sk)) {
1678                                err = -EAGAIN;
1679                                goto out_unlock;
1680                        }
1681                } else {
1682                        /*
1683                         * If an unprivileged user inherits a one-to-many
1684                         * style socket with open associations on a privileged
1685                         * port, it MAY be permitted to accept new associations,
1686                         * but it SHOULD NOT be permitted to open new
1687                         * associations.
1688                         */
1689                        if (ep->base.bind_addr.port < PROT_SOCK &&
1690                            !capable(CAP_NET_BIND_SERVICE)) {
1691                                err = -EACCES;
1692                                goto out_unlock;
1693                        }
1694                }
1695
1696                scope = sctp_scope(&to);
1697                new_asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL);
1698                if (!new_asoc) {
1699                        err = -ENOMEM;
1700                        goto out_unlock;
1701                }
1702                asoc = new_asoc;
1703                err = sctp_assoc_set_bind_addr_from_ep(asoc, scope, GFP_KERNEL);
1704                if (err < 0) {
1705                        err = -ENOMEM;
1706                        goto out_free;
1707                }
1708
1709                /* If the SCTP_INIT ancillary data is specified, set all
1710                 * the association init values accordingly.
1711                 */
1712                if (sinit) {
1713                        if (sinit->sinit_num_ostreams) {
1714                                asoc->c.sinit_num_ostreams =
1715                                        sinit->sinit_num_ostreams;
1716                        }
1717                        if (sinit->sinit_max_instreams) {
1718                                asoc->c.sinit_max_instreams =
1719                                        sinit->sinit_max_instreams;
1720                        }
1721                        if (sinit->sinit_max_attempts) {
1722                                asoc->max_init_attempts
1723                                        = sinit->sinit_max_attempts;
1724                        }
1725                        if (sinit->sinit_max_init_timeo) {
1726                                asoc->max_init_timeo =
1727                                 msecs_to_jiffies(sinit->sinit_max_init_timeo);
1728                        }
1729                }
1730
1731                /* Prime the peer's transport structures.  */
1732                transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL, SCTP_UNKNOWN);
1733                if (!transport) {
1734                        err = -ENOMEM;
1735                        goto out_free;
1736                }
1737        }
1738
1739        /* ASSERT: we have a valid association at this point.  */
1740        SCTP_DEBUG_PRINTK("We have a valid association.\n");
1741
1742        if (!sinfo) {
1743                /* If the user didn't specify SNDRCVINFO, make up one with
1744                 * some defaults.
1745                 */
1746                default_sinfo.sinfo_stream = asoc->default_stream;
1747                default_sinfo.sinfo_flags = asoc->default_flags;
1748                default_sinfo.sinfo_ppid = asoc->default_ppid;
1749                default_sinfo.sinfo_context = asoc->default_context;
1750                default_sinfo.sinfo_timetolive = asoc->default_timetolive;
1751                default_sinfo.sinfo_assoc_id = sctp_assoc2id(asoc);
1752                sinfo = &default_sinfo;
1753        }
1754
1755        /* API 7.1.7, the sndbuf size per association bounds the
1756         * maximum size of data that can be sent in a single send call.
1757         */
1758        if (msg_len > sk->sk_sndbuf) {
1759                err = -EMSGSIZE;
1760                goto out_free;
1761        }
1762
1763        if (asoc->pmtu_pending)
1764                sctp_assoc_pending_pmtu(asoc);
1765
1766        /* If fragmentation is disabled and the message length exceeds the
1767         * association fragmentation point, return EMSGSIZE.  The I-D
1768         * does not specify what this error is, but this looks like
1769         * a great fit.
1770         */
1771        if (sctp_sk(sk)->disable_fragments && (msg_len > asoc->frag_point)) {
1772                err = -EMSGSIZE;
1773                goto out_free;
1774        }
1775
1776        if (sinfo) {
1777                /* Check for invalid stream. */
1778                if (sinfo->sinfo_stream >= asoc->c.sinit_num_ostreams) {
1779                        err = -EINVAL;
1780                        goto out_free;
1781                }
1782        }
1783
1784        timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT);
1785        if (!sctp_wspace(asoc)) {
1786                err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len);
1787                if (err)
1788                        goto out_free;
1789        }
1790
1791        /* If an address is passed with the sendto/sendmsg call, it is used
1792         * to override the primary destination address in the TCP model, or
1793         * when SCTP_ADDR_OVER flag is set in the UDP model.
1794         */
1795        if ((sctp_style(sk, TCP) && msg_name) ||
1796            (sinfo_flags & SCTP_ADDR_OVER)) {
1797                chunk_tp = sctp_assoc_lookup_paddr(asoc, &to);
1798                if (!chunk_tp) {
1799                        err = -EINVAL;
1800                        goto out_free;
1801                }
1802        } else
1803                chunk_tp = NULL;
1804
1805        /* Auto-connect, if we aren't connected already. */
1806        if (sctp_state(asoc, CLOSED)) {
1807                err = sctp_primitive_ASSOCIATE(asoc, NULL);
1808                if (err < 0)
1809                        goto out_free;
1810                SCTP_DEBUG_PRINTK("We associated primitively.\n");
1811        }
1812
1813        /* Break the message into multiple chunks of maximum size. */
1814        datamsg = sctp_datamsg_from_user(asoc, sinfo, msg, msg_len);
1815        if (!datamsg) {
1816                err = -ENOMEM;
1817                goto out_free;
1818        }
1819
1820        /* Now send the (possibly) fragmented message. */
1821        list_for_each_entry(chunk, &datamsg->chunks, frag_list) {
1822                sctp_chunk_hold(chunk);
1823
1824                /* Do accounting for the write space.  */
1825                sctp_set_owner_w(chunk);
1826
1827                chunk->transport = chunk_tp;
1828        }
1829
1830        /* Send it to the lower layers.  Note:  all chunks
1831         * must either fail or succeed.   The lower layer
1832         * works that way today.  Keep it that way or this
1833         * breaks.
1834         */
1835        err = sctp_primitive_SEND(asoc, datamsg);
1836        /* Did the lower layer accept the chunk? */
1837        if (err)
1838                sctp_datamsg_free(datamsg);
1839        else
1840                sctp_datamsg_put(datamsg);
1841
1842        SCTP_DEBUG_PRINTK("We sent primitively.\n");
1843
1844        if (err)
1845                goto out_free;
1846        else
1847                err = msg_len;
1848
1849        /* If we are already past ASSOCIATE, the lower
1850         * layers are responsible for association cleanup.
1851         */
1852        goto out_unlock;
1853
1854out_free:
1855        if (new_asoc)
1856                sctp_association_free(asoc);
1857out_unlock:
1858        sctp_release_sock(sk);
1859
1860out_nounlock:
1861        return sctp_error(sk, msg_flags, err);
1862
1863#if 0
1864do_sock_err:
1865        if (msg_len)
1866                err = msg_len;
1867        else
1868                err = sock_error(sk);
1869        goto out;
1870
1871do_interrupted:
1872        if (msg_len)
1873                err = msg_len;
1874        goto out;
1875#endif /* 0 */
1876}
1877
1878/* This is an extended version of skb_pull() that removes the data from the
1879 * start of a skb even when data is spread across the list of skb's in the
1880 * frag_list. len specifies the total amount of data that needs to be removed.
1881 * when 'len' bytes could be removed from the skb, it returns 0.
1882 * If 'len' exceeds the total skb length,  it returns the no. of bytes that
1883 * could not be removed.
1884 */
1885static int sctp_skb_pull(struct sk_buff *skb, int len)
1886{
1887        struct sk_buff *list;
1888        int skb_len = skb_headlen(skb);
1889        int rlen;
1890
1891        if (len <= skb_len) {
1892                __skb_pull(skb, len);
1893                return 0;
1894        }
1895        len -= skb_len;
1896        __skb_pull(skb, skb_len);
1897
1898        skb_walk_frags(skb, list) {
1899                rlen = sctp_skb_pull(list, len);
1900                skb->len -= (len-rlen);
1901                skb->data_len -= (len-rlen);
1902
1903                if (!rlen)
1904                        return 0;
1905
1906                len = rlen;
1907        }
1908
1909        return len;
1910}
1911
1912/* API 3.1.3  recvmsg() - UDP Style Syntax
1913 *
1914 *  ssize_t recvmsg(int socket, struct msghdr *message,
1915 *                    int flags);
1916 *
1917 *  socket  - the socket descriptor of the endpoint.
1918 *  message - pointer to the msghdr structure which contains a single
1919 *            user message and possibly some ancillary data.
1920 *
1921 *            See Section 5 for complete description of the data
1922 *            structures.
1923 *
1924 *  flags   - flags sent or received with the user message, see Section
1925 *            5 for complete description of the flags.
1926 */
1927static struct sk_buff *sctp_skb_recv_datagram(struct sock *, int, int, int *);
1928
1929SCTP_STATIC int sctp_recvmsg(struct kiocb *iocb, struct sock *sk,
1930                             struct msghdr *msg, size_t len, int noblock,
1931                             int flags, int *addr_len)
1932{
1933        struct sctp_ulpevent *event = NULL;
1934        struct sctp_sock *sp = sctp_sk(sk);
1935        struct sk_buff *skb;
1936        int copied;
1937        int err = 0;
1938        int skb_len;
1939
1940        SCTP_DEBUG_PRINTK("sctp_recvmsg(%s: %p, %s: %p, %s: %zd, %s: %d, %s: "
1941                          "0x%x, %s: %p)\n", "sk", sk, "msghdr", msg,
1942                          "len", len, "knoblauch", noblock,
1943                          "flags", flags, "addr_len", addr_len);
1944
1945        sctp_lock_sock(sk);
1946
1947        if (sctp_style(sk, TCP) && !sctp_sstate(sk, ESTABLISHED)) {
1948                err = -ENOTCONN;
1949                goto out;
1950        }
1951
1952        skb = sctp_skb_recv_datagram(sk, flags, noblock, &err);
1953        if (!skb)
1954                goto out;
1955
1956        /* Get the total length of the skb including any skb's in the
1957         * frag_list.
1958         */
1959        skb_len = skb->len;
1960
1961        copied = skb_len;
1962        if (copied > len)
1963                copied = len;
1964
1965        err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1966
1967        event = sctp_skb2event(skb);
1968
1969        if (err)
1970                goto out_free;
1971
1972        sock_recv_ts_and_drops(msg, sk, skb);
1973        if (sctp_ulpevent_is_notification(event)) {
1974                msg->msg_flags |= MSG_NOTIFICATION;
1975                sp->pf->event_msgname(event, msg->msg_name, addr_len);
1976        } else {
1977                sp->pf->skb_msgname(skb, msg->msg_name, addr_len);
1978        }
1979
1980        /* Check if we allow SCTP_SNDRCVINFO. */
1981        if (sp->subscribe.sctp_data_io_event)
1982                sctp_ulpevent_read_sndrcvinfo(event, msg);
1983#if 0
1984        /* FIXME: we should be calling IP/IPv6 layers.  */
1985        if (sk->sk_protinfo.af_inet.cmsg_flags)
1986                ip_cmsg_recv(msg, skb);
1987#endif
1988
1989        err = copied;
1990
1991        /* If skb's length exceeds the user's buffer, update the skb and
1992         * push it back to the receive_queue so that the next call to
1993         * recvmsg() will return the remaining data. Don't set MSG_EOR.
1994         */
1995        if (skb_len > copied) {
1996                msg->msg_flags &= ~MSG_EOR;
1997                if (flags & MSG_PEEK)
1998                        goto out_free;
1999                sctp_skb_pull(skb, copied);
2000                skb_queue_head(&sk->sk_receive_queue, skb);
2001
2002                /* When only partial message is copied to the user, increase
2003                 * rwnd by that amount. If all the data in the skb is read,
2004                 * rwnd is updated when the event is freed.
2005                 */
2006                if (!sctp_ulpevent_is_notification(event))
2007                        sctp_assoc_rwnd_increase(event->asoc, copied);
2008                goto out;
2009        } else if ((event->msg_flags & MSG_NOTIFICATION) ||
2010                   (event->msg_flags & MSG_EOR))
2011                msg->msg_flags |= MSG_EOR;
2012        else
2013                msg->msg_flags &= ~MSG_EOR;
2014
2015out_free:
2016        if (flags & MSG_PEEK) {
2017                /* Release the skb reference acquired after peeking the skb in
2018                 * sctp_skb_recv_datagram().
2019                 */
2020                kfree_skb(skb);
2021        } else {
2022                /* Free the event which includes releasing the reference to
2023                 * the owner of the skb, freeing the skb and updating the
2024                 * rwnd.
2025                 */
2026                sctp_ulpevent_free(event);
2027        }
2028out:
2029        sctp_release_sock(sk);
2030        return err;
2031}
2032
2033/* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS)
2034 *
2035 * This option is a on/off flag.  If enabled no SCTP message
2036 * fragmentation will be performed.  Instead if a message being sent
2037 * exceeds the current PMTU size, the message will NOT be sent and
2038 * instead a error will be indicated to the user.
2039 */
2040static int sctp_setsockopt_disable_fragments(struct sock *sk,
2041                                             char __user *optval,
2042                                             unsigned int optlen)
2043{
2044        int val;
2045
2046        if (optlen < sizeof(int))
2047                return -EINVAL;
2048
2049        if (get_user(val, (int __user *)optval))
2050                return -EFAULT;
2051
2052        sctp_sk(sk)->disable_fragments = (val == 0) ? 0 : 1;
2053
2054        return 0;
2055}
2056
2057static int sctp_setsockopt_events(struct sock *sk, char __user *optval,
2058                                  unsigned int optlen)
2059{
2060        if (optlen > sizeof(struct sctp_event_subscribe))
2061                return -EINVAL;
2062        if (copy_from_user(&sctp_sk(sk)->subscribe, optval, optlen))
2063                return -EFAULT;
2064        return 0;
2065}
2066
2067/* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE)
2068 *
2069 * This socket option is applicable to the UDP-style socket only.  When
2070 * set it will cause associations that are idle for more than the
2071 * specified number of seconds to automatically close.  An association
2072 * being idle is defined an association that has NOT sent or received
2073 * user data.  The special value of '0' indicates that no automatic
2074 * close of any associations should be performed.  The option expects an
2075 * integer defining the number of seconds of idle time before an
2076 * association is closed.
2077 */
2078static int sctp_setsockopt_autoclose(struct sock *sk, char __user *optval,
2079                                     unsigned int optlen)
2080{
2081        struct sctp_sock *sp = sctp_sk(sk);
2082
2083        /* Applicable to UDP-style socket only */
2084        if (sctp_style(sk, TCP))
2085                return -EOPNOTSUPP;
2086        if (optlen != sizeof(int))
2087                return -EINVAL;
2088        if (copy_from_user(&sp->autoclose, optval, optlen))
2089                return -EFAULT;
2090        /* make sure it won't exceed MAX_SCHEDULE_TIMEOUT */
2091        sp->autoclose = min_t(long, sp->autoclose, MAX_SCHEDULE_TIMEOUT / HZ);
2092
2093        return 0;
2094}
2095
2096/* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS)
2097 *
2098 * Applications can enable or disable heartbeats for any peer address of
2099 * an association, modify an address's heartbeat interval, force a
2100 * heartbeat to be sent immediately, and adjust the address's maximum
2101 * number of retransmissions sent before an address is considered
2102 * unreachable.  The following structure is used to access and modify an
2103 * address's parameters:
2104 *
2105 *  struct sctp_paddrparams {
2106 *     sctp_assoc_t            spp_assoc_id;
2107 *     struct sockaddr_storage spp_address;
2108 *     uint32_t                spp_hbinterval;
2109 *     uint16_t                spp_pathmaxrxt;
2110 *     uint32_t                spp_pathmtu;
2111 *     uint32_t                spp_sackdelay;
2112 *     uint32_t                spp_flags;
2113 * };
2114 *
2115 *   spp_assoc_id    - (one-to-many style socket) This is filled in the
2116 *                     application, and identifies the association for
2117 *                     this query.
2118 *   spp_address     - This specifies which address is of interest.
2119 *   spp_hbinterval  - This contains the value of the heartbeat interval,
2120 *                     in milliseconds.  If a  value of zero
2121 *                     is present in this field then no changes are to
2122 *                     be made to this parameter.
2123 *   spp_pathmaxrxt  - This contains the maximum number of
2124 *                     retransmissions before this address shall be
2125 *                     considered unreachable. If a  value of zero
2126 *                     is present in this field then no changes are to
2127 *                     be made to this parameter.
2128 *   spp_pathmtu     - When Path MTU discovery is disabled the value
2129 *                     specified here will be the "fixed" path mtu.
2130 *                     Note that if the spp_address field is empty
2131 *                     then all associations on this address will
2132 *                     have this fixed path mtu set upon them.
2133 *
2134 *   spp_sackdelay   - When delayed sack is enabled, this value specifies
2135 *                     the number of milliseconds that sacks will be delayed
2136 *                     for. This value will apply to all addresses of an
2137 *                     association if the spp_address field is empty. Note
2138 *                     also, that if delayed sack is enabled and this
2139 *                     value is set to 0, no change is made to the last
2140 *                     recorded delayed sack timer value.
2141 *
2142 *   spp_flags       - These flags are used to control various features
2143 *                     on an association. The flag field may contain
2144 *                     zero or more of the following options.
2145 *
2146 *                     SPP_HB_ENABLE  - Enable heartbeats on the
2147 *                     specified address. Note that if the address
2148 *                     field is empty all addresses for the association
2149 *                     have heartbeats enabled upon them.
2150 *
2151 *                     SPP_HB_DISABLE - Disable heartbeats on the
2152 *                     speicifed address. Note that if the address
2153 *                     field is empty all addresses for the association
2154 *                     will have their heartbeats disabled. Note also
2155 *                     that SPP_HB_ENABLE and SPP_HB_DISABLE are
2156 *                     mutually exclusive, only one of these two should
2157 *                     be specified. Enabling both fields will have
2158 *                     undetermined results.
2159 *
2160 *                     SPP_HB_DEMAND - Request a user initiated heartbeat
2161 *                     to be made immediately.
2162 *
2163 *                     SPP_HB_TIME_IS_ZERO - Specify's that the time for
2164 *                     heartbeat delayis to be set to the value of 0
2165 *                     milliseconds.
2166 *
2167 *                     SPP_PMTUD_ENABLE - This field will enable PMTU
2168 *                     discovery upon the specified address. Note that
2169 *                     if the address feild is empty then all addresses
2170 *                     on the association are effected.
2171 *
2172 *                     SPP_PMTUD_DISABLE - This field will disable PMTU
2173 *                     discovery upon the specified address. Note that
2174 *                     if the address feild is empty then all addresses
2175 *                     on the association are effected. Not also that
2176 *                     SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually
2177 *                     exclusive. Enabling both will have undetermined
2178 *                     results.
2179 *
2180 *                     SPP_SACKDELAY_ENABLE - Setting this flag turns
2181 *                     on delayed sack. The time specified in spp_sackdelay
2182 *                     is used to specify the sack delay for this address. Note
2183 *                     that if spp_address is empty then all addresses will
2184 *                     enable delayed sack and take on the sack delay
2185 *                     value specified in spp_sackdelay.
2186 *                     SPP_SACKDELAY_DISABLE - Setting this flag turns
2187 *                     off delayed sack. If the spp_address field is blank then
2188 *                     delayed sack is disabled for the entire association. Note
2189 *                     also that this field is mutually exclusive to
2190 *                     SPP_SACKDELAY_ENABLE, setting both will have undefined
2191 *                     results.
2192 */
2193static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
2194                                       struct sctp_transport   *trans,
2195                                       struct sctp_association *asoc,
2196                                       struct sctp_sock        *sp,
2197                                       int                      hb_change,
2198                                       int                      pmtud_change,
2199                                       int                      sackdelay_change)
2200{
2201        int error;
2202
2203        if (params->spp_flags & SPP_HB_DEMAND && trans) {
2204                error = sctp_primitive_REQUESTHEARTBEAT (trans->asoc, trans);
2205                if (error)
2206                        return error;
2207        }
2208
2209        /* Note that unless the spp_flag is set to SPP_HB_ENABLE the value of
2210         * this field is ignored.  Note also that a value of zero indicates
2211         * the current setting should be left unchanged.
2212         */
2213        if (params->spp_flags & SPP_HB_ENABLE) {
2214
2215                /* Re-zero the interval if the SPP_HB_TIME_IS_ZERO is
2216                 * set.  This lets us use 0 value when this flag
2217                 * is set.
2218                 */
2219                if (params->spp_flags & SPP_HB_TIME_IS_ZERO)
2220                        params->spp_hbinterval = 0;
2221
2222                if (params->spp_hbinterval ||
2223                    (params->spp_flags & SPP_HB_TIME_IS_ZERO)) {
2224                        if (trans) {
2225                                trans->hbinterval =
2226                                    msecs_to_jiffies(params->spp_hbinterval);
2227                        } else if (asoc) {
2228                                asoc->hbinterval =
2229                                    msecs_to_jiffies(params->spp_hbinterval);
2230                        } else {
2231                                sp->hbinterval = params->spp_hbinterval;
2232                        }
2233                }
2234        }
2235
2236        if (hb_change) {
2237                if (trans) {
2238                        trans->param_flags =
2239                                (trans->param_flags & ~SPP_HB) | hb_change;
2240                } else if (asoc) {
2241                        asoc->param_flags =
2242                                (asoc->param_flags & ~SPP_HB) | hb_change;
2243                } else {
2244                        sp->param_flags =
2245                                (sp->param_flags & ~SPP_HB) | hb_change;
2246                }
2247        }
2248
2249        /* When Path MTU discovery is disabled the value specified here will
2250         * be the "fixed" path mtu (i.e. the value of the spp_flags field must
2251         * include the flag SPP_PMTUD_DISABLE for this field to have any
2252         * effect).
2253         */
2254        if ((params->spp_flags & SPP_PMTUD_DISABLE) && params->spp_pathmtu) {
2255                if (trans) {
2256                        trans->pathmtu = params->spp_pathmtu;
2257                        sctp_assoc_sync_pmtu(asoc);
2258                } else if (asoc) {
2259                        asoc->pathmtu = params->spp_pathmtu;
2260                        sctp_frag_point(asoc, params->spp_pathmtu);
2261                } else {
2262                        sp->pathmtu = params->spp_pathmtu;
2263                }
2264        }
2265
2266        if (pmtud_change) {
2267                if (trans) {
2268                        int update = (trans->param_flags & SPP_PMTUD_DISABLE) &&
2269                                (params->spp_flags & SPP_PMTUD_ENABLE);
2270                        trans->param_flags =
2271                                (trans->param_flags & ~SPP_PMTUD) | pmtud_change;
2272                        if (update) {
2273                                sctp_transport_pmtu(trans);
2274                                sctp_assoc_sync_pmtu(asoc);
2275                        }
2276                } else if (asoc) {
2277                        asoc->param_flags =
2278                                (asoc->param_flags & ~SPP_PMTUD) | pmtud_change;
2279                } else {
2280                        sp->param_flags =
2281                                (sp->param_flags & ~SPP_PMTUD) | pmtud_change;
2282                }
2283        }
2284
2285        /* Note that unless the spp_flag is set to SPP_SACKDELAY_ENABLE the
2286         * value of this field is ignored.  Note also that a value of zero
2287         * indicates the current setting should be left unchanged.
2288         */
2289        if ((params->spp_flags & SPP_SACKDELAY_ENABLE) && params->spp_sackdelay) {
2290                if (trans) {
2291                        trans->sackdelay =
2292                                msecs_to_jiffies(params->spp_sackdelay);
2293                } else if (asoc) {
2294                        asoc->sackdelay =
2295                                msecs_to_jiffies(params->spp_sackdelay);
2296                } else {
2297                        sp->sackdelay = params->spp_sackdelay;
2298                }
2299        }
2300
2301        if (sackdelay_change) {
2302                if (trans) {
2303                        trans->param_flags =
2304                                (trans->param_flags & ~SPP_SACKDELAY) |
2305                                sackdelay_change;
2306                } else if (asoc) {
2307                        asoc->param_flags =
2308                                (asoc->param_flags & ~SPP_SACKDELAY) |
2309                                sackdelay_change;
2310                } else {
2311                        sp->param_flags =
2312                                (sp->param_flags & ~SPP_SACKDELAY) |
2313                                sackdelay_change;
2314                }
2315        }
2316
2317        /* Note that a value of zero indicates the current setting should be
2318           left unchanged.
2319         */
2320        if (params->spp_pathmaxrxt) {
2321                if (trans) {
2322                        trans->pathmaxrxt = params->spp_pathmaxrxt;
2323                } else if (asoc) {
2324                        asoc->pathmaxrxt = params->spp_pathmaxrxt;
2325                } else {
2326                        sp->pathmaxrxt = params->spp_pathmaxrxt;
2327                }
2328        }
2329
2330        return 0;
2331}
2332
2333static int sctp_setsockopt_peer_addr_params(struct sock *sk,
2334                                            char __user *optval,
2335                                            unsigned int optlen)
2336{
2337        struct sctp_paddrparams  params;
2338        struct sctp_transport   *trans = NULL;
2339        struct sctp_association *asoc = NULL;
2340        struct sctp_sock        *sp = sctp_sk(sk);
2341        int error;
2342        int hb_change, pmtud_change, sackdelay_change;
2343
2344        if (optlen != sizeof(struct sctp_paddrparams))
2345                return - EINVAL;
2346
2347        if (copy_from_user(&params, optval, optlen))
2348                return -EFAULT;
2349
2350        /* Validate flags and value parameters. */
2351        hb_change        = params.spp_flags & SPP_HB;
2352        pmtud_change     = params.spp_flags & SPP_PMTUD;
2353        sackdelay_change = params.spp_flags & SPP_SACKDELAY;
2354
2355        if (hb_change        == SPP_HB ||
2356            pmtud_change     == SPP_PMTUD ||
2357            sackdelay_change == SPP_SACKDELAY ||
2358            params.spp_sackdelay > 500 ||
2359            (params.spp_pathmtu &&
2360             params.spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
2361                return -EINVAL;
2362
2363        /* If an address other than INADDR_ANY is specified, and
2364         * no transport is found, then the request is invalid.
2365         */
2366        if (!sctp_is_any(sk, ( union sctp_addr *)&params.spp_address)) {
2367                trans = sctp_addr_id2transport(sk, &params.spp_address,
2368                                               params.spp_assoc_id);
2369                if (!trans)
2370                        return -EINVAL;
2371        }
2372
2373        /* Get association, if assoc_id != 0 and the socket is a one
2374         * to many style socket, and an association was not found, then
2375         * the id was invalid.
2376         */
2377        asoc = sctp_id2assoc(sk, params.spp_assoc_id);
2378        if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP))
2379                return -EINVAL;
2380
2381        /* Heartbeat demand can only be sent on a transport or
2382         * association, but not a socket.
2383         */
2384        if (params.spp_flags & SPP_HB_DEMAND && !trans && !asoc)
2385                return -EINVAL;
2386
2387        /* Process parameters. */
2388        error = sctp_apply_peer_addr_params(&params, trans, asoc, sp,
2389                                            hb_change, pmtud_change,
2390                                            sackdelay_change);
2391
2392        if (error)
2393                return error;
2394
2395        /* If changes are for association, also apply parameters to each
2396         * transport.
2397         */
2398        if (!trans && asoc) {
2399                list_for_each_entry(trans, &asoc->peer.transport_addr_list,
2400                                transports) {
2401                        sctp_apply_peer_addr_params(&params, trans, asoc, sp,
2402                                                    hb_change, pmtud_change,
2403                                                    sackdelay_change);
2404                }
2405        }
2406
2407        return 0;
2408}
2409
2410/*
2411 * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
2412 *
2413 * This option will effect the way delayed acks are performed.  This
2414 * option allows you to get or set the delayed ack time, in
2415 * milliseconds.  It also allows changing the delayed ack frequency.
2416 * Changing the frequency to 1 disables the delayed sack algorithm.  If
2417 * the assoc_id is 0, then this sets or gets the endpoints default
2418 * values.  If the assoc_id field is non-zero, then the set or get
2419 * effects the specified association for the one to many model (the
2420 * assoc_id field is ignored by the one to one model).  Note that if
2421 * sack_delay or sack_freq are 0 when setting this option, then the
2422 * current values will remain unchanged.
2423 *
2424 * struct sctp_sack_info {
2425 *     sctp_assoc_t            sack_assoc_id;
2426 *     uint32_t                sack_delay;
2427 *     uint32_t                sack_freq;
2428 * };
2429 *
2430 * sack_assoc_id -  This parameter, indicates which association the user
2431 *    is performing an action upon.  Note that if this field's value is
2432 *    zero then the endpoints default value is changed (effecting future
2433 *    associations only).
2434 *
2435 * sack_delay -  This parameter contains the number of milliseconds that
2436 *    the user is requesting the delayed ACK timer be set to.  Note that
2437 *    this value is defined in the standard to be between 200 and 500
2438 *    milliseconds.
2439 *
2440 * sack_freq -  This parameter contains the number of packets that must
2441 *    be received before a sack is sent without waiting for the delay
2442 *    timer to expire.  The default value for this is 2, setting this
2443 *    value to 1 will disable the delayed sack algorithm.
2444 */
2445
2446static int sctp_setsockopt_delayed_ack(struct sock *sk,
2447                                       char __user *optval, unsigned int optlen)
2448{
2449        struct sctp_sack_info    params;
2450        struct sctp_transport   *trans = NULL;
2451        struct sctp_association *asoc = NULL;
2452        struct sctp_sock        *sp = sctp_sk(sk);
2453
2454        if (optlen == sizeof(struct sctp_sack_info)) {
2455                if (copy_from_user(&params, optval, optlen))
2456                        return -EFAULT;
2457
2458                if (params.sack_delay == 0 && params.sack_freq == 0)
2459                        return 0;
2460        } else if (optlen == sizeof(struct sctp_assoc_value)) {
2461                printk(KERN_WARNING "SCTP: Use of struct sctp_assoc_value "
2462                       "in delayed_ack socket option deprecated\n");
2463                printk(KERN_WARNING "SCTP: Use struct sctp_sack_info instead\n");
2464                if (copy_from_user(&params, optval, optlen))
2465                        return -EFAULT;
2466
2467                if (params.sack_delay == 0)
2468                        params.sack_freq = 1;
2469                else
2470                        params.sack_freq = 0;
2471        } else
2472                return - EINVAL;
2473
2474        /* Validate value parameter. */
2475        if (params.sack_delay > 500)
2476                return -EINVAL;
2477
2478        /* Get association, if sack_assoc_id != 0 and the socket is a one
2479         * to many style socket, and an association was not found, then
2480         * the id was invalid.
2481         */
2482        asoc = sctp_id2assoc(sk, params.sack_assoc_id);
2483        if (!asoc && params.sack_assoc_id && sctp_style(sk, UDP))
2484                return -EINVAL;
2485
2486        if (params.sack_delay) {
2487                if (asoc) {
2488                        asoc->sackdelay =
2489                                msecs_to_jiffies(params.sack_delay);
2490                        asoc->param_flags =
2491                                (asoc->param_flags & ~SPP_SACKDELAY) |
2492                                SPP_SACKDELAY_ENABLE;
2493                } else {
2494                        sp->sackdelay = params.sack_delay;
2495                        sp->param_flags =
2496                                (sp->param_flags & ~SPP_SACKDELAY) |
2497                                SPP_SACKDELAY_ENABLE;
2498                }
2499        }
2500
2501        if (params.sack_freq == 1) {
2502                if (asoc) {
2503                        asoc->param_flags =
2504                                (asoc->param_flags & ~SPP_SACKDELAY) |
2505                                SPP_SACKDELAY_DISABLE;
2506                } else {
2507                        sp->param_flags =
2508                                (sp->param_flags & ~SPP_SACKDELAY) |
2509                                SPP_SACKDELAY_DISABLE;
2510                }
2511        } else if (params.sack_freq > 1) {
2512                if (asoc) {
2513                        asoc->sackfreq = params.sack_freq;
2514                        asoc->param_flags =
2515                                (asoc->param_flags & ~SPP_SACKDELAY) |
2516                                SPP_SACKDELAY_ENABLE;
2517                } else {
2518                        sp->sackfreq = params.sack_freq;
2519                        sp->param_flags =
2520                                (sp->param_flags & ~SPP_SACKDELAY) |
2521                                SPP_SACKDELAY_ENABLE;
2522                }
2523        }
2524
2525        /* If change is for association, also apply to each transport. */
2526        if (asoc) {
2527                list_for_each_entry(trans, &asoc->peer.transport_addr_list,
2528                                transports) {
2529                        if (params.sack_delay) {
2530                                trans->sackdelay =
2531                                        msecs_to_jiffies(params.sack_delay);
2532                                trans->param_flags =
2533                                        (trans->param_flags & ~SPP_SACKDELAY) |
2534                                        SPP_SACKDELAY_ENABLE;
2535                        }
2536                        if (params.sack_freq == 1) {
2537                                trans->param_flags =
2538                                        (trans->param_flags & ~SPP_SACKDELAY) |
2539                                        SPP_SACKDELAY_DISABLE;
2540                        } else if (params.sack_freq > 1) {
2541                                trans->sackfreq = params.sack_freq;
2542                                trans->param_flags =
2543                                        (trans->param_flags & ~SPP_SACKDELAY) |
2544                                        SPP_SACKDELAY_ENABLE;
2545                        }
2546                }
2547        }
2548
2549        return 0;
2550}
2551
2552/* 7.1.3 Initialization Parameters (SCTP_INITMSG)
2553 *
2554 * Applications can specify protocol parameters for the default association
2555 * initialization.  The option name argument to setsockopt() and getsockopt()
2556 * is SCTP_INITMSG.
2557 *
2558 * Setting initialization parameters is effective only on an unconnected
2559 * socket (for UDP-style sockets only future associations are effected
2560 * by the change).  With TCP-style sockets, this option is inherited by
2561 * sockets derived from a listener socket.
2562 */
2563static int sctp_setsockopt_initmsg(struct sock *sk, char __user *optval, unsigned int optlen)
2564{
2565        struct sctp_initmsg sinit;
2566        struct sctp_sock *sp = sctp_sk(sk);
2567
2568        if (optlen != sizeof(struct sctp_initmsg))
2569                return -EINVAL;
2570        if (copy_from_user(&sinit, optval, optlen))
2571                return -EFAULT;
2572
2573        if (sinit.sinit_num_ostreams)
2574                sp->initmsg.sinit_num_ostreams = sinit.sinit_num_ostreams;
2575        if (sinit.sinit_max_instreams)
2576                sp->initmsg.sinit_max_instreams = sinit.sinit_max_instreams;
2577        if (sinit.sinit_max_attempts)
2578                sp->initmsg.sinit_max_attempts = sinit.sinit_max_attempts;
2579        if (sinit.sinit_max_init_timeo)
2580                sp->initmsg.sinit_max_init_timeo = sinit.sinit_max_init_timeo;
2581
2582        return 0;
2583}
2584
2585/*
2586 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM)
2587 *
2588 *   Applications that wish to use the sendto() system call may wish to
2589 *   specify a default set of parameters that would normally be supplied
2590 *   through the inclusion of ancillary data.  This socket option allows
2591 *   such an application to set the default sctp_sndrcvinfo structure.
2592 *   The application that wishes to use this socket option simply passes
2593 *   in to this call the sctp_sndrcvinfo structure defined in Section
2594 *   5.2.2) The input parameters accepted by this call include
2595 *   sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context,
2596 *   sinfo_timetolive.  The user must provide the sinfo_assoc_id field in
2597 *   to this call if the caller is using the UDP model.
2598 */
2599static int sctp_setsockopt_default_send_param(struct sock *sk,
2600                                              char __user *optval,
2601                                              unsigned int optlen)
2602{
2603        struct sctp_sndrcvinfo info;
2604        struct sctp_association *asoc;
2605        struct sctp_sock *sp = sctp_sk(sk);
2606
2607        if (optlen != sizeof(struct sctp_sndrcvinfo))
2608                return -EINVAL;
2609        if (copy_from_user(&info, optval, optlen))
2610                return -EFAULT;
2611
2612        asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
2613        if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP))
2614                return -EINVAL;
2615
2616        if (asoc) {
2617                asoc->default_stream = info.sinfo_stream;
2618                asoc->default_flags = info.sinfo_flags;
2619                asoc->default_ppid = info.sinfo_ppid;
2620                asoc->default_context = info.sinfo_context;
2621                asoc->default_timetolive = info.sinfo_timetolive;
2622        } else {
2623                sp->default_stream = info.sinfo_stream;
2624                sp->default_flags = info.sinfo_flags;
2625                sp->default_ppid = info.sinfo_ppid;
2626                sp->default_context = info.sinfo_context;
2627                sp->default_timetolive = info.sinfo_timetolive;
2628        }
2629
2630        return 0;
2631}
2632
2633/* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
2634 *
2635 * Requests that the local SCTP stack use the enclosed peer address as
2636 * the association primary.  The enclosed address must be one of the
2637 * association peer's addresses.
2638 */
2639static int sctp_setsockopt_primary_addr(struct sock *sk, char __user *optval,
2640                                        unsigned int optlen)
2641{
2642        struct sctp_prim prim;
2643        struct sctp_transport *trans;
2644
2645        if (optlen != sizeof(struct sctp_prim))
2646                return -EINVAL;
2647
2648        if (copy_from_user(&prim, optval, sizeof(struct sctp_prim)))
2649                return -EFAULT;
2650
2651        trans = sctp_addr_id2transport(sk, &prim.ssp_addr, prim.ssp_assoc_id);
2652        if (!trans)
2653                return -EINVAL;
2654
2655        sctp_assoc_set_primary(trans->asoc, trans);
2656
2657        return 0;
2658}
2659
2660/*
2661 * 7.1.5 SCTP_NODELAY
2662 *
2663 * Turn on/off any Nagle-like algorithm.  This means that packets are
2664 * generally sent as soon as possible and no unnecessary delays are
2665 * introduced, at the cost of more packets in the network.  Expects an
2666 *  integer boolean flag.
2667 */
2668static int sctp_setsockopt_nodelay(struct sock *sk, char __user *optval,
2669                                   unsigned int optlen)
2670{
2671        int val;
2672
2673        if (optlen < sizeof(int))
2674                return -EINVAL;
2675        if (get_user(val, (int __user *)optval))
2676                return -EFAULT;
2677
2678        sctp_sk(sk)->nodelay = (val == 0) ? 0 : 1;
2679        return 0;
2680}
2681
2682/*
2683 *
2684 * 7.1.1 SCTP_RTOINFO
2685 *
2686 * The protocol parameters used to initialize and bound retransmission
2687 * timeout (RTO) are tunable. sctp_rtoinfo structure is used to access
2688 * and modify these parameters.
2689 * All parameters are time values, in milliseconds.  A value of 0, when
2690 * modifying the parameters, indicates that the current value should not
2691 * be changed.
2692 *
2693 */
2694static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigned int optlen)
2695{
2696        struct sctp_rtoinfo rtoinfo;
2697        struct sctp_association *asoc;
2698
2699        if (optlen != sizeof (struct sctp_rtoinfo))
2700                return -EINVAL;
2701
2702        if (copy_from_user(&rtoinfo, optval, optlen))
2703                return -EFAULT;
2704
2705        asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id);
2706
2707        /* Set the values to the specific association */
2708        if (!asoc && rtoinfo.srto_assoc_id && sctp_style(sk, UDP))
2709                return -EINVAL;
2710
2711        if (asoc) {
2712                if (rtoinfo.srto_initial != 0)
2713                        asoc->rto_initial =
2714                                msecs_to_jiffies(rtoinfo.srto_initial);
2715                if (rtoinfo.srto_max != 0)
2716                        asoc->rto_max = msecs_to_jiffies(rtoinfo.srto_max);
2717                if (rtoinfo.srto_min != 0)
2718                        asoc->rto_min = msecs_to_jiffies(rtoinfo.srto_min);
2719        } else {
2720                /* If there is no association or the association-id = 0
2721                 * set the values to the endpoint.
2722                 */
2723                struct sctp_sock *sp = sctp_sk(sk);
2724
2725                if (rtoinfo.srto_initial != 0)
2726                        sp->rtoinfo.srto_initial = rtoinfo.srto_initial;
2727                if (rtoinfo.srto_max != 0)
2728                        sp->rtoinfo.srto_max = rtoinfo.srto_max;
2729                if (rtoinfo.srto_min != 0)
2730                        sp->rtoinfo.srto_min = rtoinfo.srto_min;
2731        }
2732
2733        return 0;
2734}
2735
2736/*
2737 *
2738 * 7.1.2 SCTP_ASSOCINFO
2739 *
2740 * This option is used to tune the maximum retransmission attempts
2741 * of the association.
2742 * Returns an error if the new association retransmission value is
2743 * greater than the sum of the retransmission value  of the peer.
2744 * See [SCTP] for more information.
2745 *
2746 */
2747static int sctp_setsockopt_associnfo(struct sock *sk, char __user *optval, unsigned int optlen)
2748{
2749
2750        struct sctp_assocparams assocparams;
2751        struct sctp_association *asoc;
2752
2753        if (optlen != sizeof(struct sctp_assocparams))
2754                return -EINVAL;
2755        if (copy_from_user(&assocparams, optval, optlen))
2756                return -EFAULT;
2757
2758        asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id);
2759
2760        if (!asoc && assocparams.sasoc_assoc_id && sctp_style(sk, UDP))
2761                return -EINVAL;
2762
2763        /* Set the values to the specific association */
2764        if (asoc) {
2765                if (assocparams.sasoc_asocmaxrxt != 0) {
2766                        __u32 path_sum = 0;
2767                        int   paths = 0;
2768                        struct sctp_transport *peer_addr;
2769
2770                        list_for_each_entry(peer_addr, &asoc->peer.transport_addr_list,
2771                                        transports) {
2772                                path_sum += peer_addr->pathmaxrxt;
2773                                paths++;
2774                        }
2775
2776                        /* Only validate asocmaxrxt if we have more than
2777                         * one path/transport.  We do this because path
2778                         * retransmissions are only counted when we have more
2779                         * then one path.
2780                         */
2781                        if (paths > 1 &&
2782                            assocparams.sasoc_asocmaxrxt > path_sum)
2783                                return -EINVAL;
2784
2785                        asoc->max_retrans = assocparams.sasoc_asocmaxrxt;
2786                }
2787
2788                if (assocparams.sasoc_cookie_life != 0) {
2789                        asoc->cookie_life.tv_sec =
2790                                        assocparams.sasoc_cookie_life / 1000;
2791                        asoc->cookie_life.tv_usec =
2792                                        (assocparams.sasoc_cookie_life % 1000)
2793                                        * 1000;
2794                }
2795        } else {
2796                /* Set the values to the endpoint */
2797                struct sctp_sock *sp = sctp_sk(sk);
2798
2799                if (assocparams.sasoc_asocmaxrxt != 0)
2800                        sp->assocparams.sasoc_asocmaxrxt =
2801                                                assocparams.sasoc_asocmaxrxt;
2802                if (assocparams.sasoc_cookie_life != 0)
2803                        sp->assocparams.sasoc_cookie_life =
2804                                                assocparams.sasoc_cookie_life;
2805        }
2806        return 0;
2807}
2808
2809/*
2810 * 7.1.16 Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR)
2811 *
2812 * This socket option is a boolean flag which turns on or off mapped V4
2813 * addresses.  If this option is turned on and the socket is type
2814 * PF_INET6, then IPv4 addresses will be mapped to V6 representation.
2815 * If this option is turned off, then no mapping will be done of V4
2816 * addresses and a user will receive both PF_INET6 and PF_INET type
2817 * addresses on the socket.
2818 */
2819static int sctp_setsockopt_mappedv4(struct sock *sk, char __user *optval, unsigned int optlen)
2820{
2821        int val;
2822        struct sctp_sock *sp = sctp_sk(sk);
2823
2824        if (optlen < sizeof(int))
2825                return -EINVAL;
2826        if (get_user(val, (int __user *)optval))
2827                return -EFAULT;
2828        if (val)
2829                sp->v4mapped = 1;
2830        else
2831                sp->v4mapped = 0;
2832
2833        return 0;
2834}
2835
2836/*
2837 * 8.1.16.  Get or Set the Maximum Fragmentation Size (SCTP_MAXSEG)
2838 * This option will get or set the maximum size to put in any outgoing
2839 * SCTP DATA chunk.  If a message is larger than this size it will be
2840 * fragmented by SCTP into the specified size.  Note that the underlying
2841 * SCTP implementation may fragment into smaller sized chunks when the
2842 * PMTU of the underlying association is smaller than the value set by
2843 * the user.  The default value for this option is '0' which indicates
2844 * the user is NOT limiting fragmentation and only the PMTU will effect
2845 * SCTP's choice of DATA chunk size.  Note also that values set larger
2846 * than the maximum size of an IP datagram will effectively let SCTP
2847 * control fragmentation (i.e. the same as setting this option to 0).
2848 *
2849 * The following structure is used to access and modify this parameter:
2850 *
2851 * struct sctp_assoc_value {
2852 *   sctp_assoc_t assoc_id;
2853 *   uint32_t assoc_value;
2854 * };
2855 *
2856 * assoc_id:  This parameter is ignored for one-to-one style sockets.
2857 *    For one-to-many style sockets this parameter indicates which
2858 *    association the user is performing an action upon.  Note that if
2859 *    this field's value is zero then the endpoints default value is
2860 *    changed (effecting future associations only).
2861 * assoc_value:  This parameter specifies the maximum size in bytes.
2862 */
2863static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned int optlen)
2864{
2865        struct sctp_assoc_value params;
2866        struct sctp_association *asoc;
2867        struct sctp_sock *sp = sctp_sk(sk);
2868        int val;
2869
2870        if (optlen == sizeof(int)) {
2871                printk(KERN_WARNING
2872                   "SCTP: Use of int in maxseg socket option deprecated\n");
2873                printk(KERN_WARNING
2874                   "SCTP: Use struct sctp_assoc_value instead\n");
2875                if (copy_from_user(&val, optval, optlen))
2876                        return -EFAULT;
2877                params.assoc_id = 0;
2878        } else if (optlen == sizeof(struct sctp_assoc_value)) {
2879                if (copy_from_user(&params, optval, optlen))
2880                        return -EFAULT;
2881                val = params.assoc_value;
2882        } else
2883                return -EINVAL;
2884
2885        if ((val != 0) && ((val < 8) || (val > SCTP_MAX_CHUNK_LEN)))
2886                return -EINVAL;
2887
2888        asoc = sctp_id2assoc(sk, params.assoc_id);
2889        if (!asoc && params.assoc_id && sctp_style(sk, UDP))
2890                return -EINVAL;
2891
2892        if (asoc) {
2893                if (val == 0) {
2894                        val = asoc->pathmtu;
2895                        val -= sp->pf->af->net_header_len;
2896                        val -= sizeof(struct sctphdr) +
2897                                        sizeof(struct sctp_data_chunk);
2898                }
2899                asoc->user_frag = val;
2900                asoc->frag_point = sctp_frag_point(asoc, asoc->pathmtu);
2901        } else {
2902                sp->user_frag = val;
2903        }
2904
2905        return 0;
2906}
2907
2908
2909/*
2910 *  7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR)
2911 *
2912 *   Requests that the peer mark the enclosed address as the association
2913 *   primary. The enclosed address must be one of the association's
2914 *   locally bound addresses. The following structure is used to make a
2915 *   set primary request:
2916 */
2917static int sctp_setsockopt_peer_primary_addr(struct sock *sk, char __user *optval,
2918                                             unsigned int optlen)
2919{
2920        struct sctp_sock        *sp;
2921        struct sctp_endpoint    *ep;
2922        struct sctp_association *asoc = NULL;
2923        struct sctp_setpeerprim prim;
2924        struct sctp_chunk       *chunk;
2925        int                     err;
2926
2927        sp = sctp_sk(sk);
2928        ep = sp->ep;
2929
2930        if (!sctp_addip_enable)
2931                return -EPERM;
2932
2933        if (optlen != sizeof(struct sctp_setpeerprim))
2934                return -EINVAL;
2935
2936        if (copy_from_user(&prim, optval, optlen))
2937                return -EFAULT;
2938
2939        asoc = sctp_id2assoc(sk, prim.sspp_assoc_id);
2940        if (!asoc)
2941                return -EINVAL;
2942
2943        if (!asoc->peer.asconf_capable)
2944                return -EPERM;
2945
2946        if (asoc->peer.addip_disabled_mask & SCTP_PARAM_SET_PRIMARY)
2947                return -EPERM;
2948
2949        if (!sctp_state(asoc, ESTABLISHED))
2950                return -ENOTCONN;
2951
2952        if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim.sspp_addr))
2953                return -EADDRNOTAVAIL;
2954
2955        /* Create an ASCONF chunk with SET_PRIMARY parameter    */
2956        chunk = sctp_make_asconf_set_prim(asoc,
2957                                          (union sctp_addr *)&prim.sspp_addr);
2958        if (!chunk)
2959                return -ENOMEM;
2960
2961        err = sctp_send_asconf(asoc, chunk);
2962
2963        SCTP_DEBUG_PRINTK("We set peer primary addr primitively.\n");
2964
2965        return err;
2966}
2967
2968static int sctp_setsockopt_adaptation_layer(struct sock *sk, char __user *optval,
2969                                            unsigned int optlen)
2970{
2971        struct sctp_setadaptation adaptation;
2972
2973        if (optlen != sizeof(struct sctp_setadaptation))
2974                return -EINVAL;
2975        if (copy_from_user(&adaptation, optval, optlen))
2976                return -EFAULT;
2977
2978        sctp_sk(sk)->adaptation_ind = adaptation.ssb_adaptation_ind;
2979
2980        return 0;
2981}
2982
2983/*
2984 * 7.1.29.  Set or Get the default context (SCTP_CONTEXT)
2985 *
2986 * The context field in the sctp_sndrcvinfo structure is normally only
2987 * used when a failed message is retrieved holding the value that was
2988 * sent down on the actual send call.  This option allows the setting of
2989 * a default context on an association basis that will be received on
2990 * reading messages from the peer.  This is especially helpful in the
2991 * one-2-many model for an application to keep some reference to an
2992 * internal state machine that is processing messages on the
2993 * association.  Note that the setting of this value only effects
2994 * received messages from the peer and does not effect the value that is
2995 * saved with outbound messages.
2996 */
2997static int sctp_setsockopt_context(struct sock *sk, char __user *optval,
2998                                   unsigned int optlen)
2999{
3000        struct sctp_assoc_value params;
3001        struct sctp_sock *sp;
3002        struct sctp_association *asoc;
3003
3004        if (optlen != sizeof(struct sctp_assoc_value))
3005                return -EINVAL;
3006        if (copy_from_user(&params, optval, optlen))
3007                return -EFAULT;
3008
3009        sp = sctp_sk(sk);
3010
3011        if (params.assoc_id != 0) {
3012                asoc = sctp_id2assoc(sk, params.assoc_id);
3013                if (!asoc)
3014                        return -EINVAL;
3015                asoc->default_rcv_context = params.assoc_value;
3016        } else {
3017                sp->default_rcv_context = params.assoc_value;
3018        }
3019
3020        return 0;
3021}
3022
3023/*
3024 * 7.1.24.  Get or set fragmented interleave (SCTP_FRAGMENT_INTERLEAVE)
3025 *
3026 * This options will at a minimum specify if the implementation is doing
3027 * fragmented interleave.  Fragmented interleave, for a one to many
3028 * socket, is when subsequent calls to receive a message may return
3029 * parts of messages from different associations.  Some implementations
3030 * may allow you to turn this value on or off.  If so, when turned off,
3031 * no fragment interleave will occur (which will cause a head of line
3032 * blocking amongst multiple associations sharing the same one to many
3033 * socket).  When this option is turned on, then each receive call may
3034 * come from a different association (thus the user must receive data
3035 * with the extended calls (e.g. sctp_recvmsg) to keep track of which
3036 * association each receive belongs to.
3037 *
3038 * This option takes a boolean value.  A non-zero value indicates that
3039 * fragmented interleave is on.  A value of zero indicates that
3040 * fragmented interleave is off.
3041 *
3042 * Note that it is important that an implementation that allows this
3043 * option to be turned on, have it off by default.  Otherwise an unaware
3044 * application using the one to many model may become confused and act
3045 * incorrectly.
3046 */
3047static int sctp_setsockopt_fragment_interleave(struct sock *sk,
3048                                               char __user *optval,
3049                                               unsigned int optlen)
3050{
3051        int val;
3052
3053        if (optlen != sizeof(int))
3054                return -EINVAL;
3055        if (get_user(val, (int __user *)optval))
3056                return -EFAULT;
3057
3058        sctp_sk(sk)->frag_interleave = (val == 0) ? 0 : 1;
3059
3060        return 0;
3061}
3062
3063/*
3064 * 8.1.21.  Set or Get the SCTP Partial Delivery Point
3065 *       (SCTP_PARTIAL_DELIVERY_POINT)
3066 *
3067 * This option will set or get the SCTP partial delivery point.  This
3068 * point is the size of a message where the partial delivery API will be
3069 * invoked to help free up rwnd space for the peer.  Setting this to a
3070 * lower value will cause partial deliveries to happen more often.  The
3071 * calls argument is an integer that sets or gets the partial delivery
3072 * point.  Note also that the call will fail if the user attempts to set
3073 * this value larger than the socket receive buffer size.
3074 *
3075 * Note that any single message having a length smaller than or equal to
3076 * the SCTP partial delivery point will be delivered in one single read
3077 * call as long as the user provided buffer is large enough to hold the
3078 * message.
3079 */
3080static int sctp_setsockopt_partial_delivery_point(struct sock *sk,
3081                                                  char __user *optval,
3082                                                  unsigned int optlen)
3083{
3084        u32 val;
3085
3086        if (optlen != sizeof(u32))
3087                return -EINVAL;
3088        if (get_user(val, (int __user *)optval))
3089                return -EFAULT;
3090
3091        /* Note: We double the receive buffer from what the user sets
3092         * it to be, also initial rwnd is based on rcvbuf/2.
3093         */
3094        if (val > (sk->sk_rcvbuf >> 1))
3095                return -EINVAL;
3096
3097        sctp_sk(sk)->pd_point = val;
3098
3099        return 0; /* is this the right error code? */
3100}
3101
3102/*
3103 * 7.1.28.  Set or Get the maximum burst (SCTP_MAX_BURST)
3104 *
3105 * This option will allow a user to change the maximum burst of packets
3106 * that can be emitted by this association.  Note that the default value
3107 * is 4, and some implementations may restrict this setting so that it
3108 * can only be lowered.
3109 *
3110 * NOTE: This text doesn't seem right.  Do this on a socket basis with
3111 * future associations inheriting the socket value.
3112 */
3113static int sctp_setsockopt_maxburst(struct sock *sk,
3114                                    char __user *optval,
3115                                    unsigned int optlen)
3116{
3117        struct sctp_assoc_value params;
3118        struct sctp_sock *sp;
3119        struct sctp_association *asoc;
3120        int val;
3121        int assoc_id = 0;
3122
3123        if (optlen == sizeof(int)) {
3124                printk(KERN_WARNING
3125                   "SCTP: Use of int in max_burst socket option deprecated\n");
3126                printk(KERN_WARNING
3127                   "SCTP: Use struct sctp_assoc_value instead\n");
3128                if (copy_from_user(&val, optval, optlen))
3129                        return -EFAULT;
3130        } else if (optlen == sizeof(struct sctp_assoc_value)) {
3131                if (copy_from_user(&params, optval, optlen))
3132                        return -EFAULT;
3133                val = params.assoc_value;
3134                assoc_id = params.assoc_id;
3135        } else
3136                return -EINVAL;
3137
3138        sp = sctp_sk(sk);
3139
3140        if (assoc_id != 0) {
3141                asoc = sctp_id2assoc(sk, assoc_id);
3142                if (!asoc)
3143                        return -EINVAL;
3144                asoc->max_burst = val;
3145        } else
3146                sp->max_burst = val;
3147
3148        return 0;
3149}
3150
3151/*
3152 * 7.1.18.  Add a chunk that must be authenticated (SCTP_AUTH_CHUNK)
3153 *
3154 * This set option adds a chunk type that the user is requesting to be
3155 * received only in an authenticated way.  Changes to the list of chunks
3156 * will only effect future associations on the socket.
3157 */
3158static int sctp_setsockopt_auth_chunk(struct sock *sk,
3159                                      char __user *optval,
3160                                      unsigned int optlen)
3161{
3162        struct sctp_authchunk val;
3163
3164        if (!sctp_auth_enable)
3165                return -EACCES;
3166
3167        if (optlen != sizeof(struct sctp_authchunk))
3168                return -EINVAL;
3169        if (copy_from_user(&val, optval, optlen))
3170                return -EFAULT;
3171
3172        switch (val.sauth_chunk) {
3173                case SCTP_CID_INIT:
3174                case SCTP_CID_INIT_ACK:
3175                case SCTP_CID_SHUTDOWN_COMPLETE:
3176                case SCTP_CID_AUTH:
3177                        return -EINVAL;
3178        }
3179
3180        /* add this chunk id to the endpoint */
3181        return sctp_auth_ep_add_chunkid(sctp_sk(sk)->ep, val.sauth_chunk);
3182}
3183
3184/*
3185 * 7.1.19.  Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT)
3186 *
3187 * This option gets or sets the list of HMAC algorithms that the local
3188 * endpoint requires the peer to use.
3189 */
3190static int sctp_setsockopt_hmac_ident(struct sock *sk,
3191                                      char __user *optval,
3192                                      unsigned int optlen)
3193{
3194        struct sctp_hmacalgo *hmacs;
3195        u32 idents;
3196        int err;
3197
3198        if (!sctp_auth_enable)
3199                return -EACCES;
3200
3201        if (optlen < sizeof(struct sctp_hmacalgo))
3202                return -EINVAL;
3203
3204        hmacs = kmalloc(optlen, GFP_KERNEL);
3205        if (!hmacs)
3206                return -ENOMEM;
3207
3208        if (copy_from_user(hmacs, optval, optlen)) {
3209                err = -EFAULT;
3210                goto out;
3211        }
3212
3213        idents = hmacs->shmac_num_idents;
3214        if (idents == 0 || idents > SCTP_AUTH_NUM_HMACS ||
3215            (idents * sizeof(u16)) > (optlen - sizeof(struct sctp_hmacalgo))) {
3216                err = -EINVAL;
3217                goto out;
3218        }
3219
3220        err = sctp_auth_ep_set_hmacs(sctp_sk(sk)->ep, hmacs);
3221out:
3222        kfree(hmacs);
3223        return err;
3224}
3225
3226/*
3227 * 7.1.20.  Set a shared key (SCTP_AUTH_KEY)
3228 *
3229 * This option will set a shared secret key which is used to build an
3230 * association shared key.
3231 */
3232static int sctp_setsockopt_auth_key(struct sock *sk,
3233                                    char __user *optval,
3234                                    unsigned int optlen)
3235{
3236        struct sctp_authkey *authkey;
3237        struct sctp_association *asoc;
3238        int ret;
3239
3240        if (!sctp_auth_enable)
3241                return -EACCES;
3242
3243        if (optlen <= sizeof(struct sctp_authkey))
3244                return -EINVAL;
3245
3246        authkey = kmalloc(optlen, GFP_KERNEL);
3247        if (!authkey)
3248                return -ENOMEM;
3249
3250        if (copy_from_user(authkey, optval, optlen)) {
3251                ret = -EFAULT;
3252                goto out;
3253        }
3254
3255        if (authkey->sca_keylength > optlen - sizeof(struct sctp_authkey)) {
3256                ret = -EINVAL;
3257                goto out;
3258        }
3259
3260        asoc = sctp_id2assoc(sk, authkey->sca_assoc_id);
3261        if (!asoc && authkey->sca_assoc_id && sctp_style(sk, UDP)) {
3262                ret = -EINVAL;
3263                goto out;
3264        }
3265
3266        ret = sctp_auth_set_key(sctp_sk(sk)->ep, asoc, authkey);
3267out:
3268        kfree(authkey);
3269        return ret;
3270}
3271
3272/*
3273 * 7.1.21.  Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY)
3274 *
3275 * This option will get or set the active shared key to be used to build
3276 * the association shared key.
3277 */
3278static int sctp_setsockopt_active_key(struct sock *sk,
3279                                      char __user *optval,
3280                                      unsigned int optlen)
3281{
3282        struct sctp_authkeyid val;
3283        struct sctp_association *asoc;
3284
3285        if (!sctp_auth_enable)
3286                return -EACCES;
3287
3288        if (optlen != sizeof(struct sctp_authkeyid))
3289                return -EINVAL;
3290        if (copy_from_user(&val, optval, optlen))
3291                return -EFAULT;
3292
3293        asoc = sctp_id2assoc(sk, val.scact_assoc_id);
3294        if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP))
3295                return -EINVAL;
3296
3297        return sctp_auth_set_active_key(sctp_sk(sk)->ep, asoc,
3298                                        val.scact_keynumber);
3299}
3300
3301/*
3302 * 7.1.22.  Delete a shared key (SCTP_AUTH_DELETE_KEY)
3303 *
3304 * This set option will delete a shared secret key from use.
3305 */
3306static int sctp_setsockopt_del_key(struct sock *sk,
3307                                   char __user *optval,
3308                                   unsigned int optlen)
3309{
3310        struct sctp_authkeyid val;
3311        struct sctp_association *asoc;
3312
3313        if (!sctp_auth_enable)
3314                return -EACCES;
3315
3316        if (optlen != sizeof(struct sctp_authkeyid))
3317                return -EINVAL;
3318        if (copy_from_user(&val, optval, optlen))
3319                return -EFAULT;
3320
3321        asoc = sctp_id2assoc(sk, val.scact_assoc_id);
3322        if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP))
3323                return -EINVAL;
3324
3325        return sctp_auth_del_key_id(sctp_sk(sk)->ep, asoc,
3326                                    val.scact_keynumber);
3327
3328}
3329
3330
3331/* API 6.2 setsockopt(), getsockopt()
3332 *
3333 * Applications use setsockopt() and getsockopt() to set or retrieve
3334 * socket options.  Socket options are used to change the default
3335 * behavior of sockets calls.  They are described in Section 7.
3336 *
3337 * The syntax is:
3338 *
3339 *   ret = getsockopt(int sd, int level, int optname, void __user *optval,
3340 *                    int __user *optlen);
3341 *   ret = setsockopt(int sd, int level, int optname, const void __user *optval,
3342 *                    int optlen);
3343 *
3344 *   sd      - the socket descript.
3345 *   level   - set to IPPROTO_SCTP for all SCTP options.
3346 *   optname - the option name.
3347 *   optval  - the buffer to store the value of the option.
3348 *   optlen  - the size of the buffer.
3349 */
3350SCTP_STATIC int sctp_setsockopt(struct sock *sk, int level, int optname,
3351                                char __user *optval, unsigned int optlen)
3352{
3353        int retval = 0;
3354
3355        SCTP_DEBUG_PRINTK("sctp_setsockopt(sk: %p... optname: %d)\n",
3356                          sk, optname);
3357
3358        /* I can hardly begin to describe how wrong this is.  This is
3359         * so broken as to be worse than useless.  The API draft
3360         * REALLY is NOT helpful here...  I am not convinced that the
3361         * semantics of setsockopt() with a level OTHER THAN SOL_SCTP
3362         * are at all well-founded.
3363         */
3364        if (level != SOL_SCTP) {
3365                struct sctp_af *af = sctp_sk(sk)->pf->af;
3366                retval = af->setsockopt(sk, level, optname, optval, optlen);
3367                goto out_nounlock;
3368        }
3369
3370        sctp_lock_sock(sk);
3371
3372        switch (optname) {
3373        case SCTP_SOCKOPT_BINDX_ADD:
3374                /* 'optlen' is the size of the addresses buffer. */
3375                retval = sctp_setsockopt_bindx(sk, (struct sockaddr __user *)optval,
3376                                               optlen, SCTP_BINDX_ADD_ADDR);
3377                break;
3378
3379        case SCTP_SOCKOPT_BINDX_REM:
3380                /* 'optlen' is the size of the addresses buffer. */
3381                retval = sctp_setsockopt_bindx(sk, (struct sockaddr __user *)optval,
3382                                               optlen, SCTP_BINDX_REM_ADDR);
3383                break;
3384
3385        case SCTP_SOCKOPT_CONNECTX_OLD:
3386                /* 'optlen' is the size of the addresses buffer. */
3387                retval = sctp_setsockopt_connectx_old(sk,
3388                                            (struct sockaddr __user *)optval,
3389                                            optlen);
3390                break;
3391
3392        case SCTP_SOCKOPT_CONNECTX:
3393                /* 'optlen' is the size of the addresses buffer. */
3394                retval = sctp_setsockopt_connectx(sk,
3395                                            (struct sockaddr __user *)optval,
3396                                            optlen);
3397                break;
3398
3399        case SCTP_DISABLE_FRAGMENTS:
3400                retval = sctp_setsockopt_disable_fragments(sk, optval, optlen);
3401                break;
3402
3403        case SCTP_EVENTS:
3404                retval = sctp_setsockopt_events(sk, optval, optlen);
3405                break;
3406
3407        case SCTP_AUTOCLOSE:
3408                retval = sctp_setsockopt_autoclose(sk, optval, optlen);
3409                break;
3410
3411        case SCTP_PEER_ADDR_PARAMS:
3412                retval = sctp_setsockopt_peer_addr_params(sk, optval, optlen);
3413                break;
3414
3415        case SCTP_DELAYED_ACK:
3416                retval = sctp_setsockopt_delayed_ack(sk, optval, optlen);
3417                break;
3418        case SCTP_PARTIAL_DELIVERY_POINT:
3419                retval = sctp_setsockopt_partial_delivery_point(sk, optval, optlen);
3420                break;
3421
3422        case SCTP_INITMSG:
3423                retval = sctp_setsockopt_initmsg(sk, optval, optlen);
3424                break;
3425        case SCTP_DEFAULT_SEND_PARAM:
3426                retval = sctp_setsockopt_default_send_param(sk, optval,
3427                                                            optlen);
3428                break;
3429        case SCTP_PRIMARY_ADDR:
3430                retval = sctp_setsockopt_primary_addr(sk, optval, optlen);
3431                break;
3432        case SCTP_SET_PEER_PRIMARY_ADDR:
3433                retval = sctp_setsockopt_peer_primary_addr(sk, optval, optlen);
3434                break;
3435        case SCTP_NODELAY:
3436                retval = sctp_setsockopt_nodelay(sk, optval, optlen);
3437                break;
3438        case SCTP_RTOINFO:
3439                retval = sctp_setsockopt_rtoinfo(sk, optval, optlen);
3440                break;
3441        case SCTP_ASSOCINFO:
3442                retval = sctp_setsockopt_associnfo(sk, optval, optlen);
3443                break;
3444        case SCTP_I_WANT_MAPPED_V4_ADDR:
3445                retval = sctp_setsockopt_mappedv4(sk, optval, optlen);
3446                break;
3447        case SCTP_MAXSEG:
3448                retval = sctp_setsockopt_maxseg(sk, optval, optlen);
3449                break;
3450        case SCTP_ADAPTATION_LAYER:
3451                retval = sctp_setsockopt_adaptation_layer(sk, optval, optlen);
3452                break;
3453        case SCTP_CONTEXT:
3454                retval = sctp_setsockopt_context(sk, optval, optlen);
3455                break;
3456        case SCTP_FRAGMENT_INTERLEAVE:
3457                retval = sctp_setsockopt_fragment_interleave(sk, optval, optlen);
3458                break;
3459        case SCTP_MAX_BURST:
3460                retval = sctp_setsockopt_maxburst(sk, optval, optlen);
3461                break;
3462        case SCTP_AUTH_CHUNK:
3463                retval = sctp_setsockopt_auth_chunk(sk, optval, optlen);
3464                break;
3465        case SCTP_HMAC_IDENT:
3466                retval = sctp_setsockopt_hmac_ident(sk, optval, optlen);
3467                break;
3468        case SCTP_AUTH_KEY:
3469                retval = sctp_setsockopt_auth_key(sk, optval, optlen);
3470                break;
3471        case SCTP_AUTH_ACTIVE_KEY:
3472                retval = sctp_setsockopt_active_key(sk, optval, optlen);
3473                break;
3474        case SCTP_AUTH_DELETE_KEY:
3475                retval = sctp_setsockopt_del_key(sk, optval, optlen);
3476                break;
3477        default:
3478                retval = -ENOPROTOOPT;
3479                break;
3480        }
3481
3482        sctp_release_sock(sk);
3483
3484out_nounlock:
3485        return retval;
3486}
3487
3488/* API 3.1.6 connect() - UDP Style Syntax
3489 *
3490 * An application may use the connect() call in the UDP model to initiate an
3491 * association without sending data.
3492 *
3493 * The syntax is:
3494 *
3495 * ret = connect(int sd, const struct sockaddr *nam, socklen_t len);
3496 *
3497 * sd: the socket descriptor to have a new association added to.
3498 *
3499 * nam: the address structure (either struct sockaddr_in or struct
3500 *    sockaddr_in6 defined in RFC2553 [7]).
3501 *
3502 * len: the size of the address.
3503 */
3504SCTP_STATIC int sctp_connect(struct sock *sk, struct sockaddr *addr,
3505                             int addr_len)
3506{
3507        int err = 0;
3508        struct sctp_af *af;
3509
3510        sctp_lock_sock(sk);
3511
3512        SCTP_DEBUG_PRINTK("%s - sk: %p, sockaddr: %p, addr_len: %d\n",
3513                          __func__, sk, addr, addr_len);
3514
3515        /* Validate addr_len before calling common connect/connectx routine. */
3516        af = sctp_get_af_specific(addr->sa_family);
3517        if (!af || addr_len < af->sockaddr_len) {
3518                err = -EINVAL;
3519        } else {
3520                /* Pass correct addr len to common routine (so it knows there
3521                 * is only one address being passed.
3522                 */
3523                err = __sctp_connect(sk, addr, af->sockaddr_len, NULL);
3524        }
3525
3526        sctp_release_sock(sk);
3527        return err;
3528}
3529
3530/* FIXME: Write comments. */
3531SCTP_STATIC int sctp_disconnect(struct sock *sk, int flags)
3532{
3533        return -EOPNOTSUPP; /* STUB */
3534}
3535
3536/* 4.1.4 accept() - TCP Style Syntax
3537 *
3538 * Applications use accept() call to remove an established SCTP
3539 * association from the accept queue of the endpoint.  A new socket
3540 * descriptor will be returned from accept() to represent the newly
3541 * formed association.
3542 */
3543SCTP_STATIC struct sock *sctp_accept(struct sock *sk, int flags, int *err)
3544{
3545        struct sctp_sock *sp;
3546        struct sctp_endpoint *ep;
3547        struct sock *newsk = NULL;
3548        struct sctp_association *asoc;
3549        long timeo;
3550        int error = 0;
3551
3552        sctp_lock_sock(sk);
3553
3554        sp = sctp_sk(sk);
3555        ep = sp->ep;
3556
3557        if (!sctp_style(sk, TCP)) {
3558                error = -EOPNOTSUPP;
3559                goto out;
3560        }
3561
3562        if (!sctp_sstate(sk, LISTENING)) {
3563                error = -EINVAL;
3564                goto out;
3565        }
3566
3567        timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
3568
3569        error = sctp_wait_for_accept(sk, timeo);
3570        if (error)
3571                goto out;
3572
3573        /* We treat the list of associations on the endpoint as the accept
3574         * queue and pick the first association on the list.
3575         */
3576        asoc = list_entry(ep->asocs.next, struct sctp_association, asocs);
3577
3578        newsk = sp->pf->create_accept_sk(sk, asoc);
3579        if (!newsk) {
3580                error = -ENOMEM;
3581                goto out;
3582        }
3583
3584        /* Populate the fields of the newsk from the oldsk and migrate the
3585         * asoc to the newsk.
3586         */
3587        sctp_sock_migrate(sk, newsk, asoc, SCTP_SOCKET_TCP);
3588
3589out:
3590        sctp_release_sock(sk);
3591        *err = error;
3592        return newsk;
3593}
3594
3595/* The SCTP ioctl handler. */
3596SCTP_STATIC int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg)
3597{
3598        return -ENOIOCTLCMD;
3599}
3600
3601/* This is the function which gets called during socket creation to
3602 * initialized the SCTP-specific portion of the sock.
3603 * The sock structure should already be zero-filled memory.
3604 */
3605SCTP_STATIC int sctp_init_sock(struct sock *sk)
3606{
3607        struct sctp_endpoint *ep;
3608        struct sctp_sock *sp;
3609
3610        SCTP_DEBUG_PRINTK("sctp_init_sock(sk: %p)\n", sk);
3611
3612        sp = sctp_sk(sk);
3613
3614        /* Initialize the SCTP per socket area.  */
3615        switch (sk->sk_type) {
3616        case SOCK_SEQPACKET:
3617                sp->type = SCTP_SOCKET_UDP;
3618                break;
3619        case SOCK_STREAM:
3620                sp->type = SCTP_SOCKET_TCP;
3621                break;
3622        default:
3623                return -ESOCKTNOSUPPORT;
3624        }
3625
3626        /* Initialize default send parameters. These parameters can be
3627         * modified with the SCTP_DEFAULT_SEND_PARAM socket option.
3628         */
3629        sp->default_stream = 0;
3630        sp->default_ppid = 0;
3631        sp->default_flags = 0;
3632        sp->default_context = 0;
3633        sp->default_timetolive = 0;
3634
3635        sp->default_rcv_context = 0;
3636        sp->max_burst = sctp_max_burst;
3637
3638        /* Initialize default setup parameters. These parameters
3639         * can be modified with the SCTP_INITMSG socket option or
3640         * overridden by the SCTP_INIT CMSG.
3641         */
3642        sp->initmsg.sinit_num_ostreams   = sctp_max_outstreams;
3643        sp->initmsg.sinit_max_instreams  = sctp_max_instreams;
3644        sp->initmsg.sinit_max_attempts   = sctp_max_retrans_init;
3645        sp->initmsg.sinit_max_init_timeo = sctp_rto_max;
3646
3647        /* Initialize default RTO related parameters.  These parameters can
3648         * be modified for with the SCTP_RTOINFO socket option.
3649         */
3650        sp->rtoinfo.srto_initial = sctp_rto_initial;
3651        sp->rtoinfo.srto_max     = sctp_rto_max;
3652        sp->rtoinfo.srto_min     = sctp_rto_min;
3653
3654        /* Initialize default association related parameters. These parameters
3655         * can be modified with the SCTP_ASSOCINFO socket option.
3656         */
3657        sp->assocparams.sasoc_asocmaxrxt = sctp_max_retrans_association;
3658        sp->assocparams.sasoc_number_peer_destinations = 0;
3659        sp->assocparams.sasoc_peer_rwnd = 0;
3660        sp->assocparams.sasoc_local_rwnd = 0;
3661        sp->assocparams.sasoc_cookie_life = sctp_valid_cookie_life;
3662
3663        /* Initialize default event subscriptions. By default, all the
3664         * options are off.
3665         */
3666        memset(&sp->subscribe, 0, sizeof(struct sctp_event_subscribe));
3667
3668        /* Default Peer Address Parameters.  These defaults can
3669         * be modified via SCTP_PEER_ADDR_PARAMS
3670         */
3671        sp->hbinterval  = sctp_hb_interval;
3672        sp->pathmaxrxt  = sctp_max_retrans_path;
3673        sp->pathmtu     = 0; // allow default discovery
3674        sp->sackdelay   = sctp_sack_timeout;
3675        sp->sackfreq    = 2;
3676        sp->param_flags = SPP_HB_ENABLE |
3677                          SPP_PMTUD_ENABLE |
3678                          SPP_SACKDELAY_ENABLE;
3679
3680        /* If enabled no SCTP message fragmentation will be performed.
3681         * Configure through SCTP_DISABLE_FRAGMENTS socket option.
3682         */
3683        sp->disable_fragments = 0;
3684
3685        /* Enable Nagle algorithm by default.  */
3686        sp->nodelay           = 0;
3687
3688        /* Enable by default. */
3689        sp->v4mapped          = 1;
3690
3691        /* Auto-close idle associations after the configured
3692         * number of seconds.  A value of 0 disables this
3693         * feature.  Configure through the SCTP_AUTOCLOSE socket option,
3694         * for UDP-style sockets only.
3695         */
3696        sp->autoclose         = 0;
3697
3698        /* User specified fragmentation limit. */
3699        sp->user_frag         = 0;
3700
3701        sp->adaptation_ind = 0;
3702
3703        sp->pf = sctp_get_pf_specific(sk->sk_family);
3704
3705        /* Control variables for partial data delivery. */
3706        atomic_set(&sp->pd_mode, 0);
3707        skb_queue_head_init(&sp->pd_lobby);
3708        sp->frag_interleave = 0;
3709
3710        /* Create a per socket endpoint structure.  Even if we
3711         * change the data structure relationships, this may still
3712         * be useful for storing pre-connect address information.
3713         */
3714        ep = sctp_endpoint_new(sk, GFP_KERNEL);
3715        if (!ep)
3716                return -ENOMEM;
3717
3718        sp->ep = ep;
3719        sp->hmac = NULL;
3720
3721        SCTP_DBG_OBJCNT_INC(sock);
3722
3723        local_bh_disable();
3724        percpu_counter_inc(&sctp_sockets_allocated);
3725        sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
3726        local_bh_enable();
3727
3728        return 0;
3729}
3730
3731/* Cleanup any SCTP per socket resources.  */
3732SCTP_STATIC void sctp_destroy_sock(struct sock *sk)
3733{
3734        struct sctp_endpoint *ep;
3735
3736        SCTP_DEBUG_PRINTK("sctp_destroy_sock(sk: %p)\n", sk);
3737
3738        /* Release our hold on the endpoint. */
3739        ep = sctp_sk(sk)->ep;
3740        sctp_endpoint_free(ep);
3741        local_bh_disable();
3742        percpu_counter_dec(&sctp_sockets_allocated);
3743        sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
3744        local_bh_enable();
3745}
3746
3747/* API 4.1.7 shutdown() - TCP Style Syntax
3748 *     int shutdown(int socket, int how);
3749 *
3750 *     sd      - the socket descriptor of the association to be closed.
3751 *     how     - Specifies the type of shutdown.  The  values  are
3752 *               as follows:
3753 *               SHUT_RD
3754 *                     Disables further receive operations. No SCTP
3755 *                     protocol action is taken.
3756 *               SHUT_WR
3757 *                     Disables further send operations, and initiates
3758 *                     the SCTP shutdown sequence.
3759 *               SHUT_RDWR
3760 *                     Disables further send  and  receive  operations
3761 *                     and initiates the SCTP shutdown sequence.
3762 */
3763SCTP_STATIC void sctp_shutdown(struct sock *sk, int how)
3764{
3765        struct sctp_endpoint *ep;
3766        struct sctp_association *asoc;
3767
3768        if (!sctp_style(sk, TCP))
3769                return;
3770
3771        if (how & SEND_SHUTDOWN) {
3772                ep = sctp_sk(sk)->ep;
3773                if (!list_empty(&ep->asocs)) {
3774                        asoc = list_entry(ep->asocs.next,
3775                                          struct sctp_association, asocs);
3776                        sctp_primitive_SHUTDOWN(asoc, NULL);
3777                }
3778        }
3779}
3780
3781/* 7.2.1 Association Status (SCTP_STATUS)
3782
3783 * Applications can retrieve current status information about an
3784 * association, including association state, peer receiver window size,
3785 * number of unacked data chunks, and number of data chunks pending
3786 * receipt.  This information is read-only.
3787 */
3788static int sctp_getsockopt_sctp_status(struct sock *sk, int len,
3789                                       char __user *optval,
3790                                       int __user *optlen)
3791{
3792        struct sctp_status status;
3793        struct sctp_association *asoc = NULL;
3794        struct sctp_transport *transport;
3795        sctp_assoc_t associd;
3796        int retval = 0;
3797
3798        if (len < sizeof(status)) {
3799                retval = -EINVAL;
3800                goto out;
3801        }
3802
3803        len = sizeof(status);
3804        if (copy_from_user(&status, optval, len)) {
3805                retval = -EFAULT;
3806                goto out;
3807        }
3808
3809        associd = status.sstat_assoc_id;
3810        asoc = sctp_id2assoc(sk, associd);
3811        if (!asoc) {
3812                retval = -EINVAL;
3813                goto out;
3814        }
3815
3816        transport = asoc->peer.primary_path;
3817
3818        status.sstat_assoc_id = sctp_assoc2id(asoc);
3819        status.sstat_state = asoc->state;
3820        status.sstat_rwnd =  asoc->peer.rwnd;
3821        status.sstat_unackdata = asoc->unack_data;
3822
3823        status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map);
3824        status.sstat_instrms = asoc->c.sinit_max_instreams;
3825        status.sstat_outstrms = asoc->c.sinit_num_ostreams;
3826        status.sstat_fragmentation_point = asoc->frag_point;
3827        status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
3828        memcpy(&status.sstat_primary.spinfo_address, &transport->ipaddr,
3829                        transport->af_specific->sockaddr_len);
3830        /* Map ipv4 address into v4-mapped-on-v6 address.  */
3831        sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
3832                (union sctp_addr *)&status.sstat_primary.spinfo_address);
3833        status.sstat_primary.spinfo_state = transport->state;
3834        status.sstat_primary.spinfo_cwnd = transport->cwnd;
3835        status.sstat_primary.spinfo_srtt = transport->srtt;
3836        status.sstat_primary.spinfo_rto = jiffies_to_msecs(transport->rto);
3837        status.sstat_primary.spinfo_mtu = transport->pathmtu;
3838
3839        if (status.sstat_primary.spinfo_state == SCTP_UNKNOWN)
3840                status.sstat_primary.spinfo_state = SCTP_ACTIVE;
3841
3842        if (put_user(len, optlen)) {
3843                retval = -EFAULT;
3844                goto out;
3845        }
3846
3847        SCTP_DEBUG_PRINTK("sctp_getsockopt_sctp_status(%d): %d %d %d\n",
3848                          len, status.sstat_state, status.sstat_rwnd,
3849                          status.sstat_assoc_id);
3850
3851        if (copy_to_user(optval, &status, len)) {
3852                retval = -EFAULT;
3853                goto out;
3854        }
3855
3856out:
3857        return (retval);
3858}
3859
3860
3861/* 7.2.2 Peer Address Information (SCTP_GET_PEER_ADDR_INFO)
3862 *
3863 * Applications can retrieve information about a specific peer address
3864 * of an association, including its reachability state, congestion
3865 * window, and retransmission timer values.  This information is
3866 * read-only.
3867 */
3868static int sctp_getsockopt_peer_addr_info(struct sock *sk, int len,
3869                                          char __user *optval,
3870                                          int __user *optlen)
3871{
3872        struct sctp_paddrinfo pinfo;
3873        struct sctp_transport *transport;
3874        int retval = 0;
3875
3876        if (len < sizeof(pinfo)) {
3877                retval = -EINVAL;
3878                goto out;
3879        }
3880
3881        len = sizeof(pinfo);
3882        if (copy_from_user(&pinfo, optval, len)) {
3883                retval = -EFAULT;
3884                goto out;
3885        }
3886
3887        transport = sctp_addr_id2transport(sk, &pinfo.spinfo_address,
3888                                           pinfo.spinfo_assoc_id);
3889        if (!transport)
3890                return -EINVAL;
3891
3892        pinfo.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
3893        pinfo.spinfo_state = transport->state;
3894        pinfo.spinfo_cwnd = transport->cwnd;
3895        pinfo.spinfo_srtt = transport->srtt;
3896        pinfo.spinfo_rto = jiffies_to_msecs(transport->rto);
3897        pinfo.spinfo_mtu = transport->pathmtu;
3898
3899        if (pinfo.spinfo_state == SCTP_UNKNOWN)
3900                pinfo.spinfo_state = SCTP_ACTIVE;
3901
3902        if (put_user(len, optlen)) {
3903                retval = -EFAULT;
3904                goto out;
3905        }
3906
3907        if (copy_to_user(optval, &pinfo, len)) {
3908                retval = -EFAULT;
3909                goto out;
3910        }
3911
3912out:
3913        return (retval);
3914}
3915
3916/* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS)
3917 *
3918 * This option is a on/off flag.  If enabled no SCTP message
3919 * fragmentation will be performed.  Instead if a message being sent
3920 * exceeds the current PMTU size, the message will NOT be sent and
3921 * instead a error will be indicated to the user.
3922 */
3923static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
3924                                        char __user *optval, int __user *optlen)
3925{
3926        int val;
3927
3928        if (len < sizeof(int))
3929                return -EINVAL;
3930
3931        len = sizeof(int);
3932        val = (sctp_sk(sk)->disable_fragments == 1);
3933        if (put_user(len, optlen))
3934                return -EFAULT;
3935        if (copy_to_user(optval, &val, len))
3936                return -EFAULT;
3937        return 0;
3938}
3939
3940/* 7.1.15 Set notification and ancillary events (SCTP_EVENTS)
3941 *
3942 * This socket option is used to specify various notifications and
3943 * ancillary data the user wishes to receive.
3944 */
3945static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
3946                                  int __user *optlen)
3947{
3948        if (len < sizeof(struct sctp_event_subscribe))
3949                return -EINVAL;
3950        len = sizeof(struct sctp_event_subscribe);
3951        if (put_user(len, optlen))
3952                return -EFAULT;
3953        if (copy_to_user(optval, &sctp_sk(sk)->subscribe, len))
3954                return -EFAULT;
3955        return 0;
3956}
3957
3958/* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE)
3959 *
3960 * This socket option is applicable to the UDP-style socket only.  When
3961 * set it will cause associations that are idle for more than the
3962 * specified number of seconds to automatically close.  An association
3963 * being idle is defined an association that has NOT sent or received
3964 * user data.  The special value of '0' indicates that no automatic
3965 * close of any associations should be performed.  The option expects an
3966 * integer defining the number of seconds of idle time before an
3967 * association is closed.
3968 */
3969static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen)
3970{
3971        /* Applicable to UDP-style socket only */
3972        if (sctp_style(sk, TCP))
3973                return -EOPNOTSUPP;
3974        if (len < sizeof(int))
3975                return -EINVAL;
3976        len = sizeof(int);
3977        if (put_user(len, optlen))
3978                return -EFAULT;
3979        if (copy_to_user(optval, &sctp_sk(sk)->autoclose, sizeof(int)))
3980                return -EFAULT;
3981        return 0;
3982}
3983
3984/* Helper routine to branch off an association to a new socket.  */
3985SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc,
3986                                struct socket **sockp)
3987{
3988        struct sock *sk = asoc->base.sk;
3989        struct socket *sock;
3990        struct sctp_af *af;
3991        int err = 0;
3992
3993        /* An association cannot be branched off from an already peeled-off
3994         * socket, nor is this supported for tcp style sockets.
3995         */
3996        if (!sctp_style(sk, UDP))
3997                return -EINVAL;
3998
3999        /* Create a new socket.  */
4000        err = sock_create(sk->sk_family, SOCK_SEQPACKET, IPPROTO_SCTP, &sock);
4001        if (err < 0)
4002                return err;
4003
4004        sctp_copy_sock(sock->sk, sk, asoc);
4005
4006        /* Make peeled-off sockets more like 1-1 accepted sockets.
4007         * Set the daddr and initialize id to something more random
4008         */
4009        af = sctp_get_af_specific(asoc->peer.primary_addr.sa.sa_family);
4010        af->to_sk_daddr(&asoc->peer.primary_addr, sk);
4011
4012        /* Populate the fields of the newsk from the oldsk and migrate the
4013         * asoc to the newsk.
4014         */
4015        sctp_sock_migrate(sk, sock->sk, asoc, SCTP_SOCKET_UDP_HIGH_BANDWIDTH);
4016
4017        *sockp = sock;
4018
4019        return err;
4020}
4021
4022static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval, int __user *optlen)
4023{
4024        sctp_peeloff_arg_t peeloff;
4025        struct socket *newsock;
4026        int retval = 0;
4027        struct sctp_association *asoc;
4028
4029        if (len < sizeof(sctp_peeloff_arg_t))
4030                return -EINVAL;
4031        len = sizeof(sctp_peeloff_arg_t);
4032        if (copy_from_user(&peeloff, optval, len))
4033                return -EFAULT;
4034
4035        asoc = sctp_id2assoc(sk, peeloff.associd);
4036        if (!asoc) {
4037                retval = -EINVAL;
4038                goto out;
4039        }
4040
4041        SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p\n", __func__, sk, asoc);
4042
4043        retval = sctp_do_peeloff(asoc, &newsock);
4044        if (retval < 0)
4045                goto out;
4046
4047        /* Map the socket to an unused fd that can be returned to the user.  */
4048        retval = sock_map_fd(newsock, 0);
4049        if (retval < 0) {
4050                sock_release(newsock);
4051                goto out;
4052        }
4053
4054        SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p newsk: %p sd: %d\n",
4055                          __func__, sk, asoc, newsock->sk, retval);
4056
4057        /* Return the fd mapped to the new socket.  */
4058        peeloff.sd = retval;
4059        if (put_user(len, optlen))
4060                return -EFAULT;
4061        if (copy_to_user(optval, &peeloff, len))
4062                retval = -EFAULT;
4063
4064out:
4065        return retval;
4066}
4067
4068/* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS)
4069 *
4070 * Applications can enable or disable heartbeats for any peer address of
4071 * an association, modify an address's heartbeat interval, force a
4072 * heartbeat to be sent immediately, and adjust the address's maximum
4073 * number of retransmissions sent before an address is considered
4074 * unreachable.  The following structure is used to access and modify an
4075 * address's parameters:
4076 *
4077 *  struct sctp_paddrparams {
4078 *     sctp_assoc_t            spp_assoc_id;
4079 *     struct sockaddr_storage spp_address;
4080 *     uint32_t                spp_hbinterval;
4081 *     uint16_t                spp_pathmaxrxt;
4082 *     uint32_t                spp_pathmtu;
4083 *     uint32_t                spp_sackdelay;
4084 *     uint32_t                spp_flags;
4085 * };
4086 *
4087 *   spp_assoc_id    - (one-to-many style socket) This is filled in the
4088 *                     application, and identifies the association for
4089 *                     this query.
4090 *   spp_address     - This specifies which address is of interest.
4091 *   spp_hbinterval  - This contains the value of the heartbeat interval,
4092 *                     in milliseconds.  If a  value of zero
4093 *                     is present in this field then no changes are to
4094 *                     be made to this parameter.
4095 *   spp_pathmaxrxt  - This contains the maximum number of
4096 *                     retransmissions before this address shall be
4097 *                     considered unreachable. If a  value of zero
4098 *                     is present in this field then no changes are to
4099 *                     be made to this parameter.
4100 *   spp_pathmtu     - When Path MTU discovery is disabled the value
4101 *                     specified here will be the "fixed" path mtu.
4102 *                     Note that if the spp_address field is empty
4103 *                     then all associations on this address will
4104 *                     have this fixed path mtu set upon them.
4105 *
4106 *   spp_sackdelay   - When delayed sack is enabled, this value specifies
4107 *                     the number of milliseconds that sacks will be delayed
4108 *                     for. This value will apply to all addresses of an
4109 *                     association if the spp_address field is empty. Note
4110 *                     also, that if delayed sack is enabled and this
4111 *                     value is set to 0, no change is made to the last
4112 *                     recorded delayed sack timer value.
4113 *
4114 *   spp_flags       - These flags are used to control various features
4115 *                     on an association. The flag field may contain
4116 *                     zero or more of the following options.
4117 *
4118 *                     SPP_HB_ENABLE  - Enable heartbeats on the
4119 *                     specified address. Note that if the address
4120 *                     field is empty all addresses for the association
4121 *                     have heartbeats enabled upon them.
4122 *
4123 *                     SPP_HB_DISABLE - Disable heartbeats on the
4124 *                     speicifed address. Note that if the address
4125 *                     field is empty all addresses for the association
4126 *                     will have their heartbeats disabled. Note also
4127 *                     that SPP_HB_ENABLE and SPP_HB_DISABLE are
4128 *                     mutually exclusive, only one of these two should
4129 *                     be specified. Enabling both fields will have
4130 *                     undetermined results.
4131 *
4132 *                     SPP_HB_DEMAND - Request a user initiated heartbeat
4133 *                     to be made immediately.
4134 *
4135 *                     SPP_PMTUD_ENABLE - This field will enable PMTU
4136 *                     discovery upon the specified address. Note that
4137 *                     if the address feild is empty then all addresses
4138 *                     on the association are effected.
4139 *
4140 *                     SPP_PMTUD_DISABLE - This field will disable PMTU
4141 *                     discovery upon the specified address. Note that
4142 *                     if the address feild is empty then all addresses
4143 *                     on the association are effected. Not also that
4144 *                     SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually
4145 *                     exclusive. Enabling both will have undetermined
4146 *                     results.
4147 *
4148 *                     SPP_SACKDELAY_ENABLE - Setting this flag turns
4149 *                     on delayed sack. The time specified in spp_sackdelay
4150 *                     is used to specify the sack delay for this address. Note
4151 *                     that if spp_address is empty then all addresses will
4152 *                     enable delayed sack and take on the sack delay
4153 *                     value specified in spp_sackdelay.
4154 *                     SPP_SACKDELAY_DISABLE - Setting this flag turns
4155 *                     off delayed sack. If the spp_address field is blank then
4156 *                     delayed sack is disabled for the entire association. Note
4157 *                     also that this field is mutually exclusive to
4158 *                     SPP_SACKDELAY_ENABLE, setting both will have undefined
4159 *                     results.
4160 */
4161static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len,
4162                                            char __user *optval, int __user *optlen)
4163{
4164        struct sctp_paddrparams  params;
4165        struct sctp_transport   *trans = NULL;
4166        struct sctp_association *asoc = NULL;
4167        struct sctp_sock        *sp = sctp_sk(sk);
4168
4169        if (len < sizeof(struct sctp_paddrparams))
4170                return -EINVAL;
4171        len = sizeof(struct sctp_paddrparams);
4172        if (copy_from_user(&params, optval, len))
4173                return -EFAULT;
4174
4175        /* If an address other than INADDR_ANY is specified, and
4176         * no transport is found, then the request is invalid.
4177         */
4178        if (!sctp_is_any(sk, ( union sctp_addr *)&params.spp_address)) {
4179                trans = sctp_addr_id2transport(sk, &params.spp_address,
4180                                               params.spp_assoc_id);
4181                if (!trans) {
4182                        SCTP_DEBUG_PRINTK("Failed no transport\n");
4183                        return -EINVAL;
4184                }
4185        }
4186
4187        /* Get association, if assoc_id != 0 and the socket is a one
4188         * to many style socket, and an association was not found, then
4189         * the id was invalid.
4190         */
4191        asoc = sctp_id2assoc(sk, params.spp_assoc_id);
4192        if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) {
4193                SCTP_DEBUG_PRINTK("Failed no association\n");
4194                return -EINVAL;
4195        }
4196
4197        if (trans) {
4198                /* Fetch transport values. */
4199                params.spp_hbinterval = jiffies_to_msecs(trans->hbinterval);
4200                params.spp_pathmtu    = trans->pathmtu;
4201                params.spp_pathmaxrxt = trans->pathmaxrxt;
4202                params.spp_sackdelay  = jiffies_to_msecs(trans->sackdelay);
4203
4204                /*draft-11 doesn't say what to return in spp_flags*/
4205                params.spp_flags      = trans->param_flags;
4206        } else if (asoc) {
4207                /* Fetch association values. */
4208                params.spp_hbinterval = jiffies_to_msecs(asoc->hbinterval);
4209                params.spp_pathmtu    = asoc->pathmtu;
4210                params.spp_pathmaxrxt = asoc->pathmaxrxt;
4211                params.spp_sackdelay  = jiffies_to_msecs(asoc->sackdelay);
4212
4213                /*draft-11 doesn't say what to return in spp_flags*/
4214                params.spp_flags      = asoc->param_flags;
4215        } else {
4216                /* Fetch socket values. */
4217                params.spp_hbinterval = sp->hbinterval;
4218                params.spp_pathmtu    = sp->pathmtu;
4219                params.spp_sackdelay  = sp->sackdelay;
4220                params.spp_pathmaxrxt = sp->pathmaxrxt;
4221
4222                /*draft-11 doesn't say what to return in spp_flags*/
4223                params.spp_flags      = sp->param_flags;
4224        }
4225
4226        if (copy_to_user(optval, &params, len))
4227                return -EFAULT;
4228
4229        if (put_user(len, optlen))
4230                return -EFAULT;
4231
4232        return 0;
4233}
4234
4235/*
4236 * 7.1.23.  Get or set delayed ack timer (SCTP_DELAYED_SACK)
4237 *
4238 * This option will effect the way delayed acks are performed.  This
4239 * option allows you to get or set the delayed ack time, in
4240 * milliseconds.  It also allows changing the delayed ack frequency.
4241 * Changing the frequency to 1 disables the delayed sack algorithm.  If
4242 * the assoc_id is 0, then this sets or gets the endpoints default
4243 * values.  If the assoc_id field is non-zero, then the set or get
4244 * effects the specified association for the one to many model (the
4245 * assoc_id field is ignored by the one to one model).  Note that if
4246 * sack_delay or sack_freq are 0 when setting this option, then the
4247 * current values will remain unchanged.
4248 *
4249 * struct sctp_sack_info {
4250 *     sctp_assoc_t            sack_assoc_id;
4251 *     uint32_t                sack_delay;
4252 *     uint32_t                sack_freq;
4253 * };
4254 *
4255 * sack_assoc_id -  This parameter, indicates which association the user
4256 *    is performing an action upon.  Note that if this field's value is
4257 *    zero then the endpoints default value is changed (effecting future
4258 *    associations only).
4259 *
4260 * sack_delay -  This parameter contains the number of milliseconds that
4261 *    the user is requesting the delayed ACK timer be set to.  Note that
4262 *    this value is defined in the standard to be between 200 and 500
4263 *    milliseconds.
4264 *
4265 * sack_freq -  This parameter contains the number of packets that must
4266 *    be received before a sack is sent without waiting for the delay
4267 *    timer to expire.  The default value for this is 2, setting this
4268 *    value to 1 will disable the delayed sack algorithm.
4269 */
4270static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
4271                                            char __user *optval,
4272                                            int __user *optlen)
4273{
4274        struct sctp_sack_info    params;
4275        struct sctp_association *asoc = NULL;
4276        struct sctp_sock        *sp = sctp_sk(sk);
4277
4278        if (len >= sizeof(struct sctp_sack_info)) {
4279                len = sizeof(struct sctp_sack_info);
4280
4281                if (copy_from_user(&params, optval, len))
4282                        return -EFAULT;
4283        } else if (len == sizeof(struct sctp_assoc_value)) {
4284                printk(KERN_WARNING "SCTP: Use of struct sctp_assoc_value "
4285                       "in delayed_ack socket option deprecated\n");
4286                printk(KERN_WARNING "SCTP: Use struct sctp_sack_info instead\n");
4287                if (copy_from_user(&params, optval, len))
4288                        return -EFAULT;
4289        } else
4290                return - EINVAL;
4291
4292        /* Get association, if sack_assoc_id != 0 and the socket is a one
4293         * to many style socket, and an association was not found, then
4294         * the id was invalid.
4295         */
4296        asoc = sctp_id2assoc(sk, params.sack_assoc_id);
4297        if (!asoc && params.sack_assoc_id && sctp_style(sk, UDP))
4298                return -EINVAL;
4299
4300        if (asoc) {
4301                /* Fetch association values. */
4302                if (asoc->param_flags & SPP_SACKDELAY_ENABLE) {
4303                        params.sack_delay = jiffies_to_msecs(
4304                                asoc->sackdelay);
4305                        params.sack_freq = asoc->sackfreq;
4306
4307                } else {
4308                        params.sack_delay = 0;
4309                        params.sack_freq = 1;
4310                }
4311        } else {
4312                /* Fetch socket values. */
4313                if (sp->param_flags & SPP_SACKDELAY_ENABLE) {
4314                        params.sack_delay  = sp->sackdelay;
4315                        params.sack_freq = sp->sackfreq;
4316                } else {
4317                        params.sack_delay  = 0;
4318                        params.sack_freq = 1;
4319                }
4320        }
4321
4322        if (copy_to_user(optval, &params, len))
4323                return -EFAULT;
4324
4325        if (put_user(len, optlen))
4326                return -EFAULT;
4327
4328        return 0;
4329}
4330
4331/* 7.1.3 Initialization Parameters (SCTP_INITMSG)
4332 *
4333 * Applications can specify protocol parameters for the default association
4334 * initialization.  The option name argument to setsockopt() and getsockopt()
4335 * is SCTP_INITMSG.
4336 *
4337 * Setting initialization parameters is effective only on an unconnected
4338 * socket (for UDP-style sockets only future associations are effected
4339 * by the change).  With TCP-style sockets, this option is inherited by
4340 * sockets derived from a listener socket.
4341 */
4342static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen)
4343{
4344        if (len < sizeof(struct sctp_initmsg))
4345                return -EINVAL;
4346        len = sizeof(struct sctp_initmsg);
4347        if (put_user(len, optlen))
4348                return -EFAULT;
4349        if (copy_to_user(optval, &sctp_sk(sk)->initmsg, len))
4350                return -EFAULT;
4351        return 0;
4352}
4353
4354
4355static int sctp_getsockopt_peer_addrs(struct sock *sk, int len,
4356                                      char __user *optval, int __user *optlen)
4357{
4358        struct sctp_association *asoc;
4359        int cnt = 0;
4360        struct sctp_getaddrs getaddrs;
4361        struct sctp_transport *from;
4362        void __user *to;
4363        union sctp_addr temp;
4364        struct sctp_sock *sp = sctp_sk(sk);
4365        int addrlen;
4366        size_t space_left;
4367        int bytes_copied;
4368
4369        if (len < sizeof(struct sctp_getaddrs))
4370                return -EINVAL;
4371
4372        if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs)))
4373                return -EFAULT;
4374
4375        /* For UDP-style sockets, id specifies the association to query.  */
4376        asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
4377        if (!asoc)
4378                return -EINVAL;
4379
4380        to = optval + offsetof(struct sctp_getaddrs,addrs);
4381        space_left = len - offsetof(struct sctp_getaddrs,addrs);
4382
4383        list_for_each_entry(from, &asoc->peer.transport_addr_list,
4384                                transports) {
4385                memcpy(&temp, &from->ipaddr, sizeof(temp));
4386                sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
4387                addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
4388                if (space_left < addrlen)
4389                        return -ENOMEM;
4390                if (copy_to_user(to, &temp, addrlen))
4391                        return -EFAULT;
4392                to += addrlen;
4393                cnt++;
4394                space_left -= addrlen;
4395        }
4396
4397        if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num))
4398                return -EFAULT;
4399        bytes_copied = ((char __user *)to) - optval;
4400        if (put_user(bytes_copied, optlen))
4401                return -EFAULT;
4402
4403        return 0;
4404}
4405
4406static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to,
4407                            size_t space_left, int *bytes_copied)
4408{
4409        struct sctp_sockaddr_entry *addr;
4410        union sctp_addr temp;
4411        int cnt = 0;
4412        int addrlen;
4413
4414        rcu_read_lock();
4415        list_for_each_entry_rcu(addr, &sctp_local_addr_list, list) {
4416                if (!addr->valid)
4417                        continue;
4418
4419                if ((PF_INET == sk->sk_family) &&
4420                    (AF_INET6 == addr->a.sa.sa_family))
4421                        continue;
4422                if ((PF_INET6 == sk->sk_family) &&
4423                    inet_v6_ipv6only(sk) &&
4424                    (AF_INET == addr->a.sa.sa_family))
4425                        continue;
4426                memcpy(&temp, &addr->a, sizeof(temp));
4427                if (!temp.v4.sin_port)
4428                        temp.v4.sin_port = htons(port);
4429
4430                sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk),
4431                                                                &temp);
4432                addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
4433                if (space_left < addrlen) {
4434                        cnt =  -ENOMEM;
4435                        break;
4436                }
4437                memcpy(to, &temp, addrlen);
4438
4439                to += addrlen;
4440                cnt ++;
4441                space_left -= addrlen;
4442                *bytes_copied += addrlen;
4443        }
4444        rcu_read_unlock();
4445
4446        return cnt;
4447}
4448
4449
4450static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
4451                                       char __user *optval, int __user *optlen)
4452{
4453        struct sctp_bind_addr *bp;
4454        struct sctp_association *asoc;
4455        int cnt = 0;
4456        struct sctp_getaddrs getaddrs;
4457        struct sctp_sockaddr_entry *addr;
4458        void __user *to;
4459        union sctp_addr temp;
4460        struct sctp_sock *sp = sctp_sk(sk);
4461        int addrlen;
4462        int err = 0;
4463        size_t space_left;
4464        int bytes_copied = 0;
4465        void *addrs;
4466        void *buf;
4467
4468        if (len < sizeof(struct sctp_getaddrs))
4469                return -EINVAL;
4470
4471        if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs)))
4472                return -EFAULT;
4473
4474        /*
4475         *  For UDP-style sockets, id specifies the association to query.
4476         *  If the id field is set to the value '0' then the locally bound
4477         *  addresses are returned without regard to any particular
4478         *  association.
4479         */
4480        if (0 == getaddrs.assoc_id) {
4481                bp = &sctp_sk(sk)->ep->base.bind_addr;
4482        } else {
4483                asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
4484                if (!asoc)
4485                        return -EINVAL;
4486                bp = &asoc->base.bind_addr;
4487        }
4488
4489        to = optval + offsetof(struct sctp_getaddrs,addrs);
4490        space_left = len - offsetof(struct sctp_getaddrs,addrs);
4491
4492        addrs = kmalloc(space_left, GFP_KERNEL);
4493        if (!addrs)
4494                return -ENOMEM;
4495
4496        /* If the endpoint is bound to 0.0.0.0 or ::0, get the valid
4497         * addresses from the global local address list.
4498         */
4499        if (sctp_list_single_entry(&bp->address_list)) {
4500                addr = list_entry(bp->address_list.next,
4501                                  struct sctp_sockaddr_entry, list);
4502                if (sctp_is_any(sk, &addr->a)) {
4503                        cnt = sctp_copy_laddrs(sk, bp->port, addrs,
4504                                                space_left, &bytes_copied);
4505                        if (cnt < 0) {
4506                                err = cnt;
4507                                goto out;
4508                        }
4509                        goto copy_getaddrs;
4510                }
4511        }
4512
4513        buf = addrs;
4514        /* Protection on the bound address list is not needed since
4515         * in the socket option context we hold a socket lock and
4516         * thus the bound address list can't change.
4517         */
4518        list_for_each_entry(addr, &bp->address_list, list) {
4519                memcpy(&temp, &addr->a, sizeof(temp));
4520                sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp);
4521                addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len;
4522                if (space_left < addrlen) {
4523                        err =  -ENOMEM; /*fixme: right error?*/
4524                        goto out;
4525                }
4526                memcpy(buf, &temp, addrlen);
4527                buf += addrlen;
4528                bytes_copied += addrlen;
4529                cnt ++;
4530                space_left -= addrlen;
4531        }
4532
4533copy_getaddrs:
4534        if (copy_to_user(to, addrs, bytes_copied)) {
4535                err = -EFAULT;
4536                goto out;
4537        }
4538        if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) {
4539                err = -EFAULT;
4540                goto out;
4541        }
4542        if (put_user(bytes_copied, optlen))
4543                err = -EFAULT;
4544out:
4545        kfree(addrs);
4546        return err;
4547}
4548
4549/* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR)
4550 *
4551 * Requests that the local SCTP stack use the enclosed peer address as
4552 * the association primary.  The enclosed address must be one of the
4553 * association peer's addresses.
4554 */
4555static int sctp_getsockopt_primary_addr(struct sock *sk, int len,
4556                                        char __user *optval, int __user *optlen)
4557{
4558        struct sctp_prim prim;
4559        struct sctp_association *asoc;
4560        struct sctp_sock *sp = sctp_sk(sk);
4561
4562        if (len < sizeof(struct sctp_prim))
4563                return -EINVAL;
4564
4565        len = sizeof(struct sctp_prim);
4566
4567        if (copy_from_user(&prim, optval, len))
4568                return -EFAULT;
4569
4570        asoc = sctp_id2assoc(sk, prim.ssp_assoc_id);
4571        if (!asoc)
4572                return -EINVAL;
4573
4574        if (!asoc->peer.primary_path)
4575                return -ENOTCONN;
4576
4577        memcpy(&prim.ssp_addr, &asoc->peer.primary_path->ipaddr,
4578                asoc->peer.primary_path->af_specific->sockaddr_len);
4579
4580        sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp,
4581                        (union sctp_addr *)&prim.ssp_addr);
4582
4583        if (put_user(len, optlen))
4584                return -EFAULT;
4585        if (copy_to_user(optval, &prim, len))
4586                return -EFAULT;
4587
4588        return 0;
4589}
4590
4591/*
4592 * 7.1.11  Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER)
4593 *
4594 * Requests that the local endpoint set the specified Adaptation Layer
4595 * Indication parameter for all future INIT and INIT-ACK exchanges.
4596 */
4597static int sctp_getsockopt_adaptation_layer(struct sock *sk, int len,
4598                                  char __user *optval, int __user *optlen)
4599{
4600        struct sctp_setadaptation adaptation;
4601
4602        if (len < sizeof(struct sctp_setadaptation))
4603                return -EINVAL;
4604
4605        len = sizeof(struct sctp_setadaptation);
4606
4607        adaptation.ssb_adaptation_ind = sctp_sk(sk)->adaptation_ind;
4608
4609        if (put_user(len, optlen))
4610                return -EFAULT;
4611        if (copy_to_user(optval, &adaptation, len))
4612                return -EFAULT;
4613
4614        return 0;
4615}
4616
4617/*
4618 *
4619 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM)
4620 *
4621 *   Applications that wish to use the sendto() system call may wish to
4622 *   specify a default set of parameters that would normally be supplied
4623 *   through the inclusion of ancillary data.  This socket option allows
4624 *   such an application to set the default sctp_sndrcvinfo structure.
4625
4626
4627 *   The application that wishes to use this socket option simply passes
4628 *   in to this call the sctp_sndrcvinfo structure defined in Section
4629 *   5.2.2) The input parameters accepted by this call include
4630 *   sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context,
4631 *   sinfo_timetolive.  The user must provide the sinfo_assoc_id field in
4632 *   to this call if the caller is using the UDP model.
4633 *
4634 *   For getsockopt, it get the default sctp_sndrcvinfo structure.
4635 */
4636static int sctp_getsockopt_default_send_param(struct sock *sk,
4637                                        int len, char __user *optval,
4638                                        int __user *optlen)
4639{
4640        struct sctp_sndrcvinfo info;
4641        struct sctp_association *asoc;
4642        struct sctp_sock *sp = sctp_sk(sk);
4643
4644        if (len < sizeof(struct sctp_sndrcvinfo))
4645                return -EINVAL;
4646
4647        len = sizeof(struct sctp_sndrcvinfo);
4648
4649        if (copy_from_user(&info, optval, len))
4650                return -EFAULT;
4651
4652        asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
4653        if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP))
4654                return -EINVAL;
4655
4656        if (asoc) {
4657                info.sinfo_stream = asoc->default_stream;
4658                info.sinfo_flags = asoc->default_flags;
4659                info.sinfo_ppid = asoc->default_ppid;
4660                info.sinfo_context = asoc->