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 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 61 62 #include <linux/types.h> 63 #include <linux/kernel.h> 64 #include <linux/wait.h> 65 #include <linux/time.h> 66 #include <linux/ip.h> 67 #include <linux/capability.h> 68 #include <linux/fcntl.h> 69 #include <linux/poll.h> 70 #include <linux/init.h> 71 #include <linux/crypto.h> 72 #include <linux/slab.h> 73 #include <linux/file.h> 74 75 #include <net/ip.h> 76 #include <net/icmp.h> 77 #include <net/route.h> 78 #include <net/ipv6.h> 79 #include <net/inet_common.h> 80 81 #include <linux/socket.h> /* for sa_family_t */ 82 #include <linux/export.h> 83 #include <net/sock.h> 84 #include <net/sctp/sctp.h> 85 #include <net/sctp/sm.h> 86 87 /* WARNING: Please do not remove the SCTP_STATIC attribute to 88 * any of the functions below as they are used to export functions 89 * used by a project regression testsuite. 90 */ 91 92 /* Forward declarations for internal helper functions. */ 93 static int sctp_writeable(struct sock *sk); 94 static void sctp_wfree(struct sk_buff *skb); 95 static int sctp_wait_for_sndbuf(struct sctp_association *, long *timeo_p, 96 size_t msg_len); 97 static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p); 98 static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p); 99 static int sctp_wait_for_accept(struct sock *sk, long timeo); 100 static void sctp_wait_for_close(struct sock *sk, long timeo); 101 static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt, 102 union sctp_addr *addr, int len); 103 static int sctp_bindx_add(struct sock *, struct sockaddr *, int); 104 static int sctp_bindx_rem(struct sock *, struct sockaddr *, int); 105 static int sctp_send_asconf_add_ip(struct sock *, struct sockaddr *, int); 106 static int sctp_send_asconf_del_ip(struct sock *, struct sockaddr *, int); 107 static int sctp_send_asconf(struct sctp_association *asoc, 108 struct sctp_chunk *chunk); 109 static int sctp_do_bind(struct sock *, union sctp_addr *, int); 110 static int sctp_autobind(struct sock *sk); 111 static void sctp_sock_migrate(struct sock *, struct sock *, 112 struct sctp_association *, sctp_socket_type_t); 113 114 extern struct kmem_cache *sctp_bucket_cachep; 115 extern long sysctl_sctp_mem[3]; 116 extern int sysctl_sctp_rmem[3]; 117 extern int sysctl_sctp_wmem[3]; 118 119 static int sctp_memory_pressure; 120 static atomic_long_t sctp_memory_allocated; 121 struct percpu_counter sctp_sockets_allocated; 122 123 static void sctp_enter_memory_pressure(struct sock *sk) 124 { 125 sctp_memory_pressure = 1; 126 } 127 128 129 /* Get the sndbuf space available at the time on the association. */ 130 static inline int sctp_wspace(struct sctp_association *asoc) 131 { 132 int amt; 133 134 if (asoc->ep->sndbuf_policy) 135 amt = asoc->sndbuf_used; 136 else 137 amt = sk_wmem_alloc_get(asoc->base.sk); 138 139 if (amt >= asoc->base.sk->sk_sndbuf) { 140 if (asoc->base.sk->sk_userlocks & SOCK_SNDBUF_LOCK) 141 amt = 0; 142 else { 143 amt = sk_stream_wspace(asoc->base.sk); 144 if (amt < 0) 145 amt = 0; 146 } 147 } else { 148 amt = asoc->base.sk->sk_sndbuf - amt; 149 } 150 return amt; 151 } 152 153 /* Increment the used sndbuf space count of the corresponding association by 154 * the size of the outgoing data chunk. 155 * Also, set the skb destructor for sndbuf accounting later. 156 * 157 * Since it is always 1-1 between chunk and skb, and also a new skb is always 158 * allocated for chunk bundling in sctp_packet_transmit(), we can use the 159 * destructor in the data chunk skb for the purpose of the sndbuf space 160 * tracking. 161 */ 162 static inline void sctp_set_owner_w(struct sctp_chunk *chunk) 163 { 164 struct sctp_association *asoc = chunk->asoc; 165 struct sock *sk = asoc->base.sk; 166 167 /* The sndbuf space is tracked per association. */ 168 sctp_association_hold(asoc); 169 170 skb_set_owner_w(chunk->skb, sk); 171 172 chunk->skb->destructor = sctp_wfree; 173 /* Save the chunk pointer in skb for sctp_wfree to use later. */ 174 *((struct sctp_chunk **)(chunk->skb->cb)) = chunk; 175 176 asoc->sndbuf_used += SCTP_DATA_SNDSIZE(chunk) + 177 sizeof(struct sk_buff) + 178 sizeof(struct sctp_chunk); 179 180 atomic_add(sizeof(struct sctp_chunk), &sk->sk_wmem_alloc); 181 sk->sk_wmem_queued += chunk->skb->truesize; 182 sk_mem_charge(sk, chunk->skb->truesize); 183 } 184 185 /* Verify that this is a valid address. */ 186 static inline int sctp_verify_addr(struct sock *sk, union sctp_addr *addr, 187 int len) 188 { 189 struct sctp_af *af; 190 191 /* Verify basic sockaddr. */ 192 af = sctp_sockaddr_af(sctp_sk(sk), addr, len); 193 if (!af) 194 return -EINVAL; 195 196 /* Is this a valid SCTP address? */ 197 if (!af->addr_valid(addr, sctp_sk(sk), NULL)) 198 return -EINVAL; 199 200 if (!sctp_sk(sk)->pf->send_verify(sctp_sk(sk), (addr))) 201 return -EINVAL; 202 203 return 0; 204 } 205 206 /* Look up the association by its id. If this is not a UDP-style 207 * socket, the ID field is always ignored. 208 */ 209 struct sctp_association *sctp_id2assoc(struct sock *sk, sctp_assoc_t id) 210 { 211 struct sctp_association *asoc = NULL; 212 213 /* If this is not a UDP-style socket, assoc id should be ignored. */ 214 if (!sctp_style(sk, UDP)) { 215 /* Return NULL if the socket state is not ESTABLISHED. It 216 * could be a TCP-style listening socket or a socket which 217 * hasn't yet called connect() to establish an association. 218 */ 219 if (!sctp_sstate(sk, ESTABLISHED)) 220 return NULL; 221 222 /* Get the first and the only association from the list. */ 223 if (!list_empty(&sctp_sk(sk)->ep->asocs)) 224 asoc = list_entry(sctp_sk(sk)->ep->asocs.next, 225 struct sctp_association, asocs); 226 return asoc; 227 } 228 229 /* Otherwise this is a UDP-style socket. */ 230 if (!id || (id == (sctp_assoc_t)-1)) 231 return NULL; 232 233 spin_lock_bh(&sctp_assocs_id_lock); 234 asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id); 235 spin_unlock_bh(&sctp_assocs_id_lock); 236 237 if (!asoc || (asoc->base.sk != sk) || asoc->base.dead) 238 return NULL; 239 240 return asoc; 241 } 242 243 /* Look up the transport from an address and an assoc id. If both address and 244 * id are specified, the associations matching the address and the id should be 245 * the same. 246 */ 247 static struct sctp_transport *sctp_addr_id2transport(struct sock *sk, 248 struct sockaddr_storage *addr, 249 sctp_assoc_t id) 250 { 251 struct sctp_association *addr_asoc = NULL, *id_asoc = NULL; 252 struct sctp_transport *transport; 253 union sctp_addr *laddr = (union sctp_addr *)addr; 254 255 addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep, 256 laddr, 257 &transport); 258 259 if (!addr_asoc) 260 return NULL; 261 262 id_asoc = sctp_id2assoc(sk, id); 263 if (id_asoc && (id_asoc != addr_asoc)) 264 return NULL; 265 266 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), 267 (union sctp_addr *)addr); 268 269 return transport; 270 } 271 272 /* API 3.1.2 bind() - UDP Style Syntax 273 * The syntax of bind() is, 274 * 275 * ret = bind(int sd, struct sockaddr *addr, int addrlen); 276 * 277 * sd - the socket descriptor returned by socket(). 278 * addr - the address structure (struct sockaddr_in or struct 279 * sockaddr_in6 [RFC 2553]), 280 * addr_len - the size of the address structure. 281 */ 282 SCTP_STATIC int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len) 283 { 284 int retval = 0; 285 286 sctp_lock_sock(sk); 287 288 SCTP_DEBUG_PRINTK("sctp_bind(sk: %p, addr: %p, addr_len: %d)\n", 289 sk, addr, addr_len); 290 291 /* Disallow binding twice. */ 292 if (!sctp_sk(sk)->ep->base.bind_addr.port) 293 retval = sctp_do_bind(sk, (union sctp_addr *)addr, 294 addr_len); 295 else 296 retval = -EINVAL; 297 298 sctp_release_sock(sk); 299 300 return retval; 301 } 302 303 static long sctp_get_port_local(struct sock *, union sctp_addr *); 304 305 /* Verify this is a valid sockaddr. */ 306 static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt, 307 union sctp_addr *addr, int len) 308 { 309 struct sctp_af *af; 310 311 /* Check minimum size. */ 312 if (len < sizeof (struct sockaddr)) 313 return NULL; 314 315 /* V4 mapped address are really of AF_INET family */ 316 if (addr->sa.sa_family == AF_INET6 && 317 ipv6_addr_v4mapped(&addr->v6.sin6_addr)) { 318 if (!opt->pf->af_supported(AF_INET, opt)) 319 return NULL; 320 } else { 321 /* Does this PF support this AF? */ 322 if (!opt->pf->af_supported(addr->sa.sa_family, opt)) 323 return NULL; 324 } 325 326 /* If we get this far, af is valid. */ 327 af = sctp_get_af_specific(addr->sa.sa_family); 328 329 if (len < af->sockaddr_len) 330 return NULL; 331 332 return af; 333 } 334 335 /* Bind a local address either to an endpoint or to an association. */ 336 SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) 337 { 338 struct net *net = sock_net(sk); 339 struct sctp_sock *sp = sctp_sk(sk); 340 struct sctp_endpoint *ep = sp->ep; 341 struct sctp_bind_addr *bp = &ep->base.bind_addr; 342 struct sctp_af *af; 343 unsigned short snum; 344 int ret = 0; 345 346 /* Common sockaddr verification. */ 347 af = sctp_sockaddr_af(sp, addr, len); 348 if (!af) { 349 SCTP_DEBUG_PRINTK("sctp_do_bind(sk: %p, newaddr: %p, len: %d) EINVAL\n", 350 sk, addr, len); 351 return -EINVAL; 352 } 353 354 snum = ntohs(addr->v4.sin_port); 355 356 SCTP_DEBUG_PRINTK_IPADDR("sctp_do_bind(sk: %p, new addr: ", 357 ", port: %d, new port: %d, len: %d)\n", 358 sk, 359 addr, 360 bp->port, snum, 361 len); 362 363 /* PF specific bind() address verification. */ 364 if (!sp->pf->bind_verify(sp, addr)) 365 return -EADDRNOTAVAIL; 366 367 /* We must either be unbound, or bind to the same port. 368 * It's OK to allow 0 ports if we are already bound. 369 * We'll just inhert an already bound port in this case 370 */ 371 if (bp->port) { 372 if (!snum) 373 snum = bp->port; 374 else if (snum != bp->port) { 375 SCTP_DEBUG_PRINTK("sctp_do_bind:" 376 " New port %d does not match existing port " 377 "%d.\n", snum, bp->port); 378 return -EINVAL; 379 } 380 } 381 382 if (snum && snum < PROT_SOCK && 383 !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE)) 384 return -EACCES; 385 386 /* See if the address matches any of the addresses we may have 387 * already bound before checking against other endpoints. 388 */ 389 if (sctp_bind_addr_match(bp, addr, sp)) 390 return -EINVAL; 391 392 /* Make sure we are allowed to bind here. 393 * The function sctp_get_port_local() does duplicate address 394 * detection. 395 */ 396 addr->v4.sin_port = htons(snum); 397 if ((ret = sctp_get_port_local(sk, addr))) { 398 return -EADDRINUSE; 399 } 400 401 /* Refresh ephemeral port. */ 402 if (!bp->port) 403 bp->port = inet_sk(sk)->inet_num; 404 405 /* Add the address to the bind address list. 406 * Use GFP_ATOMIC since BHs will be disabled. 407 */ 408 ret = sctp_add_bind_addr(bp, addr, SCTP_ADDR_SRC, GFP_ATOMIC); 409 410 /* Copy back into socket for getsockname() use. */ 411 if (!ret) { 412 inet_sk(sk)->inet_sport = htons(inet_sk(sk)->inet_num); 413 af->to_sk_saddr(addr, sk); 414 } 415 416 return ret; 417 } 418 419 /* ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks 420 * 421 * R1) One and only one ASCONF Chunk MAY be in transit and unacknowledged 422 * at any one time. If a sender, after sending an ASCONF chunk, decides 423 * it needs to transfer another ASCONF Chunk, it MUST wait until the 424 * ASCONF-ACK Chunk returns from the previous ASCONF Chunk before sending a 425 * subsequent ASCONF. Note this restriction binds each side, so at any 426 * time two ASCONF may be in-transit on any given association (one sent 427 * from each endpoint). 428 */ 429 static int sctp_send_asconf(struct sctp_association *asoc, 430 struct sctp_chunk *chunk) 431 { 432 struct net *net = sock_net(asoc->base.sk); 433 int retval = 0; 434 435 /* If there is an outstanding ASCONF chunk, queue it for later 436 * transmission. 437 */ 438 if (asoc->addip_last_asconf) { 439 list_add_tail(&chunk->list, &asoc->addip_chunk_list); 440 goto out; 441 } 442 443 /* Hold the chunk until an ASCONF_ACK is received. */ 444 sctp_chunk_hold(chunk); 445 retval = sctp_primitive_ASCONF(net, asoc, chunk); 446 if (retval) 447 sctp_chunk_free(chunk); 448 else 449 asoc->addip_last_asconf = chunk; 450 451 out: 452 return retval; 453 } 454 455 /* Add a list of addresses as bind addresses to local endpoint or 456 * association. 457 * 458 * Basically run through each address specified in the addrs/addrcnt 459 * array/length pair, determine if it is IPv6 or IPv4 and call 460 * sctp_do_bind() on it. 461 * 462 * If any of them fails, then the operation will be reversed and the 463 * ones that were added will be removed. 464 * 465 * Only sctp_setsockopt_bindx() is supposed to call this function. 466 */ 467 static int sctp_bindx_add(struct sock *sk, struct sockaddr *addrs, int addrcnt) 468 { 469 int cnt; 470 int retval = 0; 471 void *addr_buf; 472 struct sockaddr *sa_addr; 473 struct sctp_af *af; 474 475 SCTP_DEBUG_PRINTK("sctp_bindx_add (sk: %p, addrs: %p, addrcnt: %d)\n", 476 sk, addrs, addrcnt); 477 478 addr_buf = addrs; 479 for (cnt = 0; cnt < addrcnt; cnt++) { 480 /* The list may contain either IPv4 or IPv6 address; 481 * determine the address length for walking thru the list. 482 */ 483 sa_addr = addr_buf; 484 af = sctp_get_af_specific(sa_addr->sa_family); 485 if (!af) { 486 retval = -EINVAL; 487 goto err_bindx_add; 488 } 489 490 retval = sctp_do_bind(sk, (union sctp_addr *)sa_addr, 491 af->sockaddr_len); 492 493 addr_buf += af->sockaddr_len; 494 495 err_bindx_add: 496 if (retval < 0) { 497 /* Failed. Cleanup the ones that have been added */ 498 if (cnt > 0) 499 sctp_bindx_rem(sk, addrs, cnt); 500 return retval; 501 } 502 } 503 504 return retval; 505 } 506 507 /* Send an ASCONF chunk with Add IP address parameters to all the peers of the 508 * associations that are part of the endpoint indicating that a list of local 509 * addresses are added to the endpoint. 510 * 511 * If any of the addresses is already in the bind address list of the 512 * association, we do not send the chunk for that association. But it will not 513 * affect other associations. 514 * 515 * Only sctp_setsockopt_bindx() is supposed to call this function. 516 */ 517 static int sctp_send_asconf_add_ip(struct sock *sk, 518 struct sockaddr *addrs, 519 int addrcnt) 520 { 521 struct net *net = sock_net(sk); 522 struct sctp_sock *sp; 523 struct sctp_endpoint *ep; 524 struct sctp_association *asoc; 525 struct sctp_bind_addr *bp; 526 struct sctp_chunk *chunk; 527 struct sctp_sockaddr_entry *laddr; 528 union sctp_addr *addr; 529 union sctp_addr saveaddr; 530 void *addr_buf; 531 struct sctp_af *af; 532 struct list_head *p; 533 int i; 534 int retval = 0; 535 536 if (!net->sctp.addip_enable) 537 return retval; 538 539 sp = sctp_sk(sk); 540 ep = sp->ep; 541 542 SCTP_DEBUG_PRINTK("%s: (sk: %p, addrs: %p, addrcnt: %d)\n", 543 __func__, sk, addrs, addrcnt); 544 545 list_for_each_entry(asoc, &ep->asocs, asocs) { 546 547 if (!asoc->peer.asconf_capable) 548 continue; 549 550 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_ADD_IP) 551 continue; 552 553 if (!sctp_state(asoc, ESTABLISHED)) 554 continue; 555 556 /* Check if any address in the packed array of addresses is 557 * in the bind address list of the association. If so, 558 * do not send the asconf chunk to its peer, but continue with 559 * other associations. 560 */ 561 addr_buf = addrs; 562 for (i = 0; i < addrcnt; i++) { 563 addr = addr_buf; 564 af = sctp_get_af_specific(addr->v4.sin_family); 565 if (!af) { 566 retval = -EINVAL; 567 goto out; 568 } 569 570 if (sctp_assoc_lookup_laddr(asoc, addr)) 571 break; 572 573 addr_buf += af->sockaddr_len; 574 } 575 if (i < addrcnt) 576 continue; 577 578 /* Use the first valid address in bind addr list of 579 * association as Address Parameter of ASCONF CHUNK. 580 */ 581 bp = &asoc->base.bind_addr; 582 p = bp->address_list.next; 583 laddr = list_entry(p, struct sctp_sockaddr_entry, list); 584 chunk = sctp_make_asconf_update_ip(asoc, &laddr->a, addrs, 585 addrcnt, SCTP_PARAM_ADD_IP); 586 if (!chunk) { 587 retval = -ENOMEM; 588 goto out; 589 } 590 591 /* Add the new addresses to the bind address list with 592 * use_as_src set to 0. 593 */ 594 addr_buf = addrs; 595 for (i = 0; i < addrcnt; i++) { 596 addr = addr_buf; 597 af = sctp_get_af_specific(addr->v4.sin_family); 598 memcpy(&saveaddr, addr, af->sockaddr_len); 599 retval = sctp_add_bind_addr(bp, &saveaddr, 600 SCTP_ADDR_NEW, GFP_ATOMIC); 601 addr_buf += af->sockaddr_len; 602 } 603 if (asoc->src_out_of_asoc_ok) { 604 struct sctp_transport *trans; 605 606 list_for_each_entry(trans, 607 &asoc->peer.transport_addr_list, transports) { 608 /* Clear the source and route cache */ 609 dst_release(trans->dst); 610 trans->cwnd = min(4*asoc->pathmtu, max_t(__u32, 611 2*asoc->pathmtu, 4380)); 612 trans->ssthresh = asoc->peer.i.a_rwnd; 613 trans->rto = asoc->rto_initial; 614 sctp_max_rto(asoc, trans); 615 trans->rtt = trans->srtt = trans->rttvar = 0; 616 sctp_transport_route(trans, NULL, 617 sctp_sk(asoc->base.sk)); 618 } 619 } 620 retval = sctp_send_asconf(asoc, chunk); 621 } 622 623 out: 624 return retval; 625 } 626 627 /* Remove a list of addresses from bind addresses list. Do not remove the 628 * last address. 629 * 630 * Basically run through each address specified in the addrs/addrcnt 631 * array/length pair, determine if it is IPv6 or IPv4 and call 632 * sctp_del_bind() on it. 633 * 634 * If any of them fails, then the operation will be reversed and the 635 * ones that were removed will be added back. 636 * 637 * At least one address has to be left; if only one address is 638 * available, the operation will return -EBUSY. 639 * 640 * Only sctp_setsockopt_bindx() is supposed to call this function. 641 */ 642 static int sctp_bindx_rem(struct sock *sk, struct sockaddr *addrs, int addrcnt) 643 { 644 struct sctp_sock *sp = sctp_sk(sk); 645 struct sctp_endpoint *ep = sp->ep; 646 int cnt; 647 struct sctp_bind_addr *bp = &ep->base.bind_addr; 648 int retval = 0; 649 void *addr_buf; 650 union sctp_addr *sa_addr; 651 struct sctp_af *af; 652 653 SCTP_DEBUG_PRINTK("sctp_bindx_rem (sk: %p, addrs: %p, addrcnt: %d)\n", 654 sk, addrs, addrcnt); 655 656 addr_buf = addrs; 657 for (cnt = 0; cnt < addrcnt; cnt++) { 658 /* If the bind address list is empty or if there is only one 659 * bind address, there is nothing more to be removed (we need 660 * at least one address here). 661 */ 662 if (list_empty(&bp->address_list) || 663 (sctp_list_single_entry(&bp->address_list))) { 664 retval = -EBUSY; 665 goto err_bindx_rem; 666 } 667 668 sa_addr = addr_buf; 669 af = sctp_get_af_specific(sa_addr->sa.sa_family); 670 if (!af) { 671 retval = -EINVAL; 672 goto err_bindx_rem; 673 } 674 675 if (!af->addr_valid(sa_addr, sp, NULL)) { 676 retval = -EADDRNOTAVAIL; 677 goto err_bindx_rem; 678 } 679 680 if (sa_addr->v4.sin_port && 681 sa_addr->v4.sin_port != htons(bp->port)) { 682 retval = -EINVAL; 683 goto err_bindx_rem; 684 } 685 686 if (!sa_addr->v4.sin_port) 687 sa_addr->v4.sin_port = htons(bp->port); 688 689 /* FIXME - There is probably a need to check if sk->sk_saddr and 690 * sk->sk_rcv_addr are currently set to one of the addresses to 691 * be removed. This is something which needs to be looked into 692 * when we are fixing the outstanding issues with multi-homing 693 * socket routing and failover schemes. Refer to comments in 694 * sctp_do_bind(). -daisy 695 */ 696 retval = sctp_del_bind_addr(bp, sa_addr); 697 698 addr_buf += af->sockaddr_len; 699 err_bindx_rem: 700 if (retval < 0) { 701 /* Failed. Add the ones that has been removed back */ 702 if (cnt > 0) 703 sctp_bindx_add(sk, addrs, cnt); 704 return retval; 705 } 706 } 707 708 return retval; 709 } 710 711 /* Send an ASCONF chunk with Delete IP address parameters to all the peers of 712 * the associations that are part of the endpoint indicating that a list of 713 * local addresses are removed from the endpoint. 714 * 715 * If any of the addresses is already in the bind address list of the 716 * association, we do not send the chunk for that association. But it will not 717 * affect other associations. 718 * 719 * Only sctp_setsockopt_bindx() is supposed to call this function. 720 */ 721 static int sctp_send_asconf_del_ip(struct sock *sk, 722 struct sockaddr *addrs, 723 int addrcnt) 724 { 725 struct net *net = sock_net(sk); 726 struct sctp_sock *sp; 727 struct sctp_endpoint *ep; 728 struct sctp_association *asoc; 729 struct sctp_transport *transport; 730 struct sctp_bind_addr *bp; 731 struct sctp_chunk *chunk; 732 union sctp_addr *laddr; 733 void *addr_buf; 734 struct sctp_af *af; 735 struct sctp_sockaddr_entry *saddr; 736 int i; 737 int retval = 0; 738 int stored = 0; 739 740 chunk = NULL; 741 if (!net->sctp.addip_enable) 742 return retval; 743 744 sp = sctp_sk(sk); 745 ep = sp->ep; 746 747 SCTP_DEBUG_PRINTK("%s: (sk: %p, addrs: %p, addrcnt: %d)\n", 748 __func__, sk, addrs, addrcnt); 749 750 list_for_each_entry(asoc, &ep->asocs, asocs) { 751 752 if (!asoc->peer.asconf_capable) 753 continue; 754 755 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_DEL_IP) 756 continue; 757 758 if (!sctp_state(asoc, ESTABLISHED)) 759 continue; 760 761 /* Check if any address in the packed array of addresses is 762 * not present in the bind address list of the association. 763 * If so, do not send the asconf chunk to its peer, but 764 * continue with other associations. 765 */ 766 addr_buf = addrs; 767 for (i = 0; i < addrcnt; i++) { 768 laddr = addr_buf; 769 af = sctp_get_af_specific(laddr->v4.sin_family); 770 if (!af) { 771 retval = -EINVAL; 772 goto out; 773 } 774 775 if (!sctp_assoc_lookup_laddr(asoc, laddr)) 776 break; 777 778 addr_buf += af->sockaddr_len; 779 } 780 if (i < addrcnt) 781 continue; 782 783 /* Find one address in the association's bind address list 784 * that is not in the packed array of addresses. This is to 785 * make sure that we do not delete all the addresses in the 786 * association. 787 */ 788 bp = &asoc->base.bind_addr; 789 laddr = sctp_find_unmatch_addr(bp, (union sctp_addr *)addrs, 790 addrcnt, sp); 791 if ((laddr == NULL) && (addrcnt == 1)) { 792 if (asoc->asconf_addr_del_pending) 793 continue; 794 asoc->asconf_addr_del_pending = 795 kzalloc(sizeof(union sctp_addr), GFP_ATOMIC); 796 if (asoc->asconf_addr_del_pending == NULL) { 797 retval = -ENOMEM; 798 goto out; 799 } 800 asoc->asconf_addr_del_pending->sa.sa_family = 801 addrs->sa_family; 802 asoc->asconf_addr_del_pending->v4.sin_port = 803 htons(bp->port); 804 if (addrs->sa_family == AF_INET) { 805 struct sockaddr_in *sin; 806 807 sin = (struct sockaddr_in *)addrs; 808 asoc->asconf_addr_del_pending->v4.sin_addr.s_addr = sin->sin_addr.s_addr; 809 } else if (addrs->sa_family == AF_INET6) { 810 struct sockaddr_in6 *sin6; 811 812 sin6 = (struct sockaddr_in6 *)addrs; 813 asoc->asconf_addr_del_pending->v6.sin6_addr = sin6->sin6_addr; 814 } 815 SCTP_DEBUG_PRINTK_IPADDR("send_asconf_del_ip: keep the last address asoc: %p ", 816 " at %p\n", asoc, asoc->asconf_addr_del_pending, 817 asoc->asconf_addr_del_pending); 818 asoc->src_out_of_asoc_ok = 1; 819 stored = 1; 820 goto skip_mkasconf; 821 } 822 823 /* We do not need RCU protection throughout this loop 824 * because this is done under a socket lock from the 825 * setsockopt call. 826 */ 827 chunk = sctp_make_asconf_update_ip(asoc, laddr, addrs, addrcnt, 828 SCTP_PARAM_DEL_IP); 829 if (!chunk) { 830 retval = -ENOMEM; 831 goto out; 832 } 833 834 skip_mkasconf: 835 /* Reset use_as_src flag for the addresses in the bind address 836 * list that are to be deleted. 837 */ 838 addr_buf = addrs; 839 for (i = 0; i < addrcnt; i++) { 840 laddr = addr_buf; 841 af = sctp_get_af_specific(laddr->v4.sin_family); 842 list_for_each_entry(saddr, &bp->address_list, list) { 843 if (sctp_cmp_addr_exact(&saddr->a, laddr)) 844 saddr->state = SCTP_ADDR_DEL; 845 } 846 addr_buf += af->sockaddr_len; 847 } 848 849 /* Update the route and saddr entries for all the transports 850 * as some of the addresses in the bind address list are 851 * about to be deleted and cannot be used as source addresses. 852 */ 853 list_for_each_entry(transport, &asoc->peer.transport_addr_list, 854 transports) { 855 dst_release(transport->dst); 856 sctp_transport_route(transport, NULL, 857 sctp_sk(asoc->base.sk)); 858 } 859 860 if (stored) 861 /* We don't need to transmit ASCONF */ 862 continue; 863 retval = sctp_send_asconf(asoc, chunk); 864 } 865 out: 866 return retval; 867 } 868 869 /* set addr events to assocs in the endpoint. ep and addr_wq must be locked */ 870 int sctp_asconf_mgmt(struct sctp_sock *sp, struct sctp_sockaddr_entry *addrw) 871 { 872 struct sock *sk = sctp_opt2sk(sp); 873 union sctp_addr *addr; 874 struct sctp_af *af; 875 876 /* It is safe to write port space in caller. */ 877 addr = &addrw->a; 878 addr->v4.sin_port = htons(sp->ep->base.bind_addr.port); 879 af = sctp_get_af_specific(addr->sa.sa_family); 880 if (!af) 881 return -EINVAL; 882 if (sctp_verify_addr(sk, addr, af->sockaddr_len)) 883 return -EINVAL; 884 885 if (addrw->state == SCTP_ADDR_NEW) 886 return sctp_send_asconf_add_ip(sk, (struct sockaddr *)addr, 1); 887 else 888 return sctp_send_asconf_del_ip(sk, (struct sockaddr *)addr, 1); 889 } 890 891 /* Helper for tunneling sctp_bindx() requests through sctp_setsockopt() 892 * 893 * API 8.1 894 * int sctp_bindx(int sd, struct sockaddr *addrs, int addrcnt, 895 * int flags); 896 * 897 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses. 898 * If the sd is an IPv6 socket, the addresses passed can either be IPv4 899 * or IPv6 addresses. 900 * 901 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see 902 * Section 3.1.2 for this usage. 903 * 904 * addrs is a pointer to an array of one or more socket addresses. Each 905 * address is contained in its appropriate structure (i.e. struct 906 * sockaddr_in or struct sockaddr_in6) the family of the address type 907 * must be used to distinguish the address length (note that this 908 * representation is termed a "packed array" of addresses). The caller 909 * specifies the number of addresses in the array with addrcnt. 910 * 911 * On success, sctp_bindx() returns 0. On failure, sctp_bindx() returns 912 * -1, and sets errno to the appropriate error code. 913 * 914 * For SCTP, the port given in each socket address must be the same, or 915 * sctp_bindx() will fail, setting errno to EINVAL. 916 * 917 * The flags parameter is formed from the bitwise OR of zero or more of 918 * the following currently defined flags: 919 * 920 * SCTP_BINDX_ADD_ADDR 921 * 922 * SCTP_BINDX_REM_ADDR 923 * 924 * SCTP_BINDX_ADD_ADDR directs SCTP to add the given addresses to the 925 * association, and SCTP_BINDX_REM_ADDR directs SCTP to remove the given 926 * addresses from the association. The two flags are mutually exclusive; 927 * if both are given, sctp_bindx() will fail with EINVAL. A caller may 928 * not remove all addresses from an association; sctp_bindx() will 929 * reject such an attempt with EINVAL. 930 * 931 * An application can use sctp_bindx(SCTP_BINDX_ADD_ADDR) to associate 932 * additional addresses with an endpoint after calling bind(). Or use 933 * sctp_bindx(SCTP_BINDX_REM_ADDR) to remove some addresses a listening 934 * socket is associated with so that no new association accepted will be 935 * associated with those addresses. If the endpoint supports dynamic 936 * address a SCTP_BINDX_REM_ADDR or SCTP_BINDX_ADD_ADDR may cause a 937 * endpoint to send the appropriate message to the peer to change the 938 * peers address lists. 939 * 940 * Adding and removing addresses from a connected association is 941 * optional functionality. Implementations that do not support this 942 * functionality should return EOPNOTSUPP. 943 * 944 * Basically do nothing but copying the addresses from user to kernel 945 * land and invoking either sctp_bindx_add() or sctp_bindx_rem() on the sk. 946 * This is used for tunneling the sctp_bindx() request through sctp_setsockopt() 947 * from userspace. 948 * 949 * We don't use copy_from_user() for optimization: we first do the 950 * sanity checks (buffer size -fast- and access check-healthy 951 * pointer); if all of those succeed, then we can alloc the memory 952 * (expensive operation) needed to copy the data to kernel. Then we do 953 * the copying without checking the user space area 954 * (__copy_from_user()). 955 * 956 * On exit there is no need to do sockfd_put(), sys_setsockopt() does 957 * it. 958 * 959 * sk The sk of the socket 960 * addrs The pointer to the addresses in user land 961 * addrssize Size of the addrs buffer 962 * op Operation to perform (add or remove, see the flags of 963 * sctp_bindx) 964 * 965 * Returns 0 if ok, <0 errno code on error. 966 */ 967 SCTP_STATIC int sctp_setsockopt_bindx(struct sock* sk, 968 struct sockaddr __user *addrs, 969 int addrs_size, int op) 970 { 971 struct sockaddr *kaddrs; 972 int err; 973 int addrcnt = 0; 974 int walk_size = 0; 975 struct sockaddr *sa_addr; 976 void *addr_buf; 977 struct sctp_af *af; 978 979 SCTP_DEBUG_PRINTK("sctp_setsockopt_bindx: sk %p addrs %p" 980 " addrs_size %d opt %d\n", sk, addrs, addrs_size, op); 981 982 if (unlikely(addrs_size <= 0)) 983 return -EINVAL; 984 985 /* Check the user passed a healthy pointer. */ 986 if (unlikely(!access_ok(VERIFY_READ, addrs, addrs_size))) 987 return -EFAULT; 988 989 /* Alloc space for the address array in kernel memory. */ 990 kaddrs = kmalloc(addrs_size, GFP_KERNEL); 991 if (unlikely(!kaddrs)) 992 return -ENOMEM; 993 994 if (__copy_from_user(kaddrs, addrs, addrs_size)) { 995 kfree(kaddrs); 996 return -EFAULT; 997 } 998 999 /* Walk through the addrs buffer and count the number of addresses. */ 1000 addr_buf = kaddrs; 1001 while (walk_size < addrs_size) { 1002 if (walk_size + sizeof(sa_family_t) > addrs_size) { 1003 kfree(kaddrs); 1004 return -EINVAL; 1005 } 1006 1007 sa_addr = addr_buf; 1008 af = sctp_get_af_specific(sa_addr->sa_family); 1009 1010 /* If the address family is not supported or if this address 1011 * causes the address buffer to overflow return EINVAL. 1012 */ 1013 if (!af || (walk_size + af->sockaddr_len) > addrs_size) { 1014 kfree(kaddrs); 1015 return -EINVAL; 1016 } 1017 addrcnt++; 1018 addr_buf += af->sockaddr_len; 1019 walk_size += af->sockaddr_len; 1020 } 1021 1022 /* Do the work. */ 1023 switch (op) { 1024 case SCTP_BINDX_ADD_ADDR: 1025 err = sctp_bindx_add(sk, kaddrs, addrcnt); 1026 if (err) 1027 goto out; 1028 err = sctp_send_asconf_add_ip(sk, kaddrs, addrcnt); 1029 break; 1030 1031 case SCTP_BINDX_REM_ADDR: 1032 err = sctp_bindx_rem(sk, kaddrs, addrcnt); 1033 if (err) 1034 goto out; 1035 err = sctp_send_asconf_del_ip(sk, kaddrs, addrcnt); 1036 break; 1037 1038 default: 1039 err = -EINVAL; 1040 break; 1041 } 1042 1043 out: 1044 kfree(kaddrs); 1045 1046 return err; 1047 } 1048 1049 /* __sctp_connect(struct sock* sk, struct sockaddr *kaddrs, int addrs_size) 1050 * 1051 * Common routine for handling connect() and sctp_connectx(). 1052 * Connect will come in with just a single address. 1053 */ 1054 static int __sctp_connect(struct sock* sk, 1055 struct sockaddr *kaddrs, 1056 int addrs_size, 1057 sctp_assoc_t *assoc_id) 1058 { 1059 struct net *net = sock_net(sk); 1060 struct sctp_sock *sp; 1061 struct sctp_endpoint *ep; 1062 struct sctp_association *asoc = NULL; 1063 struct sctp_association *asoc2; 1064 struct sctp_transport *transport; 1065 union sctp_addr to; 1066 struct sctp_af *af; 1067 sctp_scope_t scope; 1068 long timeo; 1069 int err = 0; 1070 int addrcnt = 0; 1071 int walk_size = 0; 1072 union sctp_addr *sa_addr = NULL; 1073 void *addr_buf; 1074 unsigned short port; 1075 unsigned int f_flags = 0; 1076 1077 sp = sctp_sk(sk); 1078 ep = sp->ep; 1079 1080 /* connect() cannot be done on a socket that is already in ESTABLISHED 1081 * state - UDP-style peeled off socket or a TCP-style socket that 1082 * is already connected. 1083 * It cannot be done even on a TCP-style listening socket. 1084 */ 1085 if (sctp_sstate(sk, ESTABLISHED) || 1086 (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))) { 1087 err = -EISCONN; 1088 goto out_free; 1089 } 1090 1091 /* Walk through the addrs buffer and count the number of addresses. */ 1092 addr_buf = kaddrs; 1093 while (walk_size < addrs_size) { 1094 if (walk_size + sizeof(sa_family_t) > addrs_size) { 1095 err = -EINVAL; 1096 goto out_free; 1097 } 1098 1099 sa_addr = addr_buf; 1100 af = sctp_get_af_specific(sa_addr->sa.sa_family); 1101 1102 /* If the address family is not supported or if this address 1103 * causes the address buffer to overflow return EINVAL. 1104 */ 1105 if (!af || (walk_size + af->sockaddr_len) > addrs_size) { 1106 err = -EINVAL; 1107 goto out_free; 1108 } 1109 1110 port = ntohs(sa_addr->v4.sin_port); 1111 1112 /* Save current address so we can work with it */ 1113 memcpy(&to, sa_addr, af->sockaddr_len); 1114 1115 err = sctp_verify_addr(sk, &to, af->sockaddr_len); 1116 if (err) 1117 goto out_free; 1118 1119 /* Make sure the destination port is correctly set 1120 * in all addresses. 1121 */ 1122 if (asoc && asoc->peer.port && asoc->peer.port != port) { 1123 err = -EINVAL; 1124 goto out_free; 1125 } 1126 1127 /* Check if there already is a matching association on the 1128 * endpoint (other than the one created here). 1129 */ 1130 asoc2 = sctp_endpoint_lookup_assoc(ep, &to, &transport); 1131 if (asoc2 && asoc2 != asoc) { 1132 if (asoc2->state >= SCTP_STATE_ESTABLISHED) 1133 err = -EISCONN; 1134 else 1135 err = -EALREADY; 1136 goto out_free; 1137 } 1138 1139 /* If we could not find a matching association on the endpoint, 1140 * make sure that there is no peeled-off association matching 1141 * the peer address even on another socket. 1142 */ 1143 if (sctp_endpoint_is_peeled_off(ep, &to)) { 1144 err = -EADDRNOTAVAIL; 1145 goto out_free; 1146 } 1147 1148 if (!asoc) { 1149 /* If a bind() or sctp_bindx() is not called prior to 1150 * an sctp_connectx() call, the system picks an 1151 * ephemeral port and will choose an address set 1152 * equivalent to binding with a wildcard address. 1153 */ 1154 if (!ep->base.bind_addr.port) { 1155 if (sctp_autobind(sk)) { 1156 err = -EAGAIN; 1157 goto out_free; 1158 } 1159 } else { 1160 /* 1161 * If an unprivileged user inherits a 1-many 1162 * style socket with open associations on a 1163 * privileged port, it MAY be permitted to 1164 * accept new associations, but it SHOULD NOT 1165 * be permitted to open new associations. 1166 */ 1167 if (ep->base.bind_addr.port < PROT_SOCK && 1168 !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE)) { 1169 err = -EACCES; 1170 goto out_free; 1171 } 1172 } 1173 1174 scope = sctp_scope(&to); 1175 asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL); 1176 if (!asoc) { 1177 err = -ENOMEM; 1178 goto out_free; 1179 } 1180 1181 err = sctp_assoc_set_bind_addr_from_ep(asoc, scope, 1182 GFP_KERNEL); 1183 if (err < 0) { 1184 goto out_free; 1185 } 1186 1187 } 1188 1189 /* Prime the peer's transport structures. */ 1190 transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL, 1191 SCTP_UNKNOWN); 1192 if (!transport) { 1193 err = -ENOMEM; 1194 goto out_free; 1195 } 1196 1197 addrcnt++; 1198 addr_buf += af->sockaddr_len; 1199 walk_size += af->sockaddr_len; 1200 } 1201 1202 /* In case the user of sctp_connectx() wants an association 1203 * id back, assign one now. 1204 */ 1205 if (assoc_id) { 1206 err = sctp_assoc_set_id(asoc, GFP_KERNEL); 1207 if (err < 0) 1208 goto out_free; 1209 } 1210 1211 err = sctp_primitive_ASSOCIATE(net, asoc, NULL); 1212 if (err < 0) { 1213 goto out_free; 1214 } 1215 1216 /* Initialize sk's dport and daddr for getpeername() */ 1217 inet_sk(sk)->inet_dport = htons(asoc->peer.port); 1218 af = sctp_get_af_specific(sa_addr->sa.sa_family); 1219 af->to_sk_daddr(sa_addr, sk); 1220 sk->sk_err = 0; 1221 1222 /* in-kernel sockets don't generally have a file allocated to them 1223 * if all they do is call sock_create_kern(). 1224 */ 1225 if (sk->sk_socket->file) 1226 f_flags = sk->sk_socket->file->f_flags; 1227 1228 timeo = sock_sndtimeo(sk, f_flags & O_NONBLOCK); 1229 1230 err = sctp_wait_for_connect(asoc, &timeo); 1231 if ((err == 0 || err == -EINPROGRESS) && assoc_id) 1232 *assoc_id = asoc->assoc_id; 1233 1234 /* Don't free association on exit. */ 1235 asoc = NULL; 1236 1237 out_free: 1238 1239 SCTP_DEBUG_PRINTK("About to exit __sctp_connect() free asoc: %p" 1240 " kaddrs: %p err: %d\n", 1241 asoc, kaddrs, err); 1242 if (asoc) { 1243 /* sctp_primitive_ASSOCIATE may have added this association 1244 * To the hash table, try to unhash it, just in case, its a noop 1245 * if it wasn't hashed so we're safe 1246 */ 1247 sctp_unhash_established(asoc); 1248 sctp_association_free(asoc); 1249 } 1250 return err; 1251 } 1252 1253 /* Helper for tunneling sctp_connectx() requests through sctp_setsockopt() 1254 * 1255 * API 8.9 1256 * int sctp_connectx(int sd, struct sockaddr *addrs, int addrcnt, 1257 * sctp_assoc_t *asoc); 1258 * 1259 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses. 1260 * If the sd is an IPv6 socket, the addresses passed can either be IPv4 1261 * or IPv6 addresses. 1262 * 1263 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see 1264 * Section 3.1.2 for this usage. 1265 * 1266 * addrs is a pointer to an array of one or more socket addresses. Each 1267 * address is contained in its appropriate structure (i.e. struct 1268 * sockaddr_in or struct sockaddr_in6) the family of the address type 1269 * must be used to distengish the address length (note that this 1270 * representation is termed a "packed array" of addresses). The caller 1271 * specifies the number of addresses in the array with addrcnt. 1272 * 1273 * On success, sctp_connectx() returns 0. It also sets the assoc_id to 1274 * the association id of the new association. On failure, sctp_connectx() 1275 * returns -1, and sets errno to the appropriate error code. The assoc_id 1276 * is not touched by the kernel. 1277 * 1278 * For SCTP, the port given in each socket address must be the same, or 1279 * sctp_connectx() will fail, setting errno to EINVAL. 1280 * 1281 * An application can use sctp_connectx to initiate an association with 1282 * an endpoint that is multi-homed. Much like sctp_bindx() this call 1283 * allows a caller to specify multiple addresses at which a peer can be 1284 * reached. The way the SCTP stack uses the list of addresses to set up 1285 * the association is implementation dependent. This function only 1286 * specifies that the stack will try to make use of all the addresses in 1287 * the list when needed. 1288 * 1289 * Note that the list of addresses passed in is only used for setting up 1290 * the association. It does not necessarily equal the set of addresses 1291 * the peer uses for the resulting association. If the caller wants to 1292 * find out the set of peer addresses, it must use sctp_getpaddrs() to 1293 * retrieve them after the association has been set up. 1294 * 1295 * Basically do nothing but copying the addresses from user to kernel 1296 * land and invoking either sctp_connectx(). This is used for tunneling 1297 * the sctp_connectx() request through sctp_setsockopt() from userspace. 1298 * 1299 * We don't use copy_from_user() for optimization: we first do the 1300 * sanity checks (buffer size -fast- and access check-healthy 1301 * pointer); if all of those succeed, then we can alloc the memory 1302 * (expensive operation) needed to copy the data to kernel. Then we do 1303 * the copying without checking the user space area 1304 * (__copy_from_user()). 1305 * 1306 * On exit there is no need to do sockfd_put(), sys_setsockopt() does 1307 * it. 1308 * 1309 * sk The sk of the socket 1310 * addrs The pointer to the addresses in user land 1311 * addrssize Size of the addrs buffer 1312 * 1313 * Returns >=0 if ok, <0 errno code on error. 1314 */ 1315 SCTP_STATIC int __sctp_setsockopt_connectx(struct sock* sk, 1316 struct sockaddr __user *addrs, 1317 int addrs_size, 1318 sctp_assoc_t *assoc_id) 1319 { 1320 int err = 0; 1321 struct sockaddr *kaddrs; 1322 1323 SCTP_DEBUG_PRINTK("%s - sk %p addrs %p addrs_size %d\n", 1324 __func__, sk, addrs, addrs_size); 1325 1326 if (unlikely(addrs_size <= 0)) 1327 return -EINVAL; 1328 1329 /* Check the user passed a healthy pointer. */ 1330 if (unlikely(!access_ok(VERIFY_READ, addrs, addrs_size))) 1331 return -EFAULT; 1332 1333 /* Alloc space for the address array in kernel memory. */ 1334 kaddrs = kmalloc(addrs_size, GFP_KERNEL); 1335 if (unlikely(!kaddrs)) 1336 return -ENOMEM; 1337 1338 if (__copy_from_user(kaddrs, addrs, addrs_size)) { 1339 err = -EFAULT; 1340 } else { 1341 err = __sctp_connect(sk, kaddrs, addrs_size, assoc_id); 1342 } 1343 1344 kfree(kaddrs); 1345 1346 return err; 1347 } 1348 1349 /* 1350 * This is an older interface. It's kept for backward compatibility 1351 * to the option that doesn't provide association id. 1352 */ 1353 SCTP_STATIC int sctp_setsockopt_connectx_old(struct sock* sk, 1354 struct sockaddr __user *addrs, 1355 int addrs_size) 1356 { 1357 return __sctp_setsockopt_connectx(sk, addrs, addrs_size, NULL); 1358 } 1359 1360 /* 1361 * New interface for the API. The since the API is done with a socket 1362 * option, to make it simple we feed back the association id is as a return 1363 * indication to the call. Error is always negative and association id is 1364 * always positive. 1365 */ 1366 SCTP_STATIC int sctp_setsockopt_connectx(struct sock* sk, 1367 struct sockaddr __user *addrs, 1368 int addrs_size) 1369 { 1370 sctp_assoc_t assoc_id = 0; 1371 int err = 0; 1372 1373 err = __sctp_setsockopt_connectx(sk, addrs, addrs_size, &assoc_id); 1374 1375 if (err) 1376 return err; 1377 else 1378 return assoc_id; 1379 } 1380 1381 /* 1382 * New (hopefully final) interface for the API. 1383 * We use the sctp_getaddrs_old structure so that use-space library 1384 * can avoid any unnecessary allocations. The only defferent part 1385 * is that we store the actual length of the address buffer into the 1386 * addrs_num structure member. That way we can re-use the existing 1387 * code. 1388 */ 1389 SCTP_STATIC int sctp_getsockopt_connectx3(struct sock* sk, int len, 1390 char __user *optval, 1391 int __user *optlen) 1392 { 1393 struct sctp_getaddrs_old param; 1394 sctp_assoc_t assoc_id = 0; 1395 int err = 0; 1396 1397 if (len < sizeof(param)) 1398 return -EINVAL; 1399 1400 if (copy_from_user(¶m, optval, sizeof(param))) 1401 return -EFAULT; 1402 1403 err = __sctp_setsockopt_connectx(sk, 1404 (struct sockaddr __user *)param.addrs, 1405 param.addr_num, &assoc_id); 1406 1407 if (err == 0 || err == -EINPROGRESS) { 1408 if (copy_to_user(optval, &assoc_id, sizeof(assoc_id))) 1409 return -EFAULT; 1410 if (put_user(sizeof(assoc_id), optlen)) 1411 return -EFAULT; 1412 } 1413 1414 return err; 1415 } 1416 1417 /* API 3.1.4 close() - UDP Style Syntax 1418 * Applications use close() to perform graceful shutdown (as described in 1419 * Section 10.1 of [SCTP]) on ALL the associations currently represented 1420 * by a UDP-style socket. 1421 * 1422 * The syntax is 1423 * 1424 * ret = close(int sd); 1425 * 1426 * sd - the socket descriptor of the associations to be closed. 1427 * 1428 * To gracefully shutdown a specific association represented by the 1429 * UDP-style socket, an application should use the sendmsg() call, 1430 * passing no user data, but including the appropriate flag in the 1431 * ancillary data (see Section xxxx). 1432 * 1433 * If sd in the close() call is a branched-off socket representing only 1434 * one association, the shutdown is performed on that association only. 1435 * 1436 * 4.1.6 close() - TCP Style Syntax 1437 * 1438 * Applications use close() to gracefully close down an association. 1439 * 1440 * The syntax is: 1441 * 1442 * int close(int sd); 1443 * 1444 * sd - the socket descriptor of the association to be closed. 1445 * 1446 * After an application calls close() on a socket descriptor, no further 1447 * socket operations will succeed on that descriptor. 1448 * 1449 * API 7.1.4 SO_LINGER 1450 * 1451 * An application using the TCP-style socket can use this option to 1452 * perform the SCTP ABORT primitive. The linger option structure is: 1453 * 1454 * struct linger { 1455 * int l_onoff; // option on/off 1456 * int l_linger; // linger time 1457 * }; 1458 * 1459 * To enable the option, set l_onoff to 1. If the l_linger value is set 1460 * to 0, calling close() is the same as the ABORT primitive. If the 1461 * value is set to a negative value, the setsockopt() call will return 1462 * an error. If the value is set to a positive value linger_time, the 1463 * close() can be blocked for at most linger_time ms. If the graceful 1464 * shutdown phase does not finish during this period, close() will 1465 * return but the graceful shutdown phase continues in the system. 1466 */ 1467 SCTP_STATIC void sctp_close(struct sock *sk, long timeout) 1468 { 1469 struct net *net = sock_net(sk); 1470 struct sctp_endpoint *ep; 1471 struct sctp_association *asoc; 1472 struct list_head *pos, *temp; 1473 unsigned int data_was_unread; 1474 1475 SCTP_DEBUG_PRINTK("sctp_close(sk: 0x%p, timeout:%ld)\n", sk, timeout); 1476 1477 sctp_lock_sock(sk); 1478 sk->sk_shutdown = SHUTDOWN_MASK; 1479 sk->sk_state = SCTP_SS_CLOSING; 1480 1481 ep = sctp_sk(sk)->ep; 1482 1483 /* Clean up any skbs sitting on the receive queue. */ 1484 data_was_unread = sctp_queue_purge_ulpevents(&sk->sk_receive_queue); 1485 data_was_unread += sctp_queue_purge_ulpevents(&sctp_sk(sk)->pd_lobby); 1486 1487 /* Walk all associations on an endpoint. */ 1488 list_for_each_safe(pos, temp, &ep->asocs) { 1489 asoc = list_entry(pos, struct sctp_association, asocs); 1490 1491 if (sctp_style(sk, TCP)) { 1492 /* A closed association can still be in the list if 1493 * it belongs to a TCP-style listening socket that is 1494 * not yet accepted. If so, free it. If not, send an 1495 * ABORT or SHUTDOWN based on the linger options. 1496 */ 1497 if (sctp_state(asoc, CLOSED)) { 1498 sctp_unhash_established(asoc); 1499 sctp_association_free(asoc); 1500 continue; 1501 } 1502 } 1503 1504 if (data_was_unread || !skb_queue_empty(&asoc->ulpq.lobby) || 1505 !skb_queue_empty(&asoc->ulpq.reasm) || 1506 (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime)) { 1507 struct sctp_chunk *chunk; 1508 1509 chunk = sctp_make_abort_user(asoc, NULL, 0); 1510 if (chunk) 1511 sctp_primitive_ABORT(net, asoc, chunk); 1512 } else 1513 sctp_primitive_SHUTDOWN(net, asoc, NULL); 1514 } 1515 1516 /* On a TCP-style socket, block for at most linger_time if set. */ 1517 if (sctp_style(sk, TCP) && timeout) 1518 sctp_wait_for_close(sk, timeout); 1519 1520 /* This will run the backlog queue. */ 1521 sctp_release_sock(sk); 1522 1523 /* Supposedly, no process has access to the socket, but 1524 * the net layers still may. 1525 */ 1526 sctp_local_bh_disable(); 1527 sctp_bh_lock_sock(sk); 1528 1529 /* Hold the sock, since sk_common_release() will put sock_put() 1530 * and we have just a little more cleanup. 1531 */ 1532 sock_hold(sk); 1533 sk_common_release(sk); 1534 1535 sctp_bh_unlock_sock(sk); 1536 sctp_local_bh_enable(); 1537 1538 sock_put(sk); 1539 1540 SCTP_DBG_OBJCNT_DEC(sock); 1541 } 1542 1543 /* Handle EPIPE error. */ 1544 static int sctp_error(struct sock *sk, int flags, int err) 1545 { 1546 if (err == -EPIPE) 1547 err = sock_error(sk) ? : -EPIPE; 1548 if (err == -EPIPE && !(flags & MSG_NOSIGNAL)) 1549 send_sig(SIGPIPE, current, 0); 1550 return err; 1551 } 1552 1553 /* API 3.1.3 sendmsg() - UDP Style Syntax 1554 * 1555 * An application uses sendmsg() and recvmsg() calls to transmit data to 1556 * and receive data from its peer. 1557 * 1558 * ssize_t sendmsg(int socket, const struct msghdr *message, 1559 * int flags); 1560 * 1561 * socket - the socket descriptor of the endpoint. 1562 * message - pointer to the msghdr structure which contains a single 1563 * user message and possibly some ancillary data. 1564 * 1565 * See Section 5 for complete description of the data 1566 * structures. 1567 * 1568 * flags - flags sent or received with the user message, see Section 1569 * 5 for complete description of the flags. 1570 * 1571 * Note: This function could use a rewrite especially when explicit 1572 * connect support comes in. 1573 */ 1574 /* BUG: We do not implement the equivalent of sk_stream_wait_memory(). */ 1575 1576 SCTP_STATIC int sctp_msghdr_parse(const struct msghdr *, sctp_cmsgs_t *); 1577 1578 SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, 1579 struct msghdr *msg, size_t msg_len) 1580 { 1581 struct net *net = sock_net(sk); 1582 struct sctp_sock *sp; 1583 struct sctp_endpoint *ep; 1584 struct sctp_association *new_asoc=NULL, *asoc=NULL; 1585 struct sctp_transport *transport, *chunk_tp; 1586 struct sctp_chunk *chunk; 1587 union sctp_addr to; 1588 struct sockaddr *msg_name = NULL; 1589 struct sctp_sndrcvinfo default_sinfo; 1590 struct sctp_sndrcvinfo *sinfo; 1591 struct sctp_initmsg *sinit; 1592 sctp_assoc_t associd = 0; 1593 sctp_cmsgs_t cmsgs = { NULL }; 1594 int err; 1595 sctp_scope_t scope; 1596 long timeo; 1597 __u16 sinfo_flags = 0; 1598 struct sctp_datamsg *datamsg; 1599 int msg_flags = msg->msg_flags; 1600 1601 SCTP_DEBUG_PRINTK("sctp_sendmsg(sk: %p, msg: %p, msg_len: %zu)\n", 1602 sk, msg, msg_len); 1603 1604 err = 0; 1605 sp = sctp_sk(sk); 1606 ep = sp->ep; 1607 1608 SCTP_DEBUG_PRINTK("Using endpoint: %p.\n", ep); 1609 1610 /* We cannot send a message over a TCP-style listening socket. */ 1611 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) { 1612 err = -EPIPE; 1613 goto out_nounlock; 1614 } 1615 1616 /* Parse out the SCTP CMSGs. */ 1617 err = sctp_msghdr_parse(msg, &cmsgs); 1618 1619 if (err) { 1620 SCTP_DEBUG_PRINTK("msghdr parse err = %x\n", err); 1621 goto out_nounlock; 1622 } 1623 1624 /* Fetch the destination address for this packet. This 1625 * address only selects the association--it is not necessarily 1626 * the address we will send to. 1627 * For a peeled-off socket, msg_name is ignored. 1628 */ 1629 if (!sctp_style(sk, UDP_HIGH_BANDWIDTH) && msg->msg_name) { 1630 int msg_namelen = msg->msg_namelen; 1631 1632 err = sctp_verify_addr(sk, (union sctp_addr *)msg->msg_name, 1633 msg_namelen); 1634 if (err) 1635 return err; 1636 1637 if (msg_namelen > sizeof(to)) 1638 msg_namelen = sizeof(to); 1639 memcpy(&to, msg->msg_name, msg_namelen); 1640 msg_name = msg->msg_name; 1641 } 1642 1643 sinfo = cmsgs.info; 1644 sinit = cmsgs.init; 1645 1646 /* Did the user specify SNDRCVINFO? */ 1647 if (sinfo) { 1648 sinfo_flags = sinfo->sinfo_flags; 1649 associd = sinfo->sinfo_assoc_id; 1650 } 1651 1652 SCTP_DEBUG_PRINTK("msg_len: %zu, sinfo_flags: 0x%x\n", 1653 msg_len, sinfo_flags); 1654 1655 /* SCTP_EOF or SCTP_ABORT cannot be set on a TCP-style socket. */ 1656 if (sctp_style(sk, TCP) && (sinfo_flags & (SCTP_EOF | SCTP_ABORT))) { 1657 err = -EINVAL; 1658 goto out_nounlock; 1659 } 1660 1661 /* If SCTP_EOF is set, no data can be sent. Disallow sending zero 1662 * length messages when SCTP_EOF|SCTP_ABORT is not set. 1663 * If SCTP_ABORT is set, the message length could be non zero with 1664 * the msg_iov set to the user abort reason. 1665 */ 1666 if (((sinfo_flags & SCTP_EOF) && (msg_len > 0)) || 1667 (!(sinfo_flags & (SCTP_EOF|SCTP_ABORT)) && (msg_len == 0))) { 1668 err = -EINVAL; 1669 goto out_nounlock; 1670 } 1671 1672 /* If SCTP_ADDR_OVER is set, there must be an address 1673 * specified in msg_name. 1674 */ 1675 if ((sinfo_flags & SCTP_ADDR_OVER) && (!msg->msg_name)) { 1676 err = -EINVAL; 1677 goto out_nounlock; 1678 } 1679 1680 transport = NULL; 1681 1682 SCTP_DEBUG_PRINTK("About to look up association.\n"); 1683 1684 sctp_lock_sock(sk); 1685 1686 /* If a msg_name has been specified, assume this is to be used. */ 1687 if (msg_name) { 1688 /* Look for a matching association on the endpoint. */ 1689 asoc = sctp_endpoint_lookup_assoc(ep, &to, &transport); 1690 if (!asoc) { 1691 /* If we could not find a matching association on the 1692 * endpoint, make sure that it is not a TCP-style 1693 * socket that already has an association or there is 1694 * no peeled-off association on another socket. 1695 */ 1696 if ((sctp_style(sk, TCP) && 1697 sctp_sstate(sk, ESTABLISHED)) || 1698 sctp_endpoint_is_peeled_off(ep, &to)) { 1699 err = -EADDRNOTAVAIL; 1700 goto out_unlock; 1701 } 1702 } 1703 } else { 1704 asoc = sctp_id2assoc(sk, associd); 1705 if (!asoc) { 1706 err = -EPIPE; 1707 goto out_unlock; 1708 } 1709 } 1710 1711 if (asoc) { 1712 SCTP_DEBUG_PRINTK("Just looked up association: %p.\n", asoc); 1713 1714 /* We cannot send a message on a TCP-style SCTP_SS_ESTABLISHED 1715 * socket that has an association in CLOSED state. This can 1716 * happen when an accepted socket has an association that is 1717 * already CLOSED. 1718 */ 1719 if (sctp_state(asoc, CLOSED) && sctp_style(sk, TCP)) { 1720 err = -EPIPE; 1721 goto out_unlock; 1722 } 1723 1724 if (sinfo_flags & SCTP_EOF) { 1725 SCTP_DEBUG_PRINTK("Shutting down association: %p\n", 1726 asoc); 1727 sctp_primitive_SHUTDOWN(net, asoc, NULL); 1728 err = 0; 1729 goto out_unlock; 1730 } 1731 if (sinfo_flags & SCTP_ABORT) { 1732 1733 chunk = sctp_make_abort_user(asoc, msg, msg_len); 1734 if (!chunk) { 1735 err = -ENOMEM; 1736 goto out_unlock; 1737 } 1738 1739 SCTP_DEBUG_PRINTK("Aborting association: %p\n", asoc); 1740 sctp_primitive_ABORT(net, asoc, chunk); 1741 err = 0; 1742 goto out_unlock; 1743 } 1744 } 1745 1746 /* Do we need to create the association? */ 1747 if (!asoc) { 1748 SCTP_DEBUG_PRINTK("There is no association yet.\n"); 1749 1750 if (sinfo_flags & (SCTP_EOF | SCTP_ABORT)) { 1751 err = -EINVAL; 1752 goto out_unlock; 1753 } 1754 1755 /* Check for invalid stream against the stream counts, 1756 * either the default or the user specified stream counts. 1757 */ 1758 if (sinfo) { 1759 if (!sinit || (sinit && !sinit->sinit_num_ostreams)) { 1760 /* Check against the defaults. */ 1761 if (sinfo->sinfo_stream >= 1762 sp->initmsg.sinit_num_ostreams) { 1763 err = -EINVAL; 1764 goto out_unlock; 1765 } 1766 } else { 1767 /* Check against the requested. */ 1768 if (sinfo->sinfo_stream >= 1769 sinit->sinit_num_ostreams) { 1770 err = -EINVAL; 1771 goto out_unlock; 1772 } 1773 } 1774 } 1775 1776 /* 1777 * API 3.1.2 bind() - UDP Style Syntax 1778 * If a bind() or sctp_bindx() is not called prior to a 1779 * sendmsg() call that initiates a new association, the 1780 * system picks an ephemeral port and will choose an address 1781 * set equivalent to binding with a wildcard address. 1782 */ 1783 if (!ep->base.bind_addr.port) { 1784 if (sctp_autobind(sk)) { 1785 err = -EAGAIN; 1786 goto out_unlock; 1787 } 1788 } else { 1789 /* 1790 * If an unprivileged user inherits a one-to-many 1791 * style socket with open associations on a privileged 1792 * port, it MAY be permitted to accept new associations, 1793 * but it SHOULD NOT be permitted to open new 1794 * associations. 1795 */ 1796 if (ep->base.bind_addr.port < PROT_SOCK && 1797 !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE)) { 1798 err = -EACCES; 1799 goto out_unlock; 1800 } 1801 } 1802 1803 scope = sctp_scope(&to); 1804 new_asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL); 1805 if (!new_asoc) { 1806 err = -ENOMEM; 1807 goto out_unlock; 1808 } 1809 asoc = new_asoc; 1810 err = sctp_assoc_set_bind_addr_from_ep(asoc, scope, GFP_KERNEL); 1811 if (err < 0) { 1812 err = -ENOMEM; 1813 goto out_free; 1814 } 1815 1816 /* If the SCTP_INIT ancillary data is specified, set all 1817 * the association init values accordingly. 1818 */ 1819 if (sinit) { 1820 if (sinit->sinit_num_ostreams) { 1821 asoc->c.sinit_num_ostreams = 1822 sinit->sinit_num_ostreams; 1823 } 1824 if (sinit->sinit_max_instreams) { 1825 asoc->c.sinit_max_instreams = 1826 sinit->sinit_max_instreams; 1827 } 1828 if (sinit->sinit_max_attempts) { 1829 asoc->max_init_attempts 1830 = sinit->sinit_max_attempts; 1831 } 1832 if (sinit->sinit_max_init_timeo) { 1833 asoc->max_init_timeo = 1834 msecs_to_jiffies(sinit->sinit_max_init_timeo); 1835 } 1836 } 1837 1838 /* Prime the peer's transport structures. */ 1839 transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL, SCTP_UNKNOWN); 1840 if (!transport) { 1841 err = -ENOMEM; 1842 goto out_free; 1843 } 1844 } 1845 1846 /* ASSERT: we have a valid association at this point. */ 1847 SCTP_DEBUG_PRINTK("We have a valid association.\n"); 1848 1849 if (!sinfo) { 1850 /* If the user didn't specify SNDRCVINFO, make up one with 1851 * some defaults. 1852 */ 1853 memset(&default_sinfo, 0, sizeof(default_sinfo)); 1854 default_sinfo.sinfo_stream = asoc->default_stream; 1855 default_sinfo.sinfo_flags = asoc->default_flags; 1856 default_sinfo.sinfo_ppid = asoc->default_ppid; 1857 default_sinfo.sinfo_context = asoc->default_context; 1858 default_sinfo.sinfo_timetolive = asoc->default_timetolive; 1859 default_sinfo.sinfo_assoc_id = sctp_assoc2id(asoc); 1860 sinfo = &default_sinfo; 1861 } 1862 1863 /* API 7.1.7, the sndbuf size per association bounds the 1864 * maximum size of data that can be sent in a single send call. 1865 */ 1866 if (msg_len > sk->sk_sndbuf) { 1867 err = -EMSGSIZE; 1868 goto out_free; 1869 } 1870 1871 if (asoc->pmtu_pending) 1872 sctp_assoc_pending_pmtu(sk, asoc); 1873 1874 /* If fragmentation is disabled and the message length exceeds the 1875 * association fragmentation point, return EMSGSIZE. The I-D 1876 * does not specify what this error is, but this looks like 1877 * a great fit. 1878 */ 1879 if (sctp_sk(sk)->disable_fragments && (msg_len > asoc->frag_point)) { 1880 err = -EMSGSIZE; 1881 goto out_free; 1882 } 1883 1884 /* Check for invalid stream. */ 1885 if (sinfo->sinfo_stream >= asoc->c.sinit_num_ostreams) { 1886 err = -EINVAL; 1887 goto out_free; 1888 } 1889 1890 timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); 1891 if (!sctp_wspace(asoc)) { 1892 err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len); 1893 if (err) 1894 goto out_free; 1895 } 1896 1897 /* If an address is passed with the sendto/sendmsg call, it is used 1898 * to override the primary destination address in the TCP model, or 1899 * when SCTP_ADDR_OVER flag is set in the UDP model. 1900 */ 1901 if ((sctp_style(sk, TCP) && msg_name) || 1902 (sinfo_flags & SCTP_ADDR_OVER)) { 1903 chunk_tp = sctp_assoc_lookup_paddr(asoc, &to); 1904 if (!chunk_tp) { 1905 err = -EINVAL; 1906 goto out_free; 1907 } 1908 } else 1909 chunk_tp = NULL; 1910 1911 /* Auto-connect, if we aren't connected already. */ 1912 if (sctp_state(asoc, CLOSED)) { 1913 err = sctp_primitive_ASSOCIATE(net, asoc, NULL); 1914 if (err < 0) 1915 goto out_free; 1916 SCTP_DEBUG_PRINTK("We associated primitively.\n"); 1917 } 1918 1919 /* Break the message into multiple chunks of maximum size. */ 1920 datamsg = sctp_datamsg_from_user(asoc, sinfo, msg, msg_len); 1921 if (IS_ERR(datamsg)) { 1922 err = PTR_ERR(datamsg); 1923 goto out_free; 1924 } 1925 1926 /* Now send the (possibly) fragmented message. */ 1927 list_for_each_entry(chunk, &datamsg->chunks, frag_list) { 1928 sctp_chunk_hold(chunk); 1929 1930 /* Do accounting for the write space. */ 1931 sctp_set_owner_w(chunk); 1932 1933 chunk->transport = chunk_tp; 1934 } 1935 1936 /* Send it to the lower layers. Note: all chunks 1937 * must either fail or succeed. The lower layer 1938 * works that way today. Keep it that way or this 1939 * breaks. 1940 */ 1941 err = sctp_primitive_SEND(net, asoc, datamsg); 1942 /* Did the lower layer accept the chunk? */ 1943 if (err) 1944 sctp_datamsg_free(datamsg); 1945 else 1946 sctp_datamsg_put(datamsg); 1947 1948 SCTP_DEBUG_PRINTK("We sent primitively.\n"); 1949 1950 if (err) 1951 goto out_free; 1952 else 1953 err = msg_len; 1954 1955 /* If we are already past ASSOCIATE, the lower 1956 * layers are responsible for association cleanup. 1957 */ 1958 goto out_unlock; 1959 1960 out_free: 1961 if (new_asoc) { 1962 sctp_unhash_established(asoc); 1963 sctp_association_free(asoc); 1964 } 1965 out_unlock: 1966 sctp_release_sock(sk); 1967 1968 out_nounlock: 1969 return sctp_error(sk, msg_flags, err); 1970 1971 #if 0 1972 do_sock_err: 1973 if (msg_len) 1974 err = msg_len; 1975 else 1976 err = sock_error(sk); 1977 goto out; 1978 1979 do_interrupted: 1980 if (msg_len) 1981 err = msg_len; 1982 goto out; 1983 #endif /* 0 */ 1984 } 1985 1986 /* This is an extended version of skb_pull() that removes the data from the 1987 * start of a skb even when data is spread across the list of skb's in the 1988 * frag_list. len specifies the total amount of data that needs to be removed. 1989 * when 'len' bytes could be removed from the skb, it returns 0. 1990 * If 'len' exceeds the total skb length, it returns the no. of bytes that 1991 * could not be removed. 1992 */ 1993 static int sctp_skb_pull(struct sk_buff *skb, int len) 1994 { 1995 struct sk_buff *list; 1996 int skb_len = skb_headlen(skb); 1997 int rlen; 1998 1999 if (len <= skb_len) { 2000 __skb_pull(skb, len); 2001 return 0; 2002 } 2003 len -= skb_len; 2004 __skb_pull(skb, skb_len); 2005 2006 skb_walk_frags(skb, list) { 2007 rlen = sctp_skb_pull(list, len); 2008 skb->len -= (len-rlen); 2009 skb->data_len -= (len-rlen); 2010 2011 if (!rlen) 2012 return 0; 2013 2014 len = rlen; 2015 } 2016 2017 return len; 2018 } 2019 2020 /* API 3.1.3 recvmsg() - UDP Style Syntax 2021 * 2022 * ssize_t recvmsg(int socket, struct msghdr *message, 2023 * int flags); 2024 * 2025 * socket - the socket descriptor of the endpoint. 2026 * message - pointer to the msghdr structure which contains a single 2027 * user message and possibly some ancillary data. 2028 * 2029 * See Section 5 for complete description of the data 2030 * structures. 2031 * 2032 * flags - flags sent or received with the user message, see Section 2033 * 5 for complete description of the flags. 2034 */ 2035 static struct sk_buff *sctp_skb_recv_datagram(struct sock *, int, int, int *); 2036 2037 SCTP_STATIC int sctp_recvmsg(struct kiocb *iocb, struct sock *sk, 2038 struct msghdr *msg, size_t len, int noblock, 2039 int flags, int *addr_len) 2040 { 2041 struct sctp_ulpevent *event = NULL; 2042 struct sctp_sock *sp = sctp_sk(sk); 2043 struct sk_buff *skb; 2044 int copied; 2045 int err = 0; 2046 int skb_len; 2047 2048 SCTP_DEBUG_PRINTK("sctp_recvmsg(%s: %p, %s: %p, %s: %zd, %s: %d, %s: " 2049 "0x%x, %s: %p)\n", "sk", sk, "msghdr", msg, 2050 "len", len, "knoblauch", noblock, 2051 "flags", flags, "addr_len", addr_len); 2052 2053 sctp_lock_sock(sk); 2054 2055 if (sctp_style(sk, TCP) && !sctp_sstate(sk, ESTABLISHED)) { 2056 err = -ENOTCONN; 2057 goto out; 2058 } 2059 2060 skb = sctp_skb_recv_datagram(sk, flags, noblock, &err); 2061 if (!skb) 2062 goto out; 2063 2064 /* Get the total length of the skb including any skb's in the 2065 * frag_list. 2066 */ 2067 skb_len = skb->len; 2068 2069 copied = skb_len; 2070 if (copied > len) 2071 copied = len; 2072 2073 err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); 2074 2075 event = sctp_skb2event(skb); 2076 2077 if (err) 2078 goto out_free; 2079 2080 sock_recv_ts_and_drops(msg, sk, skb); 2081 if (sctp_ulpevent_is_notification(event)) { 2082 msg->msg_flags |= MSG_NOTIFICATION; 2083 sp->pf->event_msgname(event, msg->msg_name, addr_len); 2084 } else { 2085 sp->pf->skb_msgname(skb, msg->msg_name, addr_len); 2086 } 2087 2088 /* Check if we allow SCTP_SNDRCVINFO. */ 2089 if (sp->subscribe.sctp_data_io_event) 2090 sctp_ulpevent_read_sndrcvinfo(event, msg); 2091 #if 0 2092 /* FIXME: we should be calling IP/IPv6 layers. */ 2093 if (sk->sk_protinfo.af_inet.cmsg_flags) 2094 ip_cmsg_recv(msg, skb); 2095 #endif 2096 2097 err = copied; 2098 2099 /* If skb's length exceeds the user's buffer, update the skb and 2100 * push it back to the receive_queue so that the next call to 2101 * recvmsg() will return the remaining data. Don't set MSG_EOR. 2102 */ 2103 if (skb_len > copied) { 2104 msg->msg_flags &= ~MSG_EOR; 2105 if (flags & MSG_PEEK) 2106 goto out_free; 2107 sctp_skb_pull(skb, copied); 2108 skb_queue_head(&sk->sk_receive_queue, skb); 2109 2110 /* When only partial message is copied to the user, increase 2111 * rwnd by that amount. If all the data in the skb is read, 2112 * rwnd is updated when the event is freed. 2113 */ 2114 if (!sctp_ulpevent_is_notification(event)) 2115 sctp_assoc_rwnd_increase(event->asoc, copied); 2116 goto out; 2117 } else if ((event->msg_flags & MSG_NOTIFICATION) || 2118 (event->msg_flags & MSG_EOR)) 2119 msg->msg_flags |= MSG_EOR; 2120 else 2121 msg->msg_flags &= ~MSG_EOR; 2122 2123 out_free: 2124 if (flags & MSG_PEEK) { 2125 /* Release the skb reference acquired after peeking the skb in 2126 * sctp_skb_recv_datagram(). 2127 */ 2128 kfree_skb(skb); 2129 } else { 2130 /* Free the event which includes releasing the reference to 2131 * the owner of the skb, freeing the skb and updating the 2132 * rwnd. 2133 */ 2134 sctp_ulpevent_free(event); 2135 } 2136 out: 2137 sctp_release_sock(sk); 2138 return err; 2139 } 2140 2141 /* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS) 2142 * 2143 * This option is a on/off flag. If enabled no SCTP message 2144 * fragmentation will be performed. Instead if a message being sent 2145 * exceeds the current PMTU size, the message will NOT be sent and 2146 * instead a error will be indicated to the user. 2147 */ 2148 static int sctp_setsockopt_disable_fragments(struct sock *sk, 2149 char __user *optval, 2150 unsigned int optlen) 2151 { 2152 int val; 2153 2154 if (optlen < sizeof(int)) 2155 return -EINVAL; 2156 2157 if (get_user(val, (int __user *)optval)) 2158 return -EFAULT; 2159 2160 sctp_sk(sk)->disable_fragments = (val == 0) ? 0 : 1; 2161 2162 return 0; 2163 } 2164 2165 static int sctp_setsockopt_events(struct sock *sk, char __user *optval, 2166 unsigned int optlen) 2167 { 2168 struct sctp_association *asoc; 2169 struct sctp_ulpevent *event; 2170 2171 if (optlen > sizeof(struct sctp_event_subscribe)) 2172 return -EINVAL; 2173 if (copy_from_user(&sctp_sk(sk)->subscribe, optval, optlen)) 2174 return -EFAULT; 2175 2176 /* 2177 * At the time when a user app subscribes to SCTP_SENDER_DRY_EVENT, 2178 * if there is no data to be sent or retransmit, the stack will 2179 * immediately send up this notification. 2180 */ 2181 if (sctp_ulpevent_type_enabled(SCTP_SENDER_DRY_EVENT, 2182 &sctp_sk(sk)->subscribe)) { 2183 asoc = sctp_id2assoc(sk, 0); 2184 2185 if (asoc && sctp_outq_is_empty(&asoc->outqueue)) { 2186 event = sctp_ulpevent_make_sender_dry_event(asoc, 2187 GFP_ATOMIC); 2188 if (!event) 2189 return -ENOMEM; 2190 2191 sctp_ulpq_tail_event(&asoc->ulpq, event); 2192 } 2193 } 2194 2195 return 0; 2196 } 2197 2198 /* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE) 2199 * 2200 * This socket option is applicable to the UDP-style socket only. When 2201 * set it will cause associations that are idle for more than the 2202 * specified number of seconds to automatically close. An association 2203 * being idle is defined an association that has NOT sent or received 2204 * user data. The special value of '0' indicates that no automatic 2205 * close of any associations should be performed. The option expects an 2206 * integer defining the number of seconds of idle time before an 2207 * association is closed. 2208 */ 2209 static int sctp_setsockopt_autoclose(struct sock *sk, char __user *optval, 2210 unsigned int optlen) 2211 { 2212 struct sctp_sock *sp = sctp_sk(sk); 2213 2214 /* Applicable to UDP-style socket only */ 2215 if (sctp_style(sk, TCP)) 2216 return -EOPNOTSUPP; 2217 if (optlen != sizeof(int)) 2218 return -EINVAL; 2219 if (copy_from_user(&sp->autoclose, optval, optlen)) 2220 return -EFAULT; 2221 2222 return 0; 2223 } 2224 2225 /* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS) 2226 * 2227 * Applications can enable or disable heartbeats for any peer address of 2228 * an association, modify an address's heartbeat interval, force a 2229 * heartbeat to be sent immediately, and adjust the address's maximum 2230 * number of retransmissions sent before an address is considered 2231 * unreachable. The following structure is used to access and modify an 2232 * address's parameters: 2233 * 2234 * struct sctp_paddrparams { 2235 * sctp_assoc_t spp_assoc_id; 2236 * struct sockaddr_storage spp_address; 2237 * uint32_t spp_hbinterval; 2238 * uint16_t spp_pathmaxrxt; 2239 * uint32_t spp_pathmtu; 2240 * uint32_t spp_sackdelay; 2241 * uint32_t spp_flags; 2242 * }; 2243 * 2244 * spp_assoc_id - (one-to-many style socket) This is filled in the 2245 * application, and identifies the association for 2246 * this query. 2247 * spp_address - This specifies which address is of interest. 2248 * spp_hbinterval - This contains the value of the heartbeat interval, 2249 * in milliseconds. If a value of zero 2250 * is present in this field then no changes are to 2251 * be made to this parameter. 2252 * spp_pathmaxrxt - This contains the maximum number of 2253 * retransmissions before this address shall be 2254 * considered unreachable. If a value of zero 2255 * is present in this field then no changes are to 2256 * be made to this parameter. 2257 * spp_pathmtu - When Path MTU discovery is disabled the value 2258 * specified here will be the "fixed" path mtu. 2259 * Note that if the spp_address field is empty 2260 * then all associations on this address will 2261 * have this fixed path mtu set upon them. 2262 * 2263 * spp_sackdelay - When delayed sack is enabled, this value specifies 2264 * the number of milliseconds that sacks will be delayed 2265 * for. This value will apply to all addresses of an 2266 * association if the spp_address field is empty. Note 2267 * also, that if delayed sack is enabled and this 2268 * value is set to 0, no change is made to the last 2269 * recorded delayed sack timer value. 2270 * 2271 * spp_flags - These flags are used to control various features 2272 * on an association. The flag field may contain 2273 * zero or more of the following options. 2274 * 2275 * SPP_HB_ENABLE - Enable heartbeats on the 2276 * specified address. Note that if the address 2277 * field is empty all addresses for the association 2278 * have heartbeats enabled upon them. 2279 * 2280 * SPP_HB_DISABLE - Disable heartbeats on the 2281 * speicifed address. Note that if the address 2282 * field is empty all addresses for the association 2283 * will have their heartbeats disabled. Note also 2284 * that SPP_HB_ENABLE and SPP_HB_DISABLE are 2285 * mutually exclusive, only one of these two should 2286 * be specified. Enabling both fields will have 2287 * undetermined results. 2288 * 2289 * SPP_HB_DEMAND - Request a user initiated heartbeat 2290 * to be made immediately. 2291 * 2292 * SPP_HB_TIME_IS_ZERO - Specify's that the time for 2293 * heartbeat delayis to be set to the value of 0 2294 * milliseconds. 2295 * 2296 * SPP_PMTUD_ENABLE - This field will enable PMTU 2297 * discovery upon the specified address. Note that 2298 * if the address feild is empty then all addresses 2299 * on the association are effected. 2300 * 2301 * SPP_PMTUD_DISABLE - This field will disable PMTU 2302 * discovery upon the specified address. Note that 2303 * if the address feild is empty then all addresses 2304 * on the association are effected. Not also that 2305 * SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually 2306 * exclusive. Enabling both will have undetermined 2307 * results. 2308 * 2309 * SPP_SACKDELAY_ENABLE - Setting this flag turns 2310 * on delayed sack. The time specified in spp_sackdelay 2311 * is used to specify the sack delay for this address. Note 2312 * that if spp_address is empty then all addresses will 2313 * enable delayed sack and take on the sack delay 2314 * value specified in spp_sackdelay. 2315 * SPP_SACKDELAY_DISABLE - Setting this flag turns 2316 * off delayed sack. If the spp_address field is blank then 2317 * delayed sack is disabled for the entire association. Note 2318 * also that this field is mutually exclusive to 2319 * SPP_SACKDELAY_ENABLE, setting both will have undefined 2320 * results. 2321 */ 2322 static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params, 2323 struct sctp_transport *trans, 2324 struct sctp_association *asoc, 2325 struct sctp_sock *sp, 2326 int hb_change, 2327 int pmtud_change, 2328 int sackdelay_change) 2329 { 2330 int error; 2331 2332 if (params->spp_flags & SPP_HB_DEMAND && trans) { 2333 struct net *net = sock_net(trans->asoc->base.sk); 2334 2335 error = sctp_primitive_REQUESTHEARTBEAT(net, trans->asoc, trans); 2336 if (error) 2337 return error; 2338 } 2339 2340 /* Note that unless the spp_flag is set to SPP_HB_ENABLE the value of 2341 * this field is ignored. Note also that a value of zero indicates 2342 * the current setting should be left unchanged. 2343 */ 2344 if (params->spp_flags & SPP_HB_ENABLE) { 2345 2346 /* Re-zero the interval if the SPP_HB_TIME_IS_ZERO is 2347 * set. This lets us use 0 value when this flag 2348 * is set. 2349 */ 2350 if (params->spp_flags & SPP_HB_TIME_IS_ZERO) 2351 params->spp_hbinterval = 0; 2352 2353 if (params->spp_hbinterval || 2354 (params->spp_flags & SPP_HB_TIME_IS_ZERO)) { 2355 if (trans) { 2356 trans->hbinterval = 2357 msecs_to_jiffies(params->spp_hbinterval); 2358 } else if (asoc) { 2359 asoc->hbinterval = 2360 msecs_to_jiffies(params->spp_hbinterval); 2361 } else { 2362 sp->hbinterval = params->spp_hbinterval; 2363 } 2364 } 2365 } 2366 2367 if (hb_change) { 2368 if (trans) { 2369 trans->param_flags = 2370 (trans->param_flags & ~SPP_HB) | hb_change; 2371 } else if (asoc) { 2372 asoc->param_flags = 2373 (asoc->param_flags & ~SPP_HB) | hb_change; 2374 } else { 2375 sp->param_flags = 2376 (sp->param_flags & ~SPP_HB) | hb_change; 2377 } 2378 } 2379 2380 /* When Path MTU discovery is disabled the value specified here will 2381 * be the "fixed" path mtu (i.e. the value of the spp_flags field must 2382 * include the flag SPP_PMTUD_DISABLE for this field to have any 2383 * effect). 2384 */ 2385 if ((params->spp_flags & SPP_PMTUD_DISABLE) && params->spp_pathmtu) { 2386 if (trans) { 2387 trans->pathmtu = params->spp_pathmtu; 2388 sctp_assoc_sync_pmtu(sctp_opt2sk(sp), asoc); 2389 } else if (asoc) { 2390 asoc->pathmtu = params->spp_pathmtu; 2391 sctp_frag_point(asoc, params->spp_pathmtu); 2392 } else { 2393 sp->pathmtu = params->spp_pathmtu; 2394 } 2395 } 2396 2397 if (pmtud_change) { 2398 if (trans) { 2399 int update = (trans->param_flags & SPP_PMTUD_DISABLE) && 2400 (params->spp_flags & SPP_PMTUD_ENABLE); 2401 trans->param_flags = 2402 (trans->param_flags & ~SPP_PMTUD) | pmtud_change; 2403 if (update) { 2404 sctp_transport_pmtu(trans, sctp_opt2sk(sp)); 2405 sctp_assoc_sync_pmtu(sctp_opt2sk(sp), asoc); 2406 } 2407 } else if (asoc) { 2408 asoc->param_flags = 2409 (asoc->param_flags & ~SPP_PMTUD) | pmtud_change; 2410 } else { 2411 sp->param_flags = 2412 (sp->param_flags & ~SPP_PMTUD) | pmtud_change; 2413 } 2414 } 2415 2416 /* Note that unless the spp_flag is set to SPP_SACKDELAY_ENABLE the 2417 * value of this field is ignored. Note also that a value of zero 2418 * indicates the current setting should be left unchanged. 2419 */ 2420 if ((params->spp_flags & SPP_SACKDELAY_ENABLE) && params->spp_sackdelay) { 2421 if (trans) { 2422 trans->sackdelay = 2423 msecs_to_jiffies(params->spp_sackdelay); 2424 } else if (asoc) { 2425 asoc->sackdelay = 2426 msecs_to_jiffies(params->spp_sackdelay); 2427 } else { 2428 sp->sackdelay = params->spp_sackdelay; 2429 } 2430 } 2431 2432 if (sackdelay_change) { 2433 if (trans) { 2434 trans->param_flags = 2435 (trans->param_flags & ~SPP_SACKDELAY) | 2436 sackdelay_change; 2437 } else if (asoc) { 2438 asoc->param_flags = 2439 (asoc->param_flags & ~SPP_SACKDELAY) | 2440 sackdelay_change; 2441 } else { 2442 sp->param_flags = 2443 (sp->param_flags & ~SPP_SACKDELAY) | 2444 sackdelay_change; 2445 } 2446 } 2447 2448 /* Note that a value of zero indicates the current setting should be 2449 left unchanged. 2450 */ 2451 if (params->spp_pathmaxrxt) { 2452 if (trans) { 2453 trans->pathmaxrxt = params->spp_pathmaxrxt; 2454 } else if (asoc) { 2455 asoc->pathmaxrxt = params->spp_pathmaxrxt; 2456 } else { 2457 sp->pathmaxrxt = params->spp_pathmaxrxt; 2458 } 2459 } 2460 2461 return 0; 2462 } 2463 2464 static int sctp_setsockopt_peer_addr_params(struct sock *sk, 2465 char __user *optval, 2466 unsigned int optlen) 2467 { 2468 struct sctp_paddrparams params; 2469 struct sctp_transport *trans = NULL; 2470 struct sctp_association *asoc = NULL; 2471 struct sctp_sock *sp = sctp_sk(sk); 2472 int error; 2473 int hb_change, pmtud_change, sackdelay_change; 2474 2475 if (optlen != sizeof(struct sctp_paddrparams)) 2476 return - EINVAL; 2477 2478 if (copy_from_user(¶ms, optval, optlen)) 2479 return -EFAULT; 2480 2481 /* Validate flags and value parameters. */ 2482 hb_change = params.spp_flags & SPP_HB; 2483 pmtud_change = params.spp_flags & SPP_PMTUD; 2484 sackdelay_change = params.spp_flags & SPP_SACKDELAY; 2485 2486 if (hb_change == SPP_HB || 2487 pmtud_change == SPP_PMTUD || 2488 sackdelay_change == SPP_SACKDELAY || 2489 params.spp_sackdelay > 500 || 2490 (params.spp_pathmtu && 2491 params.spp_pathmtu < SCTP_DEFAULT_MINSEGMENT)) 2492 return -EINVAL; 2493 2494 /* If an address other than INADDR_ANY is specified, and 2495 * no transport is found, then the request is invalid. 2496 */ 2497 if (!sctp_is_any(sk, ( union sctp_addr *)¶ms.spp_address)) { 2498 trans = sctp_addr_id2transport(sk, ¶ms.spp_address, 2499 params.spp_assoc_id); 2500 if (!trans) 2501 return -EINVAL; 2502 } 2503 2504 /* Get association, if assoc_id != 0 and the socket is a one 2505 * to many style socket, and an association was not found, then 2506 * the id was invalid. 2507 */ 2508 asoc = sctp_id2assoc(sk, params.spp_assoc_id); 2509 if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) 2510 return -EINVAL; 2511 2512 /* Heartbeat demand can only be sent on a transport or 2513 * association, but not a socket. 2514 */ 2515 if (params.spp_flags & SPP_HB_DEMAND && !trans && !asoc) 2516 return -EINVAL; 2517 2518 /* Process parameters. */ 2519 error = sctp_apply_peer_addr_params(¶ms, trans, asoc, sp, 2520 hb_change, pmtud_change, 2521 sackdelay_change); 2522 2523 if (error) 2524 return error; 2525 2526 /* If changes are for association, also apply parameters to each 2527 * transport. 2528 */ 2529 if (!trans && asoc) { 2530 list_for_each_entry(trans, &asoc->peer.transport_addr_list, 2531 transports) { 2532 sctp_apply_peer_addr_params(¶ms, trans, asoc, sp, 2533 hb_change, pmtud_change, 2534 sackdelay_change); 2535 } 2536 } 2537 2538 return 0; 2539 } 2540 2541 /* 2542 * 7.1.23. Get or set delayed ack timer (SCTP_DELAYED_SACK) 2543 * 2544 * This option will effect the way delayed acks are performed. This 2545 * option allows you to get or set the delayed ack time, in 2546 * milliseconds. It also allows changing the delayed ack frequency. 2547 * Changing the frequency to 1 disables the delayed sack algorithm. If 2548 * the assoc_id is 0, then this sets or gets the endpoints default 2549 * values. If the assoc_id field is non-zero, then the set or get 2550 * effects the specified association for the one to many model (the 2551 * assoc_id field is ignored by the one to one model). Note that if 2552 * sack_delay or sack_freq are 0 when setting this option, then the 2553 * current values will remain unchanged. 2554 * 2555 * struct sctp_sack_info { 2556 * sctp_assoc_t sack_assoc_id; 2557 * uint32_t sack_delay; 2558 * uint32_t sack_freq; 2559 * }; 2560 * 2561 * sack_assoc_id - This parameter, indicates which association the user 2562 * is performing an action upon. Note that if this field's value is 2563 * zero then the endpoints default value is changed (effecting future 2564 * associations only). 2565 * 2566 * sack_delay - This parameter contains the number of milliseconds that 2567 * the user is requesting the delayed ACK timer be set to. Note that 2568 * this value is defined in the standard to be between 200 and 500 2569 * milliseconds. 2570 * 2571 * sack_freq - This parameter contains the number of packets that must 2572 * be received before a sack is sent without waiting for the delay 2573 * timer to expire. The default value for this is 2, setting this 2574 * value to 1 will disable the delayed sack algorithm. 2575 */ 2576 2577 static int sctp_setsockopt_delayed_ack(struct sock *sk, 2578 char __user *optval, unsigned int optlen) 2579 { 2580 struct sctp_sack_info params; 2581 struct sctp_transport *trans = NULL; 2582 struct sctp_association *asoc = NULL; 2583 struct sctp_sock *sp = sctp_sk(sk); 2584 2585 if (optlen == sizeof(struct sctp_sack_info)) { 2586 if (copy_from_user(¶ms, optval, optlen)) 2587 return -EFAULT; 2588 2589 if (params.sack_delay == 0 && params.sack_freq == 0) 2590 return 0; 2591 } else if (optlen == sizeof(struct sctp_assoc_value)) { 2592 pr_warn("Use of struct sctp_assoc_value in delayed_ack socket option deprecated\n"); 2593 pr_warn("Use struct sctp_sack_info instead\n"); 2594 if (copy_from_user(¶ms, optval, optlen)) 2595 return -EFAULT; 2596 2597 if (params.sack_delay == 0) 2598 params.sack_freq = 1; 2599 else 2600 params.sack_freq = 0; 2601 } else 2602 return - EINVAL; 2603 2604 /* Validate value parameter. */ 2605 if (params.sack_delay > 500) 2606 return -EINVAL; 2607 2608 /* Get association, if sack_assoc_id != 0 and the socket is a one 2609 * to many style socket, and an association was not found, then 2610 * the id was invalid. 2611 */ 2612 asoc = sctp_id2assoc(sk, params.sack_assoc_id); 2613 if (!asoc && params.sack_assoc_id && sctp_style(sk, UDP)) 2614 return -EINVAL; 2615 2616 if (params.sack_delay) { 2617 if (asoc) { 2618 asoc->sackdelay = 2619 msecs_to_jiffies(params.sack_delay); 2620 asoc->param_flags = 2621 (asoc->param_flags & ~SPP_SACKDELAY) | 2622 SPP_SACKDELAY_ENABLE; 2623 } else { 2624 sp->sackdelay = params.sack_delay; 2625 sp->param_flags = 2626 (sp->param_flags & ~SPP_SACKDELAY) | 2627 SPP_SACKDELAY_ENABLE; 2628 } 2629 } 2630 2631 if (params.sack_freq == 1) { 2632 if (asoc) { 2633 asoc->param_flags = 2634 (asoc->param_flags & ~SPP_SACKDELAY) | 2635 SPP_SACKDELAY_DISABLE; 2636 } else { 2637 sp->param_flags = 2638 (sp->param_flags & ~SPP_SACKDELAY) | 2639 SPP_SACKDELAY_DISABLE; 2640 } 2641 } else if (params.sack_freq > 1) { 2642 if (asoc) { 2643 asoc->sackfreq = params.sack_freq; 2644 asoc->param_flags = 2645 (asoc->param_flags & ~SPP_SACKDELAY) | 2646 SPP_SACKDELAY_ENABLE; 2647 } else { 2648 sp->sackfreq = params.sack_freq; 2649 sp->param_flags = 2650 (sp->param_flags & ~SPP_SACKDELAY) | 2651 SPP_SACKDELAY_ENABLE; 2652 } 2653 } 2654 2655 /* If change is for association, also apply to each transport. */ 2656 if (asoc) { 2657 list_for_each_entry(trans, &asoc->peer.transport_addr_list, 2658 transports) { 2659 if (params.sack_delay) { 2660 trans->sackdelay = 2661 msecs_to_jiffies(params.sack_delay); 2662 trans->param_flags = 2663 (trans->param_flags & ~SPP_SACKDELAY) | 2664 SPP_SACKDELAY_ENABLE; 2665 } 2666 if (params.sack_freq == 1) { 2667 trans->param_flags = 2668 (trans->param_flags & ~SPP_SACKDELAY) | 2669 SPP_SACKDELAY_DISABLE; 2670 } else if (params.sack_freq > 1) { 2671 trans->sackfreq = params.sack_freq; 2672 trans->param_flags = 2673 (trans->param_flags & ~SPP_SACKDELAY) | 2674 SPP_SACKDELAY_ENABLE; 2675 } 2676 } 2677 } 2678 2679 return 0; 2680 } 2681 2682 /* 7.1.3 Initialization Parameters (SCTP_INITMSG) 2683 * 2684 * Applications can specify protocol parameters for the default association 2685 * initialization. The option name argument to setsockopt() and getsockopt() 2686 * is SCTP_INITMSG. 2687 * 2688 * Setting initialization parameters is effective only on an unconnected 2689 * socket (for UDP-style sockets only future associations are effected 2690 * by the change). With TCP-style sockets, this option is inherited by 2691 * sockets derived from a listener socket. 2692 */ 2693 static int sctp_setsockopt_initmsg(struct sock *sk, char __user *optval, unsigned int optlen) 2694 { 2695 struct sctp_initmsg sinit; 2696 struct sctp_sock *sp = sctp_sk(sk); 2697 2698 if (optlen != sizeof(struct sctp_initmsg)) 2699 return -EINVAL; 2700 if (copy_from_user(&sinit, optval, optlen)) 2701 return -EFAULT; 2702 2703 if (sinit.sinit_num_ostreams) 2704 sp->initmsg.sinit_num_ostreams = sinit.sinit_num_ostreams; 2705 if (sinit.sinit_max_instreams) 2706 sp->initmsg.sinit_max_instreams = sinit.sinit_max_instreams; 2707 if (sinit.sinit_max_attempts) 2708 sp->initmsg.sinit_max_attempts = sinit.sinit_max_attempts; 2709 if (sinit.sinit_max_init_timeo) 2710 sp->initmsg.sinit_max_init_timeo = sinit.sinit_max_init_timeo; 2711 2712 return 0; 2713 } 2714 2715 /* 2716 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM) 2717 * 2718 * Applications that wish to use the sendto() system call may wish to 2719 * specify a default set of parameters that would normally be supplied 2720 * through the inclusion of ancillary data. This socket option allows 2721 * such an application to set the default sctp_sndrcvinfo structure. 2722 * The application that wishes to use this socket option simply passes 2723 * in to this call the sctp_sndrcvinfo structure defined in Section 2724 * 5.2.2) The input parameters accepted by this call include 2725 * sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context, 2726 * sinfo_timetolive. The user must provide the sinfo_assoc_id field in 2727 * to this call if the caller is using the UDP model. 2728 */ 2729 static int sctp_setsockopt_default_send_param(struct sock *sk, 2730 char __user *optval, 2731 unsigned int optlen) 2732 { 2733 struct sctp_sndrcvinfo info; 2734 struct sctp_association *asoc; 2735 struct sctp_sock *sp = sctp_sk(sk); 2736 2737 if (optlen != sizeof(struct sctp_sndrcvinfo)) 2738 return -EINVAL; 2739 if (copy_from_user(&info, optval, optlen)) 2740 return -EFAULT; 2741 2742 asoc = sctp_id2assoc(sk, info.sinfo_assoc_id); 2743 if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP)) 2744 return -EINVAL; 2745 2746 if (asoc) { 2747 asoc->default_stream = info.sinfo_stream; 2748 asoc->default_flags = info.sinfo_flags; 2749 asoc->default_ppid = info.sinfo_ppid; 2750 asoc->default_context = info.sinfo_context; 2751 asoc->default_timetolive = info.sinfo_timetolive; 2752 } else { 2753 sp->default_stream = info.sinfo_stream; 2754 sp->default_flags = info.sinfo_flags; 2755 sp->default_ppid = info.sinfo_ppid; 2756 sp->default_context = info.sinfo_context; 2757 sp->default_timetolive = info.sinfo_timetolive; 2758 } 2759 2760 return 0; 2761 } 2762 2763 /* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR) 2764 * 2765 * Requests that the local SCTP stack use the enclosed peer address as 2766 * the association primary. The enclosed address must be one of the 2767 * association peer's addresses. 2768 */ 2769 static int sctp_setsockopt_primary_addr(struct sock *sk, char __user *optval, 2770 unsigned int optlen) 2771 { 2772 struct sctp_prim prim; 2773 struct sctp_transport *trans; 2774 2775 if (optlen != sizeof(struct sctp_prim)) 2776 return -EINVAL; 2777 2778 if (copy_from_user(&prim, optval, sizeof(struct sctp_prim))) 2779 return -EFAULT; 2780 2781 trans = sctp_addr_id2transport(sk, &prim.ssp_addr, prim.ssp_assoc_id); 2782 if (!trans) 2783 return -EINVAL; 2784 2785 sctp_assoc_set_primary(trans->asoc, trans); 2786 2787 return 0; 2788 } 2789 2790 /* 2791 * 7.1.5 SCTP_NODELAY 2792 * 2793 * Turn on/off any Nagle-like algorithm. This means that packets are 2794 * generally sent as soon as possible and no unnecessary delays are 2795 * introduced, at the cost of more packets in the network. Expects an 2796 * integer boolean flag. 2797 */ 2798 static int sctp_setsockopt_nodelay(struct sock *sk, char __user *optval, 2799 unsigned int optlen) 2800 { 2801 int val; 2802 2803 if (optlen < sizeof(int)) 2804 return -EINVAL; 2805 if (get_user(val, (int __user *)optval)) 2806 return -EFAULT; 2807 2808 sctp_sk(sk)->nodelay = (val == 0) ? 0 : 1; 2809 return 0; 2810 } 2811 2812 /* 2813 * 2814 * 7.1.1 SCTP_RTOINFO 2815 * 2816 * The protocol parameters used to initialize and bound retransmission 2817 * timeout (RTO) are tunable. sctp_rtoinfo structure is used to access 2818 * and modify these parameters. 2819 * All parameters are time values, in milliseconds. A value of 0, when 2820 * modifying the parameters, indicates that the current value should not 2821 * be changed. 2822 * 2823 */ 2824 static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigned int optlen) 2825 { 2826 struct sctp_rtoinfo rtoinfo; 2827 struct sctp_association *asoc; 2828 2829 if (optlen != sizeof (struct sctp_rtoinfo)) 2830 return -EINVAL; 2831 2832 if (copy_from_user(&rtoinfo, optval, optlen)) 2833 return -EFAULT; 2834 2835 asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id); 2836 2837 /* Set the values to the specific association */ 2838 if (!asoc && rtoinfo.srto_assoc_id && sctp_style(sk, UDP)) 2839 return -EINVAL; 2840 2841 if (asoc) { 2842 if (rtoinfo.srto_initial != 0) 2843 asoc->rto_initial = 2844 msecs_to_jiffies(rtoinfo.srto_initial); 2845 if (rtoinfo.srto_max != 0) 2846 asoc->rto_max = msecs_to_jiffies(rtoinfo.srto_max); 2847 if (rtoinfo.srto_min != 0) 2848 asoc->rto_min = msecs_to_jiffies(rtoinfo.srto_min); 2849 } else { 2850 /* If there is no association or the association-id = 0 2851 * set the values to the endpoint. 2852 */ 2853 struct sctp_sock *sp = sctp_sk(sk); 2854 2855 if (rtoinfo.srto_initial != 0) 2856 sp->rtoinfo.srto_initial = rtoinfo.srto_initial; 2857 if (rtoinfo.srto_max != 0) 2858 sp->rtoinfo.srto_max = rtoinfo.srto_max; 2859 if (rtoinfo.srto_min != 0) 2860 sp->rtoinfo.srto_min = rtoinfo.srto_min; 2861 } 2862 2863 return 0; 2864 } 2865 2866 /* 2867 * 2868 * 7.1.2 SCTP_ASSOCINFO 2869 * 2870 * This option is used to tune the maximum retransmission attempts 2871 * of the association. 2872 * Returns an error if the new association retransmission value is 2873 * greater than the sum of the retransmission value of the peer. 2874 * See [SCTP] for more information. 2875 * 2876 */ 2877 static int sctp_setsockopt_associnfo(struct sock *sk, char __user *optval, unsigned int optlen) 2878 { 2879 2880 struct sctp_assocparams assocparams; 2881 struct sctp_association *asoc; 2882 2883 if (optlen != sizeof(struct sctp_assocparams)) 2884 return -EINVAL; 2885 if (copy_from_user(&assocparams, optval, optlen)) 2886 return -EFAULT; 2887 2888 asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id); 2889 2890 if (!asoc && assocparams.sasoc_assoc_id && sctp_style(sk, UDP)) 2891 return -EINVAL; 2892 2893 /* Set the values to the specific association */ 2894 if (asoc) { 2895 if (assocparams.sasoc_asocmaxrxt != 0) { 2896 __u32 path_sum = 0; 2897 int paths = 0; 2898 struct sctp_transport *peer_addr; 2899 2900 list_for_each_entry(peer_addr, &asoc->peer.transport_addr_list, 2901 transports) { 2902 path_sum += peer_addr->pathmaxrxt; 2903 paths++; 2904 } 2905 2906 /* Only validate asocmaxrxt if we have more than 2907 * one path/transport. We do this because path 2908 * retransmissions are only counted when we have more 2909 * then one path. 2910 */ 2911 if (paths > 1 && 2912 assocparams.sasoc_asocmaxrxt > path_sum) 2913 return -EINVAL; 2914 2915 asoc->max_retrans = assocparams.sasoc_asocmaxrxt; 2916 } 2917 2918 if (assocparams.sasoc_cookie_life != 0) { 2919 asoc->cookie_life.tv_sec = 2920 assocparams.sasoc_cookie_life / 1000; 2921 asoc->cookie_life.tv_usec = 2922 (assocparams.sasoc_cookie_life % 1000) 2923 * 1000; 2924 } 2925 } else { 2926 /* Set the values to the endpoint */ 2927 struct sctp_sock *sp = sctp_sk(sk); 2928 2929 if (assocparams.sasoc_asocmaxrxt != 0) 2930 sp->assocparams.sasoc_asocmaxrxt = 2931 assocparams.sasoc_asocmaxrxt; 2932 if (assocparams.sasoc_cookie_life != 0) 2933 sp->assocparams.sasoc_cookie_life = 2934 assocparams.sasoc_cookie_life; 2935 } 2936 return 0; 2937 } 2938 2939 /* 2940 * 7.1.16 Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR) 2941 * 2942 * This socket option is a boolean flag which turns on or off mapped V4 2943 * addresses. If this option is turned on and the socket is type 2944 * PF_INET6, then IPv4 addresses will be mapped to V6 representation. 2945 * If this option is turned off, then no mapping will be done of V4 2946 * addresses and a user will receive both PF_INET6 and PF_INET type 2947 * addresses on the socket. 2948 */ 2949 static int sctp_setsockopt_mappedv4(struct sock *sk, char __user *optval, unsigned int optlen) 2950 { 2951 int val; 2952 struct sctp_sock *sp = sctp_sk(sk); 2953 2954 if (optlen < sizeof(int)) 2955 return -EINVAL; 2956 if (get_user(val, (int __user *)optval)) 2957 return -EFAULT; 2958 if (val) 2959 sp->v4mapped = 1; 2960 else 2961 sp->v4mapped = 0; 2962 2963 return 0; 2964 } 2965 2966 /* 2967 * 8.1.16. Get or Set the Maximum Fragmentation Size (SCTP_MAXSEG) 2968 * This option will get or set the maximum size to put in any outgoing 2969 * SCTP DATA chunk. If a message is larger than this size it will be 2970 * fragmented by SCTP into the specified size. Note that the underlying 2971 * SCTP implementation may fragment into smaller sized chunks when the 2972 * PMTU of the underlying association is smaller than the value set by 2973 * the user. The default value for this option is '0' which indicates 2974 * the user is NOT limiting fragmentation and only the PMTU will effect 2975 * SCTP's choice of DATA chunk size. Note also that values set larger 2976 * than the maximum size of an IP datagram will effectively let SCTP 2977 * control fragmentation (i.e. the same as setting this option to 0). 2978 * 2979 * The following structure is used to access and modify this parameter: 2980 * 2981 * struct sctp_assoc_value { 2982 * sctp_assoc_t assoc_id; 2983 * uint32_t assoc_value; 2984 * }; 2985 * 2986 * assoc_id: This parameter is ignored for one-to-one style sockets. 2987 * For one-to-many style sockets this parameter indicates which 2988 * association the user is performing an action upon. Note that if 2989 * this field's value is zero then the endpoints default value is 2990 * changed (effecting future associations only). 2991 * assoc_value: This parameter specifies the maximum size in bytes. 2992 */ 2993 static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned int optlen) 2994 { 2995 struct sctp_assoc_value params; 2996 struct sctp_association *asoc; 2997 struct sctp_sock *sp = sctp_sk(sk); 2998 int val; 2999 3000 if (optlen == sizeof(int)) { 3001 pr_warn("Use of int in maxseg socket option deprecated\n"); 3002 pr_warn("Use struct sctp_assoc_value instead\n"); 3003 if (copy_from_user(&val, optval, optlen)) 3004 return -EFAULT; 3005 params.assoc_id = 0; 3006 } else if (optlen == sizeof(struct sctp_assoc_value)) { 3007 if (copy_from_user(¶ms, optval, optlen)) 3008 return -EFAULT; 3009 val = params.assoc_value; 3010 } else 3011 return -EINVAL; 3012 3013 if ((val != 0) && ((val < 8) || (val > SCTP_MAX_CHUNK_LEN))) 3014 return -EINVAL; 3015 3016 asoc = sctp_id2assoc(sk, params.assoc_id); 3017 if (!asoc && params.assoc_id && sctp_style(sk, UDP)) 3018 return -EINVAL; 3019 3020 if (asoc) { 3021 if (val == 0) { 3022 val = asoc->pathmtu; 3023 val -= sp->pf->af->net_header_len; 3024 val -= sizeof(struct sctphdr) + 3025 sizeof(struct sctp_data_chunk); 3026 } 3027 asoc->user_frag = val; 3028 asoc->frag_point = sctp_frag_point(asoc, asoc->pathmtu); 3029 } else { 3030 sp->user_frag = val; 3031 } 3032 3033 return 0; 3034 } 3035 3036 3037 /* 3038 * 7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR) 3039 * 3040 * Requests that the peer mark the enclosed address as the association 3041 * primary. The enclosed address must be one of the association's 3042 * locally bound addresses. The following structure is used to make a 3043 * set primary request: 3044 */ 3045 static int sctp_setsockopt_peer_primary_addr(struct sock *sk, char __user *optval, 3046 unsigned int optlen) 3047 { 3048 struct net *net = sock_net(sk); 3049 struct sctp_sock *sp; 3050 struct sctp_association *asoc = NULL; 3051 struct sctp_setpeerprim prim; 3052 struct sctp_chunk *chunk; 3053 struct sctp_af *af; 3054 int err; 3055 3056 sp = sctp_sk(sk); 3057 3058 if (!net->sctp.addip_enable) 3059 return -EPERM; 3060 3061 if (optlen != sizeof(struct sctp_setpeerprim)) 3062 return -EINVAL; 3063 3064 if (copy_from_user(&prim, optval, optlen)) 3065 return -EFAULT; 3066 3067 asoc = sctp_id2assoc(sk, prim.sspp_assoc_id); 3068 if (!asoc) 3069 return -EINVAL; 3070 3071 if (!asoc->peer.asconf_capable) 3072 return -EPERM; 3073 3074 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_SET_PRIMARY) 3075 return -EPERM; 3076 3077 if (!sctp_state(asoc, ESTABLISHED)) 3078 return -ENOTCONN; 3079 3080 af = sctp_get_af_specific(prim.sspp_addr.ss_family); 3081 if (!af) 3082 return -EINVAL; 3083 3084 if (!af->addr_valid((union sctp_addr *)&prim.sspp_addr, sp, NULL)) 3085 return -EADDRNOTAVAIL; 3086 3087 if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim.sspp_addr)) 3088 return -EADDRNOTAVAIL; 3089 3090 /* Create an ASCONF chunk with SET_PRIMARY parameter */ 3091 chunk = sctp_make_asconf_set_prim(asoc, 3092 (union sctp_addr *)&prim.sspp_addr); 3093 if (!chunk) 3094 return -ENOMEM; 3095 3096 err = sctp_send_asconf(asoc, chunk); 3097 3098 SCTP_DEBUG_PRINTK("We set peer primary addr primitively.\n"); 3099 3100 return err; 3101 } 3102 3103 static int sctp_setsockopt_adaptation_layer(struct sock *sk, char __user *optval, 3104 unsigned int optlen) 3105 { 3106 struct sctp_setadaptation adaptation; 3107 3108 if (optlen != sizeof(struct sctp_setadaptation)) 3109 return -EINVAL; 3110 if (copy_from_user(&adaptation, optval, optlen)) 3111 return -EFAULT; 3112 3113 sctp_sk(sk)->adaptation_ind = adaptation.ssb_adaptation_ind; 3114 3115 return 0; 3116 } 3117 3118 /* 3119 * 7.1.29. Set or Get the default context (SCTP_CONTEXT) 3120 * 3121 * The context field in the sctp_sndrcvinfo structure is normally only 3122 * used when a failed message is retrieved holding the value that was 3123 * sent down on the actual send call. This option allows the setting of 3124 * a default context on an association basis that will be received on 3125 * reading messages from the peer. This is especially helpful in the 3126 * one-2-many model for an application to keep some reference to an 3127 * internal state machine that is processing messages on the 3128 * association. Note that the setting of this value only effects 3129 * received messages from the peer and does not effect the value that is 3130 * saved with outbound messages. 3131 */ 3132 static int sctp_setsockopt_context(struct sock *sk, char __user *optval, 3133 unsigned int optlen) 3134 { 3135 struct sctp_assoc_value params; 3136 struct sctp_sock *sp; 3137 struct sctp_association *asoc; 3138 3139 if (optlen != sizeof(struct sctp_assoc_value)) 3140 return -EINVAL; 3141 if (copy_from_user(¶ms, optval, optlen)) 3142 return -EFAULT; 3143 3144 sp = sctp_sk(sk); 3145 3146 if (params.assoc_id != 0) { 3147 asoc = sctp_id2assoc(sk, params.assoc_id); 3148 if (!asoc) 3149 return -EINVAL; 3150 asoc->default_rcv_context = params.assoc_value; 3151 } else { 3152 sp->default_rcv_context = params.assoc_value; 3153 } 3154 3155 return 0; 3156 } 3157 3158 /* 3159 * 7.1.24. Get or set fragmented interleave (SCTP_FRAGMENT_INTERLEAVE) 3160 * 3161 * This options will at a minimum specify if the implementation is doing 3162 * fragmented interleave. Fragmented interleave, for a one to many 3163 * socket, is when subsequent calls to receive a message may return 3164 * parts of messages from different associations. Some implementations 3165 * may allow you to turn this value on or off. If so, when turned off, 3166 * no fragment interleave will occur (which will cause a head of line 3167 * blocking amongst multiple associations sharing the same one to many 3168 * socket). When this option is turned on, then each receive call may 3169 * come from a different association (thus the user must receive data 3170 * with the extended calls (e.g. sctp_recvmsg) to keep track of which 3171 * association each receive belongs to. 3172 * 3173 * This option takes a boolean value. A non-zero value indicates that 3174 * fragmented interleave is on. A value of zero indicates that 3175 * fragmented interleave is off. 3176 * 3177 * Note that it is important that an implementation that allows this 3178 * option to be turned on, have it off by default. Otherwise an unaware 3179 * application using the one to many model may become confused and act 3180 * incorrectly. 3181 */ 3182 static int sctp_setsockopt_fragment_interleave(struct sock *sk, 3183 char __user *optval, 3184 unsigned int optlen) 3185 { 3186 int val; 3187 3188 if (optlen != sizeof(int)) 3189 return -EINVAL; 3190 if (get_user(val, (int __user *)optval)) 3191 return -EFAULT; 3192 3193 sctp_sk(sk)->frag_interleave = (val == 0) ? 0 : 1; 3194 3195 return 0; 3196 } 3197 3198 /* 3199 * 8.1.21. Set or Get the SCTP Partial Delivery Point 3200 * (SCTP_PARTIAL_DELIVERY_POINT) 3201 * 3202 * This option will set or get the SCTP partial delivery point. This 3203 * point is the size of a message where the partial delivery API will be 3204 * invoked to help free up rwnd space for the peer. Setting this to a 3205 * lower value will cause partial deliveries to happen more often. The 3206 * calls argument is an integer that sets or gets the partial delivery 3207 * point. Note also that the call will fail if the user attempts to set 3208 * this value larger than the socket receive buffer size. 3209 * 3210 * Note that any single message having a length smaller than or equal to 3211 * the SCTP partial delivery point will be delivered in one single read 3212 * call as long as the user provided buffer is large enough to hold the 3213 * message. 3214 */ 3215 static int sctp_setsockopt_partial_delivery_point(struct sock *sk, 3216 char __user *optval, 3217 unsigned int optlen) 3218 { 3219 u32 val; 3220 3221 if (optlen != sizeof(u32)) 3222 return -EINVAL; 3223 if (get_user(val, (int __user *)optval)) 3224 return -EFAULT; 3225 3226 /* Note: We double the receive buffer from what the user sets 3227 * it to be, also initial rwnd is based on rcvbuf/2. 3228 */ 3229 if (val > (sk->sk_rcvbuf >> 1)) 3230 return -EINVAL; 3231 3232 sctp_sk(sk)->pd_point = val; 3233 3234 return 0; /* is this the right error code? */ 3235 } 3236 3237 /* 3238 * 7.1.28. Set or Get the maximum burst (SCTP_MAX_BURST) 3239 * 3240 * This option will allow a user to change the maximum burst of packets 3241 * that can be emitted by this association. Note that the default value 3242 * is 4, and some implementations may restrict this setting so that it 3243 * can only be lowered. 3244 * 3245 * NOTE: This text doesn't seem right. Do this on a socket basis with 3246 * future associations inheriting the socket value. 3247 */ 3248 static int sctp_setsockopt_maxburst(struct sock *sk, 3249 char __user *optval, 3250 unsigned int optlen) 3251 { 3252 struct sctp_assoc_value params; 3253 struct sctp_sock *sp; 3254 struct sctp_association *asoc; 3255 int val; 3256 int assoc_id = 0; 3257 3258 if (optlen == sizeof(int)) { 3259 pr_warn("Use of int in max_burst socket option deprecated\n"); 3260 pr_warn("Use struct sctp_assoc_value instead\n"); 3261 if (copy_from_user(&val, optval, optlen)) 3262 return -EFAULT; 3263 } else if (optlen == sizeof(struct sctp_assoc_value)) { 3264 if (copy_from_user(¶ms, optval, optlen)) 3265 return -EFAULT; 3266 val = params.assoc_value; 3267 assoc_id = params.assoc_id; 3268 } else 3269 return -EINVAL; 3270 3271 sp = sctp_sk(sk); 3272 3273 if (assoc_id != 0) { 3274 asoc = sctp_id2assoc(sk, assoc_id); 3275 if (!asoc) 3276 return -EINVAL; 3277 asoc->max_burst = val; 3278 } else 3279 sp->max_burst = val; 3280 3281 return 0; 3282 } 3283 3284 /* 3285 * 7.1.18. Add a chunk that must be authenticated (SCTP_AUTH_CHUNK) 3286 * 3287 * This set option adds a chunk type that the user is requesting to be 3288 * received only in an authenticated way. Changes to the list of chunks 3289 * will only effect future associations on the socket. 3290 */ 3291 static int sctp_setsockopt_auth_chunk(struct sock *sk, 3292 char __user *optval, 3293 unsigned int optlen) 3294 { 3295 struct net *net = sock_net(sk); 3296 struct sctp_authchunk val; 3297 3298 if (!net->sctp.auth_enable) 3299 return -EACCES; 3300 3301 if (optlen != sizeof(struct sctp_authchunk)) 3302 return -EINVAL; 3303 if (copy_from_user(&val, optval, optlen)) 3304 return -EFAULT; 3305 3306 switch (val.sauth_chunk) { 3307 case SCTP_CID_INIT: 3308 case SCTP_CID_INIT_ACK: 3309 case SCTP_CID_SHUTDOWN_COMPLETE: 3310 case SCTP_CID_AUTH: 3311 return -EINVAL; 3312 } 3313 3314 /* add this chunk id to the endpoint */ 3315 return sctp_auth_ep_add_chunkid(sctp_sk(sk)->ep, val.sauth_chunk); 3316 } 3317 3318 /* 3319 * 7.1.19. Get or set the list of supported HMAC Identifiers (SCTP_HMAC_IDENT) 3320 * 3321 * This option gets or sets the list of HMAC algorithms that the local 3322 * endpoint requires the peer to use. 3323 */ 3324 static int sctp_setsockopt_hmac_ident(struct sock *sk, 3325 char __user *optval, 3326 unsigned int optlen) 3327 { 3328 struct net *net = sock_net(sk); 3329 struct sctp_hmacalgo *hmacs; 3330 u32 idents; 3331 int err; 3332 3333 if (!net->sctp.auth_enable) 3334 return -EACCES; 3335 3336 if (optlen < sizeof(struct sctp_hmacalgo)) 3337 return -EINVAL; 3338 3339 hmacs= memdup_user(optval, optlen); 3340 if (IS_ERR(hmacs)) 3341 return PTR_ERR(hmacs); 3342 3343 idents = hmacs->shmac_num_idents; 3344 if (idents == 0 || idents > SCTP_AUTH_NUM_HMACS || 3345 (idents * sizeof(u16)) > (optlen - sizeof(struct sctp_hmacalgo))) { 3346 err = -EINVAL; 3347 goto out; 3348 } 3349 3350 err = sctp_auth_ep_set_hmacs(sctp_sk(sk)->ep, hmacs); 3351 out: 3352 kfree(hmacs); 3353 return err; 3354 } 3355 3356 /* 3357 * 7.1.20. Set a shared key (SCTP_AUTH_KEY) 3358 * 3359 * This option will set a shared secret key which is used to build an 3360 * association shared key. 3361 */ 3362 static int sctp_setsockopt_auth_key(struct sock *sk, 3363 char __user *optval, 3364 unsigned int optlen) 3365 { 3366 struct net *net = sock_net(sk); 3367 struct sctp_authkey *authkey; 3368 struct sctp_association *asoc; 3369 int ret; 3370 3371 if (!net->sctp.auth_enable) 3372 return -EACCES; 3373 3374 if (optlen <= sizeof(struct sctp_authkey)) 3375 return -EINVAL; 3376 3377 authkey= memdup_user(optval, optlen); 3378 if (IS_ERR(authkey)) 3379 return PTR_ERR(authkey); 3380 3381 if (authkey->sca_keylength > optlen - sizeof(struct sctp_authkey)) { 3382 ret = -EINVAL; 3383 goto out; 3384 } 3385 3386 asoc = sctp_id2assoc(sk, authkey->sca_assoc_id); 3387 if (!asoc && authkey->sca_assoc_id && sctp_style(sk, UDP)) { 3388 ret = -EINVAL; 3389 goto out; 3390 } 3391 3392 ret = sctp_auth_set_key(sctp_sk(sk)->ep, asoc, authkey); 3393 out: 3394 kzfree(authkey); 3395 return ret; 3396 } 3397 3398 /* 3399 * 7.1.21. Get or set the active shared key (SCTP_AUTH_ACTIVE_KEY) 3400 * 3401 * This option will get or set the active shared key to be used to build 3402 * the association shared key. 3403 */ 3404 static int sctp_setsockopt_active_key(struct sock *sk, 3405 char __user *optval, 3406 unsigned int optlen) 3407 { 3408 struct net *net = sock_net(sk); 3409 struct sctp_authkeyid val; 3410 struct sctp_association *asoc; 3411 3412 if (!net->sctp.auth_enable) 3413 return -EACCES; 3414 3415 if (optlen != sizeof(struct sctp_authkeyid)) 3416 return -EINVAL; 3417 if (copy_from_user(&val, optval, optlen)) 3418 return -EFAULT; 3419 3420 asoc = sctp_id2assoc(sk, val.scact_assoc_id); 3421 if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP)) 3422 return -EINVAL; 3423 3424 return sctp_auth_set_active_key(sctp_sk(sk)->ep, asoc, 3425 val.scact_keynumber); 3426 } 3427 3428 /* 3429 * 7.1.22. Delete a shared key (SCTP_AUTH_DELETE_KEY) 3430 * 3431 * This set option will delete a shared secret key from use. 3432 */ 3433 static int sctp_setsockopt_del_key(struct sock *sk, 3434 char __user *optval, 3435 unsigned int optlen) 3436 { 3437 struct net *net = sock_net(sk); 3438 struct sctp_authkeyid val; 3439 struct sctp_association *asoc; 3440 3441 if (!net->sctp.auth_enable) 3442 return -EACCES; 3443 3444 if (optlen != sizeof(struct sctp_authkeyid)) 3445 return -EINVAL; 3446 if (copy_from_user(&val, optval, optlen)) 3447 return -EFAULT; 3448 3449 asoc = sctp_id2assoc(sk, val.scact_assoc_id); 3450 if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP)) 3451 return -EINVAL; 3452 3453 return sctp_auth_del_key_id(sctp_sk(sk)->ep, asoc, 3454 val.scact_keynumber); 3455 3456 } 3457 3458 /* 3459 * 8.1.23 SCTP_AUTO_ASCONF 3460 * 3461 * This option will enable or disable the use of the automatic generation of 3462 * ASCONF chunks to add and delete addresses to an existing association. Note 3463 * that this option has two caveats namely: a) it only affects sockets that 3464 * are bound to all addresses available to the SCTP stack, and b) the system 3465 * administrator may have an overriding control that turns the ASCONF feature 3466 * off no matter what setting the socket option may have. 3467 * This option expects an integer boolean flag, where a non-zero value turns on 3468 * the option, and a zero value turns off the option. 3469 * Note. In this implementation, socket operation overrides default parameter 3470 * being set by sysctl as well as FreeBSD implementation 3471 */ 3472 static int sctp_setsockopt_auto_asconf(struct sock *sk, char __user *optval, 3473 unsigned int optlen) 3474 { 3475 int val; 3476 struct sctp_sock *sp = sctp_sk(sk); 3477 3478 if (optlen < sizeof(int)) 3479 return -EINVAL; 3480 if (get_user(val, (int __user *)optval)) 3481 return -EFAULT; 3482 if (!sctp_is_ep_boundall(sk) && val) 3483 return -EINVAL; 3484 if ((val && sp->do_auto_asconf) || (!val && !sp->do_auto_asconf)) 3485 return 0; 3486 3487 if (val == 0 && sp->do_auto_asconf) { 3488 list_del(&sp->auto_asconf_list); 3489 sp->do_auto_asconf = 0; 3490 } else if (val && !sp->do_auto_asconf) { 3491 list_add_tail(&sp->auto_asconf_list, 3492 &sock_net(sk)->sctp.auto_asconf_splist); 3493 sp->do_auto_asconf = 1; 3494 } 3495 return 0; 3496 } 3497 3498 3499 /* 3500 * SCTP_PEER_ADDR_THLDS 3501 * 3502 * This option allows us to alter the partially failed threshold for one or all 3503 * transports in an association. See Section 6.1 of: 3504 * http://www.ietf.org/id/draft-nishida-tsvwg-sctp-failover-05.txt 3505 */ 3506 static int sctp_setsockopt_paddr_thresholds(struct sock *sk, 3507 char __user *optval, 3508 unsigned int optlen) 3509 { 3510 struct sctp_paddrthlds val; 3511 struct sctp_transport *trans; 3512 struct sctp_association *asoc; 3513 3514 if (optlen < sizeof(struct sctp_paddrthlds)) 3515 return -EINVAL; 3516 if (copy_from_user(&val, (struct sctp_paddrthlds __user *)optval, 3517 sizeof(struct sctp_paddrthlds))) 3518 return -EFAULT; 3519 3520 3521 if (sctp_is_any(sk, (const union sctp_addr *)&val.spt_address)) { 3522 asoc = sctp_id2assoc(sk, val.spt_assoc_id); 3523 if (!asoc) 3524 return -ENOENT; 3525 list_for_each_entry(trans, &asoc->peer.transport_addr_list, 3526 transports) { 3527 if (val.spt_pathmaxrxt) 3528 trans->pathmaxrxt = val.spt_pathmaxrxt; 3529 trans->pf_retrans = val.spt_pathpfthld; 3530 } 3531 3532 if (val.spt_pathmaxrxt) 3533 asoc->pathmaxrxt = val.spt_pathmaxrxt; 3534 asoc->pf_retrans = val.spt_pathpfthld; 3535 } else { 3536 trans = sctp_addr_id2transport(sk, &val.spt_address, 3537 val.spt_assoc_id); 3538 if (!trans) 3539 return -ENOENT; 3540 3541 if (val.spt_pathmaxrxt) 3542 trans->pathmaxrxt = val.spt_pathmaxrxt; 3543 trans->pf_retrans = val.spt_pathpfthld; 3544 } 3545 3546 return 0; 3547 } 3548 3549 /* API 6.2 setsockopt(), getsockopt() 3550 * 3551 * Applications use setsockopt() and getsockopt() to set or retrieve 3552 * socket options. Socket options are used to change the default 3553 * behavior of sockets calls. They are described in Section 7. 3554 * 3555 * The syntax is: 3556 * 3557 * ret = getsockopt(int sd, int level, int optname, void __user *optval, 3558 * int __user *optlen); 3559 * ret = setsockopt(int sd, int level, int optname, const void __user *optval, 3560 * int optlen); 3561 * 3562 * sd - the socket descript. 3563 * level - set to IPPROTO_SCTP for all SCTP options. 3564 * optname - the option name. 3565 * optval - the buffer to store the value of the option. 3566 * optlen - the size of the buffer. 3567 */ 3568 SCTP_STATIC int sctp_setsockopt(struct sock *sk, int level, int optname, 3569 char __user *optval, unsigned int optlen) 3570 { 3571 int retval = 0; 3572 3573 SCTP_DEBUG_PRINTK("sctp_setsockopt(sk: %p... optname: %d)\n", 3574 sk, optname); 3575 3576 /* I can hardly begin to describe how wrong this is. This is 3577 * so broken as to be worse than useless. The API draft 3578 * REALLY is NOT helpful here... I am not convinced that the 3579 * semantics of setsockopt() with a level OTHER THAN SOL_SCTP 3580 * are at all well-founded. 3581 */ 3582 if (level != SOL_SCTP) { 3583 struct sctp_af *af = sctp_sk(sk)->pf->af; 3584 retval = af->setsockopt(sk, level, optname, optval, optlen); 3585 goto out_nounlock; 3586 } 3587 3588 sctp_lock_sock(sk); 3589 3590 switch (optname) { 3591 case SCTP_SOCKOPT_BINDX_ADD: 3592 /* 'optlen' is the size of the addresses buffer. */ 3593 retval = sctp_setsockopt_bindx(sk, (struct sockaddr __user *)optval, 3594 optlen, SCTP_BINDX_ADD_ADDR); 3595 break; 3596 3597 case SCTP_SOCKOPT_BINDX_REM: 3598 /* 'optlen' is the size of the addresses buffer. */ 3599 retval = sctp_setsockopt_bindx(sk, (struct sockaddr __user *)optval, 3600 optlen, SCTP_BINDX_REM_ADDR); 3601 break; 3602 3603 case SCTP_SOCKOPT_CONNECTX_OLD: 3604 /* 'optlen' is the size of the addresses buffer. */ 3605 retval = sctp_setsockopt_connectx_old(sk, 3606 (struct sockaddr __user *)optval, 3607 optlen); 3608 break; 3609 3610 case SCTP_SOCKOPT_CONNECTX: 3611 /* 'optlen' is the size of the addresses buffer. */ 3612 retval = sctp_setsockopt_connectx(sk, 3613 (struct sockaddr __user *)optval, 3614 optlen); 3615 break; 3616 3617 case SCTP_DISABLE_FRAGMENTS: 3618 retval = sctp_setsockopt_disable_fragments(sk, optval, optlen); 3619 break; 3620 3621 case SCTP_EVENTS: 3622 retval = sctp_setsockopt_events(sk, optval, optlen); 3623 break; 3624 3625 case SCTP_AUTOCLOSE: 3626 retval = sctp_setsockopt_autoclose(sk, optval, optlen); 3627 break; 3628 3629 case SCTP_PEER_ADDR_PARAMS: 3630 retval = sctp_setsockopt_peer_addr_params(sk, optval, optlen); 3631 break; 3632 3633 case SCTP_DELAYED_SACK: 3634 retval = sctp_setsockopt_delayed_ack(sk, optval, optlen); 3635 break; 3636 case SCTP_PARTIAL_DELIVERY_POINT: 3637 retval = sctp_setsockopt_partial_delivery_point(sk, optval, optlen); 3638 break; 3639 3640 case SCTP_INITMSG: 3641 retval = sctp_setsockopt_initmsg(sk, optval, optlen); 3642 break; 3643 case SCTP_DEFAULT_SEND_PARAM: 3644 retval = sctp_setsockopt_default_send_param(sk, optval, 3645 optlen); 3646 break; 3647 case SCTP_PRIMARY_ADDR: 3648 retval = sctp_setsockopt_primary_addr(sk, optval, optlen); 3649 break; 3650 case SCTP_SET_PEER_PRIMARY_ADDR: 3651 retval = sctp_setsockopt_peer_primary_addr(sk, optval, optlen); 3652 break; 3653 case SCTP_NODELAY: 3654 retval = sctp_setsockopt_nodelay(sk, optval, optlen); 3655 break; 3656 case SCTP_RTOINFO: 3657 retval = sctp_setsockopt_rtoinfo(sk, optval, optlen); 3658 break; 3659 case SCTP_ASSOCINFO: 3660 retval = sctp_setsockopt_associnfo(sk, optval, optlen); 3661 break; 3662 case SCTP_I_WANT_MAPPED_V4_ADDR: 3663 retval = sctp_setsockopt_mappedv4(sk, optval, optlen); 3664 break; 3665 case SCTP_MAXSEG: 3666 retval = sctp_setsockopt_maxseg(sk, optval, optlen); 3667 break; 3668 case SCTP_ADAPTATION_LAYER: 3669 retval = sctp_setsockopt_adaptation_layer(sk, optval, optlen); 3670 break; 3671 case SCTP_CONTEXT: 3672 retval = sctp_setsockopt_context(sk, optval, optlen); 3673 break; 3674 case SCTP_FRAGMENT_INTERLEAVE: 3675 retval = sctp_setsockopt_fragment_interleave(sk, optval, optlen); 3676 break; 3677 case SCTP_MAX_BURST: 3678 retval = sctp_setsockopt_maxburst(sk, optval, optlen); 3679 break; 3680 case SCTP_AUTH_CHUNK: 3681 retval = sctp_setsockopt_auth_chunk(sk, optval, optlen); 3682 break; 3683 case SCTP_HMAC_IDENT: 3684 retval = sctp_setsockopt_hmac_ident(sk, optval, optlen); 3685 break; 3686 case SCTP_AUTH_KEY: 3687 retval = sctp_setsockopt_auth_key(sk, optval, optlen); 3688 break; 3689 case SCTP_AUTH_ACTIVE_KEY: 3690 retval = sctp_setsockopt_active_key(sk, optval, optlen); 3691 break; 3692 case SCTP_AUTH_DELETE_KEY: 3693 retval = sctp_setsockopt_del_key(sk, optval, optlen); 3694 break; 3695 case SCTP_AUTO_ASCONF: 3696 retval = sctp_setsockopt_auto_asconf(sk, optval, optlen); 3697 break; 3698 case SCTP_PEER_ADDR_THLDS: 3699 retval = sctp_setsockopt_paddr_thresholds(sk, optval, optlen); 3700 break; 3701 default: 3702 retval = -ENOPROTOOPT; 3703 break; 3704 } 3705 3706 sctp_release_sock(sk); 3707 3708 out_nounlock: 3709 return retval; 3710 } 3711 3712 /* API 3.1.6 connect() - UDP Style Syntax 3713 * 3714 * An application may use the connect() call in the UDP model to initiate an 3715 * association without sending data. 3716 * 3717 * The syntax is: 3718 * 3719 * ret = connect(int sd, const struct sockaddr *nam, socklen_t len); 3720 * 3721 * sd: the socket descriptor to have a new association added to. 3722 * 3723 * nam: the address structure (either struct sockaddr_in or struct 3724 * sockaddr_in6 defined in RFC2553 [7]). 3725 * 3726 * len: the size of the address. 3727 */ 3728 SCTP_STATIC int sctp_connect(struct sock *sk, struct sockaddr *addr, 3729 int addr_len) 3730 { 3731 int err = 0; 3732 struct sctp_af *af; 3733 3734 sctp_lock_sock(sk); 3735 3736 SCTP_DEBUG_PRINTK("%s - sk: %p, sockaddr: %p, addr_len: %d\n", 3737 __func__, sk, addr, addr_len); 3738 3739 /* Validate addr_len before calling common connect/connectx routine. */ 3740 af = sctp_get_af_specific(addr->sa_family); 3741 if (!af || addr_len < af->sockaddr_len) { 3742 err = -EINVAL; 3743 } else { 3744 /* Pass correct addr len to common routine (so it knows there 3745 * is only one address being passed. 3746 */ 3747 err = __sctp_connect(sk, addr, af->sockaddr_len, NULL); 3748 } 3749 3750 sctp_release_sock(sk); 3751 return err; 3752 } 3753 3754 /* FIXME: Write comments. */ 3755 SCTP_STATIC int sctp_disconnect(struct sock *sk, int flags) 3756 { 3757 return -EOPNOTSUPP; /* STUB */ 3758 } 3759 3760 /* 4.1.4 accept() - TCP Style Syntax 3761 * 3762 * Applications use accept() call to remove an established SCTP 3763 * association from the accept queue of the endpoint. A new socket 3764 * descriptor will be returned from accept() to represent the newly 3765 * formed association. 3766 */ 3767 SCTP_STATIC struct sock *sctp_accept(struct sock *sk, int flags, int *err) 3768 { 3769 struct sctp_sock *sp; 3770 struct sctp_endpoint *ep; 3771 struct sock *newsk = NULL; 3772 struct sctp_association *asoc; 3773 long timeo; 3774 int error = 0; 3775 3776 sctp_lock_sock(sk); 3777 3778 sp = sctp_sk(sk); 3779 ep = sp->ep; 3780 3781 if (!sctp_style(sk, TCP)) { 3782 error = -EOPNOTSUPP; 3783 goto out; 3784 } 3785 3786 if (!sctp_sstate(sk, LISTENING)) { 3787 error = -EINVAL; 3788 goto out; 3789 } 3790 3791 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 3792 3793 error = sctp_wait_for_accept(sk, timeo); 3794 if (error) 3795 goto out; 3796 3797 /* We treat the list of associations on the endpoint as the accept 3798 * queue and pick the first association on the list. 3799 */ 3800 asoc = list_entry(ep->asocs.next, struct sctp_association, asocs); 3801 3802 newsk = sp->pf->create_accept_sk(sk, asoc); 3803 if (!newsk) { 3804 error = -ENOMEM; 3805 goto out; 3806 } 3807 3808 /* Populate the fields of the newsk from the oldsk and migrate the 3809 * asoc to the newsk. 3810 */ 3811 sctp_sock_migrate(sk, newsk, asoc, SCTP_SOCKET_TCP); 3812 3813 out: 3814 sctp_release_sock(sk); 3815 *err = error; 3816 return newsk; 3817 } 3818 3819 /* The SCTP ioctl handler. */ 3820 SCTP_STATIC int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg) 3821 { 3822 int rc = -ENOTCONN; 3823 3824 sctp_lock_sock(sk); 3825 3826 /* 3827 * SEQPACKET-style sockets in LISTENING state are valid, for 3828 * SCTP, so only discard TCP-style sockets in LISTENING state. 3829 */ 3830 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) 3831 goto out; 3832 3833 switch (cmd) { 3834 case SIOCINQ: { 3835 struct sk_buff *skb; 3836 unsigned int amount = 0; 3837 3838 skb = skb_peek(&sk->sk_receive_queue); 3839 if (skb != NULL) { 3840 /* 3841 * We will only return the amount of this packet since 3842 * that is all that will be read. 3843 */ 3844 amount = skb->len; 3845 } 3846 rc = put_user(amount, (int __user *)arg); 3847 break; 3848 } 3849 default: 3850 rc = -ENOIOCTLCMD; 3851 break; 3852 } 3853 out: 3854 sctp_release_sock(sk); 3855 return rc; 3856 } 3857 3858 /* This is the function which gets called during socket creation to 3859 * initialized the SCTP-specific portion of the sock. 3860 * The sock structure should already be zero-filled memory. 3861 */ 3862 SCTP_STATIC int sctp_init_sock(struct sock *sk) 3863 { 3864 struct net *net = sock_net(sk); 3865 struct sctp_endpoint *ep; 3866 struct sctp_sock *sp; 3867 3868 SCTP_DEBUG_PRINTK("sctp_init_sock(sk: %p)\n", sk); 3869 3870 sp = sctp_sk(sk); 3871 3872 /* Initialize the SCTP per socket area. */ 3873 switch (sk->sk_type) { 3874 case SOCK_SEQPACKET: 3875 sp->type = SCTP_SOCKET_UDP; 3876 break; 3877 case SOCK_STREAM: 3878 sp->type = SCTP_SOCKET_TCP; 3879 break; 3880 default: 3881 return -ESOCKTNOSUPPORT; 3882 } 3883 3884 /* Initialize default send parameters. These parameters can be 3885 * modified with the SCTP_DEFAULT_SEND_PARAM socket option. 3886 */ 3887 sp->default_stream = 0; 3888 sp->default_ppid = 0; 3889 sp->default_flags = 0; 3890 sp->default_context = 0; 3891 sp->default_timetolive = 0; 3892 3893 sp->default_rcv_context = 0; 3894 sp->max_burst = net->sctp.max_burst; 3895 3896 sp->sctp_hmac_alg = net->sctp.sctp_hmac_alg; 3897 3898 /* Initialize default setup parameters. These parameters 3899 * can be modified with the SCTP_INITMSG socket option or 3900 * overridden by the SCTP_INIT CMSG. 3901 */ 3902 sp->initmsg.sinit_num_ostreams = sctp_max_outstreams; 3903 sp->initmsg.sinit_max_instreams = sctp_max_instreams; 3904 sp->initmsg.sinit_max_attempts = net->sctp.max_retrans_init; 3905 sp->initmsg.sinit_max_init_timeo = net->sctp.rto_max; 3906 3907 /* Initialize default RTO related parameters. These parameters can 3908 * be modified for with the SCTP_RTOINFO socket option. 3909 */ 3910 sp->rtoinfo.srto_initial = net->sctp.rto_initial; 3911 sp->rtoinfo.srto_max = net->sctp.rto_max; 3912 sp->rtoinfo.srto_min = net->sctp.rto_min; 3913 3914 /* Initialize default association related parameters. These parameters 3915 * can be modified with the SCTP_ASSOCINFO socket option. 3916 */ 3917 sp->assocparams.sasoc_asocmaxrxt = net->sctp.max_retrans_association; 3918 sp->assocparams.sasoc_number_peer_destinations = 0; 3919 sp->assocparams.sasoc_peer_rwnd = 0; 3920 sp->assocparams.sasoc_local_rwnd = 0; 3921 sp->assocparams.sasoc_cookie_life = net->sctp.valid_cookie_life; 3922 3923 /* Initialize default event subscriptions. By default, all the 3924 * options are off. 3925 */ 3926 memset(&sp->subscribe, 0, sizeof(struct sctp_event_subscribe)); 3927 3928 /* Default Peer Address Parameters. These defaults can 3929 * be modified via SCTP_PEER_ADDR_PARAMS 3930 */ 3931 sp->hbinterval = net->sctp.hb_interval; 3932 sp->pathmaxrxt = net->sctp.max_retrans_path; 3933 sp->pathmtu = 0; // allow default discovery 3934 sp->sackdelay = net->sctp.sack_timeout; 3935 sp->sackfreq = 2; 3936 sp->param_flags = SPP_HB_ENABLE | 3937 SPP_PMTUD_ENABLE | 3938 SPP_SACKDELAY_ENABLE; 3939 3940 /* If enabled no SCTP message fragmentation will be performed. 3941 * Configure through SCTP_DISABLE_FRAGMENTS socket option. 3942 */ 3943 sp->disable_fragments = 0; 3944 3945 /* Enable Nagle algorithm by default. */ 3946 sp->nodelay = 0; 3947 3948 /* Enable by default. */ 3949 sp->v4mapped = 1; 3950 3951 /* Auto-close idle associations after the configured 3952 * number of seconds. A value of 0 disables this 3953 * feature. Configure through the SCTP_AUTOCLOSE socket option, 3954 * for UDP-style sockets only. 3955 */ 3956 sp->autoclose = 0; 3957 3958 /* User specified fragmentation limit. */ 3959 sp->user_frag = 0; 3960 3961 sp->adaptation_ind = 0; 3962 3963 sp->pf = sctp_get_pf_specific(sk->sk_family); 3964 3965 /* Control variables for partial data delivery. */ 3966 atomic_set(&sp->pd_mode, 0); 3967 skb_queue_head_init(&sp->pd_lobby); 3968 sp->frag_interleave = 0; 3969 3970 /* Create a per socket endpoint structure. Even if we 3971 * change the data structure relationships, this may still 3972 * be useful for storing pre-connect address information. 3973 */ 3974 ep = sctp_endpoint_new(sk, GFP_KERNEL); 3975 if (!ep) 3976 return -ENOMEM; 3977 3978 sp->ep = ep; 3979 sp->hmac = NULL; 3980 3981 SCTP_DBG_OBJCNT_INC(sock); 3982 3983 local_bh_disable(); 3984 percpu_counter_inc(&sctp_sockets_allocated); 3985 sock_prot_inuse_add(net, sk->sk_prot, 1); 3986 if (net->sctp.default_auto_asconf) { 3987 list_add_tail(&sp->auto_asconf_list, 3988 &net->sctp.auto_asconf_splist); 3989 sp->do_auto_asconf = 1; 3990 } else 3991 sp->do_auto_asconf = 0; 3992 local_bh_enable(); 3993 3994 return 0; 3995 } 3996 3997 /* Cleanup any SCTP per socket resources. */ 3998 SCTP_STATIC void sctp_destroy_sock(struct sock *sk) 3999 { 4000 struct sctp_sock *sp; 4001 4002 SCTP_DEBUG_PRINTK("sctp_destroy_sock(sk: %p)\n", sk); 4003 4004 /* Release our hold on the endpoint. */ 4005 sp = sctp_sk(sk); 4006 if (sp->do_auto_asconf) { 4007 sp->do_auto_asconf = 0; 4008 list_del(&sp->auto_asconf_list); 4009 } 4010 sctp_endpoint_free(sp->ep); 4011 local_bh_disable(); 4012 percpu_counter_dec(&sctp_sockets_allocated); 4013 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); 4014 local_bh_enable(); 4015 } 4016 4017 /* API 4.1.7 shutdown() - TCP Style Syntax 4018 * int shutdown(int socket, int how); 4019 * 4020 * sd - the socket descriptor of the association to be closed. 4021 * how - Specifies the type of shutdown. The values are 4022 * as follows: 4023 * SHUT_RD 4024 * Disables further receive operations. No SCTP 4025 * protocol action is taken. 4026 * SHUT_WR 4027 * Disables further send operations, and initiates 4028 * the SCTP shutdown sequence. 4029 * SHUT_RDWR 4030 * Disables further send and receive operations 4031 * and initiates the SCTP shutdown sequence. 4032 */ 4033 SCTP_STATIC void sctp_shutdown(struct sock *sk, int how) 4034 { 4035 struct net *net = sock_net(sk); 4036 struct sctp_endpoint *ep; 4037 struct sctp_association *asoc; 4038 4039 if (!sctp_style(sk, TCP)) 4040 return; 4041 4042 if (how & SEND_SHUTDOWN) { 4043 ep = sctp_sk(sk)->ep; 4044 if (!list_empty(&ep->asocs)) { 4045 asoc = list_entry(ep->asocs.next, 4046 struct sctp_association, asocs); 4047 sctp_primitive_SHUTDOWN(net, asoc, NULL); 4048 } 4049 } 4050 } 4051 4052 /* 7.2.1 Association Status (SCTP_STATUS) 4053 4054 * Applications can retrieve current status information about an 4055 * association, including association state, peer receiver window size, 4056 * number of unacked data chunks, and number of data chunks pending 4057 * receipt. This information is read-only. 4058 */ 4059 static int sctp_getsockopt_sctp_status(struct sock *sk, int len, 4060 char __user *optval, 4061 int __user *optlen) 4062 { 4063 struct sctp_status status; 4064 struct sctp_association *asoc = NULL; 4065 struct sctp_transport *transport; 4066 sctp_assoc_t associd; 4067 int retval = 0; 4068 4069 if (len < sizeof(status)) { 4070 retval = -EINVAL; 4071 goto out; 4072 } 4073 4074 len = sizeof(status); 4075 if (copy_from_user(&status, optval, len)) { 4076 retval = -EFAULT; 4077 goto out; 4078 } 4079 4080 associd = status.sstat_assoc_id; 4081 asoc = sctp_id2assoc(sk, associd); 4082 if (!asoc) { 4083 retval = -EINVAL; 4084 goto out; 4085 } 4086 4087 transport = asoc->peer.primary_path; 4088 4089 status.sstat_assoc_id = sctp_assoc2id(asoc); 4090 status.sstat_state = asoc->state; 4091 status.sstat_rwnd = asoc->peer.rwnd; 4092 status.sstat_unackdata = asoc->unack_data; 4093 4094 status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map); 4095 status.sstat_instrms = asoc->c.sinit_max_instreams; 4096 status.sstat_outstrms = asoc->c.sinit_num_ostreams; 4097 status.sstat_fragmentation_point = asoc->frag_point; 4098 status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc); 4099 memcpy(&status.sstat_primary.spinfo_address, &transport->ipaddr, 4100 transport->af_specific->sockaddr_len); 4101 /* Map ipv4 address into v4-mapped-on-v6 address. */ 4102 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), 4103 (union sctp_addr *)&status.sstat_primary.spinfo_address); 4104 status.sstat_primary.spinfo_state = transport->state; 4105 status.sstat_primary.spinfo_cwnd = transport->cwnd; 4106 status.sstat_primary.spinfo_srtt = transport->srtt; 4107 status.sstat_primary.spinfo_rto = jiffies_to_msecs(transport->rto); 4108 status.sstat_primary.spinfo_mtu = transport->pathmtu; 4109 4110 if (status.sstat_primary.spinfo_state == SCTP_UNKNOWN) 4111 status.sstat_primary.spinfo_state = SCTP_ACTIVE; 4112 4113 if (put_user(len, optlen)) { 4114 retval = -EFAULT; 4115 goto out; 4116 } 4117 4118 SCTP_DEBUG_PRINTK("sctp_getsockopt_sctp_status(%d): %d %d %d\n", 4119 len, status.sstat_state, status.sstat_rwnd, 4120 status.sstat_assoc_id); 4121 4122 if (copy_to_user(optval, &status, len)) { 4123 retval = -EFAULT; 4124 goto out; 4125 } 4126 4127 out: 4128 return retval; 4129 } 4130 4131 4132 /* 7.2.2 Peer Address Information (SCTP_GET_PEER_ADDR_INFO) 4133 * 4134 * Applications can retrieve information about a specific peer address 4135 * of an association, including its reachability state, congestion 4136 * window, and retransmission timer values. This information is 4137 * read-only. 4138 */ 4139 static int sctp_getsockopt_peer_addr_info(struct sock *sk, int len, 4140 char __user *optval, 4141 int __user *optlen) 4142 { 4143 struct sctp_paddrinfo pinfo; 4144 struct sctp_transport *transport; 4145 int retval = 0; 4146 4147 if (len < sizeof(pinfo)) { 4148 retval = -EINVAL; 4149 goto out; 4150 } 4151 4152 len = sizeof(pinfo); 4153 if (copy_from_user(&pinfo, optval, len)) { 4154 retval = -EFAULT; 4155 goto out; 4156 } 4157 4158 transport = sctp_addr_id2transport(sk, &pinfo.spinfo_address, 4159 pinfo.spinfo_assoc_id); 4160 if (!transport) 4161 return -EINVAL; 4162 4163 pinfo.spinfo_assoc_id = sctp_assoc2id(transport->asoc); 4164 pinfo.spinfo_state = transport->state; 4165 pinfo.spinfo_cwnd = transport->cwnd; 4166 pinfo.spinfo_srtt = transport->srtt; 4167 pinfo.spinfo_rto = jiffies_to_msecs(transport->rto); 4168 pinfo.spinfo_mtu = transport->pathmtu; 4169 4170 if (pinfo.spinfo_state == SCTP_UNKNOWN) 4171 pinfo.spinfo_state = SCTP_ACTIVE; 4172 4173 if (put_user(len, optlen)) { 4174 retval = -EFAULT; 4175 goto out; 4176 } 4177 4178 if (copy_to_user(optval, &pinfo, len)) { 4179 retval = -EFAULT; 4180 goto out; 4181 } 4182 4183 out: 4184 return retval; 4185 } 4186 4187 /* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS) 4188 * 4189 * This option is a on/off flag. If enabled no SCTP message 4190 * fragmentation will be performed. Instead if a message being sent 4191 * exceeds the current PMTU size, the message will NOT be sent and 4192 * instead a error will be indicated to the user. 4193 */ 4194 static int sctp_getsockopt_disable_fragments(struct sock *sk, int len, 4195 char __user *optval, int __user *optlen) 4196 { 4197 int val; 4198 4199 if (len < sizeof(int)) 4200 return -EINVAL; 4201 4202 len = sizeof(int); 4203 val = (sctp_sk(sk)->disable_fragments == 1); 4204 if (put_user(len, optlen)) 4205 return -EFAULT; 4206 if (copy_to_user(optval, &val, len)) 4207 return -EFAULT; 4208 return 0; 4209 } 4210 4211 /* 7.1.15 Set notification and ancillary events (SCTP_EVENTS) 4212 * 4213 * This socket option is used to specify various notifications and 4214 * ancillary data the user wishes to receive. 4215 */ 4216 static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, 4217 int __user *optlen) 4218 { 4219 if (len <= 0) 4220 return -EINVAL; 4221 if (len > sizeof(struct sctp_event_subscribe)) 4222 len = sizeof(struct sctp_event_subscribe); 4223 if (put_user(len, optlen)) 4224 return -EFAULT; 4225 if (copy_to_user(optval, &sctp_sk(sk)->subscribe, len)) 4226 return -EFAULT; 4227 return 0; 4228 } 4229 4230 /* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE) 4231 * 4232 * This socket option is applicable to the UDP-style socket only. When 4233 * set it will cause associations that are idle for more than the 4234 * specified number of seconds to automatically close. An association 4235 * being idle is defined an association that has NOT sent or received 4236 * user data. The special value of '0' indicates that no automatic 4237 * close of any associations should be performed. The option expects an 4238 * integer defining the number of seconds of idle time before an 4239 * association is closed. 4240 */ 4241 static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen) 4242 { 4243 /* Applicable to UDP-style socket only */ 4244 if (sctp_style(sk, TCP)) 4245 return -EOPNOTSUPP; 4246 if (len < sizeof(int)) 4247 return -EINVAL; 4248 len = sizeof(int); 4249 if (put_user(len, optlen)) 4250 return -EFAULT; 4251 if (copy_to_user(optval, &sctp_sk(sk)->autoclose, sizeof(int))) 4252 return -EFAULT; 4253 return 0; 4254 } 4255 4256 /* Helper routine to branch off an association to a new socket. */ 4257 int sctp_do_peeloff(struct sock *sk, sctp_assoc_t id, struct socket **sockp) 4258 { 4259 struct sctp_association *asoc = sctp_id2assoc(sk, id); 4260 struct socket *sock; 4261 struct sctp_af *af; 4262 int err = 0; 4263 4264 if (!asoc) 4265 return -EINVAL; 4266 4267 /* An association cannot be branched off from an already peeled-off 4268 * socket, nor is this supported for tcp style sockets. 4269 */ 4270 if (!sctp_style(sk, UDP)) 4271 return -EINVAL; 4272 4273 /* Create a new socket. */ 4274 err = sock_create(sk->sk_family, SOCK_SEQPACKET, IPPROTO_SCTP, &sock); 4275 if (err < 0) 4276 return err; 4277 4278 sctp_copy_sock(sock->sk, sk, asoc); 4279 4280 /* Make peeled-off sockets more like 1-1 accepted sockets. 4281 * Set the daddr and initialize id to something more random 4282 */ 4283 af = sctp_get_af_specific(asoc->peer.primary_addr.sa.sa_family); 4284 af->to_sk_daddr(&asoc->peer.primary_addr, sk); 4285 4286 /* Populate the fields of the newsk from the oldsk and migrate the 4287 * asoc to the newsk. 4288 */ 4289 sctp_sock_migrate(sk, sock->sk, asoc, SCTP_SOCKET_UDP_HIGH_BANDWIDTH); 4290 4291 *sockp = sock; 4292 4293 return err; 4294 } 4295 EXPORT_SYMBOL(sctp_do_peeloff); 4296 4297 static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval, int __user *optlen) 4298 { 4299 sctp_peeloff_arg_t peeloff; 4300 struct socket *newsock; 4301 struct file *newfile; 4302 int retval = 0; 4303 4304 if (len < sizeof(sctp_peeloff_arg_t)) 4305 return -EINVAL; 4306 len = sizeof(sctp_peeloff_arg_t); 4307 if (copy_from_user(&peeloff, optval, len)) 4308 return -EFAULT; 4309 4310 retval = sctp_do_peeloff(sk, peeloff.associd, &newsock); 4311 if (retval < 0) 4312 goto out; 4313 4314 /* Map the socket to an unused fd that can be returned to the user. */ 4315 retval = get_unused_fd(); 4316 if (retval < 0) { 4317 sock_release(newsock); 4318 goto out; 4319 } 4320 4321 newfile = sock_alloc_file(newsock, 0, NULL); 4322 if (unlikely(IS_ERR(newfile))) { 4323 put_unused_fd(retval); 4324 sock_release(newsock); 4325 return PTR_ERR(newfile); 4326 } 4327 4328 SCTP_DEBUG_PRINTK("%s: sk: %p newsk: %p sd: %d\n", 4329 __func__, sk, newsock->sk, retval); 4330 4331 /* Return the fd mapped to the new socket. */ 4332 if (put_user(len, optlen)) { 4333 fput(newfile); 4334 put_unused_fd(retval); 4335 return -EFAULT; 4336 } 4337 peeloff.sd = retval; 4338 if (copy_to_user(optval, &peeloff, len)) { 4339 fput(newfile); 4340 put_unused_fd(retval); 4341 return -EFAULT; 4342 } 4343 fd_install(retval, newfile); 4344 out: 4345 return retval; 4346 } 4347 4348 /* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS) 4349 * 4350 * Applications can enable or disable heartbeats for any peer address of 4351 * an association, modify an address's heartbeat interval, force a 4352 * heartbeat to be sent immediately, and adjust the address's maximum 4353 * number of retransmissions sent before an address is considered 4354 * unreachable. The following structure is used to access and modify an 4355 * address's parameters: 4356 * 4357 * struct sctp_paddrparams { 4358 * sctp_assoc_t spp_assoc_id; 4359 * struct sockaddr_storage spp_address; 4360 * uint32_t spp_hbinterval; 4361 * uint16_t spp_pathmaxrxt; 4362 * uint32_t spp_pathmtu; 4363 * uint32_t spp_sackdelay; 4364 * uint32_t spp_flags; 4365 * }; 4366 * 4367 * spp_assoc_id - (one-to-many style socket) This is filled in the 4368 * application, and identifies the association for 4369 * this query. 4370 * spp_address - This specifies which address is of interest. 4371 * spp_hbinterval - This contains the value of the heartbeat interval, 4372 * in milliseconds. If a value of zero 4373 * is present in this field then no changes are to 4374 * be made to this parameter. 4375 * spp_pathmaxrxt - This contains the maximum number of 4376 * retransmissions before this address shall be 4377 * considered unreachable. If a value of zero 4378 * is present in this field then no changes are to 4379 * be made to this parameter. 4380 * spp_pathmtu - When Path MTU discovery is disabled the value 4381 * specified here will be the "fixed" path mtu. 4382 * Note that if the spp_address field is empty 4383 * then all associations on this address will 4384 * have this fixed path mtu set upon them. 4385 * 4386 * spp_sackdelay - When delayed sack is enabled, this value specifies 4387 * the number of milliseconds that sacks will be delayed 4388 * for. This value will apply to all addresses of an 4389 * association if the spp_address field is empty. Note 4390 * also, that if delayed sack is enabled and this 4391 * value is set to 0, no change is made to the last 4392 * recorded delayed sack timer value. 4393 * 4394 * spp_flags - These flags are used to control various features 4395 * on an association. The flag field may contain 4396 * zero or more of the following options. 4397 * 4398 * SPP_HB_ENABLE - Enable heartbeats on the 4399 * specified address. Note that if the address 4400 * field is empty all addresses for the association 4401 * have heartbeats enabled upon them. 4402 * 4403 * SPP_HB_DISABLE - Disable heartbeats on the 4404 * speicifed address. Note that if the address 4405 * field is empty all addresses for the association 4406 * will have their heartbeats disabled. Note also 4407 * that SPP_HB_ENABLE and SPP_HB_DISABLE are 4408 * mutually exclusive, only one of these two should 4409 * be specified. Enabling both fields will have 4410 * undetermined results. 4411 * 4412 * SPP_HB_DEMAND - Request a user initiated heartbeat 4413 * to be made immediately. 4414 * 4415 * SPP_PMTUD_ENABLE - This field will enable PMTU 4416 * discovery upon the specified address. Note that 4417 * if the address feild is empty then all addresses 4418 * on the association are effected. 4419 * 4420 * SPP_PMTUD_DISABLE - This field will disable PMTU 4421 * discovery upon the specified address. Note that 4422 * if the address feild is empty then all addresses 4423 * on the association are effected. Not also that 4424 * SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually 4425 * exclusive. Enabling both will have undetermined 4426 * results. 4427 * 4428 * SPP_SACKDELAY_ENABLE - Setting this flag turns 4429 * on delayed sack. The time specified in spp_sackdelay 4430 * is used to specify the sack delay for this address. Note 4431 * that if spp_address is empty then all addresses will 4432 * enable delayed sack and take on the sack delay 4433 * value specified in spp_sackdelay. 4434 * SPP_SACKDELAY_DISABLE - Setting this flag turns 4435 * off delayed sack. If the spp_address field is blank then 4436 * delayed sack is disabled for the entire association. Note 4437 * also that this field is mutually exclusive to 4438 * SPP_SACKDELAY_ENABLE, setting both will have undefined 4439 * results. 4440 */ 4441 static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len, 4442 char __user *optval, int __user *optlen) 4443 { 4444 struct sctp_paddrparams params; 4445 struct sctp_transport *trans = NULL; 4446 struct sctp_association *asoc = NULL; 4447 struct sctp_sock *sp = sctp_sk(sk); 4448 4449 if (len < sizeof(struct sctp_paddrparams)) 4450 return -EINVAL; 4451 len = sizeof(struct sctp_paddrparams); 4452 if (copy_from_user(¶ms, optval, len)) 4453 return -EFAULT; 4454 4455 /* If an address other than INADDR_ANY is specified, and 4456 * no transport is found, then the request is invalid. 4457 */ 4458 if (!sctp_is_any(sk, ( union sctp_addr *)¶ms.spp_address)) { 4459 trans = sctp_addr_id2transport(sk, ¶ms.spp_address, 4460 params.spp_assoc_id); 4461 if (!trans) { 4462 SCTP_DEBUG_PRINTK("Failed no transport\n"); 4463 return -EINVAL; 4464 } 4465 } 4466 4467 /* Get association, if assoc_id != 0 and the socket is a one 4468 * to many style socket, and an association was not found, then 4469 * the id was invalid. 4470 */ 4471 asoc = sctp_id2assoc(sk, params.spp_assoc_id); 4472 if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) { 4473 SCTP_DEBUG_PRINTK("Failed no association\n"); 4474 return -EINVAL; 4475 } 4476 4477 if (trans) { 4478 /* Fetch transport values. */ 4479 params.spp_hbinterval = jiffies_to_msecs(trans->hbinterval); 4480 params.spp_pathmtu = trans->pathmtu; 4481 params.spp_pathmaxrxt = trans->pathmaxrxt; 4482 params.spp_sackdelay = jiffies_to_msecs(trans->sackdelay); 4483 4484 /*draft-11 doesn't say what to return in spp_flags*/ 4485 params.spp_flags = trans->param_flags; 4486 } else if (asoc) { 4487 /* Fetch association values. */ 4488 params.spp_hbinterval = jiffies_to_msecs(asoc->hbinterval); 4489 params.spp_pathmtu = asoc->pathmtu; 4490 params.spp_pathmaxrxt = asoc->pathmaxrxt; 4491 params.spp_sackdelay = jiffies_to_msecs(asoc->sackdelay); 4492 4493 /*draft-11 doesn't say what to return in spp_flags*/ 4494 params.spp_flags = asoc->param_flags; 4495 } else { 4496 /* Fetch socket values. */ 4497 params.spp_hbinterval = sp->hbinterval; 4498 params.spp_pathmtu = sp->pathmtu; 4499 params.spp_sackdelay = sp->sackdelay; 4500 params.spp_pathmaxrxt = sp->pathmaxrxt; 4501 4502 /*draft-11 doesn't say what to return in spp_flags*/ 4503 params.spp_flags = sp->param_flags; 4504 } 4505 4506 if (copy_to_user(optval, ¶ms, len)) 4507 return -EFAULT; 4508 4509 if (put_user(len, optlen)) 4510 return -EFAULT; 4511 4512 return 0; 4513 } 4514 4515 /* 4516 * 7.1.23. Get or set delayed ack timer (SCTP_DELAYED_SACK) 4517 * 4518 * This option will effect the way delayed acks are performed. This 4519 * option allows you to get or set the delayed ack time, in 4520 * milliseconds. It also allows changing the delayed ack frequency. 4521 * Changing the frequency to 1 disables the delayed sack algorithm. If 4522 * the assoc_id is 0, then this sets or gets the endpoints default 4523 * values. If the assoc_id field is non-zero, then the set or get 4524 * effects the specified association for the one to many model (the 4525 * assoc_id field is ignored by the one to one model). Note that if 4526 * sack_delay or sack_freq are 0 when setting this option, then the 4527 * current values will remain unchanged. 4528 * 4529 * struct sctp_sack_info { 4530 * sctp_assoc_t sack_assoc_id; 4531 * uint32_t sack_delay; 4532 * uint32_t sack_freq; 4533 * }; 4534 * 4535 * sack_assoc_id - This parameter, indicates which association the user 4536 * is performing an action upon. Note that if this field's value is 4537 * zero then the endpoints default value is changed (effecting future 4538 * associations only). 4539 * 4540 * sack_delay - This parameter contains the number of milliseconds that 4541 * the user is requesting the delayed ACK timer be set to. Note that 4542 * this value is defined in the standard to be between 200 and 500 4543 * milliseconds. 4544 * 4545 * sack_freq - This parameter contains the number of packets that must 4546 * be received before a sack is sent without waiting for the delay 4547 * timer to expire. The default value for this is 2, setting this 4548 * value to 1 will disable the delayed sack algorithm. 4549 */ 4550 static int sctp_getsockopt_delayed_ack(struct sock *sk, int len, 4551 char __user *optval, 4552 int __user *optlen) 4553 { 4554 struct sctp_sack_info params; 4555 struct sctp_association *asoc = NULL; 4556 struct sctp_sock *sp = sctp_sk(sk); 4557 4558 if (len >= sizeof(struct sctp_sack_info)) { 4559 len = sizeof(struct sctp_sack_info); 4560 4561 if (copy_from_user(¶ms, optval, len)) 4562 return -EFAULT; 4563 } else if (len == sizeof(struct sctp_assoc_value)) { 4564 pr_warn("Use of struct sctp_assoc_value in delayed_ack socket option deprecated\n"); 4565 pr_warn("Use struct sctp_sack_info instead\n"); 4566 if (copy_from_user(¶ms, optval, len)) 4567 return -EFAULT; 4568 } else 4569 return - EINVAL; 4570 4571 /* Get association, if sack_assoc_id != 0 and the socket is a one 4572 * to many style socket, and an association was not found, then 4573 * the id was invalid. 4574 */ 4575 asoc = sctp_id2assoc(sk, params.sack_assoc_id); 4576 if (!asoc && params.sack_assoc_id && sctp_style(sk, UDP)) 4577 return -EINVAL; 4578 4579 if (asoc) { 4580 /* Fetch association values. */ 4581 if (asoc->param_flags & SPP_SACKDELAY_ENABLE) { 4582 params.sack_delay = jiffies_to_msecs( 4583 asoc->sackdelay); 4584 params.sack_freq = asoc->sackfreq; 4585 4586 } else { 4587 params.sack_delay = 0; 4588 params.sack_freq = 1; 4589 } 4590 } else { 4591 /* Fetch socket values. */ 4592 if (sp->param_flags & SPP_SACKDELAY_ENABLE) { 4593 params.sack_delay = sp->sackdelay; 4594 params.sack_freq = sp->sackfreq; 4595 } else { 4596 params.sack_delay = 0; 4597 params.sack_freq = 1; 4598 } 4599 } 4600 4601 if (copy_to_user(optval, ¶ms, len)) 4602 return -EFAULT; 4603 4604 if (put_user(len, optlen)) 4605 return -EFAULT; 4606 4607 return 0; 4608 } 4609 4610 /* 7.1.3 Initialization Parameters (SCTP_INITMSG) 4611 * 4612 * Applications can specify protocol parameters for the default association 4613 * initialization. The option name argument to setsockopt() and getsockopt() 4614 * is SCTP_INITMSG. 4615 * 4616 * Setting initialization parameters is effective only on an unconnected 4617 * socket (for UDP-style sockets only future associations are effected 4618 * by the change). With TCP-style sockets, this option is inherited by 4619 * sockets derived from a listener socket. 4620 */ 4621 static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen) 4622 { 4623 if (len < sizeof(struct sctp_initmsg)) 4624 return -EINVAL; 4625 len = sizeof(struct sctp_initmsg); 4626 if (put_user(len, optlen)) 4627 return -EFAULT; 4628 if (copy_to_user(optval, &sctp_sk(sk)->initmsg, len)) 4629 return -EFAULT; 4630 return 0; 4631 } 4632 4633 4634 static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, 4635 char __user *optval, int __user *optlen) 4636 { 4637 struct sctp_association *asoc; 4638 int cnt = 0; 4639 struct sctp_getaddrs getaddrs; 4640 struct sctp_transport *from; 4641 void __user *to; 4642 union sctp_addr temp; 4643 struct sctp_sock *sp = sctp_sk(sk); 4644 int addrlen; 4645 size_t space_left; 4646 int bytes_copied; 4647 4648 if (len < sizeof(struct sctp_getaddrs)) 4649 return -EINVAL; 4650 4651 if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) 4652 return -EFAULT; 4653 4654 /* For UDP-style sockets, id specifies the association to query. */ 4655 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); 4656 if (!asoc) 4657 return -EINVAL; 4658 4659 to = optval + offsetof(struct sctp_getaddrs,addrs); 4660 space_left = len - offsetof(struct sctp_getaddrs,addrs); 4661 4662 list_for_each_entry(from, &asoc->peer.transport_addr_list, 4663 transports) { 4664 memcpy(&temp, &from->ipaddr, sizeof(temp)); 4665 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); 4666 addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; 4667 if (space_left < addrlen) 4668 return -ENOMEM; 4669 if (copy_to_user(to, &temp, addrlen)) 4670 return -EFAULT; 4671 to += addrlen; 4672 cnt++; 4673 space_left -= addrlen; 4674 } 4675 4676 if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) 4677 return -EFAULT; 4678 bytes_copied = ((char __user *)to) - optval; 4679 if (put_user(bytes_copied, optlen)) 4680 return -EFAULT; 4681 4682 return 0; 4683 } 4684 4685 static int sctp_copy_laddrs(struct sock *sk, __u16 port, void *to, 4686 size_t space_left, int *bytes_copied) 4687 { 4688 struct sctp_sockaddr_entry *addr; 4689 union sctp_addr temp; 4690 int cnt = 0; 4691 int addrlen; 4692 struct net *net = sock_net(sk); 4693 4694 rcu_read_lock(); 4695 list_for_each_entry_rcu(addr, &net->sctp.local_addr_list, list) { 4696 if (!addr->valid) 4697 continue; 4698 4699 if ((PF_INET == sk->sk_family) && 4700 (AF_INET6 == addr->a.sa.sa_family)) 4701 continue; 4702 if ((PF_INET6 == sk->sk_family) && 4703 inet_v6_ipv6only(sk) && 4704 (AF_INET == addr->a.sa.sa_family)) 4705 continue; 4706 memcpy(&temp, &addr->a, sizeof(temp)); 4707 if (!temp.v4.sin_port) 4708 temp.v4.sin_port = htons(port); 4709 4710 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), 4711 &temp); 4712 addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; 4713 if (space_left < addrlen) { 4714 cnt = -ENOMEM; 4715 break; 4716 } 4717 memcpy(to, &temp, addrlen); 4718 4719 to += addrlen; 4720 cnt ++; 4721 space_left -= addrlen; 4722 *bytes_copied += addrlen; 4723 } 4724 rcu_read_unlock(); 4725 4726 return cnt; 4727 } 4728 4729 4730 static int sctp_getsockopt_local_addrs(struct sock *sk, int len, 4731 char __user *optval, int __user *optlen) 4732 { 4733 struct sctp_bind_addr *bp; 4734 struct sctp_association *asoc; 4735 int cnt = 0; 4736 struct sctp_getaddrs getaddrs; 4737 struct sctp_sockaddr_entry *addr; 4738 void __user *to; 4739 union sctp_addr temp; 4740 struct sctp_sock *sp = sctp_sk(sk); 4741 int addrlen; 4742 int err = 0; 4743 size_t space_left; 4744 int bytes_copied = 0; 4745 void *addrs; 4746 void *buf; 4747 4748 if (len < sizeof(struct sctp_getaddrs)) 4749 return -EINVAL; 4750 4751 if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) 4752 return -EFAULT; 4753 4754 /* 4755 * For UDP-style sockets, id specifies the association to query. 4756 * If the id field is set to the value '0' then the locally bound 4757 * addresses are returned without regard to any particular 4758 * association. 4759 */ 4760 if (0 == getaddrs.assoc_id) { 4761 bp = &sctp_sk(sk)->ep->base.bind_addr; 4762 } else { 4763 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); 4764 if (!asoc) 4765 return -EINVAL; 4766 bp = &asoc->base.bind_addr; 4767 } 4768 4769 to = optval + offsetof(struct sctp_getaddrs,addrs); 4770 space_left = len - offsetof(struct sctp_getaddrs,addrs); 4771 4772 addrs = kmalloc(space_left, GFP_KERNEL); 4773 if (!addrs) 4774 return -ENOMEM; 4775 4776 /* If the endpoint is bound to 0.0.0.0 or ::0, get the valid 4777 * addresses from the global local address list. 4778 */ 4779 if (sctp_list_single_entry(&bp->address_list)) { 4780 addr = list_entry(bp->address_list.next, 4781 struct sctp_sockaddr_entry, list); 4782 if (sctp_is_any(sk, &addr->a)) { 4783 cnt = sctp_copy_laddrs(sk, bp->port, addrs, 4784 space_left, &bytes_copied); 4785 if (cnt < 0) { 4786 err = cnt; 4787 goto out; 4788 } 4789 goto copy_getaddrs; 4790 } 4791 } 4792 4793 buf = addrs; 4794 /* Protection on the bound address list is not needed since 4795 * in the socket option context we hold a socket lock and 4796 * thus the bound address list can't change. 4797 */ 4798 list_for_each_entry(addr, &bp->address_list, list) { 4799 memcpy(&temp, &addr->a, sizeof(temp)); 4800 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); 4801 addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; 4802 if (space_left < addrlen) { 4803 err = -ENOMEM; /*fixme: right error?*/ 4804 goto out; 4805 } 4806 memcpy(buf, &temp, addrlen); 4807 buf += addrlen; 4808 bytes_copied += addrlen; 4809 cnt ++; 4810 space_left -= addrlen; 4811 } 4812 4813 copy_getaddrs: 4814 if (copy_to_user(to, addrs, bytes_copied)) { 4815 err = -EFAULT; 4816 goto out; 4817 } 4818 if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) { 4819 err = -EFAULT; 4820 goto out; 4821 } 4822 if (put_user(bytes_copied, optlen)) 4823 err = -EFAULT; 4824 out: 4825 kfree(addrs); 4826 return err; 4827 } 4828 4829 /* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR) 4830 * 4831 * Requests that the local SCTP stack use the enclosed peer address as 4832 * the association primary. The enclosed address must be one of the 4833 * association peer's addresses. 4834 */ 4835 static int sctp_getsockopt_primary_addr(struct sock *sk, int len, 4836 char __user *optval, int __user *optlen) 4837 { 4838 struct sctp_prim prim; 4839 struct sctp_association *asoc; 4840 struct sctp_sock *sp = sctp_sk(sk); 4841 4842 if (len < sizeof(struct sctp_prim)) 4843 return -EINVAL; 4844 4845 len = sizeof(struct sctp_prim); 4846 4847 if (copy_from_user(&prim, optval, len)) 4848 return -EFAULT; 4849 4850 asoc = sctp_id2assoc(sk, prim.ssp_assoc_id); 4851 if (!asoc) 4852 return -EINVAL; 4853 4854 if (!asoc->peer.primary_path) 4855 return -ENOTCONN; 4856 4857 memcpy(&prim.ssp_addr, &asoc->peer.primary_path->ipaddr, 4858 asoc->peer.primary_path->af_specific->sockaddr_len); 4859 4860 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, 4861 (union sctp_addr *)&prim.ssp_addr); 4862 4863 if (put_user(len, optlen)) 4864 return -EFAULT; 4865 if (copy_to_user(optval, &prim, len)) 4866 return -EFAULT; 4867 4868 return 0; 4869 } 4870 4871 /* 4872 * 7.1.11 Set Adaptation Layer Indicator (SCTP_ADAPTATION_LAYER) 4873 * 4874 * Requests that the local endpoint set the specified Adaptation Layer 4875 * Indication parameter for all future INIT and INIT-ACK exchanges. 4876 */ 4877 static int sctp_getsockopt_adaptation_layer(struct sock *sk, int len, 4878 char __user *optval, int __user *optlen) 4879 { 4880 struct sctp_setadaptation adaptation; 4881 4882 if (len < sizeof(struct sctp_setadaptation)) 4883 return -EINVAL; 4884 4885 len = sizeof(struct sctp_setadaptation); 4886 4887 adaptation.ssb_adaptation_ind = sctp_sk(sk)->adaptation_ind; 4888 4889 if (put_user(len, optlen)) 4890 return -EFAULT; 4891 if (copy_to_user(optval, &adaptation, len)) 4892 return -EFAULT; 4893 4894 return 0; 4895 } 4896 4897 /* 4898 * 4899 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM) 4900 * 4901 * Applications that wish to use the sendto() system call may wish to 4902 * specify a default set of parameters that would normally be supplied 4903 * through the inclusion of ancillary data. This socket option allows 4904 * such an application to set the default sctp_sndrcvinfo structure. 4905 4906 4907 * The application that wishes to use this socket option simply passes 4908 * in to this call the sctp_sndrcvinfo structure defined in Section 4909 * 5.2.2) The input parameters accepted by this call include 4910 * sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context, 4911 * sinfo_timetolive. The user must provide the sinfo_assoc_id field in 4912 * to this call if the caller is using the UDP model. 4913 * 4914 * For getsockopt, it get the default sctp_sndrcvinfo structure. 4915 */ 4916 static int sctp_getsockopt_default_send_param(struct sock *sk, 4917 int len, char __user *optval, 4918 int __user *optlen) 4919 { 4920 struct sctp_sndrcvinfo info; 4921 struct sctp_association *asoc; 4922 struct sctp_sock *sp = sctp_sk(sk); 4923 4924 if (len < sizeof(struct sctp_sndrcvinfo)) 4925 return -EINVAL; 4926 4927 len = sizeof(struct sctp_sndrcvinfo); 4928 4929 if (copy_from_user(&info, optval, len)) 4930 return -EFAULT; 4931 4932 asoc = sctp_id2assoc(sk, info.sinfo_assoc_id); 4933 if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP)) 4934 return -EINVAL; 4935 4936 if (asoc) { 4937 info.sinfo_stream = asoc->default_stream; 4938 info.sinfo_flags = asoc->default_flags; 4939 info.sinfo_ppid = asoc->default_ppid; 4940 info.sinfo_context = asoc->default_context; 4941 info.sinfo_timetolive = asoc->default_timetolive; 4942 } else { 4943 info.sinfo_stream = sp->default_stream; 4944 info.sinfo_flags = sp->default_flags; 4945 info.sinfo_ppid = sp->default_ppid; 4946 info.sinfo_context = sp->default_context; 4947 info.sinfo_timetolive = sp->default_timetolive; 4948 } 4949 4950 if (put_user(len, optlen)) 4951 return -EFAULT; 4952 if (copy_to_user(optval, &info, len)) 4953 return -EFAULT; 4954 4955 return 0; 4956 } 4957 4958 /* 4959 * 4960 * 7.1.5 SCTP_NODELAY 4961 * 4962 * Turn on/off any Nagle-like algorithm. This means that packets are 4963 * generally sent as soon as possible and no unnecessary delays are 4964 * introduced, at the cost of more packets in the network. Expects an 4965 * integer boolean flag. 4966 */ 4967 4968 static int sctp_getsockopt_nodelay(struct sock *sk, int len, 4969 char __user *optval, int __user *optlen) 4970 { 4971 int val; 4972 4973 if (len < sizeof(int)) 4974 return -EINVAL; 4975 4976 len = sizeof(int); 4977 val = (sctp_sk(sk)->nodelay == 1); 4978 if (put_user(len, optlen)) 4979 return -EFAULT; 4980 if (copy_to_user(optval, &val, len)) 4981 return -EFAULT; 4982 return 0; 4983 } 4984 4985 /* 4986 * 4987 * 7.1.1 SCTP_RTOINFO 4988 * 4989 * The protocol parameters used to initialize and bound retransmission 4990 * timeout (RTO) are tunable. sctp_rtoinfo structure is used to access 4991 * and modify these parameters. 4992 * All parameters are time values, in milliseconds. A value of 0, when 4993 * modifying the parameters, indicates that the current value should not 4994 * be changed. 4995 * 4996 */ 4997 static int sctp_getsockopt_rtoinfo(struct sock *sk, int len, 4998 char __user *optval, 4999 int __user *optlen) { 5000 struct sctp_rtoinfo rtoinfo; 5001 struct sctp_association *asoc; 5002 5003 if (len < sizeof (struct sctp_rtoinfo)) 5004 return -EINVAL; 5005 5006 len = sizeof(struct sctp_rtoinfo); 5007 5008 if (copy_from_user(&rtoinfo, optval, len)) 5009 return -EFAULT; 5010 5011 asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id); 5012 5013 if (!asoc && rtoinfo.srto_assoc_id && sctp_style(sk, UDP)) 5014 return -EINVAL; 5015 5016 /* Values corresponding to the specific association. */ 5017 if (asoc) { 5018 rtoinfo.srto_initial = jiffies_to_msecs(asoc->rto_initial); 5019 rtoinfo.srto_max = jiffies_to_msecs(asoc->rto_max); 5020 rtoinfo.srto_min = jiffies_to_msecs(asoc->rto_min); 5021 } else { 5022 /* Values corresponding to the endpoint. */ 5023 struct sctp_sock *sp = sctp_sk(sk); 5024 5025 rtoinfo.srto_initial = sp->rtoinfo.srto_initial; 5026 rtoinfo.srto_max = sp->rtoinfo.srto_max; 5027 rtoinfo.srto_min = sp->rtoinfo.srto_min; 5028 } 5029 5030 if (put_user(len, optlen)) 5031 return -EFAULT; 5032 5033 if (copy_to_user(optval, &rtoinfo, len)) 5034 return -EFAULT; 5035 5036 return 0; 5037 } 5038 5039 /* 5040 * 5041 * 7.1.2 SCTP_ASSOCINFO 5042 * 5043 * This option is used to tune the maximum retransmission attempts 5044 * of the association. 5045 * Returns an error if the new association retransmission value is 5046 * greater than the sum of the retransmission value of the peer. 5047 * See [SCTP] for more information. 5048 * 5049 */ 5050 static int sctp_getsockopt_associnfo(struct sock *sk, int len, 5051 char __user *optval, 5052 int __user *optlen) 5053 { 5054 5055 struct sctp_assocparams assocparams; 5056 struct sctp_association *asoc; 5057 struct list_head *pos; 5058 int cnt = 0; 5059 5060 if (len < sizeof (struct sctp_assocparams)) 5061 return -EINVAL; 5062 5063 len = sizeof(struct sctp_assocparams); 5064 5065 if (copy_from_user(&assocparams, optval, len)) 5066 return -EFAULT; 5067 5068 asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id); 5069 5070 if (!asoc && assocparams.sasoc_assoc_id && sctp_style(sk, UDP)) 5071 return -EINVAL; 5072 5073 /* Values correspoinding to the specific association */ 5074 if (asoc) { 5075 assocparams.sasoc_asocmaxrxt = asoc->max_retrans; 5076 assocparams.sasoc_peer_rwnd = asoc->peer.rwnd; 5077 assocparams.sasoc_local_rwnd = asoc->a_rwnd; 5078 assocparams.sasoc_cookie_life = (asoc->cookie_life.tv_sec 5079 * 1000) + 5080 (asoc->cookie_life.tv_usec 5081 / 1000); 5082 5083 list_for_each(pos, &asoc->peer.transport_addr_list) { 5084 cnt ++; 5085 } 5086 5087 assocparams.sasoc_number_peer_destinations = cnt; 5088 } else { 5089 /* Values corresponding to the endpoint */ 5090 struct sctp_sock *sp = sctp_sk(sk); 5091 5092 assocparams.sasoc_asocmaxrxt = sp->assocparams.sasoc_asocmaxrxt; 5093 assocparams.sasoc_peer_rwnd = sp->assocparams.sasoc_peer_rwnd; 5094 assocparams.sasoc_local_rwnd = sp->assocparams.sasoc_local_rwnd; 5095 assocparams.sasoc_cookie_life = 5096 sp->assocparams.sasoc_cookie_life; 5097 assocparams.sasoc_number_peer_destinations = 5098 sp->assocparams. 5099 sasoc_number_peer_destinations; 5100 } 5101 5102 if (put_user(len, optlen)) 5103 return -EFAULT; 5104 5105 if (copy_to_user(optval, &assocparams, len)) 5106 return -EFAULT; 5107 5108 return 0; 5109 } 5110 5111 /* 5112 * 7.1.16 Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR) 5113 * 5114 * This socket option is a boolean flag which turns on or off mapped V4 5115 * addresses. If this option is turned on and the socket is type 5116 * PF_INET6, then IPv4 addresses will be mapped to V6 representation. 5117 * If this option is turned off, then no mapping will be done of V4 5118 * addresses and a user will receive both PF_INET6 and PF_INET type 5119 * addresses on the socket. 5120 */ 5121 static int sctp_getsockopt_mappedv4(struct sock *sk, int len, 5122 char __user *optval, int __user *optlen) 5123 { 5124 int val; 5125 struct sctp_sock *sp = sctp_sk(sk); 5126 5127 if (len < sizeof(int)) 5128 return -EINVAL; 5129 5130 len = sizeof(int); 5131 val = sp->v4mapped; 5132 if (put_user(len, optlen)) 5133 return -EFAULT; 5134 if (copy_to_user(optval, &val, len)) 5135 return -EFAULT; 5136 5137 return 0; 5138 } 5139 5140 /* 5141 * 7.1.29. Set or Get the default context (SCTP_CONTEXT) 5142 * (chapter and verse is quoted at sctp_setsockopt_context()) 5143 */ 5144 static int sctp_getsockopt_context(struct sock *sk, int len, 5145 char __user *optval, int __user *optlen) 5146 { 5147 struct sctp_assoc_value params; 5148 struct sctp_sock *sp; 5149 struct sctp_association *asoc; 5150 5151 if (len < sizeof(struct sctp_assoc_value)) 5152 return -EINVAL; 5153 5154 len = sizeof(struct sctp_assoc_value); 5155 5156 if (copy_from_user(¶ms, optval, len)) 5157 return -EFAULT; 5158 5159 sp = sctp_sk(sk); 5160 5161 if (params.assoc_id != 0) { 5162 asoc = sctp_id2assoc(sk, params.assoc_id); 5163 if (!asoc) 5164 return -EINVAL; 5165 params.assoc_value = asoc->default_rcv_context; 5166 } else { 5167 params.assoc_value = sp->default_rcv_context; 5168 } 5169 5170 if (put_user(len, optlen)) 5171 return -EFAULT; 5172 if (copy_to_user(optval, ¶ms, len)) 5173 return -EFAULT; 5174 5175 return 0; 5176 } 5177 5178 /* 5179 * 8.1.16. Get or Set the Maximum Fragmentation Size (SCTP_MAXSEG) 5180 * This option will get or set the maximum size to put in any outgoing 5181 * SCTP DATA chunk. If a message is larger than this size it will be 5182 * fragmented by SCTP into the specified size. Note that the underlying 5183 * SCTP implementation may fragment into smaller sized chunks when the 5184 * PMTU of the underlying association is smaller than the value set by 5185 * the user. The default value for this option is '0' which indicates 5186 * the user is NOT limiting fragmentation and only the PMTU will effect 5187 * SCTP's choice of DATA chunk size. Note also that values set larger 5188 * than the maximum size of an IP datagram will effectively let SCTP 5189 * control fragmentation (i.e. the same as setting this option to 0). 5190 * 5191 * The following structure is used to access and modify this parameter: 5192 * 5193 * struct sctp_assoc_value { 5194 * sctp_assoc_t assoc_id; 5195 * uint32_t assoc_value; 5196 * }; 5197 * 5198 * assoc_id: This parameter is ignored for one-to-one style sockets. 5199 * For one-to-many style sockets this parameter indicates which 5200 * association the user is performing an action upon. Note that if 5201 * this field's value is zero then the endpoints default value is 5202 * changed (effecting future associations only). 5203 * assoc_value: This parameter specifies the maximum size in bytes. 5204 */ 5205 static int sctp_getsockopt_maxseg(struct sock *sk, int len, 5206 char __user *optval, int __user *optlen) 5207 { 5208 struct sctp_assoc_value params; 5209 struct sctp_association *asoc; 5210 5211 if (len == sizeof(int)) { 5212 pr_warn("Use of int in maxseg socket option deprecated\n"); 5213 pr_warn("Use struct sctp_assoc_value instead\n"); 5214 params.assoc_id = 0; 5215 } else if (len >= sizeof(struct sctp_assoc_value)) { 5216 len = sizeof(struct sctp_assoc_value); 5217 if (copy_from_user(¶ms, optval, sizeof(params))) 5218 return -EFAULT; 5219 } else 5220 return -EINVAL; 5221 5222 asoc = sctp_id2assoc(sk, params.assoc_id); 5223 if (!asoc && params.assoc_id && sctp_style(sk, UDP)) 5224 return -EINVAL; 5225 5226 if (asoc) 5227 params.assoc_value = asoc->frag_point; 5228 else 5229 params.assoc_value = sctp_sk(sk)->user_frag; 5230 5231 if (put_user(len, optlen)) 5232 return -EFAULT; 5233 if (len == sizeof(int)) { 5234 if (copy_to_user(optval, ¶ms.assoc_value, len)) 5235 return -EFAULT; 5236 } else { 5237 if (copy_to_user(optval, ¶ms, len)) 5238 return -EFAULT; 5239 } 5240 5241 return 0; 5242 } 5243 5244 /* 5245 * 7.1.24. Get or set fragmented interleave (SCTP_FRAGMENT_INTERLEAVE) 5246 * (chapter and verse is quoted at sctp_setsockopt_fragment_interleave()) 5247 */ 5248 static int sctp_getsockopt_fragment_interleave(struct sock *sk, int len, 5249 char __user *optval, int __user *optlen) 5250 { 5251 int val; 5252 5253 if (len < sizeof(int)) 5254 return -EINVAL; 5255 5256 len = sizeof(int); 5257 5258 val = sctp_sk(sk)->frag_interleave; 5259 if (put_user(len, optlen)) 5260 return -EFAULT; 5261 if (copy_to_user(optval, &val, len)) 5262 return -EFAULT; 5263 5264 return 0; 5265 } 5266 5267 /* 5268 * 7.1.25. Set or Get the sctp partial delivery point 5269 * (chapter and verse is quoted at sctp_setsockopt_partial_delivery_point()) 5270 */ 5271 static int sctp_getsockopt_partial_delivery_point(struct sock *sk, int len, 5272 char __user *optval, 5273 int __user *optlen) 5274 { 5275 u32 val; 5276 5277 if (len < sizeof(u32)) 5278 return -EINVAL; 5279 5280 len = sizeof(u32); 5281 5282 val = sctp_sk(sk)->pd_point; 5283 if (put_user(len, optlen)) 5284 return -EFAULT; 5285 if (copy_to_user(optval, &val, len)) 5286 return -EFAULT; 5287 5288 return 0; 5289 } 5290 5291 /* 5292 * 7.1.28. Set or Get the maximum burst (SCTP_MAX_BURST) 5293 * (chapter and verse is quoted at sctp_setsockopt_maxburst()) 5294 */ 5295 static int sctp_getsockopt_maxburst(struct sock *sk, int len, 5296 char __user *optval, 5297 int __user *optlen) 5298 { 5299 struct sctp_assoc_value params; 5300 struct sctp_sock *sp; 5301 struct sctp_association *asoc; 5302 5303 if (len == sizeof(int)) { 5304 pr_warn("Use of int in max_burst socket option deprecated\n"); 5305 pr_warn("Use struct sctp_assoc_value instead\n"); 5306 params.assoc_id = 0; 5307 } else if (len >= sizeof(struct sctp_assoc_value)) { 5308 len = sizeof(struct sctp_assoc_value); 5309 if (copy_from_user(¶ms, optval, len)) 5310 return -EFAULT; 5311 } else 5312 return -EINVAL; 5313 5314 sp = sctp_sk(sk); 5315 5316 if (params.assoc_id != 0) { 5317 asoc = sctp_id2assoc(sk, params.assoc_id); 5318 if (!asoc) 5319 return -EINVAL; 5320 params.assoc_value = asoc->max_burst; 5321 } else 5322 params.assoc_value = sp->max_burst; 5323 5324 if (len == sizeof(int)) { 5325 if (copy_to_user(optval, ¶ms.assoc_value, len)) 5326 return -EFAULT; 5327 } else { 5328 if (copy_to_user(optval, ¶ms, len)) 5329 return -EFAULT; 5330 } 5331 5332 return 0; 5333 5334 } 5335 5336 static int sctp_getsockopt_hmac_ident(struct sock *sk, int len, 5337 char __user *optval, int __user *optlen) 5338 { 5339 struct net *net = sock_net(sk); 5340 struct sctp_hmacalgo __user *p = (void __user *)optval; 5341 struct sctp_hmac_algo_param *hmacs; 5342 __u16 data_len = 0; 5343 u32 num_idents; 5344 5345 if (!net->sctp.auth_enable) 5346 return -EACCES; 5347 5348 hmacs = sctp_sk(sk)->ep->auth_hmacs_list; 5349 data_len = ntohs(hmacs->param_hdr.length) - sizeof(sctp_paramhdr_t); 5350 5351 if (len < sizeof(struct sctp_hmacalgo) + data_len) 5352 return -EINVAL; 5353 5354 len = sizeof(struct sctp_hmacalgo) + data_len; 5355 num_idents = data_len / sizeof(u16); 5356 5357 if (put_user(len, optlen)) 5358 return -EFAULT; 5359 if (put_user(num_idents, &p->shmac_num_idents)) 5360 return -EFAULT; 5361 if (copy_to_user(p->shmac_idents, hmacs->hmac_ids, data_len)) 5362 return -EFAULT; 5363 return 0; 5364 } 5365 5366 static int sctp_getsockopt_active_key(struct sock *sk, int len, 5367 char __user *optval, int __user *optlen) 5368 { 5369 struct net *net = sock_net(sk); 5370 struct sctp_authkeyid val; 5371 struct sctp_association *asoc; 5372 5373 if (!net->sctp.auth_enable) 5374 return -EACCES; 5375 5376 if (len < sizeof(struct sctp_authkeyid)) 5377 return -EINVAL; 5378 if (copy_from_user(&val, optval, sizeof(struct sctp_authkeyid))) 5379 return -EFAULT; 5380 5381 asoc = sctp_id2assoc(sk, val.scact_assoc_id); 5382 if (!asoc && val.scact_assoc_id && sctp_style(sk, UDP)) 5383 return -EINVAL; 5384 5385 if (asoc) 5386 val.scact_keynumber = asoc->active_key_id; 5387 else 5388 val.scact_keynumber = sctp_sk(sk)->ep->active_key_id; 5389 5390 len = sizeof(struct sctp_authkeyid); 5391 if (put_user(len, optlen)) 5392 return -EFAULT; 5393 if (copy_to_user(optval, &val, len)) 5394 return -EFAULT; 5395 5396 return 0; 5397 } 5398 5399 static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len, 5400 char __user *optval, int __user *optlen) 5401 { 5402 struct net *net = sock_net(sk); 5403 struct sctp_authchunks __user *p = (void __user *)optval; 5404 struct sctp_authchunks val; 5405 struct sctp_association *asoc; 5406 struct sctp_chunks_param *ch; 5407 u32 num_chunks = 0; 5408 char __user *to; 5409 5410 if (!net->sctp.auth_enable) 5411 return -EACCES; 5412 5413 if (len < sizeof(struct sctp_authchunks)) 5414 return -EINVAL; 5415 5416 if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks))) 5417 return -EFAULT; 5418 5419 to = p->gauth_chunks; 5420 asoc = sctp_id2assoc(sk, val.gauth_assoc_id); 5421 if (!asoc) 5422 return -EINVAL; 5423 5424 ch = asoc->peer.peer_chunks; 5425 if (!ch) 5426 goto num; 5427 5428 /* See if the user provided enough room for all the data */ 5429 num_chunks = ntohs(ch->param_hdr.length) - sizeof(sctp_paramhdr_t); 5430 if (len < num_chunks) 5431 return -EINVAL; 5432 5433 if (copy_to_user(to, ch->chunks, num_chunks)) 5434 return -EFAULT; 5435 num: 5436 len = sizeof(struct sctp_authchunks) + num_chunks; 5437 if (put_user(len, optlen)) return -EFAULT; 5438 if (put_user(num_chunks, &p->gauth_number_of_chunks)) 5439 return -EFAULT; 5440 return 0; 5441 } 5442 5443 static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len, 5444 char __user *optval, int __user *optlen) 5445 { 5446 struct net *net = sock_net(sk); 5447 struct sctp_authchunks __user *p = (void __user *)optval; 5448 struct sctp_authchunks val; 5449 struct sctp_association *asoc; 5450 struct sctp_chunks_param *ch; 5451 u32 num_chunks = 0; 5452 char __user *to; 5453 5454 if (!net->sctp.auth_enable) 5455 return -EACCES; 5456 5457 if (len < sizeof(struct sctp_authchunks)) 5458 return -EINVAL; 5459 5460 if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks))) 5461 return -EFAULT; 5462 5463 to = p->gauth_chunks; 5464 asoc = sctp_id2assoc(sk, val.gauth_assoc_id); 5465 if (!asoc && val.gauth_assoc_id && sctp_style(sk, UDP)) 5466 return -EINVAL; 5467 5468 if (asoc) 5469 ch = (struct sctp_chunks_param*)asoc->c.auth_chunks; 5470 else 5471 ch = sctp_sk(sk)->ep->auth_chunk_list; 5472 5473 if (!ch) 5474 goto num; 5475 5476 num_chunks = ntohs(ch->param_hdr.length) - sizeof(sctp_paramhdr_t); 5477 if (len < sizeof(struct sctp_authchunks) + num_chunks) 5478 return -EINVAL; 5479 5480 if (copy_to_user(to, ch->chunks, num_chunks)) 5481 return -EFAULT; 5482 num: 5483 len = sizeof(struct sctp_authchunks) + num_chunks; 5484 if (put_user(len, optlen)) 5485 return -EFAULT; 5486 if (put_user(num_chunks, &p->gauth_number_of_chunks)) 5487 return -EFAULT; 5488 5489 return 0; 5490 } 5491 5492 /* 5493 * 8.2.5. Get the Current Number of Associations (SCTP_GET_ASSOC_NUMBER) 5494 * This option gets the current number of associations that are attached 5495 * to a one-to-many style socket. The option value is an uint32_t. 5496 */ 5497 static int sctp_getsockopt_assoc_number(struct sock *sk, int len, 5498 char __user *optval, int __user *optlen) 5499 { 5500 struct sctp_sock *sp = sctp_sk(sk); 5501 struct sctp_association *asoc; 5502 u32 val = 0; 5503 5504 if (sctp_style(sk, TCP)) 5505 return -EOPNOTSUPP; 5506 5507 if (len < sizeof(u32)) 5508 return -EINVAL; 5509 5510 len = sizeof(u32); 5511 5512 list_for_each_entry(asoc, &(sp->ep->asocs), asocs) { 5513 val++; 5514 } 5515 5516 if (put_user(len, optlen)) 5517 return -EFAULT; 5518 if (copy_to_user(optval, &val, len)) 5519 return -EFAULT; 5520 5521 return 0; 5522 } 5523 5524 /* 5525 * 8.1.23 SCTP_AUTO_ASCONF 5526 * See the corresponding setsockopt entry as description 5527 */ 5528 static int sctp_getsockopt_auto_asconf(struct sock *sk, int len, 5529 char __user *optval, int __user *optlen) 5530 { 5531 int val = 0; 5532 5533 if (len < sizeof(int)) 5534 return -EINVAL; 5535 5536 len = sizeof(int); 5537 if (sctp_sk(sk)->do_auto_asconf && sctp_is_ep_boundall(sk)) 5538 val = 1; 5539 if (put_user(len, optlen)) 5540 return -EFAULT; 5541 if (copy_to_user(optval, &val, len)) 5542 return -EFAULT; 5543 return 0; 5544 } 5545 5546 /* 5547 * 8.2.6. Get the Current Identifiers of Associations 5548 * (SCTP_GET_ASSOC_ID_LIST) 5549 * 5550 * This option gets the current list of SCTP association identifiers of 5551 * the SCTP associations handled by a one-to-many style socket. 5552 */ 5553 static int sctp_getsockopt_assoc_ids(struct sock *sk, int len, 5554 char __user *optval, int __user *optlen) 5555 { 5556 struct sctp_sock *sp = sctp_sk(sk); 5557 struct sctp_association *asoc; 5558 struct sctp_assoc_ids *ids; 5559 u32 num = 0; 5560 5561 if (sctp_style(sk, TCP)) 5562 return -EOPNOTSUPP; 5563 5564 if (len < sizeof(struct sctp_assoc_ids)) 5565 return -EINVAL; 5566 5567 list_for_each_entry(asoc, &(sp->ep->asocs), asocs) { 5568 num++; 5569 } 5570 5571 if (len < sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num) 5572 return -EINVAL; 5573 5574 len = sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num; 5575 5576 ids = kmalloc(len, GFP_KERNEL); 5577 if (unlikely(!ids)) 5578 return -ENOMEM; 5579 5580 ids->gaids_number_of_ids = num; 5581 num = 0; 5582 list_for_each_entry(asoc, &(sp->ep->asocs), asocs) { 5583 ids->gaids_assoc_id[num++] = asoc->assoc_id; 5584 } 5585 5586 if (put_user(len, optlen) || copy_to_user(optval, ids, len)) { 5587 kfree(ids); 5588 return -EFAULT; 5589 } 5590 5591 kfree(ids); 5592 return 0; 5593 } 5594 5595 /* 5596 * SCTP_PEER_ADDR_THLDS 5597 * 5598 * This option allows us to fetch the partially failed threshold for one or all 5599 * transports in an association. See Section 6.1 of: 5600 * http://www.ietf.org/id/draft-nishida-tsvwg-sctp-failover-05.txt 5601 */ 5602 static int sctp_getsockopt_paddr_thresholds(struct sock *sk, 5603 char __user *optval, 5604 int len, 5605 int __user *optlen) 5606 { 5607 struct sctp_paddrthlds val; 5608 struct sctp_transport *trans; 5609 struct sctp_association *asoc; 5610 5611 if (len < sizeof(struct sctp_paddrthlds)) 5612 return -EINVAL; 5613 len = sizeof(struct sctp_paddrthlds); 5614 if (copy_from_user(&val, (struct sctp_paddrthlds __user *)optval, len)) 5615 return -EFAULT; 5616 5617 if (sctp_is_any(sk, (const union sctp_addr *)&val.spt_address)) { 5618 asoc = sctp_id2assoc(sk, val.spt_assoc_id); 5619 if (!asoc) 5620 return -ENOENT; 5621 5622 val.spt_pathpfthld = asoc->pf_retrans; 5623 val.spt_pathmaxrxt = asoc->pathmaxrxt; 5624 } else { 5625 trans = sctp_addr_id2transport(sk, &val.spt_address, 5626 val.spt_assoc_id); 5627 if (!trans) 5628 return -ENOENT; 5629 5630 val.spt_pathmaxrxt = trans->pathmaxrxt; 5631 val.spt_pathpfthld = trans->pf_retrans; 5632 } 5633 5634 if (put_user(len, optlen) || copy_to_user(optval, &val, len)) 5635 return -EFAULT; 5636 5637 return 0; 5638 } 5639 5640 /* 5641 * SCTP_GET_ASSOC_STATS 5642 * 5643 * This option retrieves local per endpoint statistics. It is modeled 5644 * after OpenSolaris' implementation 5645 */ 5646 static int sctp_getsockopt_assoc_stats(struct sock *sk, int len, 5647 char __user *optval, 5648 int __user *optlen) 5649 { 5650 struct sctp_assoc_stats sas; 5651 struct sctp_association *asoc = NULL; 5652 5653 /* User must provide at least the assoc id */ 5654 if (len < sizeof(sctp_assoc_t)) 5655 return -EINVAL; 5656 5657 /* Allow the struct to grow and fill in as much as possible */ 5658 len = min_t(size_t, len, sizeof(sas)); 5659 5660 if (copy_from_user(&sas, optval, len)) 5661 return -EFAULT; 5662 5663 asoc = sctp_id2assoc(sk, sas.sas_assoc_id); 5664 if (!asoc) 5665 return -EINVAL; 5666 5667 sas.sas_rtxchunks = asoc->stats.rtxchunks; 5668 sas.sas_gapcnt = asoc->stats.gapcnt; 5669 sas.sas_outofseqtsns = asoc->stats.outofseqtsns; 5670 sas.sas_osacks = asoc->stats.osacks; 5671 sas.sas_isacks = asoc->stats.isacks; 5672 sas.sas_octrlchunks = asoc->stats.octrlchunks; 5673 sas.sas_ictrlchunks = asoc->stats.ictrlchunks; 5674 sas.sas_oodchunks = asoc->stats.oodchunks; 5675 sas.sas_iodchunks = asoc->stats.iodchunks; 5676 sas.sas_ouodchunks = asoc->stats.ouodchunks; 5677 sas.sas_iuodchunks = asoc->stats.iuodchunks; 5678 sas.sas_idupchunks = asoc->stats.idupchunks; 5679 sas.sas_opackets = asoc->stats.opackets; 5680 sas.sas_ipackets = asoc->stats.ipackets; 5681 5682 /* New high max rto observed, will return 0 if not a single 5683 * RTO update took place. obs_rto_ipaddr will be bogus 5684 * in such a case 5685 */ 5686 sas.sas_maxrto = asoc->stats.max_obs_rto; 5687 memcpy(&sas.sas_obs_rto_ipaddr, &asoc->stats.obs_rto_ipaddr, 5688 sizeof(struct sockaddr_storage)); 5689 5690 /* Mark beginning of a new observation period */ 5691 asoc->stats.max_obs_rto = asoc->rto_min; 5692 5693 if (put_user(len, optlen)) 5694 return -EFAULT; 5695 5696 SCTP_DEBUG_PRINTK("sctp_getsockopt_assoc_stat(%d): %d\n", 5697 len, sas.sas_assoc_id); 5698 5699 if (copy_to_user(optval, &sas, len)) 5700 return -EFAULT; 5701 5702 return 0; 5703 } 5704 5705 SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname, 5706 char __user *optval, int __user *optlen) 5707 { 5708 int retval = 0; 5709 int len; 5710 5711 SCTP_DEBUG_PRINTK("sctp_getsockopt(sk: %p... optname: %d)\n", 5712 sk, optname); 5713 5714 /* I can hardly begin to describe how wrong this is. This is 5715 * so broken as to be worse than useless. The API draft 5716 * REALLY is NOT helpful here... I am not convinced that the 5717 * semantics of getsockopt() with a level OTHER THAN SOL_SCTP 5718 * are at all well-founded. 5719 */ 5720 if (level != SOL_SCTP) { 5721 struct sctp_af *af = sctp_sk(sk)->pf->af; 5722 5723 retval = af->getsockopt(sk, level, optname, optval, optlen); 5724 return retval; 5725 } 5726 5727 if (get_user(len, optlen)) 5728 return -EFAULT; 5729 5730 sctp_lock_sock(sk); 5731 5732 switch (optname) { 5733 case SCTP_STATUS: 5734 retval = sctp_getsockopt_sctp_status(sk, len, optval, optlen); 5735 break; 5736 case SCTP_DISABLE_FRAGMENTS: 5737 retval = sctp_getsockopt_disable_fragments(sk, len, optval, 5738 optlen); 5739 break; 5740 case SCTP_EVENTS: 5741 retval = sctp_getsockopt_events(sk, len, optval, optlen); 5742 break; 5743 case SCTP_AUTOCLOSE: 5744 retval = sctp_getsockopt_autoclose(sk, len, optval, optlen); 5745 break; 5746 case SCTP_SOCKOPT_PEELOFF: 5747 retval = sctp_getsockopt_peeloff(sk, len, optval, optlen); 5748 break; 5749 case SCTP_PEER_ADDR_PARAMS: 5750 retval = sctp_getsockopt_peer_addr_params(sk, len, optval, 5751 optlen); 5752 break; 5753 case SCTP_DELAYED_SACK: 5754 retval = sctp_getsockopt_delayed_ack(sk, len, optval, 5755 optlen); 5756 break; 5757 case SCTP_INITMSG: 5758 retval = sctp_getsockopt_initmsg(sk, len, optval, optlen); 5759 break; 5760 case SCTP_GET_PEER_ADDRS: 5761 retval = sctp_getsockopt_peer_addrs(sk, len, optval, 5762 optlen); 5763 break; 5764 case SCTP_GET_LOCAL_ADDRS: 5765 retval = sctp_getsockopt_local_addrs(sk, len, optval, 5766 optlen); 5767 break; 5768 case SCTP_SOCKOPT_CONNECTX3: 5769 retval = sctp_getsockopt_connectx3(sk, len, optval, optlen); 5770 break; 5771 case SCTP_DEFAULT_SEND_PARAM: 5772 retval = sctp_getsockopt_default_send_param(sk, len, 5773 optval, optlen); 5774 break; 5775 case SCTP_PRIMARY_ADDR: 5776 retval = sctp_getsockopt_primary_addr(sk, len, optval, optlen); 5777 break; 5778 case SCTP_NODELAY: 5779 retval = sctp_getsockopt_nodelay(sk, len, optval, optlen); 5780 break; 5781 case SCTP_RTOINFO: 5782 retval = sctp_getsockopt_rtoinfo(sk, len, optval, optlen); 5783 break; 5784 case SCTP_ASSOCINFO: 5785 retval = sctp_getsockopt_associnfo(sk, len, optval, optlen); 5786 break; 5787 case SCTP_I_WANT_MAPPED_V4_ADDR: 5788 retval = sctp_getsockopt_mappedv4(sk, len, optval, optlen); 5789 break; 5790 case SCTP_MAXSEG: 5791 retval = sctp_getsockopt_maxseg(sk, len, optval, optlen); 5792 break; 5793 case SCTP_GET_PEER_ADDR_INFO: 5794 retval = sctp_getsockopt_peer_addr_info(sk, len, optval, 5795 optlen); 5796 break; 5797 case SCTP_ADAPTATION_LAYER: 5798 retval = sctp_getsockopt_adaptation_layer(sk, len, optval, 5799 optlen); 5800 break; 5801 case SCTP_CONTEXT: 5802 retval = sctp_getsockopt_context(sk, len, optval, optlen); 5803 break; 5804 case SCTP_FRAGMENT_INTERLEAVE: 5805 retval = sctp_getsockopt_fragment_interleave(sk, len, optval, 5806 optlen); 5807 break; 5808 case SCTP_PARTIAL_DELIVERY_POINT: 5809 retval = sctp_getsockopt_partial_delivery_point(sk, len, optval, 5810 optlen); 5811 break; 5812 case SCTP_MAX_BURST: 5813 retval = sctp_getsockopt_maxburst(sk, len, optval, optlen); 5814 break; 5815 case SCTP_AUTH_KEY: 5816 case SCTP_AUTH_CHUNK: 5817 case SCTP_AUTH_DELETE_KEY: 5818 retval = -EOPNOTSUPP; 5819 break; 5820 case SCTP_HMAC_IDENT: 5821 retval = sctp_getsockopt_hmac_ident(sk, len, optval, optlen); 5822 break; 5823 case SCTP_AUTH_ACTIVE_KEY: 5824 retval = sctp_getsockopt_active_key(sk, len, optval, optlen); 5825 break; 5826 case SCTP_PEER_AUTH_CHUNKS: 5827 retval = sctp_getsockopt_peer_auth_chunks(sk, len, optval, 5828 optlen); 5829 break; 5830 case SCTP_LOCAL_AUTH_CHUNKS: 5831 retval = sctp_getsockopt_local_auth_chunks(sk, len, optval, 5832 optlen); 5833 break; 5834 case SCTP_GET_ASSOC_NUMBER: 5835 retval = sctp_getsockopt_assoc_number(sk, len, optval, optlen); 5836 break; 5837 case SCTP_GET_ASSOC_ID_LIST: 5838 retval = sctp_getsockopt_assoc_ids(sk, len, optval, optlen); 5839 break; 5840 case SCTP_AUTO_ASCONF: 5841 retval = sctp_getsockopt_auto_asconf(sk, len, optval, optlen); 5842 break; 5843 case SCTP_PEER_ADDR_THLDS: 5844 retval = sctp_getsockopt_paddr_thresholds(sk, optval, len, optlen); 5845 break; 5846 case SCTP_GET_ASSOC_STATS: 5847 retval = sctp_getsockopt_assoc_stats(sk, len, optval, optlen); 5848 break; 5849 default: 5850 retval = -ENOPROTOOPT; 5851 break; 5852 } 5853 5854 sctp_release_sock(sk); 5855 return retval; 5856 } 5857 5858 static void sctp_hash(struct sock *sk) 5859 { 5860 /* STUB */ 5861 } 5862 5863 static void sctp_unhash(struct sock *sk) 5864 { 5865 /* STUB */ 5866 } 5867 5868 /* Check if port is acceptable. Possibly find first available port. 5869 * 5870 * The port hash table (contained in the 'global' SCTP protocol storage 5871 * returned by struct sctp_protocol *sctp_get_protocol()). The hash 5872 * table is an array of 4096 lists (sctp_bind_hashbucket). Each 5873 * list (the list number is the port number hashed out, so as you 5874 * would expect from a hash function, all the ports in a given list have 5875 * such a number that hashes out to the same list number; you were 5876 * expecting that, right?); so each list has a set of ports, with a 5877 * link to the socket (struct sock) that uses it, the port number and 5878 * a fastreuse flag (FIXME: NPI ipg). 5879 */ 5880 static struct sctp_bind_bucket *sctp_bucket_create( 5881 struct sctp_bind_hashbucket *head, struct net *, unsigned short snum); 5882 5883 static long sctp_get_port_local(struct sock *sk, union sctp_addr *addr) 5884 { 5885 struct sctp_bind_hashbucket *head; /* hash list */ 5886 struct sctp_bind_bucket *pp; 5887 unsigned short snum; 5888 int ret; 5889 5890 snum = ntohs(addr->v4.sin_port); 5891 5892 SCTP_DEBUG_PRINTK("sctp_get_port() begins, snum=%d\n", snum); 5893 sctp_local_bh_disable(); 5894 5895 if (snum == 0) { 5896 /* Search for an available port. */ 5897 int low, high, remaining, index; 5898 unsigned int rover; 5899 5900 inet_get_local_port_range(&low, &high); 5901 remaining = (high - low) + 1; 5902 rover = net_random() % remaining + low; 5903 5904 do { 5905 rover++; 5906 if ((rover < low) || (rover > high)) 5907 rover = low; 5908 if (inet_is_reserved_local_port(rover)) 5909 continue; 5910 index = sctp_phashfn(sock_net(sk), rover); 5911 head = &sctp_port_hashtable[index]; 5912 sctp_spin_lock(&head->lock); 5913 sctp_for_each_hentry(pp, &head->chain) 5914 if ((pp->port == rover) && 5915 net_eq(sock_net(sk), pp->net)) 5916 goto next; 5917 break; 5918 next: 5919 sctp_spin_unlock(&head->lock); 5920 } while (--remaining > 0); 5921 5922 /* Exhausted local port range during search? */ 5923 ret = 1; 5924 if (remaining <= 0) 5925 goto fail; 5926 5927 /* OK, here is the one we will use. HEAD (the port 5928 * hash table list entry) is non-NULL and we hold it's 5929 * mutex. 5930 */ 5931 snum = rover; 5932 } else { 5933 /* We are given an specific port number; we verify 5934 * that it is not being used. If it is used, we will 5935 * exahust the search in the hash list corresponding 5936 * to the port number (snum) - we detect that with the 5937 * port iterator, pp being NULL. 5938 */ 5939 head = &sctp_port_hashtable[sctp_phashfn(sock_net(sk), snum)]; 5940 sctp_spin_lock(&head->lock); 5941 sctp_for_each_hentry(pp, &head->chain) { 5942 if ((pp->port == snum) && net_eq(pp->net, sock_net(sk))) 5943 goto pp_found; 5944 } 5945 } 5946 pp = NULL; 5947 goto pp_not_found; 5948 pp_found: 5949 if (!hlist_empty(&pp->owner)) { 5950 /* We had a port hash table hit - there is an 5951 * available port (pp != NULL) and it is being 5952 * used by other socket (pp->owner not empty); that other 5953 * socket is going to be sk2. 5954 */ 5955 int reuse = sk->sk_reuse; 5956 struct sock *sk2; 5957 5958 SCTP_DEBUG_PRINTK("sctp_get_port() found a possible match\n"); 5959 if (pp->fastreuse && sk->sk_reuse && 5960 sk->sk_state != SCTP_SS_LISTENING) 5961 goto success; 5962 5963 /* Run through the list of sockets bound to the port 5964 * (pp->port) [via the pointers bind_next and 5965 * bind_pprev in the struct sock *sk2 (pp->sk)]. On each one, 5966 * we get the endpoint they describe and run through 5967 * the endpoint's list of IP (v4 or v6) addresses, 5968 * comparing each of the addresses with the address of 5969 * the socket sk. If we find a match, then that means 5970 * that this port/socket (sk) combination are already 5971 * in an endpoint. 5972 */ 5973 sk_for_each_bound(sk2, &pp->owner) { 5974 struct sctp_endpoint *ep2; 5975 ep2 = sctp_sk(sk2)->ep; 5976 5977 if (sk == sk2 || 5978 (reuse && sk2->sk_reuse && 5979 sk2->sk_state != SCTP_SS_LISTENING)) 5980 continue; 5981 5982 if (sctp_bind_addr_conflict(&ep2->base.bind_addr, addr, 5983 sctp_sk(sk2), sctp_sk(sk))) { 5984 ret = (long)sk2; 5985 goto fail_unlock; 5986 } 5987 } 5988 SCTP_DEBUG_PRINTK("sctp_get_port(): Found a match\n"); 5989 } 5990 pp_not_found: 5991 /* If there was a hash table miss, create a new port. */ 5992 ret = 1; 5993 if (!pp && !(pp = sctp_bucket_create(head, sock_net(sk), snum))) 5994 goto fail_unlock; 5995 5996 /* In either case (hit or miss), make sure fastreuse is 1 only 5997 * if sk->sk_reuse is too (that is, if the caller requested 5998 * SO_REUSEADDR on this socket -sk-). 5999 */ 6000 if (hlist_empty(&pp->owner)) { 6001 if (sk->sk_reuse && sk->sk_state != SCTP_SS_LISTENING) 6002 pp->fastreuse = 1; 6003 else 6004 pp->fastreuse = 0; 6005 } else if (pp->fastreuse && 6006 (!sk->sk_reuse || sk->sk_state == SCTP_SS_LISTENING)) 6007 pp->fastreuse = 0; 6008 6009 /* We are set, so fill up all the data in the hash table 6010 * entry, tie the socket list information with the rest of the 6011 * sockets FIXME: Blurry, NPI (ipg). 6012 */ 6013 success: 6014 if (!sctp_sk(sk)->bind_hash) { 6015 inet_sk(sk)->inet_num = snum; 6016 sk_add_bind_node(sk, &pp->owner); 6017 sctp_sk(sk)->bind_hash = pp; 6018 } 6019 ret = 0; 6020 6021 fail_unlock: 6022 sctp_spin_unlock(&head->lock); 6023 6024 fail: 6025 sctp_local_bh_enable(); 6026 return ret; 6027 } 6028 6029 /* Assign a 'snum' port to the socket. If snum == 0, an ephemeral 6030 * port is requested. 6031 */ 6032 static int sctp_get_port(struct sock *sk, unsigned short snum) 6033 { 6034 long ret; 6035 union sctp_addr addr; 6036 struct sctp_af *af = sctp_sk(sk)->pf->af; 6037 6038 /* Set up a dummy address struct from the sk. */ 6039 af->from_sk(&addr, sk); 6040 addr.v4.sin_port = htons(snum); 6041 6042 /* Note: sk->sk_num gets filled in if ephemeral port request. */ 6043 ret = sctp_get_port_local(sk, &addr); 6044 6045 return ret ? 1 : 0; 6046 } 6047 6048 /* 6049 * Move a socket to LISTENING state. 6050 */ 6051 SCTP_STATIC int sctp_listen_start(struct sock *sk, int backlog) 6052 { 6053 struct sctp_sock *sp = sctp_sk(sk); 6054 struct sctp_endpoint *ep = sp->ep; 6055 struct crypto_hash *tfm = NULL; 6056 char alg[32]; 6057 6058 /* Allocate HMAC for generating cookie. */ 6059 if (!sp->hmac && sp->sctp_hmac_alg) { 6060 sprintf(alg, "hmac(%s)", sp->sctp_hmac_alg); 6061 tfm = crypto_alloc_hash(alg, 0, CRYPTO_ALG_ASYNC); 6062 if (IS_ERR(tfm)) { 6063 net_info_ratelimited("failed to load transform for %s: %ld\n", 6064 sp->sctp_hmac_alg, PTR_ERR(tfm)); 6065 return -ENOSYS; 6066 } 6067 sctp_sk(sk)->hmac = tfm; 6068 } 6069 6070 /* 6071 * If a bind() or sctp_bindx() is not called prior to a listen() 6072 * call that allows new associations to be accepted, the system 6073 * picks an ephemeral port and will choose an address set equivalent 6074 * to binding with a wildcard address. 6075 * 6076 * This is not currently spelled out in the SCTP sockets 6077 * extensions draft, but follows the practice as seen in TCP 6078 * sockets. 6079 * 6080 */ 6081 sk->sk_state = SCTP_SS_LISTENING; 6082 if (!ep->base.bind_addr.port) { 6083 if (sctp_autobind(sk)) 6084 return -EAGAIN; 6085 } else { 6086 if (sctp_get_port(sk, inet_sk(sk)->inet_num)) { 6087 sk->sk_state = SCTP_SS_CLOSED; 6088 return -EADDRINUSE; 6089 } 6090 } 6091 6092 sk->sk_max_ack_backlog = backlog; 6093 sctp_hash_endpoint(ep); 6094 return 0; 6095 } 6096 6097 /* 6098 * 4.1.3 / 5.1.3 listen() 6099 * 6100 * By default, new associations are not accepted for UDP style sockets. 6101 * An application uses listen() to mark a socket as being able to 6102 * accept new associations. 6103 * 6104 * On TCP style sockets, applications use listen() to ready the SCTP 6105 * endpoint for accepting inbound associations. 6106 * 6107 * On both types of endpoints a backlog of '0' disables listening. 6108 * 6109 * Move a socket to LISTENING state. 6110 */ 6111 int sctp_inet_listen(struct socket *sock, int backlog) 6112 { 6113 struct sock *sk = sock->sk; 6114 struct sctp_endpoint *ep = sctp_sk(sk)->ep; 6115 int err = -EINVAL; 6116 6117 if (unlikely(backlog < 0)) 6118 return err; 6119 6120 sctp_lock_sock(sk); 6121 6122 /* Peeled-off sockets are not allowed to listen(). */ 6123 if (sctp_style(sk, UDP_HIGH_BANDWIDTH)) 6124 goto out; 6125 6126 if (sock->state != SS_UNCONNECTED) 6127 goto out; 6128 6129 /* If backlog is zero, disable listening. */ 6130 if (!backlog) { 6131 if (sctp_sstate(sk, CLOSED)) 6132 goto out; 6133 6134 err = 0; 6135 sctp_unhash_endpoint(ep); 6136 sk->sk_state = SCTP_SS_CLOSED; 6137 if (sk->sk_reuse) 6138 sctp_sk(sk)->bind_hash->fastreuse = 1; 6139 goto out; 6140 } 6141 6142 /* If we are already listening, just update the backlog */ 6143 if (sctp_sstate(sk, LISTENING)) 6144 sk->sk_max_ack_backlog = backlog; 6145 else { 6146 err = sctp_listen_start(sk, backlog); 6147 if (err) 6148 goto out; 6149 } 6150 6151 err = 0; 6152 out: 6153 sctp_release_sock(sk); 6154 return err; 6155 } 6156 6157 /* 6158 * This function is done by modeling the current datagram_poll() and the 6159 * tcp_poll(). Note that, based on these implementations, we don't 6160 * lock the socket in this function, even though it seems that, 6161 * ideally, locking or some other mechanisms can be used to ensure 6162 * the integrity of the counters (sndbuf and wmem_alloc) used 6163 * in this place. We assume that we don't need locks either until proven 6164 * otherwise. 6165 * 6166 * Another thing to note is that we include the Async I/O support 6167 * here, again, by modeling the current TCP/UDP code. We don't have 6168 * a good way to test with it yet. 6169 */ 6170 unsigned int sctp_poll(struct file *file, struct socket *sock, poll_table *wait) 6171 { 6172 struct sock *sk = sock->sk; 6173 struct sctp_sock *sp = sctp_sk(sk); 6174 unsigned int mask; 6175 6176 poll_wait(file, sk_sleep(sk), wait); 6177 6178 /* A TCP-style listening socket becomes readable when the accept queue 6179 * is not empty. 6180 */ 6181 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) 6182 return (!list_empty(&sp->ep->asocs)) ? 6183 (POLLIN | POLLRDNORM) : 0; 6184 6185 mask = 0; 6186 6187 /* Is there any exceptional events? */ 6188 if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) 6189 mask |= POLLERR | 6190 sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0; 6191 if (sk->sk_shutdown & RCV_SHUTDOWN) 6192 mask |= POLLRDHUP | POLLIN | POLLRDNORM; 6193 if (sk->sk_shutdown == SHUTDOWN_MASK) 6194 mask |= POLLHUP; 6195 6196 /* Is it readable? Reconsider this code with TCP-style support. */ 6197 if (!skb_queue_empty(&sk->sk_receive_queue)) 6198 mask |= POLLIN | POLLRDNORM; 6199 6200 /* The association is either gone or not ready. */ 6201 if (!sctp_style(sk, UDP) && sctp_sstate(sk, CLOSED)) 6202 return mask; 6203 6204 /* Is it writable? */ 6205 if (sctp_writeable(sk)) { 6206 mask |= POLLOUT | POLLWRNORM; 6207 } else { 6208 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); 6209 /* 6210 * Since the socket is not locked, the buffer 6211 * might be made available after the writeable check and 6212 * before the bit is set. This could cause a lost I/O 6213 * signal. tcp_poll() has a race breaker for this race 6214 * condition. Based on their implementation, we put 6215 * in the following code to cover it as well. 6216 */ 6217 if (sctp_writeable(sk)) 6218 mask |= POLLOUT | POLLWRNORM; 6219 } 6220 return mask; 6221 } 6222 6223 /******************************************************************** 6224 * 2nd Level Abstractions 6225 ********************************************************************/ 6226 6227 static struct sctp_bind_bucket *sctp_bucket_create( 6228 struct sctp_bind_hashbucket *head, struct net *net, unsigned short snum) 6229 { 6230 struct sctp_bind_bucket *pp; 6231 6232 pp = kmem_cache_alloc(sctp_bucket_cachep, GFP_ATOMIC); 6233 if (pp) { 6234 SCTP_DBG_OBJCNT_INC(bind_bucket); 6235 pp->port = snum; 6236 pp->fastreuse = 0; 6237 INIT_HLIST_HEAD(&pp->owner); 6238 pp->net = net; 6239 hlist_add_head(&pp->node, &head->chain); 6240 } 6241 return pp; 6242 } 6243 6244 /* Caller must hold hashbucket lock for this tb with local BH disabled */ 6245 static void sctp_bucket_destroy(struct sctp_bind_bucket *pp) 6246 { 6247 if (pp && hlist_empty(&pp->owner)) { 6248 __hlist_del(&pp->node); 6249 kmem_cache_free(sctp_bucket_cachep, pp); 6250 SCTP_DBG_OBJCNT_DEC(bind_bucket); 6251 } 6252 } 6253 6254 /* Release this socket's reference to a local port. */ 6255 static inline void __sctp_put_port(struct sock *sk) 6256 { 6257 struct sctp_bind_hashbucket *head = 6258 &sctp_port_hashtable[sctp_phashfn(sock_net(sk), 6259 inet_sk(sk)->inet_num)]; 6260 struct sctp_bind_bucket *pp; 6261 6262 sctp_spin_lock(&head->lock); 6263 pp = sctp_sk(sk)->bind_hash; 6264 __sk_del_bind_node(sk); 6265 sctp_sk(sk)->bind_hash = NULL; 6266 inet_sk(sk)->inet_num = 0; 6267 sctp_bucket_destroy(pp); 6268 sctp_spin_unlock(&head->lock); 6269 } 6270 6271 void sctp_put_port(struct sock *sk) 6272 { 6273 sctp_local_bh_disable(); 6274 __sctp_put_port(sk); 6275 sctp_local_bh_enable(); 6276 } 6277 6278 /* 6279 * The system picks an ephemeral port and choose an address set equivalent 6280 * to binding with a wildcard address. 6281 * One of those addresses will be the primary address for the association. 6282 * This automatically enables the multihoming capability of SCTP. 6283 */ 6284 static int sctp_autobind(struct sock *sk) 6285 { 6286 union sctp_addr autoaddr; 6287 struct sctp_af *af; 6288 __be16 port; 6289 6290 /* Initialize a local sockaddr structure to INADDR_ANY. */ 6291 af = sctp_sk(sk)->pf->af; 6292 6293 port = htons(inet_sk(sk)->inet_num); 6294 af->inaddr_any(&autoaddr, port); 6295 6296 return sctp_do_bind(sk, &autoaddr, af->sockaddr_len); 6297 } 6298 6299 /* Parse out IPPROTO_SCTP CMSG headers. Perform only minimal validation. 6300 * 6301 * From RFC 2292 6302 * 4.2 The cmsghdr Structure * 6303 * 6304 * When ancillary data is sent or received, any number of ancillary data 6305 * objects can be specified by the msg_control and msg_controllen members of 6306 * the msghdr structure, because each object is preceded by 6307 * a cmsghdr structure defining the object's length (the cmsg_len member). 6308 * Historically Berkeley-derived implementations have passed only one object 6309 * at a time, but this API allows multiple objects to be 6310 * passed in a single call to sendmsg() or recvmsg(). The following example 6311 * shows two ancillary data objects in a control buffer. 6312 * 6313 * |<--------------------------- msg_controllen -------------------------->| 6314 * | | 6315 * 6316 * |<----- ancillary data object ----->|<----- ancillary data object ----->| 6317 * 6318 * |<---------- CMSG_SPACE() --------->|<---------- CMSG_SPACE() --------->| 6319 * | | | 6320 * 6321 * |<---------- cmsg_len ---------->| |<--------- cmsg_len ----------->| | 6322 * 6323 * |<--------- CMSG_LEN() --------->| |<-------- CMSG_LEN() ---------->| | 6324 * | | | | | 6325 * 6326 * +-----+-----+-----+--+-----------+--+-----+-----+-----+--+-----------+--+ 6327 * |cmsg_|cmsg_|cmsg_|XX| |XX|cmsg_|cmsg_|cmsg_|XX| |XX| 6328 * 6329 * |len |level|type |XX|cmsg_data[]|XX|len |level|type |XX|cmsg_data[]|XX| 6330 * 6331 * +-----+-----+-----+--+-----------+--+-----+-----+-----+--+-----------+--+ 6332 * ^ 6333 * | 6334 * 6335 * msg_control 6336 * points here 6337 */ 6338 SCTP_STATIC int sctp_msghdr_parse(const struct msghdr *msg, 6339 sctp_cmsgs_t *cmsgs) 6340 { 6341 struct cmsghdr *cmsg; 6342 struct msghdr *my_msg = (struct msghdr *)msg; 6343 6344 for (cmsg = CMSG_FIRSTHDR(msg); 6345 cmsg != NULL; 6346 cmsg = CMSG_NXTHDR(my_msg, cmsg)) { 6347 if (!CMSG_OK(my_msg, cmsg)) 6348 return -EINVAL; 6349 6350 /* Should we parse this header or ignore? */ 6351 if (cmsg->cmsg_level != IPPROTO_SCTP) 6352 continue; 6353 6354 /* Strictly check lengths following example in SCM code. */ 6355 switch (cmsg->cmsg_type) { 6356 case SCTP_INIT: 6357 /* SCTP Socket API Extension 6358 * 5.2.1 SCTP Initiation Structure (SCTP_INIT) 6359 * 6360 * This cmsghdr structure provides information for 6361 * initializing new SCTP associations with sendmsg(). 6362 * The SCTP_INITMSG socket option uses this same data 6363 * structure. This structure is not used for 6364 * recvmsg(). 6365 * 6366 * cmsg_level cmsg_type cmsg_data[] 6367 * ------------ ------------ ---------------------- 6368 * IPPROTO_SCTP SCTP_INIT struct sctp_initmsg 6369 */ 6370 if (cmsg->cmsg_len != 6371 CMSG_LEN(sizeof(struct sctp_initmsg))) 6372 return -EINVAL; 6373 cmsgs->init = (struct sctp_initmsg *)CMSG_DATA(cmsg); 6374 break; 6375 6376 case SCTP_SNDRCV: 6377 /* SCTP Socket API Extension 6378 * 5.2.2 SCTP Header Information Structure(SCTP_SNDRCV) 6379 * 6380 * This cmsghdr structure specifies SCTP options for 6381 * sendmsg() and describes SCTP header information 6382 * about a received message through recvmsg(). 6383 * 6384 * cmsg_level cmsg_type cmsg_data[] 6385 * ------------ ------------ ---------------------- 6386 * IPPROTO_SCTP SCTP_SNDRCV struct sctp_sndrcvinfo 6387 */ 6388 if (cmsg->cmsg_len != 6389 CMSG_LEN(sizeof(struct sctp_sndrcvinfo))) 6390 return -EINVAL; 6391 6392 cmsgs->info = 6393 (struct sctp_sndrcvinfo *)CMSG_DATA(cmsg); 6394 6395 /* Minimally, validate the sinfo_flags. */ 6396 if (cmsgs->info->sinfo_flags & 6397 ~(SCTP_UNORDERED | SCTP_ADDR_OVER | 6398 SCTP_ABORT | SCTP_EOF)) 6399 return -EINVAL; 6400 break; 6401 6402 default: 6403 return -EINVAL; 6404 } 6405 } 6406 return 0; 6407 } 6408 6409 /* 6410 * Wait for a packet.. 6411 * Note: This function is the same function as in core/datagram.c 6412 * with a few modifications to make lksctp work. 6413 */ 6414 static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p) 6415 { 6416 int error; 6417 DEFINE_WAIT(wait); 6418 6419 prepare_to_wait_exclusive(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 6420 6421 /* Socket errors? */ 6422 error = sock_error(sk); 6423 if (error) 6424 goto out; 6425 6426 if (!skb_queue_empty(&sk->sk_receive_queue)) 6427 goto ready; 6428 6429 /* Socket shut down? */ 6430 if (sk->sk_shutdown & RCV_SHUTDOWN) 6431 goto out; 6432 6433 /* Sequenced packets can come disconnected. If so we report the 6434 * problem. 6435 */ 6436 error = -ENOTCONN; 6437 6438 /* Is there a good reason to think that we may receive some data? */ 6439 if (list_empty(&sctp_sk(sk)->ep->asocs) && !sctp_sstate(sk, LISTENING)) 6440 goto out; 6441 6442 /* Handle signals. */ 6443 if (signal_pending(current)) 6444 goto interrupted; 6445 6446 /* Let another process have a go. Since we are going to sleep 6447 * anyway. Note: This may cause odd behaviors if the message 6448 * does not fit in the user's buffer, but this seems to be the 6449 * only way to honor MSG_DONTWAIT realistically. 6450 */ 6451 sctp_release_sock(sk); 6452 *timeo_p = schedule_timeout(*timeo_p); 6453 sctp_lock_sock(sk); 6454 6455 ready: 6456 finish_wait(sk_sleep(sk), &wait); 6457 return 0; 6458 6459 interrupted: 6460 error = sock_intr_errno(*timeo_p); 6461 6462 out: 6463 finish_wait(sk_sleep(sk), &wait); 6464 *err = error; 6465 return error; 6466 } 6467 6468 /* Receive a datagram. 6469 * Note: This is pretty much the same routine as in core/datagram.c 6470 * with a few changes to make lksctp work. 6471 */ 6472 static struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags, 6473 int noblock, int *err) 6474 { 6475 int error; 6476 struct sk_buff *skb; 6477 long timeo; 6478 6479 timeo = sock_rcvtimeo(sk, noblock); 6480 6481 SCTP_DEBUG_PRINTK("Timeout: timeo: %ld, MAX: %ld.\n", 6482 timeo, MAX_SCHEDULE_TIMEOUT); 6483 6484 do { 6485 /* Again only user level code calls this function, 6486 * so nothing interrupt level 6487 * will suddenly eat the receive_queue. 6488 * 6489 * Look at current nfs client by the way... 6490 * However, this function was correct in any case. 8) 6491 */ 6492 if (flags & MSG_PEEK) { 6493 spin_lock_bh(&sk->sk_receive_queue.lock); 6494 skb = skb_peek(&sk->sk_receive_queue); 6495 if (skb) 6496 atomic_inc(&skb->users); 6497 spin_unlock_bh(&sk->sk_receive_queue.lock); 6498 } else { 6499 skb = skb_dequeue(&sk->sk_receive_queue); 6500 } 6501 6502 if (skb) 6503 return skb; 6504 6505 /* Caller is allowed not to check sk->sk_err before calling. */ 6506 error = sock_error(sk); 6507 if (error) 6508 goto no_packet; 6509 6510 if (sk->sk_shutdown & RCV_SHUTDOWN) 6511 break; 6512 6513 /* User doesn't want to wait. */ 6514 error = -EAGAIN; 6515 if (!timeo) 6516 goto no_packet; 6517 } while (sctp_wait_for_packet(sk, err, &timeo) == 0); 6518 6519 return NULL; 6520 6521 no_packet: 6522 *err = error; 6523 return NULL; 6524 } 6525 6526 /* If sndbuf has changed, wake up per association sndbuf waiters. */ 6527 static void __sctp_write_space(struct sctp_association *asoc) 6528 { 6529 struct sock *sk = asoc->base.sk; 6530 struct socket *sock = sk->sk_socket; 6531 6532 if ((sctp_wspace(asoc) > 0) && sock) { 6533 if (waitqueue_active(&asoc->wait)) 6534 wake_up_interruptible(&asoc->wait); 6535 6536 if (sctp_writeable(sk)) { 6537 wait_queue_head_t *wq = sk_sleep(sk); 6538 6539 if (wq && waitqueue_active(wq)) 6540 wake_up_interruptible(wq); 6541 6542 /* Note that we try to include the Async I/O support 6543 * here by modeling from the current TCP/UDP code. 6544 * We have not tested with it yet. 6545 */ 6546 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) 6547 sock_wake_async(sock, 6548 SOCK_WAKE_SPACE, POLL_OUT); 6549 } 6550 } 6551 } 6552 6553 /* Do accounting for the sndbuf space. 6554 * Decrement the used sndbuf space of the corresponding association by the 6555 * data size which was just transmitted(freed). 6556 */ 6557 static void sctp_wfree(struct sk_buff *skb) 6558 { 6559 struct sctp_association *asoc; 6560 struct sctp_chunk *chunk; 6561 struct sock *sk; 6562 6563 /* Get the saved chunk pointer. */ 6564 chunk = *((struct sctp_chunk **)(skb->cb)); 6565 asoc = chunk->asoc; 6566 sk = asoc->base.sk; 6567 asoc->sndbuf_used -= SCTP_DATA_SNDSIZE(chunk) + 6568 sizeof(struct sk_buff) + 6569 sizeof(struct sctp_chunk); 6570 6571 atomic_sub(sizeof(struct sctp_chunk), &sk->sk_wmem_alloc); 6572 6573 /* 6574 * This undoes what is done via sctp_set_owner_w and sk_mem_charge 6575 */ 6576 sk->sk_wmem_queued -= skb->truesize; 6577 sk_mem_uncharge(sk, skb->truesize); 6578 6579 sock_wfree(skb); 6580 __sctp_write_space(asoc); 6581 6582 sctp_association_put(asoc); 6583 } 6584 6585 /* Do accounting for the receive space on the socket. 6586 * Accounting for the association is done in ulpevent.c 6587 * We set this as a destructor for the cloned data skbs so that 6588 * accounting is done at the correct time. 6589 */ 6590 void sctp_sock_rfree(struct sk_buff *skb) 6591 { 6592 struct sock *sk = skb->sk; 6593 struct sctp_ulpevent *event = sctp_skb2event(skb); 6594 6595 atomic_sub(event->rmem_len, &sk->sk_rmem_alloc); 6596 6597 /* 6598 * Mimic the behavior of sock_rfree 6599 */ 6600 sk_mem_uncharge(sk, event->rmem_len); 6601 } 6602 6603 6604 /* Helper function to wait for space in the sndbuf. */ 6605 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p, 6606 size_t msg_len) 6607 { 6608 struct sock *sk = asoc->base.sk; 6609 int err = 0; 6610 long current_timeo = *timeo_p; 6611 DEFINE_WAIT(wait); 6612 6613 SCTP_DEBUG_PRINTK("wait_for_sndbuf: asoc=%p, timeo=%ld, msg_len=%zu\n", 6614 asoc, (long)(*timeo_p), msg_len); 6615 6616 /* Increment the association's refcnt. */ 6617 sctp_association_hold(asoc); 6618 6619 /* Wait on the association specific sndbuf space. */ 6620 for (;;) { 6621 prepare_to_wait_exclusive(&asoc->wait, &wait, 6622 TASK_INTERRUPTIBLE); 6623 if (!*timeo_p) 6624 goto do_nonblock; 6625 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING || 6626 asoc->base.dead) 6627 goto do_error; 6628 if (signal_pending(current)) 6629 goto do_interrupted; 6630 if (msg_len <= sctp_wspace(asoc)) 6631 break; 6632 6633 /* Let another process have a go. Since we are going 6634 * to sleep anyway. 6635 */ 6636 sctp_release_sock(sk); 6637 current_timeo = schedule_timeout(current_timeo); 6638 BUG_ON(sk != asoc->base.sk); 6639 sctp_lock_sock(sk); 6640 6641 *timeo_p = current_timeo; 6642 } 6643 6644 out: 6645 finish_wait(&asoc->wait, &wait); 6646 6647 /* Release the association's refcnt. */ 6648 sctp_association_put(asoc); 6649 6650 return err; 6651 6652 do_error: 6653 err = -EPIPE; 6654 goto out; 6655 6656 do_interrupted: 6657 err = sock_intr_errno(*timeo_p); 6658 goto out; 6659 6660 do_nonblock: 6661 err = -EAGAIN; 6662 goto out; 6663 } 6664 6665 void sctp_data_ready(struct sock *sk, int len) 6666 { 6667 struct socket_wq *wq; 6668 6669 rcu_read_lock(); 6670 wq = rcu_dereference(sk->sk_wq); 6671 if (wq_has_sleeper(wq)) 6672 wake_up_interruptible_sync_poll(&wq->wait, POLLIN | 6673 POLLRDNORM | POLLRDBAND); 6674 sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN); 6675 rcu_read_unlock(); 6676 } 6677 6678 /* If socket sndbuf has changed, wake up all per association waiters. */ 6679 void sctp_write_space(struct sock *sk) 6680 { 6681 struct sctp_association *asoc; 6682 6683 /* Wake up the tasks in each wait queue. */ 6684 list_for_each_entry(asoc, &((sctp_sk(sk))->ep->asocs), asocs) { 6685 __sctp_write_space(asoc); 6686 } 6687 } 6688 6689 /* Is there any sndbuf space available on the socket? 6690 * 6691 * Note that sk_wmem_alloc is the sum of the send buffers on all of the 6692 * associations on the same socket. For a UDP-style socket with 6693 * multiple associations, it is possible for it to be "unwriteable" 6694 * prematurely. I assume that this is acceptable because 6695 * a premature "unwriteable" is better than an accidental "writeable" which 6696 * would cause an unwanted block under certain circumstances. For the 1-1 6697 * UDP-style sockets or TCP-style sockets, this code should work. 6698 * - Daisy 6699 */ 6700 static int sctp_writeable(struct sock *sk) 6701 { 6702 int amt = 0; 6703 6704 amt = sk->sk_sndbuf - sk_wmem_alloc_get(sk); 6705 if (amt < 0) 6706 amt = 0; 6707 return amt; 6708 } 6709 6710 /* Wait for an association to go into ESTABLISHED state. If timeout is 0, 6711 * returns immediately with EINPROGRESS. 6712 */ 6713 static int sctp_wait_for_connect(struct sctp_association *asoc, long *timeo_p) 6714 { 6715 struct sock *sk = asoc->base.sk; 6716 int err = 0; 6717 long current_timeo = *timeo_p; 6718 DEFINE_WAIT(wait); 6719 6720 SCTP_DEBUG_PRINTK("%s: asoc=%p, timeo=%ld\n", __func__, asoc, 6721 (long)(*timeo_p)); 6722 6723 /* Increment the association's refcnt. */ 6724 sctp_association_hold(asoc); 6725 6726 for (;;) { 6727 prepare_to_wait_exclusive(&asoc->wait, &wait, 6728 TASK_INTERRUPTIBLE); 6729 if (!*timeo_p) 6730 goto do_nonblock; 6731 if (sk->sk_shutdown & RCV_SHUTDOWN) 6732 break; 6733 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING || 6734 asoc->base.dead) 6735 goto do_error; 6736 if (signal_pending(current)) 6737 goto do_interrupted; 6738 6739 if (sctp_state(asoc, ESTABLISHED)) 6740 break; 6741 6742 /* Let another process have a go. Since we are going 6743 * to sleep anyway. 6744 */ 6745 sctp_release_sock(sk); 6746 current_timeo = schedule_timeout(current_timeo); 6747 sctp_lock_sock(sk); 6748 6749 *timeo_p = current_timeo; 6750 } 6751 6752 out: 6753 finish_wait(&asoc->wait, &wait); 6754 6755 /* Release the association's refcnt. */ 6756 sctp_association_put(asoc); 6757 6758 return err; 6759 6760 do_error: 6761 if (asoc->init_err_counter + 1 > asoc->max_init_attempts) 6762 err = -ETIMEDOUT; 6763 else 6764 err = -ECONNREFUSED; 6765 goto out; 6766 6767 do_interrupted: 6768 err = sock_intr_errno(*timeo_p); 6769 goto out; 6770 6771 do_nonblock: 6772 err = -EINPROGRESS; 6773 goto out; 6774 } 6775 6776 static int sctp_wait_for_accept(struct sock *sk, long timeo) 6777 { 6778 struct sctp_endpoint *ep; 6779 int err = 0; 6780 DEFINE_WAIT(wait); 6781 6782 ep = sctp_sk(sk)->ep; 6783 6784 6785 for (;;) { 6786 prepare_to_wait_exclusive(sk_sleep(sk), &wait, 6787 TASK_INTERRUPTIBLE); 6788 6789 if (list_empty(&ep->asocs)) { 6790 sctp_release_sock(sk); 6791 timeo = schedule_timeout(timeo); 6792 sctp_lock_sock(sk); 6793 } 6794 6795 err = -EINVAL; 6796 if (!sctp_sstate(sk, LISTENING)) 6797 break; 6798 6799 err = 0; 6800 if (!list_empty(&ep->asocs)) 6801 break; 6802 6803 err = sock_intr_errno(timeo); 6804 if (signal_pending(current)) 6805 break; 6806 6807 err = -EAGAIN; 6808 if (!timeo) 6809 break; 6810 } 6811 6812 finish_wait(sk_sleep(sk), &wait); 6813 6814 return err; 6815 } 6816 6817 static void sctp_wait_for_close(struct sock *sk, long timeout) 6818 { 6819 DEFINE_WAIT(wait); 6820 6821 do { 6822 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); 6823 if (list_empty(&sctp_sk(sk)->ep->asocs)) 6824 break; 6825 sctp_release_sock(sk); 6826 timeout = schedule_timeout(timeout); 6827 sctp_lock_sock(sk); 6828 } while (!signal_pending(current) && timeout); 6829 6830 finish_wait(sk_sleep(sk), &wait); 6831 } 6832 6833 static void sctp_skb_set_owner_r_frag(struct sk_buff *skb, struct sock *sk) 6834 { 6835 struct sk_buff *frag; 6836 6837 if (!skb->data_len) 6838 goto done; 6839 6840 /* Don't forget the fragments. */ 6841 skb_walk_frags(skb, frag) 6842 sctp_skb_set_owner_r_frag(frag, sk); 6843 6844 done: 6845 sctp_skb_set_owner_r(skb, sk); 6846 } 6847 6848 void sctp_copy_sock(struct sock *newsk, struct sock *sk, 6849 struct sctp_association *asoc) 6850 { 6851 struct inet_sock *inet = inet_sk(sk); 6852 struct inet_sock *newinet; 6853 6854 newsk->sk_type = sk->sk_type; 6855 newsk->sk_bound_dev_if = sk->sk_bound_dev_if; 6856 newsk->sk_flags = sk->sk_flags; 6857 newsk->sk_no_check = sk->sk_no_check; 6858 newsk->sk_reuse = sk->sk_reuse; 6859 6860 newsk->sk_shutdown = sk->sk_shutdown; 6861 newsk->sk_destruct = inet_sock_destruct; 6862 newsk->sk_family = sk->sk_family; 6863 newsk->sk_protocol = IPPROTO_SCTP; 6864 newsk->sk_backlog_rcv = sk->sk_prot->backlog_rcv; 6865 newsk->sk_sndbuf = sk->sk_sndbuf; 6866 newsk->sk_rcvbuf = sk->sk_rcvbuf; 6867 newsk->sk_lingertime = sk->sk_lingertime; 6868 newsk->sk_rcvtimeo = sk->sk_rcvtimeo; 6869 newsk->sk_sndtimeo = sk->sk_sndtimeo; 6870 6871 newinet = inet_sk(newsk); 6872 6873 /* Initialize sk's sport, dport, rcv_saddr and daddr for 6874 * getsockname() and getpeername() 6875 */ 6876 newinet->inet_sport = inet->inet_sport; 6877 newinet->inet_saddr = inet->inet_saddr; 6878 newinet->inet_rcv_saddr = inet->inet_rcv_saddr; 6879 newinet->inet_dport = htons(asoc->peer.port); 6880 newinet->pmtudisc = inet->pmtudisc; 6881 newinet->inet_id = asoc->next_tsn ^ jiffies; 6882 6883 newinet->uc_ttl = inet->uc_ttl; 6884 newinet->mc_loop = 1; 6885 newinet->mc_ttl = 1; 6886 newinet->mc_index = 0; 6887 newinet->mc_list = NULL; 6888 } 6889 6890 /* Populate the fields of the newsk from the oldsk and migrate the assoc 6891 * and its messages to the newsk. 6892 */ 6893 static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk, 6894 struct sctp_association *assoc, 6895 sctp_socket_type_t type) 6896 { 6897 struct sctp_sock *oldsp = sctp_sk(oldsk); 6898 struct sctp_sock *newsp = sctp_sk(newsk); 6899 struct sctp_bind_bucket *pp; /* hash list port iterator */ 6900 struct sctp_endpoint *newep = newsp->ep; 6901 struct sk_buff *skb, *tmp; 6902 struct sctp_ulpevent *event; 6903 struct sctp_bind_hashbucket *head; 6904 struct list_head tmplist; 6905 6906 /* Migrate socket buffer sizes and all the socket level options to the 6907 * new socket. 6908 */ 6909 newsk->sk_sndbuf = oldsk->sk_sndbuf; 6910 newsk->sk_rcvbuf = oldsk->sk_rcvbuf; 6911 /* Brute force copy old sctp opt. */ 6912 if (oldsp->do_auto_asconf) { 6913 memcpy(&tmplist, &newsp->auto_asconf_list, sizeof(tmplist)); 6914 inet_sk_copy_descendant(newsk, oldsk); 6915 memcpy(&newsp->auto_asconf_list, &tmplist, sizeof(tmplist)); 6916 } else 6917 inet_sk_copy_descendant(newsk, oldsk); 6918 6919 /* Restore the ep value that was overwritten with the above structure 6920 * copy. 6921 */ 6922 newsp->ep = newep; 6923 newsp->hmac = NULL; 6924 6925 /* Hook this new socket in to the bind_hash list. */ 6926 head = &sctp_port_hashtable[sctp_phashfn(sock_net(oldsk), 6927 inet_sk(oldsk)->inet_num)]; 6928 sctp_local_bh_disable(); 6929 sctp_spin_lock(&head->lock); 6930 pp = sctp_sk(oldsk)->bind_hash; 6931 sk_add_bind_node(newsk, &pp->owner); 6932 sctp_sk(newsk)->bind_hash = pp; 6933 inet_sk(newsk)->inet_num = inet_sk(oldsk)->inet_num; 6934 sctp_spin_unlock(&head->lock); 6935 sctp_local_bh_enable(); 6936 6937 /* Copy the bind_addr list from the original endpoint to the new 6938 * endpoint so that we can handle restarts properly 6939 */ 6940 sctp_bind_addr_dup(&newsp->ep->base.bind_addr, 6941 &oldsp->ep->base.bind_addr, GFP_KERNEL); 6942 6943 /* Move any messages in the old socket's receive queue that are for the 6944 * peeled off association to the new socket's receive queue. 6945 */ 6946 sctp_skb_for_each(skb, &oldsk->sk_receive_queue, tmp) { 6947 event = sctp_skb2event(skb); 6948 if (event->asoc == assoc) { 6949 __skb_unlink(skb, &oldsk->sk_receive_queue); 6950 __skb_queue_tail(&newsk->sk_receive_queue, skb); 6951 sctp_skb_set_owner_r_frag(skb, newsk); 6952 } 6953 } 6954 6955 /* Clean up any messages pending delivery due to partial 6956 * delivery. Three cases: 6957 * 1) No partial deliver; no work. 6958 * 2) Peeling off partial delivery; keep pd_lobby in new pd_lobby. 6959 * 3) Peeling off non-partial delivery; move pd_lobby to receive_queue. 6960 */ 6961 skb_queue_head_init(&newsp->pd_lobby); 6962 atomic_set(&sctp_sk(newsk)->pd_mode, assoc->ulpq.pd_mode); 6963 6964 if (atomic_read(&sctp_sk(oldsk)->pd_mode)) { 6965 struct sk_buff_head *queue; 6966 6967 /* Decide which queue to move pd_lobby skbs to. */ 6968 if (assoc->ulpq.pd_mode) { 6969 queue = &newsp->pd_lobby; 6970 } else 6971 queue = &newsk->sk_receive_queue; 6972 6973 /* Walk through the pd_lobby, looking for skbs that 6974 * need moved to the new socket. 6975 */ 6976 sctp_skb_for_each(skb, &oldsp->pd_lobby, tmp) { 6977 event = sctp_skb2event(skb); 6978 if (event->asoc == assoc) { 6979 __skb_unlink(skb, &oldsp->pd_lobby); 6980 __skb_queue_tail(queue, skb); 6981 sctp_skb_set_owner_r_frag(skb, newsk); 6982 } 6983 } 6984 6985 /* Clear up any skbs waiting for the partial 6986 * delivery to finish. 6987 */ 6988 if (assoc->ulpq.pd_mode) 6989 sctp_clear_pd(oldsk, NULL); 6990 6991 } 6992 6993 sctp_skb_for_each(skb, &assoc->ulpq.reasm, tmp) 6994 sctp_skb_set_owner_r_frag(skb, newsk); 6995 6996 sctp_skb_for_each(skb, &assoc->ulpq.lobby, tmp) 6997 sctp_skb_set_owner_r_frag(skb, newsk); 6998 6999 /* Set the type of socket to indicate that it is peeled off from the 7000 * original UDP-style socket or created with the accept() call on a 7001 * TCP-style socket.. 7002 */ 7003 newsp->type = type; 7004 7005 /* Mark the new socket "in-use" by the user so that any packets 7006 * that may arrive on the association after we've moved it are 7007 * queued to the backlog. This prevents a potential race between 7008 * backlog processing on the old socket and new-packet processing 7009 * on the new socket. 7010 * 7011 * The caller has just allocated newsk so we can guarantee that other 7012 * paths won't try to lock it and then oldsk. 7013 */ 7014 lock_sock_nested(newsk, SINGLE_DEPTH_NESTING); 7015 sctp_assoc_migrate(assoc, newsk); 7016 7017 /* If the association on the newsk is already closed before accept() 7018 * is called, set RCV_SHUTDOWN flag. 7019 */ 7020 if (sctp_state(assoc, CLOSED) && sctp_style(newsk, TCP)) 7021 newsk->sk_shutdown |= RCV_SHUTDOWN; 7022 7023 newsk->sk_state = SCTP_SS_ESTABLISHED; 7024 sctp_release_sock(newsk); 7025 } 7026 7027 7028 /* This proto struct describes the ULP interface for SCTP. */ 7029 struct proto sctp_prot = { 7030 .name = "SCTP", 7031 .owner = THIS_MODULE, 7032 .close = sctp_close, 7033 .connect = sctp_connect, 7034 .disconnect = sctp_disconnect, 7035 .accept = sctp_accept, 7036 .ioctl = sctp_ioctl, 7037 .init = sctp_init_sock, 7038 .destroy = sctp_destroy_sock, 7039 .shutdown = sctp_shutdown, 7040 .setsockopt = sctp_setsockopt, 7041 .getsockopt = sctp_getsockopt, 7042 .sendmsg = sctp_sendmsg, 7043 .recvmsg = sctp_recvmsg, 7044 .bind = sctp_bind, 7045 .backlog_rcv = sctp_backlog_rcv, 7046 .hash = sctp_hash, 7047 .unhash = sctp_unhash, 7048 .get_port = sctp_get_port, 7049 .obj_size = sizeof(struct sctp_sock), 7050 .sysctl_mem = sysctl_sctp_mem, 7051 .sysctl_rmem = sysctl_sctp_rmem, 7052 .sysctl_wmem = sysctl_sctp_wmem, 7053 .memory_pressure = &sctp_memory_pressure, 7054 .enter_memory_pressure = sctp_enter_memory_pressure, 7055 .memory_allocated = &sctp_memory_allocated, 7056 .sockets_allocated = &sctp_sockets_allocated, 7057 }; 7058 7059 #if IS_ENABLED(CONFIG_IPV6) 7060 7061 struct proto sctpv6_prot = { 7062 .name = "SCTPv6", 7063 .owner = THIS_MODULE, 7064 .close = sctp_close, 7065 .connect = sctp_connect, 7066 .disconnect = sctp_disconnect, 7067 .accept = sctp_accept, 7068 .ioctl = sctp_ioctl, 7069 .init = sctp_init_sock, 7070 .destroy = sctp_destroy_sock, 7071 .shutdown = sctp_shutdown, 7072 .setsockopt = sctp_setsockopt, 7073 .getsockopt = sctp_getsockopt, 7074 .sendmsg = sctp_sendmsg, 7075 .recvmsg = sctp_recvmsg, 7076 .bind = sctp_bind, 7077 .backlog_rcv = sctp_backlog_rcv, 7078 .hash = sctp_hash, 7079 .unhash = sctp_unhash, 7080 .get_port = sctp_get_port, 7081 .obj_size = sizeof(struct sctp6_sock), 7082 .sysctl_mem = sysctl_sctp_mem, 7083 .sysctl_rmem = sysctl_sctp_rmem, 7084 .sysctl_wmem = sysctl_sctp_wmem, 7085 .memory_pressure = &sctp_memory_pressure, 7086 .enter_memory_pressure = sctp_enter_memory_pressure, 7087 .memory_allocated = &sctp_memory_allocated, 7088 .sockets_allocated = &sctp_sockets_allocated, 7089 }; 7090 #endif /* IS_ENABLED(CONFIG_IPV6) */ 7091