1 /* SCTP kernel reference 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 reference 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 * The SCTP reference 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 * The SCTP reference implementation is distributed in the hope that it 25 * will be useful, but WITHOUT ANY WARRANTY; without even the implied 26 * ************************ 27 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 28 * See the GNU General Public License for more details. 29 * 30 * You should have received a copy of the GNU General Public License 31 * along with GNU CC; see the file COPYING. If not, write to 32 * the Free Software Foundation, 59 Temple Place - Suite 330, 33 * Boston, MA 02111-1307, USA. 34 * 35 * Please send any bug reports or fixes you make to the 36 * email address(es): 37 * lksctp developers <lksctp-developers@lists.sourceforge.net> 38 * 39 * Or submit a bug report through the following website: 40 * http://www.sf.net/projects/lksctp 41 * 42 * Written or modified by: 43 * La Monte H.P. Yarroll <piggy@acm.org> 44 * Narasimha Budihal <narsi@refcode.org> 45 * Karl Knutson <karl@athena.chicago.il.us> 46 * Jon Grimm <jgrimm@us.ibm.com> 47 * Xingang Guo <xingang.guo@intel.com> 48 * Daisy Chang <daisyc@us.ibm.com> 49 * Sridhar Samudrala <samudrala@us.ibm.com> 50 * Inaky Perez-Gonzalez <inaky.gonzalez@intel.com> 51 * Ardelle Fan <ardelle.fan@intel.com> 52 * Ryan Layer <rmlayer@us.ibm.com> 53 * Anup Pemmaiah <pemmaiah@cc.usu.edu> 54 * Kevin Gao <kevin.gao@intel.com> 55 * 56 * Any bugs reported given to us we will try to fix... any fixes shared will 57 * be incorporated into the next SCTP release. 58 */ 59 60 #include <linux/config.h> 61 #include <linux/types.h> 62 #include <linux/kernel.h> 63 #include <linux/wait.h> 64 #include <linux/time.h> 65 #include <linux/ip.h> 66 #include <linux/capability.h> 67 #include <linux/fcntl.h> 68 #include <linux/poll.h> 69 #include <linux/init.h> 70 #include <linux/crypto.h> 71 72 #include <net/ip.h> 73 #include <net/icmp.h> 74 #include <net/route.h> 75 #include <net/ipv6.h> 76 #include <net/inet_common.h> 77 78 #include <linux/socket.h> /* for sa_family_t */ 79 #include <net/sock.h> 80 #include <net/sctp/sctp.h> 81 #include <net/sctp/sm.h> 82 83 /* WARNING: Please do not remove the SCTP_STATIC attribute to 84 * any of the functions below as they are used to export functions 85 * used by a project regression testsuite. 86 */ 87 88 /* Forward declarations for internal helper functions. */ 89 static int sctp_writeable(struct sock *sk); 90 static void sctp_wfree(struct sk_buff *skb); 91 static int sctp_wait_for_sndbuf(struct sctp_association *, long *timeo_p, 92 size_t msg_len); 93 static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p); 94 static int sctp_wait_for_connect(struct sctp_association *, long *timeo_p); 95 static int sctp_wait_for_accept(struct sock *sk, long timeo); 96 static void sctp_wait_for_close(struct sock *sk, long timeo); 97 static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt, 98 union sctp_addr *addr, int len); 99 static int sctp_bindx_add(struct sock *, struct sockaddr *, int); 100 static int sctp_bindx_rem(struct sock *, struct sockaddr *, int); 101 static int sctp_send_asconf_add_ip(struct sock *, struct sockaddr *, int); 102 static int sctp_send_asconf_del_ip(struct sock *, struct sockaddr *, int); 103 static int sctp_send_asconf(struct sctp_association *asoc, 104 struct sctp_chunk *chunk); 105 static int sctp_do_bind(struct sock *, union sctp_addr *, int); 106 static int sctp_autobind(struct sock *sk); 107 static void sctp_sock_migrate(struct sock *, struct sock *, 108 struct sctp_association *, sctp_socket_type_t); 109 static char *sctp_hmac_alg = SCTP_COOKIE_HMAC_ALG; 110 111 extern kmem_cache_t *sctp_bucket_cachep; 112 113 /* Get the sndbuf space available at the time on the association. */ 114 static inline int sctp_wspace(struct sctp_association *asoc) 115 { 116 struct sock *sk = asoc->base.sk; 117 int amt = 0; 118 119 if (asoc->ep->sndbuf_policy) { 120 /* make sure that no association uses more than sk_sndbuf */ 121 amt = sk->sk_sndbuf - asoc->sndbuf_used; 122 } else { 123 /* do socket level accounting */ 124 amt = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc); 125 } 126 127 if (amt < 0) 128 amt = 0; 129 130 return amt; 131 } 132 133 /* Increment the used sndbuf space count of the corresponding association by 134 * the size of the outgoing data chunk. 135 * Also, set the skb destructor for sndbuf accounting later. 136 * 137 * Since it is always 1-1 between chunk and skb, and also a new skb is always 138 * allocated for chunk bundling in sctp_packet_transmit(), we can use the 139 * destructor in the data chunk skb for the purpose of the sndbuf space 140 * tracking. 141 */ 142 static inline void sctp_set_owner_w(struct sctp_chunk *chunk) 143 { 144 struct sctp_association *asoc = chunk->asoc; 145 struct sock *sk = asoc->base.sk; 146 147 /* The sndbuf space is tracked per association. */ 148 sctp_association_hold(asoc); 149 150 skb_set_owner_w(chunk->skb, sk); 151 152 chunk->skb->destructor = sctp_wfree; 153 /* Save the chunk pointer in skb for sctp_wfree to use later. */ 154 *((struct sctp_chunk **)(chunk->skb->cb)) = chunk; 155 156 asoc->sndbuf_used += SCTP_DATA_SNDSIZE(chunk) + 157 sizeof(struct sk_buff) + 158 sizeof(struct sctp_chunk); 159 160 atomic_add(sizeof(struct sctp_chunk), &sk->sk_wmem_alloc); 161 } 162 163 /* Verify that this is a valid address. */ 164 static inline int sctp_verify_addr(struct sock *sk, union sctp_addr *addr, 165 int len) 166 { 167 struct sctp_af *af; 168 169 /* Verify basic sockaddr. */ 170 af = sctp_sockaddr_af(sctp_sk(sk), addr, len); 171 if (!af) 172 return -EINVAL; 173 174 /* Is this a valid SCTP address? */ 175 if (!af->addr_valid(addr, sctp_sk(sk), NULL)) 176 return -EINVAL; 177 178 if (!sctp_sk(sk)->pf->send_verify(sctp_sk(sk), (addr))) 179 return -EINVAL; 180 181 return 0; 182 } 183 184 /* Look up the association by its id. If this is not a UDP-style 185 * socket, the ID field is always ignored. 186 */ 187 struct sctp_association *sctp_id2assoc(struct sock *sk, sctp_assoc_t id) 188 { 189 struct sctp_association *asoc = NULL; 190 191 /* If this is not a UDP-style socket, assoc id should be ignored. */ 192 if (!sctp_style(sk, UDP)) { 193 /* Return NULL if the socket state is not ESTABLISHED. It 194 * could be a TCP-style listening socket or a socket which 195 * hasn't yet called connect() to establish an association. 196 */ 197 if (!sctp_sstate(sk, ESTABLISHED)) 198 return NULL; 199 200 /* Get the first and the only association from the list. */ 201 if (!list_empty(&sctp_sk(sk)->ep->asocs)) 202 asoc = list_entry(sctp_sk(sk)->ep->asocs.next, 203 struct sctp_association, asocs); 204 return asoc; 205 } 206 207 /* Otherwise this is a UDP-style socket. */ 208 if (!id || (id == (sctp_assoc_t)-1)) 209 return NULL; 210 211 spin_lock_bh(&sctp_assocs_id_lock); 212 asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id); 213 spin_unlock_bh(&sctp_assocs_id_lock); 214 215 if (!asoc || (asoc->base.sk != sk) || asoc->base.dead) 216 return NULL; 217 218 return asoc; 219 } 220 221 /* Look up the transport from an address and an assoc id. If both address and 222 * id are specified, the associations matching the address and the id should be 223 * the same. 224 */ 225 static struct sctp_transport *sctp_addr_id2transport(struct sock *sk, 226 struct sockaddr_storage *addr, 227 sctp_assoc_t id) 228 { 229 struct sctp_association *addr_asoc = NULL, *id_asoc = NULL; 230 struct sctp_transport *transport; 231 union sctp_addr *laddr = (union sctp_addr *)addr; 232 233 laddr->v4.sin_port = ntohs(laddr->v4.sin_port); 234 addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep, 235 (union sctp_addr *)addr, 236 &transport); 237 laddr->v4.sin_port = htons(laddr->v4.sin_port); 238 239 if (!addr_asoc) 240 return NULL; 241 242 id_asoc = sctp_id2assoc(sk, id); 243 if (id_asoc && (id_asoc != addr_asoc)) 244 return NULL; 245 246 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), 247 (union sctp_addr *)addr); 248 249 return transport; 250 } 251 252 /* API 3.1.2 bind() - UDP Style Syntax 253 * The syntax of bind() is, 254 * 255 * ret = bind(int sd, struct sockaddr *addr, int addrlen); 256 * 257 * sd - the socket descriptor returned by socket(). 258 * addr - the address structure (struct sockaddr_in or struct 259 * sockaddr_in6 [RFC 2553]), 260 * addr_len - the size of the address structure. 261 */ 262 SCTP_STATIC int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len) 263 { 264 int retval = 0; 265 266 sctp_lock_sock(sk); 267 268 SCTP_DEBUG_PRINTK("sctp_bind(sk: %p, addr: %p, addr_len: %d)\n", 269 sk, addr, addr_len); 270 271 /* Disallow binding twice. */ 272 if (!sctp_sk(sk)->ep->base.bind_addr.port) 273 retval = sctp_do_bind(sk, (union sctp_addr *)addr, 274 addr_len); 275 else 276 retval = -EINVAL; 277 278 sctp_release_sock(sk); 279 280 return retval; 281 } 282 283 static long sctp_get_port_local(struct sock *, union sctp_addr *); 284 285 /* Verify this is a valid sockaddr. */ 286 static struct sctp_af *sctp_sockaddr_af(struct sctp_sock *opt, 287 union sctp_addr *addr, int len) 288 { 289 struct sctp_af *af; 290 291 /* Check minimum size. */ 292 if (len < sizeof (struct sockaddr)) 293 return NULL; 294 295 /* Does this PF support this AF? */ 296 if (!opt->pf->af_supported(addr->sa.sa_family, opt)) 297 return NULL; 298 299 /* If we get this far, af is valid. */ 300 af = sctp_get_af_specific(addr->sa.sa_family); 301 302 if (len < af->sockaddr_len) 303 return NULL; 304 305 return af; 306 } 307 308 /* Bind a local address either to an endpoint or to an association. */ 309 SCTP_STATIC int sctp_do_bind(struct sock *sk, union sctp_addr *addr, int len) 310 { 311 struct sctp_sock *sp = sctp_sk(sk); 312 struct sctp_endpoint *ep = sp->ep; 313 struct sctp_bind_addr *bp = &ep->base.bind_addr; 314 struct sctp_af *af; 315 unsigned short snum; 316 int ret = 0; 317 318 /* Common sockaddr verification. */ 319 af = sctp_sockaddr_af(sp, addr, len); 320 if (!af) { 321 SCTP_DEBUG_PRINTK("sctp_do_bind(sk: %p, newaddr: %p, len: %d) EINVAL\n", 322 sk, addr, len); 323 return -EINVAL; 324 } 325 326 snum = ntohs(addr->v4.sin_port); 327 328 SCTP_DEBUG_PRINTK_IPADDR("sctp_do_bind(sk: %p, new addr: ", 329 ", port: %d, new port: %d, len: %d)\n", 330 sk, 331 addr, 332 bp->port, snum, 333 len); 334 335 /* PF specific bind() address verification. */ 336 if (!sp->pf->bind_verify(sp, addr)) 337 return -EADDRNOTAVAIL; 338 339 /* We must either be unbound, or bind to the same port. */ 340 if (bp->port && (snum != bp->port)) { 341 SCTP_DEBUG_PRINTK("sctp_do_bind:" 342 " New port %d does not match existing port " 343 "%d.\n", snum, bp->port); 344 return -EINVAL; 345 } 346 347 if (snum && snum < PROT_SOCK && !capable(CAP_NET_BIND_SERVICE)) 348 return -EACCES; 349 350 /* Make sure we are allowed to bind here. 351 * The function sctp_get_port_local() does duplicate address 352 * detection. 353 */ 354 if ((ret = sctp_get_port_local(sk, addr))) { 355 if (ret == (long) sk) { 356 /* This endpoint has a conflicting address. */ 357 return -EINVAL; 358 } else { 359 return -EADDRINUSE; 360 } 361 } 362 363 /* Refresh ephemeral port. */ 364 if (!bp->port) 365 bp->port = inet_sk(sk)->num; 366 367 /* Add the address to the bind address list. */ 368 sctp_local_bh_disable(); 369 sctp_write_lock(&ep->base.addr_lock); 370 371 /* Use GFP_ATOMIC since BHs are disabled. */ 372 addr->v4.sin_port = ntohs(addr->v4.sin_port); 373 ret = sctp_add_bind_addr(bp, addr, GFP_ATOMIC); 374 addr->v4.sin_port = htons(addr->v4.sin_port); 375 sctp_write_unlock(&ep->base.addr_lock); 376 sctp_local_bh_enable(); 377 378 /* Copy back into socket for getsockname() use. */ 379 if (!ret) { 380 inet_sk(sk)->sport = htons(inet_sk(sk)->num); 381 af->to_sk_saddr(addr, sk); 382 } 383 384 return ret; 385 } 386 387 /* ADDIP Section 4.1.1 Congestion Control of ASCONF Chunks 388 * 389 * R1) One and only one ASCONF Chunk MAY be in transit and unacknowledged 390 * at any one time. If a sender, after sending an ASCONF chunk, decides 391 * it needs to transfer another ASCONF Chunk, it MUST wait until the 392 * ASCONF-ACK Chunk returns from the previous ASCONF Chunk before sending a 393 * subsequent ASCONF. Note this restriction binds each side, so at any 394 * time two ASCONF may be in-transit on any given association (one sent 395 * from each endpoint). 396 */ 397 static int sctp_send_asconf(struct sctp_association *asoc, 398 struct sctp_chunk *chunk) 399 { 400 int retval = 0; 401 402 /* If there is an outstanding ASCONF chunk, queue it for later 403 * transmission. 404 */ 405 if (asoc->addip_last_asconf) { 406 list_add_tail(&chunk->list, &asoc->addip_chunk_list); 407 goto out; 408 } 409 410 /* Hold the chunk until an ASCONF_ACK is received. */ 411 sctp_chunk_hold(chunk); 412 retval = sctp_primitive_ASCONF(asoc, chunk); 413 if (retval) 414 sctp_chunk_free(chunk); 415 else 416 asoc->addip_last_asconf = chunk; 417 418 out: 419 return retval; 420 } 421 422 /* Add a list of addresses as bind addresses to local endpoint or 423 * association. 424 * 425 * Basically run through each address specified in the addrs/addrcnt 426 * array/length pair, determine if it is IPv6 or IPv4 and call 427 * sctp_do_bind() on it. 428 * 429 * If any of them fails, then the operation will be reversed and the 430 * ones that were added will be removed. 431 * 432 * Only sctp_setsockopt_bindx() is supposed to call this function. 433 */ 434 int sctp_bindx_add(struct sock *sk, struct sockaddr *addrs, int addrcnt) 435 { 436 int cnt; 437 int retval = 0; 438 void *addr_buf; 439 struct sockaddr *sa_addr; 440 struct sctp_af *af; 441 442 SCTP_DEBUG_PRINTK("sctp_bindx_add (sk: %p, addrs: %p, addrcnt: %d)\n", 443 sk, addrs, addrcnt); 444 445 addr_buf = addrs; 446 for (cnt = 0; cnt < addrcnt; cnt++) { 447 /* The list may contain either IPv4 or IPv6 address; 448 * determine the address length for walking thru the list. 449 */ 450 sa_addr = (struct sockaddr *)addr_buf; 451 af = sctp_get_af_specific(sa_addr->sa_family); 452 if (!af) { 453 retval = -EINVAL; 454 goto err_bindx_add; 455 } 456 457 retval = sctp_do_bind(sk, (union sctp_addr *)sa_addr, 458 af->sockaddr_len); 459 460 addr_buf += af->sockaddr_len; 461 462 err_bindx_add: 463 if (retval < 0) { 464 /* Failed. Cleanup the ones that have been added */ 465 if (cnt > 0) 466 sctp_bindx_rem(sk, addrs, cnt); 467 return retval; 468 } 469 } 470 471 return retval; 472 } 473 474 /* Send an ASCONF chunk with Add IP address parameters to all the peers of the 475 * associations that are part of the endpoint indicating that a list of local 476 * addresses are added to the endpoint. 477 * 478 * If any of the addresses is already in the bind address list of the 479 * association, we do not send the chunk for that association. But it will not 480 * affect other associations. 481 * 482 * Only sctp_setsockopt_bindx() is supposed to call this function. 483 */ 484 static int sctp_send_asconf_add_ip(struct sock *sk, 485 struct sockaddr *addrs, 486 int addrcnt) 487 { 488 struct sctp_sock *sp; 489 struct sctp_endpoint *ep; 490 struct sctp_association *asoc; 491 struct sctp_bind_addr *bp; 492 struct sctp_chunk *chunk; 493 struct sctp_sockaddr_entry *laddr; 494 union sctp_addr *addr; 495 void *addr_buf; 496 struct sctp_af *af; 497 struct list_head *pos; 498 struct list_head *p; 499 int i; 500 int retval = 0; 501 502 if (!sctp_addip_enable) 503 return retval; 504 505 sp = sctp_sk(sk); 506 ep = sp->ep; 507 508 SCTP_DEBUG_PRINTK("%s: (sk: %p, addrs: %p, addrcnt: %d)\n", 509 __FUNCTION__, sk, addrs, addrcnt); 510 511 list_for_each(pos, &ep->asocs) { 512 asoc = list_entry(pos, struct sctp_association, asocs); 513 514 if (!asoc->peer.asconf_capable) 515 continue; 516 517 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_ADD_IP) 518 continue; 519 520 if (!sctp_state(asoc, ESTABLISHED)) 521 continue; 522 523 /* Check if any address in the packed array of addresses is 524 * in the bind address list of the association. If so, 525 * do not send the asconf chunk to its peer, but continue with 526 * other associations. 527 */ 528 addr_buf = addrs; 529 for (i = 0; i < addrcnt; i++) { 530 addr = (union sctp_addr *)addr_buf; 531 af = sctp_get_af_specific(addr->v4.sin_family); 532 if (!af) { 533 retval = -EINVAL; 534 goto out; 535 } 536 537 if (sctp_assoc_lookup_laddr(asoc, addr)) 538 break; 539 540 addr_buf += af->sockaddr_len; 541 } 542 if (i < addrcnt) 543 continue; 544 545 /* Use the first address in bind addr list of association as 546 * Address Parameter of ASCONF CHUNK. 547 */ 548 sctp_read_lock(&asoc->base.addr_lock); 549 bp = &asoc->base.bind_addr; 550 p = bp->address_list.next; 551 laddr = list_entry(p, struct sctp_sockaddr_entry, list); 552 sctp_read_unlock(&asoc->base.addr_lock); 553 554 chunk = sctp_make_asconf_update_ip(asoc, &laddr->a, addrs, 555 addrcnt, SCTP_PARAM_ADD_IP); 556 if (!chunk) { 557 retval = -ENOMEM; 558 goto out; 559 } 560 561 retval = sctp_send_asconf(asoc, chunk); 562 563 /* FIXME: After sending the add address ASCONF chunk, we 564 * cannot append the address to the association's binding 565 * address list, because the new address may be used as the 566 * source of a message sent to the peer before the ASCONF 567 * chunk is received by the peer. So we should wait until 568 * ASCONF_ACK is received. 569 */ 570 } 571 572 out: 573 return retval; 574 } 575 576 /* Remove a list of addresses from bind addresses list. Do not remove the 577 * last address. 578 * 579 * Basically run through each address specified in the addrs/addrcnt 580 * array/length pair, determine if it is IPv6 or IPv4 and call 581 * sctp_del_bind() on it. 582 * 583 * If any of them fails, then the operation will be reversed and the 584 * ones that were removed will be added back. 585 * 586 * At least one address has to be left; if only one address is 587 * available, the operation will return -EBUSY. 588 * 589 * Only sctp_setsockopt_bindx() is supposed to call this function. 590 */ 591 int sctp_bindx_rem(struct sock *sk, struct sockaddr *addrs, int addrcnt) 592 { 593 struct sctp_sock *sp = sctp_sk(sk); 594 struct sctp_endpoint *ep = sp->ep; 595 int cnt; 596 struct sctp_bind_addr *bp = &ep->base.bind_addr; 597 int retval = 0; 598 union sctp_addr saveaddr; 599 void *addr_buf; 600 struct sockaddr *sa_addr; 601 struct sctp_af *af; 602 603 SCTP_DEBUG_PRINTK("sctp_bindx_rem (sk: %p, addrs: %p, addrcnt: %d)\n", 604 sk, addrs, addrcnt); 605 606 addr_buf = addrs; 607 for (cnt = 0; cnt < addrcnt; cnt++) { 608 /* If the bind address list is empty or if there is only one 609 * bind address, there is nothing more to be removed (we need 610 * at least one address here). 611 */ 612 if (list_empty(&bp->address_list) || 613 (sctp_list_single_entry(&bp->address_list))) { 614 retval = -EBUSY; 615 goto err_bindx_rem; 616 } 617 618 /* The list may contain either IPv4 or IPv6 address; 619 * determine the address length to copy the address to 620 * saveaddr. 621 */ 622 sa_addr = (struct sockaddr *)addr_buf; 623 af = sctp_get_af_specific(sa_addr->sa_family); 624 if (!af) { 625 retval = -EINVAL; 626 goto err_bindx_rem; 627 } 628 memcpy(&saveaddr, sa_addr, af->sockaddr_len); 629 saveaddr.v4.sin_port = ntohs(saveaddr.v4.sin_port); 630 if (saveaddr.v4.sin_port != bp->port) { 631 retval = -EINVAL; 632 goto err_bindx_rem; 633 } 634 635 /* FIXME - There is probably a need to check if sk->sk_saddr and 636 * sk->sk_rcv_addr are currently set to one of the addresses to 637 * be removed. This is something which needs to be looked into 638 * when we are fixing the outstanding issues with multi-homing 639 * socket routing and failover schemes. Refer to comments in 640 * sctp_do_bind(). -daisy 641 */ 642 sctp_local_bh_disable(); 643 sctp_write_lock(&ep->base.addr_lock); 644 645 retval = sctp_del_bind_addr(bp, &saveaddr); 646 647 sctp_write_unlock(&ep->base.addr_lock); 648 sctp_local_bh_enable(); 649 650 addr_buf += af->sockaddr_len; 651 err_bindx_rem: 652 if (retval < 0) { 653 /* Failed. Add the ones that has been removed back */ 654 if (cnt > 0) 655 sctp_bindx_add(sk, addrs, cnt); 656 return retval; 657 } 658 } 659 660 return retval; 661 } 662 663 /* Send an ASCONF chunk with Delete IP address parameters to all the peers of 664 * the associations that are part of the endpoint indicating that a list of 665 * local addresses are removed from the endpoint. 666 * 667 * If any of the addresses is already in the bind address list of the 668 * association, we do not send the chunk for that association. But it will not 669 * affect other associations. 670 * 671 * Only sctp_setsockopt_bindx() is supposed to call this function. 672 */ 673 static int sctp_send_asconf_del_ip(struct sock *sk, 674 struct sockaddr *addrs, 675 int addrcnt) 676 { 677 struct sctp_sock *sp; 678 struct sctp_endpoint *ep; 679 struct sctp_association *asoc; 680 struct sctp_bind_addr *bp; 681 struct sctp_chunk *chunk; 682 union sctp_addr *laddr; 683 void *addr_buf; 684 struct sctp_af *af; 685 struct list_head *pos; 686 int i; 687 int retval = 0; 688 689 if (!sctp_addip_enable) 690 return retval; 691 692 sp = sctp_sk(sk); 693 ep = sp->ep; 694 695 SCTP_DEBUG_PRINTK("%s: (sk: %p, addrs: %p, addrcnt: %d)\n", 696 __FUNCTION__, sk, addrs, addrcnt); 697 698 list_for_each(pos, &ep->asocs) { 699 asoc = list_entry(pos, struct sctp_association, asocs); 700 701 if (!asoc->peer.asconf_capable) 702 continue; 703 704 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_DEL_IP) 705 continue; 706 707 if (!sctp_state(asoc, ESTABLISHED)) 708 continue; 709 710 /* Check if any address in the packed array of addresses is 711 * not present in the bind address list of the association. 712 * If so, do not send the asconf chunk to its peer, but 713 * continue with other associations. 714 */ 715 addr_buf = addrs; 716 for (i = 0; i < addrcnt; i++) { 717 laddr = (union sctp_addr *)addr_buf; 718 af = sctp_get_af_specific(laddr->v4.sin_family); 719 if (!af) { 720 retval = -EINVAL; 721 goto out; 722 } 723 724 if (!sctp_assoc_lookup_laddr(asoc, laddr)) 725 break; 726 727 addr_buf += af->sockaddr_len; 728 } 729 if (i < addrcnt) 730 continue; 731 732 /* Find one address in the association's bind address list 733 * that is not in the packed array of addresses. This is to 734 * make sure that we do not delete all the addresses in the 735 * association. 736 */ 737 sctp_read_lock(&asoc->base.addr_lock); 738 bp = &asoc->base.bind_addr; 739 laddr = sctp_find_unmatch_addr(bp, (union sctp_addr *)addrs, 740 addrcnt, sp); 741 sctp_read_unlock(&asoc->base.addr_lock); 742 if (!laddr) 743 continue; 744 745 chunk = sctp_make_asconf_update_ip(asoc, laddr, addrs, addrcnt, 746 SCTP_PARAM_DEL_IP); 747 if (!chunk) { 748 retval = -ENOMEM; 749 goto out; 750 } 751 752 retval = sctp_send_asconf(asoc, chunk); 753 754 /* FIXME: After sending the delete address ASCONF chunk, we 755 * cannot remove the addresses from the association's bind 756 * address list, because there maybe some packet send to 757 * the delete addresses, so we should wait until ASCONF_ACK 758 * packet is received. 759 */ 760 } 761 out: 762 return retval; 763 } 764 765 /* Helper for tunneling sctp_bindx() requests through sctp_setsockopt() 766 * 767 * API 8.1 768 * int sctp_bindx(int sd, struct sockaddr *addrs, int addrcnt, 769 * int flags); 770 * 771 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses. 772 * If the sd is an IPv6 socket, the addresses passed can either be IPv4 773 * or IPv6 addresses. 774 * 775 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see 776 * Section 3.1.2 for this usage. 777 * 778 * addrs is a pointer to an array of one or more socket addresses. Each 779 * address is contained in its appropriate structure (i.e. struct 780 * sockaddr_in or struct sockaddr_in6) the family of the address type 781 * must be used to distengish the address length (note that this 782 * representation is termed a "packed array" of addresses). The caller 783 * specifies the number of addresses in the array with addrcnt. 784 * 785 * On success, sctp_bindx() returns 0. On failure, sctp_bindx() returns 786 * -1, and sets errno to the appropriate error code. 787 * 788 * For SCTP, the port given in each socket address must be the same, or 789 * sctp_bindx() will fail, setting errno to EINVAL. 790 * 791 * The flags parameter is formed from the bitwise OR of zero or more of 792 * the following currently defined flags: 793 * 794 * SCTP_BINDX_ADD_ADDR 795 * 796 * SCTP_BINDX_REM_ADDR 797 * 798 * SCTP_BINDX_ADD_ADDR directs SCTP to add the given addresses to the 799 * association, and SCTP_BINDX_REM_ADDR directs SCTP to remove the given 800 * addresses from the association. The two flags are mutually exclusive; 801 * if both are given, sctp_bindx() will fail with EINVAL. A caller may 802 * not remove all addresses from an association; sctp_bindx() will 803 * reject such an attempt with EINVAL. 804 * 805 * An application can use sctp_bindx(SCTP_BINDX_ADD_ADDR) to associate 806 * additional addresses with an endpoint after calling bind(). Or use 807 * sctp_bindx(SCTP_BINDX_REM_ADDR) to remove some addresses a listening 808 * socket is associated with so that no new association accepted will be 809 * associated with those addresses. If the endpoint supports dynamic 810 * address a SCTP_BINDX_REM_ADDR or SCTP_BINDX_ADD_ADDR may cause a 811 * endpoint to send the appropriate message to the peer to change the 812 * peers address lists. 813 * 814 * Adding and removing addresses from a connected association is 815 * optional functionality. Implementations that do not support this 816 * functionality should return EOPNOTSUPP. 817 * 818 * Basically do nothing but copying the addresses from user to kernel 819 * land and invoking either sctp_bindx_add() or sctp_bindx_rem() on the sk. 820 * This is used for tunneling the sctp_bindx() request through sctp_setsockopt() 821 * from userspace. 822 * 823 * We don't use copy_from_user() for optimization: we first do the 824 * sanity checks (buffer size -fast- and access check-healthy 825 * pointer); if all of those succeed, then we can alloc the memory 826 * (expensive operation) needed to copy the data to kernel. Then we do 827 * the copying without checking the user space area 828 * (__copy_from_user()). 829 * 830 * On exit there is no need to do sockfd_put(), sys_setsockopt() does 831 * it. 832 * 833 * sk The sk of the socket 834 * addrs The pointer to the addresses in user land 835 * addrssize Size of the addrs buffer 836 * op Operation to perform (add or remove, see the flags of 837 * sctp_bindx) 838 * 839 * Returns 0 if ok, <0 errno code on error. 840 */ 841 SCTP_STATIC int sctp_setsockopt_bindx(struct sock* sk, 842 struct sockaddr __user *addrs, 843 int addrs_size, int op) 844 { 845 struct sockaddr *kaddrs; 846 int err; 847 int addrcnt = 0; 848 int walk_size = 0; 849 struct sockaddr *sa_addr; 850 void *addr_buf; 851 struct sctp_af *af; 852 853 SCTP_DEBUG_PRINTK("sctp_setsocktopt_bindx: sk %p addrs %p" 854 " addrs_size %d opt %d\n", sk, addrs, addrs_size, op); 855 856 if (unlikely(addrs_size <= 0)) 857 return -EINVAL; 858 859 /* Check the user passed a healthy pointer. */ 860 if (unlikely(!access_ok(VERIFY_READ, addrs, addrs_size))) 861 return -EFAULT; 862 863 /* Alloc space for the address array in kernel memory. */ 864 kaddrs = kmalloc(addrs_size, GFP_KERNEL); 865 if (unlikely(!kaddrs)) 866 return -ENOMEM; 867 868 if (__copy_from_user(kaddrs, addrs, addrs_size)) { 869 kfree(kaddrs); 870 return -EFAULT; 871 } 872 873 /* Walk through the addrs buffer and count the number of addresses. */ 874 addr_buf = kaddrs; 875 while (walk_size < addrs_size) { 876 sa_addr = (struct sockaddr *)addr_buf; 877 af = sctp_get_af_specific(sa_addr->sa_family); 878 879 /* If the address family is not supported or if this address 880 * causes the address buffer to overflow return EINVAL. 881 */ 882 if (!af || (walk_size + af->sockaddr_len) > addrs_size) { 883 kfree(kaddrs); 884 return -EINVAL; 885 } 886 addrcnt++; 887 addr_buf += af->sockaddr_len; 888 walk_size += af->sockaddr_len; 889 } 890 891 /* Do the work. */ 892 switch (op) { 893 case SCTP_BINDX_ADD_ADDR: 894 err = sctp_bindx_add(sk, kaddrs, addrcnt); 895 if (err) 896 goto out; 897 err = sctp_send_asconf_add_ip(sk, kaddrs, addrcnt); 898 break; 899 900 case SCTP_BINDX_REM_ADDR: 901 err = sctp_bindx_rem(sk, kaddrs, addrcnt); 902 if (err) 903 goto out; 904 err = sctp_send_asconf_del_ip(sk, kaddrs, addrcnt); 905 break; 906 907 default: 908 err = -EINVAL; 909 break; 910 }; 911 912 out: 913 kfree(kaddrs); 914 915 return err; 916 } 917 918 /* __sctp_connect(struct sock* sk, struct sockaddr *kaddrs, int addrs_size) 919 * 920 * Common routine for handling connect() and sctp_connectx(). 921 * Connect will come in with just a single address. 922 */ 923 static int __sctp_connect(struct sock* sk, 924 struct sockaddr *kaddrs, 925 int addrs_size) 926 { 927 struct sctp_sock *sp; 928 struct sctp_endpoint *ep; 929 struct sctp_association *asoc = NULL; 930 struct sctp_association *asoc2; 931 struct sctp_transport *transport; 932 union sctp_addr to; 933 struct sctp_af *af; 934 sctp_scope_t scope; 935 long timeo; 936 int err = 0; 937 int addrcnt = 0; 938 int walk_size = 0; 939 struct sockaddr *sa_addr; 940 void *addr_buf; 941 942 sp = sctp_sk(sk); 943 ep = sp->ep; 944 945 /* connect() cannot be done on a socket that is already in ESTABLISHED 946 * state - UDP-style peeled off socket or a TCP-style socket that 947 * is already connected. 948 * It cannot be done even on a TCP-style listening socket. 949 */ 950 if (sctp_sstate(sk, ESTABLISHED) || 951 (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))) { 952 err = -EISCONN; 953 goto out_free; 954 } 955 956 /* Walk through the addrs buffer and count the number of addresses. */ 957 addr_buf = kaddrs; 958 while (walk_size < addrs_size) { 959 sa_addr = (struct sockaddr *)addr_buf; 960 af = sctp_get_af_specific(sa_addr->sa_family); 961 962 /* If the address family is not supported or if this address 963 * causes the address buffer to overflow return EINVAL. 964 */ 965 if (!af || (walk_size + af->sockaddr_len) > addrs_size) { 966 err = -EINVAL; 967 goto out_free; 968 } 969 970 err = sctp_verify_addr(sk, (union sctp_addr *)sa_addr, 971 af->sockaddr_len); 972 if (err) 973 goto out_free; 974 975 memcpy(&to, sa_addr, af->sockaddr_len); 976 to.v4.sin_port = ntohs(to.v4.sin_port); 977 978 /* Check if there already is a matching association on the 979 * endpoint (other than the one created here). 980 */ 981 asoc2 = sctp_endpoint_lookup_assoc(ep, &to, &transport); 982 if (asoc2 && asoc2 != asoc) { 983 if (asoc2->state >= SCTP_STATE_ESTABLISHED) 984 err = -EISCONN; 985 else 986 err = -EALREADY; 987 goto out_free; 988 } 989 990 /* If we could not find a matching association on the endpoint, 991 * make sure that there is no peeled-off association matching 992 * the peer address even on another socket. 993 */ 994 if (sctp_endpoint_is_peeled_off(ep, &to)) { 995 err = -EADDRNOTAVAIL; 996 goto out_free; 997 } 998 999 if (!asoc) { 1000 /* If a bind() or sctp_bindx() is not called prior to 1001 * an sctp_connectx() call, the system picks an 1002 * ephemeral port and will choose an address set 1003 * equivalent to binding with a wildcard address. 1004 */ 1005 if (!ep->base.bind_addr.port) { 1006 if (sctp_autobind(sk)) { 1007 err = -EAGAIN; 1008 goto out_free; 1009 } 1010 } else { 1011 /* 1012 * If an unprivileged user inherits a 1-many 1013 * style socket with open associations on a 1014 * privileged port, it MAY be permitted to 1015 * accept new associations, but it SHOULD NOT 1016 * be permitted to open new associations. 1017 */ 1018 if (ep->base.bind_addr.port < PROT_SOCK && 1019 !capable(CAP_NET_BIND_SERVICE)) { 1020 err = -EACCES; 1021 goto out_free; 1022 } 1023 } 1024 1025 scope = sctp_scope(&to); 1026 asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL); 1027 if (!asoc) { 1028 err = -ENOMEM; 1029 goto out_free; 1030 } 1031 } 1032 1033 /* Prime the peer's transport structures. */ 1034 transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL, 1035 SCTP_UNKNOWN); 1036 if (!transport) { 1037 err = -ENOMEM; 1038 goto out_free; 1039 } 1040 1041 addrcnt++; 1042 addr_buf += af->sockaddr_len; 1043 walk_size += af->sockaddr_len; 1044 } 1045 1046 err = sctp_assoc_set_bind_addr_from_ep(asoc, GFP_KERNEL); 1047 if (err < 0) { 1048 goto out_free; 1049 } 1050 1051 err = sctp_primitive_ASSOCIATE(asoc, NULL); 1052 if (err < 0) { 1053 goto out_free; 1054 } 1055 1056 /* Initialize sk's dport and daddr for getpeername() */ 1057 inet_sk(sk)->dport = htons(asoc->peer.port); 1058 af = sctp_get_af_specific(to.sa.sa_family); 1059 af->to_sk_daddr(&to, sk); 1060 sk->sk_err = 0; 1061 1062 timeo = sock_sndtimeo(sk, sk->sk_socket->file->f_flags & O_NONBLOCK); 1063 err = sctp_wait_for_connect(asoc, &timeo); 1064 1065 /* Don't free association on exit. */ 1066 asoc = NULL; 1067 1068 out_free: 1069 1070 SCTP_DEBUG_PRINTK("About to exit __sctp_connect() free asoc: %p" 1071 " kaddrs: %p err: %d\n", 1072 asoc, kaddrs, err); 1073 if (asoc) 1074 sctp_association_free(asoc); 1075 return err; 1076 } 1077 1078 /* Helper for tunneling sctp_connectx() requests through sctp_setsockopt() 1079 * 1080 * API 8.9 1081 * int sctp_connectx(int sd, struct sockaddr *addrs, int addrcnt); 1082 * 1083 * If sd is an IPv4 socket, the addresses passed must be IPv4 addresses. 1084 * If the sd is an IPv6 socket, the addresses passed can either be IPv4 1085 * or IPv6 addresses. 1086 * 1087 * A single address may be specified as INADDR_ANY or IN6ADDR_ANY, see 1088 * Section 3.1.2 for this usage. 1089 * 1090 * addrs is a pointer to an array of one or more socket addresses. Each 1091 * address is contained in its appropriate structure (i.e. struct 1092 * sockaddr_in or struct sockaddr_in6) the family of the address type 1093 * must be used to distengish the address length (note that this 1094 * representation is termed a "packed array" of addresses). The caller 1095 * specifies the number of addresses in the array with addrcnt. 1096 * 1097 * On success, sctp_connectx() returns 0. On failure, sctp_connectx() returns 1098 * -1, and sets errno to the appropriate error code. 1099 * 1100 * For SCTP, the port given in each socket address must be the same, or 1101 * sctp_connectx() will fail, setting errno to EINVAL. 1102 * 1103 * An application can use sctp_connectx to initiate an association with 1104 * an endpoint that is multi-homed. Much like sctp_bindx() this call 1105 * allows a caller to specify multiple addresses at which a peer can be 1106 * reached. The way the SCTP stack uses the list of addresses to set up 1107 * the association is implementation dependant. This function only 1108 * specifies that the stack will try to make use of all the addresses in 1109 * the list when needed. 1110 * 1111 * Note that the list of addresses passed in is only used for setting up 1112 * the association. It does not necessarily equal the set of addresses 1113 * the peer uses for the resulting association. If the caller wants to 1114 * find out the set of peer addresses, it must use sctp_getpaddrs() to 1115 * retrieve them after the association has been set up. 1116 * 1117 * Basically do nothing but copying the addresses from user to kernel 1118 * land and invoking either sctp_connectx(). This is used for tunneling 1119 * the sctp_connectx() request through sctp_setsockopt() from userspace. 1120 * 1121 * We don't use copy_from_user() for optimization: we first do the 1122 * sanity checks (buffer size -fast- and access check-healthy 1123 * pointer); if all of those succeed, then we can alloc the memory 1124 * (expensive operation) needed to copy the data to kernel. Then we do 1125 * the copying without checking the user space area 1126 * (__copy_from_user()). 1127 * 1128 * On exit there is no need to do sockfd_put(), sys_setsockopt() does 1129 * it. 1130 * 1131 * sk The sk of the socket 1132 * addrs The pointer to the addresses in user land 1133 * addrssize Size of the addrs buffer 1134 * 1135 * Returns 0 if ok, <0 errno code on error. 1136 */ 1137 SCTP_STATIC int sctp_setsockopt_connectx(struct sock* sk, 1138 struct sockaddr __user *addrs, 1139 int addrs_size) 1140 { 1141 int err = 0; 1142 struct sockaddr *kaddrs; 1143 1144 SCTP_DEBUG_PRINTK("%s - sk %p addrs %p addrs_size %d\n", 1145 __FUNCTION__, sk, addrs, addrs_size); 1146 1147 if (unlikely(addrs_size <= 0)) 1148 return -EINVAL; 1149 1150 /* Check the user passed a healthy pointer. */ 1151 if (unlikely(!access_ok(VERIFY_READ, addrs, addrs_size))) 1152 return -EFAULT; 1153 1154 /* Alloc space for the address array in kernel memory. */ 1155 kaddrs = kmalloc(addrs_size, GFP_KERNEL); 1156 if (unlikely(!kaddrs)) 1157 return -ENOMEM; 1158 1159 if (__copy_from_user(kaddrs, addrs, addrs_size)) { 1160 err = -EFAULT; 1161 } else { 1162 err = __sctp_connect(sk, kaddrs, addrs_size); 1163 } 1164 1165 kfree(kaddrs); 1166 return err; 1167 } 1168 1169 /* API 3.1.4 close() - UDP Style Syntax 1170 * Applications use close() to perform graceful shutdown (as described in 1171 * Section 10.1 of [SCTP]) on ALL the associations currently represented 1172 * by a UDP-style socket. 1173 * 1174 * The syntax is 1175 * 1176 * ret = close(int sd); 1177 * 1178 * sd - the socket descriptor of the associations to be closed. 1179 * 1180 * To gracefully shutdown a specific association represented by the 1181 * UDP-style socket, an application should use the sendmsg() call, 1182 * passing no user data, but including the appropriate flag in the 1183 * ancillary data (see Section xxxx). 1184 * 1185 * If sd in the close() call is a branched-off socket representing only 1186 * one association, the shutdown is performed on that association only. 1187 * 1188 * 4.1.6 close() - TCP Style Syntax 1189 * 1190 * Applications use close() to gracefully close down an association. 1191 * 1192 * The syntax is: 1193 * 1194 * int close(int sd); 1195 * 1196 * sd - the socket descriptor of the association to be closed. 1197 * 1198 * After an application calls close() on a socket descriptor, no further 1199 * socket operations will succeed on that descriptor. 1200 * 1201 * API 7.1.4 SO_LINGER 1202 * 1203 * An application using the TCP-style socket can use this option to 1204 * perform the SCTP ABORT primitive. The linger option structure is: 1205 * 1206 * struct linger { 1207 * int l_onoff; // option on/off 1208 * int l_linger; // linger time 1209 * }; 1210 * 1211 * To enable the option, set l_onoff to 1. If the l_linger value is set 1212 * to 0, calling close() is the same as the ABORT primitive. If the 1213 * value is set to a negative value, the setsockopt() call will return 1214 * an error. If the value is set to a positive value linger_time, the 1215 * close() can be blocked for at most linger_time ms. If the graceful 1216 * shutdown phase does not finish during this period, close() will 1217 * return but the graceful shutdown phase continues in the system. 1218 */ 1219 SCTP_STATIC void sctp_close(struct sock *sk, long timeout) 1220 { 1221 struct sctp_endpoint *ep; 1222 struct sctp_association *asoc; 1223 struct list_head *pos, *temp; 1224 1225 SCTP_DEBUG_PRINTK("sctp_close(sk: 0x%p, timeout:%ld)\n", sk, timeout); 1226 1227 sctp_lock_sock(sk); 1228 sk->sk_shutdown = SHUTDOWN_MASK; 1229 1230 ep = sctp_sk(sk)->ep; 1231 1232 /* Walk all associations on an endpoint. */ 1233 list_for_each_safe(pos, temp, &ep->asocs) { 1234 asoc = list_entry(pos, struct sctp_association, asocs); 1235 1236 if (sctp_style(sk, TCP)) { 1237 /* A closed association can still be in the list if 1238 * it belongs to a TCP-style listening socket that is 1239 * not yet accepted. If so, free it. If not, send an 1240 * ABORT or SHUTDOWN based on the linger options. 1241 */ 1242 if (sctp_state(asoc, CLOSED)) { 1243 sctp_unhash_established(asoc); 1244 sctp_association_free(asoc); 1245 continue; 1246 } 1247 } 1248 1249 if (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime) 1250 sctp_primitive_ABORT(asoc, NULL); 1251 else 1252 sctp_primitive_SHUTDOWN(asoc, NULL); 1253 } 1254 1255 /* Clean up any skbs sitting on the receive queue. */ 1256 sctp_queue_purge_ulpevents(&sk->sk_receive_queue); 1257 sctp_queue_purge_ulpevents(&sctp_sk(sk)->pd_lobby); 1258 1259 /* On a TCP-style socket, block for at most linger_time if set. */ 1260 if (sctp_style(sk, TCP) && timeout) 1261 sctp_wait_for_close(sk, timeout); 1262 1263 /* This will run the backlog queue. */ 1264 sctp_release_sock(sk); 1265 1266 /* Supposedly, no process has access to the socket, but 1267 * the net layers still may. 1268 */ 1269 sctp_local_bh_disable(); 1270 sctp_bh_lock_sock(sk); 1271 1272 /* Hold the sock, since sk_common_release() will put sock_put() 1273 * and we have just a little more cleanup. 1274 */ 1275 sock_hold(sk); 1276 sk_common_release(sk); 1277 1278 sctp_bh_unlock_sock(sk); 1279 sctp_local_bh_enable(); 1280 1281 sock_put(sk); 1282 1283 SCTP_DBG_OBJCNT_DEC(sock); 1284 } 1285 1286 /* Handle EPIPE error. */ 1287 static int sctp_error(struct sock *sk, int flags, int err) 1288 { 1289 if (err == -EPIPE) 1290 err = sock_error(sk) ? : -EPIPE; 1291 if (err == -EPIPE && !(flags & MSG_NOSIGNAL)) 1292 send_sig(SIGPIPE, current, 0); 1293 return err; 1294 } 1295 1296 /* API 3.1.3 sendmsg() - UDP Style Syntax 1297 * 1298 * An application uses sendmsg() and recvmsg() calls to transmit data to 1299 * and receive data from its peer. 1300 * 1301 * ssize_t sendmsg(int socket, const struct msghdr *message, 1302 * int flags); 1303 * 1304 * socket - the socket descriptor of the endpoint. 1305 * message - pointer to the msghdr structure which contains a single 1306 * user message and possibly some ancillary data. 1307 * 1308 * See Section 5 for complete description of the data 1309 * structures. 1310 * 1311 * flags - flags sent or received with the user message, see Section 1312 * 5 for complete description of the flags. 1313 * 1314 * Note: This function could use a rewrite especially when explicit 1315 * connect support comes in. 1316 */ 1317 /* BUG: We do not implement the equivalent of sk_stream_wait_memory(). */ 1318 1319 SCTP_STATIC int sctp_msghdr_parse(const struct msghdr *, sctp_cmsgs_t *); 1320 1321 SCTP_STATIC int sctp_sendmsg(struct kiocb *iocb, struct sock *sk, 1322 struct msghdr *msg, size_t msg_len) 1323 { 1324 struct sctp_sock *sp; 1325 struct sctp_endpoint *ep; 1326 struct sctp_association *new_asoc=NULL, *asoc=NULL; 1327 struct sctp_transport *transport, *chunk_tp; 1328 struct sctp_chunk *chunk; 1329 union sctp_addr to; 1330 struct sockaddr *msg_name = NULL; 1331 struct sctp_sndrcvinfo default_sinfo = { 0 }; 1332 struct sctp_sndrcvinfo *sinfo; 1333 struct sctp_initmsg *sinit; 1334 sctp_assoc_t associd = 0; 1335 sctp_cmsgs_t cmsgs = { NULL }; 1336 int err; 1337 sctp_scope_t scope; 1338 long timeo; 1339 __u16 sinfo_flags = 0; 1340 struct sctp_datamsg *datamsg; 1341 struct list_head *pos; 1342 int msg_flags = msg->msg_flags; 1343 1344 SCTP_DEBUG_PRINTK("sctp_sendmsg(sk: %p, msg: %p, msg_len: %zu)\n", 1345 sk, msg, msg_len); 1346 1347 err = 0; 1348 sp = sctp_sk(sk); 1349 ep = sp->ep; 1350 1351 SCTP_DEBUG_PRINTK("Using endpoint: %p.\n", ep); 1352 1353 /* We cannot send a message over a TCP-style listening socket. */ 1354 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) { 1355 err = -EPIPE; 1356 goto out_nounlock; 1357 } 1358 1359 /* Parse out the SCTP CMSGs. */ 1360 err = sctp_msghdr_parse(msg, &cmsgs); 1361 1362 if (err) { 1363 SCTP_DEBUG_PRINTK("msghdr parse err = %x\n", err); 1364 goto out_nounlock; 1365 } 1366 1367 /* Fetch the destination address for this packet. This 1368 * address only selects the association--it is not necessarily 1369 * the address we will send to. 1370 * For a peeled-off socket, msg_name is ignored. 1371 */ 1372 if (!sctp_style(sk, UDP_HIGH_BANDWIDTH) && msg->msg_name) { 1373 int msg_namelen = msg->msg_namelen; 1374 1375 err = sctp_verify_addr(sk, (union sctp_addr *)msg->msg_name, 1376 msg_namelen); 1377 if (err) 1378 return err; 1379 1380 if (msg_namelen > sizeof(to)) 1381 msg_namelen = sizeof(to); 1382 memcpy(&to, msg->msg_name, msg_namelen); 1383 SCTP_DEBUG_PRINTK("Just memcpy'd. msg_name is " 1384 "0x%x:%u.\n", 1385 to.v4.sin_addr.s_addr, to.v4.sin_port); 1386 1387 to.v4.sin_port = ntohs(to.v4.sin_port); 1388 msg_name = msg->msg_name; 1389 } 1390 1391 sinfo = cmsgs.info; 1392 sinit = cmsgs.init; 1393 1394 /* Did the user specify SNDRCVINFO? */ 1395 if (sinfo) { 1396 sinfo_flags = sinfo->sinfo_flags; 1397 associd = sinfo->sinfo_assoc_id; 1398 } 1399 1400 SCTP_DEBUG_PRINTK("msg_len: %zu, sinfo_flags: 0x%x\n", 1401 msg_len, sinfo_flags); 1402 1403 /* SCTP_EOF or SCTP_ABORT cannot be set on a TCP-style socket. */ 1404 if (sctp_style(sk, TCP) && (sinfo_flags & (SCTP_EOF | SCTP_ABORT))) { 1405 err = -EINVAL; 1406 goto out_nounlock; 1407 } 1408 1409 /* If SCTP_EOF is set, no data can be sent. Disallow sending zero 1410 * length messages when SCTP_EOF|SCTP_ABORT is not set. 1411 * If SCTP_ABORT is set, the message length could be non zero with 1412 * the msg_iov set to the user abort reason. 1413 */ 1414 if (((sinfo_flags & SCTP_EOF) && (msg_len > 0)) || 1415 (!(sinfo_flags & (SCTP_EOF|SCTP_ABORT)) && (msg_len == 0))) { 1416 err = -EINVAL; 1417 goto out_nounlock; 1418 } 1419 1420 /* If SCTP_ADDR_OVER is set, there must be an address 1421 * specified in msg_name. 1422 */ 1423 if ((sinfo_flags & SCTP_ADDR_OVER) && (!msg->msg_name)) { 1424 err = -EINVAL; 1425 goto out_nounlock; 1426 } 1427 1428 transport = NULL; 1429 1430 SCTP_DEBUG_PRINTK("About to look up association.\n"); 1431 1432 sctp_lock_sock(sk); 1433 1434 /* If a msg_name has been specified, assume this is to be used. */ 1435 if (msg_name) { 1436 /* Look for a matching association on the endpoint. */ 1437 asoc = sctp_endpoint_lookup_assoc(ep, &to, &transport); 1438 if (!asoc) { 1439 /* If we could not find a matching association on the 1440 * endpoint, make sure that it is not a TCP-style 1441 * socket that already has an association or there is 1442 * no peeled-off association on another socket. 1443 */ 1444 if ((sctp_style(sk, TCP) && 1445 sctp_sstate(sk, ESTABLISHED)) || 1446 sctp_endpoint_is_peeled_off(ep, &to)) { 1447 err = -EADDRNOTAVAIL; 1448 goto out_unlock; 1449 } 1450 } 1451 } else { 1452 asoc = sctp_id2assoc(sk, associd); 1453 if (!asoc) { 1454 err = -EPIPE; 1455 goto out_unlock; 1456 } 1457 } 1458 1459 if (asoc) { 1460 SCTP_DEBUG_PRINTK("Just looked up association: %p.\n", asoc); 1461 1462 /* We cannot send a message on a TCP-style SCTP_SS_ESTABLISHED 1463 * socket that has an association in CLOSED state. This can 1464 * happen when an accepted socket has an association that is 1465 * already CLOSED. 1466 */ 1467 if (sctp_state(asoc, CLOSED) && sctp_style(sk, TCP)) { 1468 err = -EPIPE; 1469 goto out_unlock; 1470 } 1471 1472 if (sinfo_flags & SCTP_EOF) { 1473 SCTP_DEBUG_PRINTK("Shutting down association: %p\n", 1474 asoc); 1475 sctp_primitive_SHUTDOWN(asoc, NULL); 1476 err = 0; 1477 goto out_unlock; 1478 } 1479 if (sinfo_flags & SCTP_ABORT) { 1480 SCTP_DEBUG_PRINTK("Aborting association: %p\n", asoc); 1481 sctp_primitive_ABORT(asoc, msg); 1482 err = 0; 1483 goto out_unlock; 1484 } 1485 } 1486 1487 /* Do we need to create the association? */ 1488 if (!asoc) { 1489 SCTP_DEBUG_PRINTK("There is no association yet.\n"); 1490 1491 if (sinfo_flags & (SCTP_EOF | SCTP_ABORT)) { 1492 err = -EINVAL; 1493 goto out_unlock; 1494 } 1495 1496 /* Check for invalid stream against the stream counts, 1497 * either the default or the user specified stream counts. 1498 */ 1499 if (sinfo) { 1500 if (!sinit || (sinit && !sinit->sinit_num_ostreams)) { 1501 /* Check against the defaults. */ 1502 if (sinfo->sinfo_stream >= 1503 sp->initmsg.sinit_num_ostreams) { 1504 err = -EINVAL; 1505 goto out_unlock; 1506 } 1507 } else { 1508 /* Check against the requested. */ 1509 if (sinfo->sinfo_stream >= 1510 sinit->sinit_num_ostreams) { 1511 err = -EINVAL; 1512 goto out_unlock; 1513 } 1514 } 1515 } 1516 1517 /* 1518 * API 3.1.2 bind() - UDP Style Syntax 1519 * If a bind() or sctp_bindx() is not called prior to a 1520 * sendmsg() call that initiates a new association, the 1521 * system picks an ephemeral port and will choose an address 1522 * set equivalent to binding with a wildcard address. 1523 */ 1524 if (!ep->base.bind_addr.port) { 1525 if (sctp_autobind(sk)) { 1526 err = -EAGAIN; 1527 goto out_unlock; 1528 } 1529 } else { 1530 /* 1531 * If an unprivileged user inherits a one-to-many 1532 * style socket with open associations on a privileged 1533 * port, it MAY be permitted to accept new associations, 1534 * but it SHOULD NOT be permitted to open new 1535 * associations. 1536 */ 1537 if (ep->base.bind_addr.port < PROT_SOCK && 1538 !capable(CAP_NET_BIND_SERVICE)) { 1539 err = -EACCES; 1540 goto out_unlock; 1541 } 1542 } 1543 1544 scope = sctp_scope(&to); 1545 new_asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL); 1546 if (!new_asoc) { 1547 err = -ENOMEM; 1548 goto out_unlock; 1549 } 1550 asoc = new_asoc; 1551 1552 /* If the SCTP_INIT ancillary data is specified, set all 1553 * the association init values accordingly. 1554 */ 1555 if (sinit) { 1556 if (sinit->sinit_num_ostreams) { 1557 asoc->c.sinit_num_ostreams = 1558 sinit->sinit_num_ostreams; 1559 } 1560 if (sinit->sinit_max_instreams) { 1561 asoc->c.sinit_max_instreams = 1562 sinit->sinit_max_instreams; 1563 } 1564 if (sinit->sinit_max_attempts) { 1565 asoc->max_init_attempts 1566 = sinit->sinit_max_attempts; 1567 } 1568 if (sinit->sinit_max_init_timeo) { 1569 asoc->max_init_timeo = 1570 msecs_to_jiffies(sinit->sinit_max_init_timeo); 1571 } 1572 } 1573 1574 /* Prime the peer's transport structures. */ 1575 transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL, SCTP_UNKNOWN); 1576 if (!transport) { 1577 err = -ENOMEM; 1578 goto out_free; 1579 } 1580 err = sctp_assoc_set_bind_addr_from_ep(asoc, GFP_KERNEL); 1581 if (err < 0) { 1582 err = -ENOMEM; 1583 goto out_free; 1584 } 1585 } 1586 1587 /* ASSERT: we have a valid association at this point. */ 1588 SCTP_DEBUG_PRINTK("We have a valid association.\n"); 1589 1590 if (!sinfo) { 1591 /* If the user didn't specify SNDRCVINFO, make up one with 1592 * some defaults. 1593 */ 1594 default_sinfo.sinfo_stream = asoc->default_stream; 1595 default_sinfo.sinfo_flags = asoc->default_flags; 1596 default_sinfo.sinfo_ppid = asoc->default_ppid; 1597 default_sinfo.sinfo_context = asoc->default_context; 1598 default_sinfo.sinfo_timetolive = asoc->default_timetolive; 1599 default_sinfo.sinfo_assoc_id = sctp_assoc2id(asoc); 1600 sinfo = &default_sinfo; 1601 } 1602 1603 /* API 7.1.7, the sndbuf size per association bounds the 1604 * maximum size of data that can be sent in a single send call. 1605 */ 1606 if (msg_len > sk->sk_sndbuf) { 1607 err = -EMSGSIZE; 1608 goto out_free; 1609 } 1610 1611 /* If fragmentation is disabled and the message length exceeds the 1612 * association fragmentation point, return EMSGSIZE. The I-D 1613 * does not specify what this error is, but this looks like 1614 * a great fit. 1615 */ 1616 if (sctp_sk(sk)->disable_fragments && (msg_len > asoc->frag_point)) { 1617 err = -EMSGSIZE; 1618 goto out_free; 1619 } 1620 1621 if (sinfo) { 1622 /* Check for invalid stream. */ 1623 if (sinfo->sinfo_stream >= asoc->c.sinit_num_ostreams) { 1624 err = -EINVAL; 1625 goto out_free; 1626 } 1627 } 1628 1629 timeo = sock_sndtimeo(sk, msg->msg_flags & MSG_DONTWAIT); 1630 if (!sctp_wspace(asoc)) { 1631 err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len); 1632 if (err) 1633 goto out_free; 1634 } 1635 1636 /* If an address is passed with the sendto/sendmsg call, it is used 1637 * to override the primary destination address in the TCP model, or 1638 * when SCTP_ADDR_OVER flag is set in the UDP model. 1639 */ 1640 if ((sctp_style(sk, TCP) && msg_name) || 1641 (sinfo_flags & SCTP_ADDR_OVER)) { 1642 chunk_tp = sctp_assoc_lookup_paddr(asoc, &to); 1643 if (!chunk_tp) { 1644 err = -EINVAL; 1645 goto out_free; 1646 } 1647 } else 1648 chunk_tp = NULL; 1649 1650 /* Auto-connect, if we aren't connected already. */ 1651 if (sctp_state(asoc, CLOSED)) { 1652 err = sctp_primitive_ASSOCIATE(asoc, NULL); 1653 if (err < 0) 1654 goto out_free; 1655 SCTP_DEBUG_PRINTK("We associated primitively.\n"); 1656 } 1657 1658 /* Break the message into multiple chunks of maximum size. */ 1659 datamsg = sctp_datamsg_from_user(asoc, sinfo, msg, msg_len); 1660 if (!datamsg) { 1661 err = -ENOMEM; 1662 goto out_free; 1663 } 1664 1665 /* Now send the (possibly) fragmented message. */ 1666 list_for_each(pos, &datamsg->chunks) { 1667 chunk = list_entry(pos, struct sctp_chunk, frag_list); 1668 sctp_datamsg_track(chunk); 1669 1670 /* Do accounting for the write space. */ 1671 sctp_set_owner_w(chunk); 1672 1673 chunk->transport = chunk_tp; 1674 1675 /* Send it to the lower layers. Note: all chunks 1676 * must either fail or succeed. The lower layer 1677 * works that way today. Keep it that way or this 1678 * breaks. 1679 */ 1680 err = sctp_primitive_SEND(asoc, chunk); 1681 /* Did the lower layer accept the chunk? */ 1682 if (err) 1683 sctp_chunk_free(chunk); 1684 SCTP_DEBUG_PRINTK("We sent primitively.\n"); 1685 } 1686 1687 sctp_datamsg_free(datamsg); 1688 if (err) 1689 goto out_free; 1690 else 1691 err = msg_len; 1692 1693 /* If we are already past ASSOCIATE, the lower 1694 * layers are responsible for association cleanup. 1695 */ 1696 goto out_unlock; 1697 1698 out_free: 1699 if (new_asoc) 1700 sctp_association_free(asoc); 1701 out_unlock: 1702 sctp_release_sock(sk); 1703 1704 out_nounlock: 1705 return sctp_error(sk, msg_flags, err); 1706 1707 #if 0 1708 do_sock_err: 1709 if (msg_len) 1710 err = msg_len; 1711 else 1712 err = sock_error(sk); 1713 goto out; 1714 1715 do_interrupted: 1716 if (msg_len) 1717 err = msg_len; 1718 goto out; 1719 #endif /* 0 */ 1720 } 1721 1722 /* This is an extended version of skb_pull() that removes the data from the 1723 * start of a skb even when data is spread across the list of skb's in the 1724 * frag_list. len specifies the total amount of data that needs to be removed. 1725 * when 'len' bytes could be removed from the skb, it returns 0. 1726 * If 'len' exceeds the total skb length, it returns the no. of bytes that 1727 * could not be removed. 1728 */ 1729 static int sctp_skb_pull(struct sk_buff *skb, int len) 1730 { 1731 struct sk_buff *list; 1732 int skb_len = skb_headlen(skb); 1733 int rlen; 1734 1735 if (len <= skb_len) { 1736 __skb_pull(skb, len); 1737 return 0; 1738 } 1739 len -= skb_len; 1740 __skb_pull(skb, skb_len); 1741 1742 for (list = skb_shinfo(skb)->frag_list; list; list = list->next) { 1743 rlen = sctp_skb_pull(list, len); 1744 skb->len -= (len-rlen); 1745 skb->data_len -= (len-rlen); 1746 1747 if (!rlen) 1748 return 0; 1749 1750 len = rlen; 1751 } 1752 1753 return len; 1754 } 1755 1756 /* API 3.1.3 recvmsg() - UDP Style Syntax 1757 * 1758 * ssize_t recvmsg(int socket, struct msghdr *message, 1759 * int flags); 1760 * 1761 * socket - the socket descriptor of the endpoint. 1762 * message - pointer to the msghdr structure which contains a single 1763 * user message and possibly some ancillary data. 1764 * 1765 * See Section 5 for complete description of the data 1766 * structures. 1767 * 1768 * flags - flags sent or received with the user message, see Section 1769 * 5 for complete description of the flags. 1770 */ 1771 static struct sk_buff *sctp_skb_recv_datagram(struct sock *, int, int, int *); 1772 1773 SCTP_STATIC int sctp_recvmsg(struct kiocb *iocb, struct sock *sk, 1774 struct msghdr *msg, size_t len, int noblock, 1775 int flags, int *addr_len) 1776 { 1777 struct sctp_ulpevent *event = NULL; 1778 struct sctp_sock *sp = sctp_sk(sk); 1779 struct sk_buff *skb; 1780 int copied; 1781 int err = 0; 1782 int skb_len; 1783 1784 SCTP_DEBUG_PRINTK("sctp_recvmsg(%s: %p, %s: %p, %s: %zd, %s: %d, %s: " 1785 "0x%x, %s: %p)\n", "sk", sk, "msghdr", msg, 1786 "len", len, "knoblauch", noblock, 1787 "flags", flags, "addr_len", addr_len); 1788 1789 sctp_lock_sock(sk); 1790 1791 if (sctp_style(sk, TCP) && !sctp_sstate(sk, ESTABLISHED)) { 1792 err = -ENOTCONN; 1793 goto out; 1794 } 1795 1796 skb = sctp_skb_recv_datagram(sk, flags, noblock, &err); 1797 if (!skb) 1798 goto out; 1799 1800 /* Get the total length of the skb including any skb's in the 1801 * frag_list. 1802 */ 1803 skb_len = skb->len; 1804 1805 copied = skb_len; 1806 if (copied > len) 1807 copied = len; 1808 1809 err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); 1810 1811 event = sctp_skb2event(skb); 1812 1813 if (err) 1814 goto out_free; 1815 1816 sock_recv_timestamp(msg, sk, skb); 1817 if (sctp_ulpevent_is_notification(event)) { 1818 msg->msg_flags |= MSG_NOTIFICATION; 1819 sp->pf->event_msgname(event, msg->msg_name, addr_len); 1820 } else { 1821 sp->pf->skb_msgname(skb, msg->msg_name, addr_len); 1822 } 1823 1824 /* Check if we allow SCTP_SNDRCVINFO. */ 1825 if (sp->subscribe.sctp_data_io_event) 1826 sctp_ulpevent_read_sndrcvinfo(event, msg); 1827 #if 0 1828 /* FIXME: we should be calling IP/IPv6 layers. */ 1829 if (sk->sk_protinfo.af_inet.cmsg_flags) 1830 ip_cmsg_recv(msg, skb); 1831 #endif 1832 1833 err = copied; 1834 1835 /* If skb's length exceeds the user's buffer, update the skb and 1836 * push it back to the receive_queue so that the next call to 1837 * recvmsg() will return the remaining data. Don't set MSG_EOR. 1838 */ 1839 if (skb_len > copied) { 1840 msg->msg_flags &= ~MSG_EOR; 1841 if (flags & MSG_PEEK) 1842 goto out_free; 1843 sctp_skb_pull(skb, copied); 1844 skb_queue_head(&sk->sk_receive_queue, skb); 1845 1846 /* When only partial message is copied to the user, increase 1847 * rwnd by that amount. If all the data in the skb is read, 1848 * rwnd is updated when the event is freed. 1849 */ 1850 sctp_assoc_rwnd_increase(event->asoc, copied); 1851 goto out; 1852 } else if ((event->msg_flags & MSG_NOTIFICATION) || 1853 (event->msg_flags & MSG_EOR)) 1854 msg->msg_flags |= MSG_EOR; 1855 else 1856 msg->msg_flags &= ~MSG_EOR; 1857 1858 out_free: 1859 if (flags & MSG_PEEK) { 1860 /* Release the skb reference acquired after peeking the skb in 1861 * sctp_skb_recv_datagram(). 1862 */ 1863 kfree_skb(skb); 1864 } else { 1865 /* Free the event which includes releasing the reference to 1866 * the owner of the skb, freeing the skb and updating the 1867 * rwnd. 1868 */ 1869 sctp_ulpevent_free(event); 1870 } 1871 out: 1872 sctp_release_sock(sk); 1873 return err; 1874 } 1875 1876 /* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS) 1877 * 1878 * This option is a on/off flag. If enabled no SCTP message 1879 * fragmentation will be performed. Instead if a message being sent 1880 * exceeds the current PMTU size, the message will NOT be sent and 1881 * instead a error will be indicated to the user. 1882 */ 1883 static int sctp_setsockopt_disable_fragments(struct sock *sk, 1884 char __user *optval, int optlen) 1885 { 1886 int val; 1887 1888 if (optlen < sizeof(int)) 1889 return -EINVAL; 1890 1891 if (get_user(val, (int __user *)optval)) 1892 return -EFAULT; 1893 1894 sctp_sk(sk)->disable_fragments = (val == 0) ? 0 : 1; 1895 1896 return 0; 1897 } 1898 1899 static int sctp_setsockopt_events(struct sock *sk, char __user *optval, 1900 int optlen) 1901 { 1902 if (optlen != sizeof(struct sctp_event_subscribe)) 1903 return -EINVAL; 1904 if (copy_from_user(&sctp_sk(sk)->subscribe, optval, optlen)) 1905 return -EFAULT; 1906 return 0; 1907 } 1908 1909 /* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE) 1910 * 1911 * This socket option is applicable to the UDP-style socket only. When 1912 * set it will cause associations that are idle for more than the 1913 * specified number of seconds to automatically close. An association 1914 * being idle is defined an association that has NOT sent or received 1915 * user data. The special value of '0' indicates that no automatic 1916 * close of any associations should be performed. The option expects an 1917 * integer defining the number of seconds of idle time before an 1918 * association is closed. 1919 */ 1920 static int sctp_setsockopt_autoclose(struct sock *sk, char __user *optval, 1921 int optlen) 1922 { 1923 struct sctp_sock *sp = sctp_sk(sk); 1924 1925 /* Applicable to UDP-style socket only */ 1926 if (sctp_style(sk, TCP)) 1927 return -EOPNOTSUPP; 1928 if (optlen != sizeof(int)) 1929 return -EINVAL; 1930 if (copy_from_user(&sp->autoclose, optval, optlen)) 1931 return -EFAULT; 1932 1933 return 0; 1934 } 1935 1936 /* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS) 1937 * 1938 * Applications can enable or disable heartbeats for any peer address of 1939 * an association, modify an address's heartbeat interval, force a 1940 * heartbeat to be sent immediately, and adjust the address's maximum 1941 * number of retransmissions sent before an address is considered 1942 * unreachable. The following structure is used to access and modify an 1943 * address's parameters: 1944 * 1945 * struct sctp_paddrparams { 1946 * sctp_assoc_t spp_assoc_id; 1947 * struct sockaddr_storage spp_address; 1948 * uint32_t spp_hbinterval; 1949 * uint16_t spp_pathmaxrxt; 1950 * uint32_t spp_pathmtu; 1951 * uint32_t spp_sackdelay; 1952 * uint32_t spp_flags; 1953 * }; 1954 * 1955 * spp_assoc_id - (one-to-many style socket) This is filled in the 1956 * application, and identifies the association for 1957 * this query. 1958 * spp_address - This specifies which address is of interest. 1959 * spp_hbinterval - This contains the value of the heartbeat interval, 1960 * in milliseconds. If a value of zero 1961 * is present in this field then no changes are to 1962 * be made to this parameter. 1963 * spp_pathmaxrxt - This contains the maximum number of 1964 * retransmissions before this address shall be 1965 * considered unreachable. If a value of zero 1966 * is present in this field then no changes are to 1967 * be made to this parameter. 1968 * spp_pathmtu - When Path MTU discovery is disabled the value 1969 * specified here will be the "fixed" path mtu. 1970 * Note that if the spp_address field is empty 1971 * then all associations on this address will 1972 * have this fixed path mtu set upon them. 1973 * 1974 * spp_sackdelay - When delayed sack is enabled, this value specifies 1975 * the number of milliseconds that sacks will be delayed 1976 * for. This value will apply to all addresses of an 1977 * association if the spp_address field is empty. Note 1978 * also, that if delayed sack is enabled and this 1979 * value is set to 0, no change is made to the last 1980 * recorded delayed sack timer value. 1981 * 1982 * spp_flags - These flags are used to control various features 1983 * on an association. The flag field may contain 1984 * zero or more of the following options. 1985 * 1986 * SPP_HB_ENABLE - Enable heartbeats on the 1987 * specified address. Note that if the address 1988 * field is empty all addresses for the association 1989 * have heartbeats enabled upon them. 1990 * 1991 * SPP_HB_DISABLE - Disable heartbeats on the 1992 * speicifed address. Note that if the address 1993 * field is empty all addresses for the association 1994 * will have their heartbeats disabled. Note also 1995 * that SPP_HB_ENABLE and SPP_HB_DISABLE are 1996 * mutually exclusive, only one of these two should 1997 * be specified. Enabling both fields will have 1998 * undetermined results. 1999 * 2000 * SPP_HB_DEMAND - Request a user initiated heartbeat 2001 * to be made immediately. 2002 * 2003 * SPP_PMTUD_ENABLE - This field will enable PMTU 2004 * discovery upon the specified address. Note that 2005 * if the address feild is empty then all addresses 2006 * on the association are effected. 2007 * 2008 * SPP_PMTUD_DISABLE - This field will disable PMTU 2009 * discovery upon the specified address. Note that 2010 * if the address feild is empty then all addresses 2011 * on the association are effected. Not also that 2012 * SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually 2013 * exclusive. Enabling both will have undetermined 2014 * results. 2015 * 2016 * SPP_SACKDELAY_ENABLE - Setting this flag turns 2017 * on delayed sack. The time specified in spp_sackdelay 2018 * is used to specify the sack delay for this address. Note 2019 * that if spp_address is empty then all addresses will 2020 * enable delayed sack and take on the sack delay 2021 * value specified in spp_sackdelay. 2022 * SPP_SACKDELAY_DISABLE - Setting this flag turns 2023 * off delayed sack. If the spp_address field is blank then 2024 * delayed sack is disabled for the entire association. Note 2025 * also that this field is mutually exclusive to 2026 * SPP_SACKDELAY_ENABLE, setting both will have undefined 2027 * results. 2028 */ 2029 int sctp_apply_peer_addr_params(struct sctp_paddrparams *params, 2030 struct sctp_transport *trans, 2031 struct sctp_association *asoc, 2032 struct sctp_sock *sp, 2033 int hb_change, 2034 int pmtud_change, 2035 int sackdelay_change) 2036 { 2037 int error; 2038 2039 if (params->spp_flags & SPP_HB_DEMAND && trans) { 2040 error = sctp_primitive_REQUESTHEARTBEAT (trans->asoc, trans); 2041 if (error) 2042 return error; 2043 } 2044 2045 if (params->spp_hbinterval) { 2046 if (trans) { 2047 trans->hbinterval = msecs_to_jiffies(params->spp_hbinterval); 2048 } else if (asoc) { 2049 asoc->hbinterval = msecs_to_jiffies(params->spp_hbinterval); 2050 } else { 2051 sp->hbinterval = params->spp_hbinterval; 2052 } 2053 } 2054 2055 if (hb_change) { 2056 if (trans) { 2057 trans->param_flags = 2058 (trans->param_flags & ~SPP_HB) | hb_change; 2059 } else if (asoc) { 2060 asoc->param_flags = 2061 (asoc->param_flags & ~SPP_HB) | hb_change; 2062 } else { 2063 sp->param_flags = 2064 (sp->param_flags & ~SPP_HB) | hb_change; 2065 } 2066 } 2067 2068 if (params->spp_pathmtu) { 2069 if (trans) { 2070 trans->pathmtu = params->spp_pathmtu; 2071 sctp_assoc_sync_pmtu(asoc); 2072 } else if (asoc) { 2073 asoc->pathmtu = params->spp_pathmtu; 2074 sctp_frag_point(sp, params->spp_pathmtu); 2075 } else { 2076 sp->pathmtu = params->spp_pathmtu; 2077 } 2078 } 2079 2080 if (pmtud_change) { 2081 if (trans) { 2082 int update = (trans->param_flags & SPP_PMTUD_DISABLE) && 2083 (params->spp_flags & SPP_PMTUD_ENABLE); 2084 trans->param_flags = 2085 (trans->param_flags & ~SPP_PMTUD) | pmtud_change; 2086 if (update) { 2087 sctp_transport_pmtu(trans); 2088 sctp_assoc_sync_pmtu(asoc); 2089 } 2090 } else if (asoc) { 2091 asoc->param_flags = 2092 (asoc->param_flags & ~SPP_PMTUD) | pmtud_change; 2093 } else { 2094 sp->param_flags = 2095 (sp->param_flags & ~SPP_PMTUD) | pmtud_change; 2096 } 2097 } 2098 2099 if (params->spp_sackdelay) { 2100 if (trans) { 2101 trans->sackdelay = 2102 msecs_to_jiffies(params->spp_sackdelay); 2103 } else if (asoc) { 2104 asoc->sackdelay = 2105 msecs_to_jiffies(params->spp_sackdelay); 2106 } else { 2107 sp->sackdelay = params->spp_sackdelay; 2108 } 2109 } 2110 2111 if (sackdelay_change) { 2112 if (trans) { 2113 trans->param_flags = 2114 (trans->param_flags & ~SPP_SACKDELAY) | 2115 sackdelay_change; 2116 } else if (asoc) { 2117 asoc->param_flags = 2118 (asoc->param_flags & ~SPP_SACKDELAY) | 2119 sackdelay_change; 2120 } else { 2121 sp->param_flags = 2122 (sp->param_flags & ~SPP_SACKDELAY) | 2123 sackdelay_change; 2124 } 2125 } 2126 2127 if (params->spp_pathmaxrxt) { 2128 if (trans) { 2129 trans->pathmaxrxt = params->spp_pathmaxrxt; 2130 } else if (asoc) { 2131 asoc->pathmaxrxt = params->spp_pathmaxrxt; 2132 } else { 2133 sp->pathmaxrxt = params->spp_pathmaxrxt; 2134 } 2135 } 2136 2137 return 0; 2138 } 2139 2140 static int sctp_setsockopt_peer_addr_params(struct sock *sk, 2141 char __user *optval, int optlen) 2142 { 2143 struct sctp_paddrparams params; 2144 struct sctp_transport *trans = NULL; 2145 struct sctp_association *asoc = NULL; 2146 struct sctp_sock *sp = sctp_sk(sk); 2147 int error; 2148 int hb_change, pmtud_change, sackdelay_change; 2149 2150 if (optlen != sizeof(struct sctp_paddrparams)) 2151 return - EINVAL; 2152 2153 if (copy_from_user(¶ms, optval, optlen)) 2154 return -EFAULT; 2155 2156 /* Validate flags and value parameters. */ 2157 hb_change = params.spp_flags & SPP_HB; 2158 pmtud_change = params.spp_flags & SPP_PMTUD; 2159 sackdelay_change = params.spp_flags & SPP_SACKDELAY; 2160 2161 if (hb_change == SPP_HB || 2162 pmtud_change == SPP_PMTUD || 2163 sackdelay_change == SPP_SACKDELAY || 2164 params.spp_sackdelay > 500 || 2165 (params.spp_pathmtu 2166 && params.spp_pathmtu < SCTP_DEFAULT_MINSEGMENT)) 2167 return -EINVAL; 2168 2169 /* If an address other than INADDR_ANY is specified, and 2170 * no transport is found, then the request is invalid. 2171 */ 2172 if (!sctp_is_any(( union sctp_addr *)¶ms.spp_address)) { 2173 trans = sctp_addr_id2transport(sk, ¶ms.spp_address, 2174 params.spp_assoc_id); 2175 if (!trans) 2176 return -EINVAL; 2177 } 2178 2179 /* Get association, if assoc_id != 0 and the socket is a one 2180 * to many style socket, and an association was not found, then 2181 * the id was invalid. 2182 */ 2183 asoc = sctp_id2assoc(sk, params.spp_assoc_id); 2184 if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) 2185 return -EINVAL; 2186 2187 /* Heartbeat demand can only be sent on a transport or 2188 * association, but not a socket. 2189 */ 2190 if (params.spp_flags & SPP_HB_DEMAND && !trans && !asoc) 2191 return -EINVAL; 2192 2193 /* Process parameters. */ 2194 error = sctp_apply_peer_addr_params(¶ms, trans, asoc, sp, 2195 hb_change, pmtud_change, 2196 sackdelay_change); 2197 2198 if (error) 2199 return error; 2200 2201 /* If changes are for association, also apply parameters to each 2202 * transport. 2203 */ 2204 if (!trans && asoc) { 2205 struct list_head *pos; 2206 2207 list_for_each(pos, &asoc->peer.transport_addr_list) { 2208 trans = list_entry(pos, struct sctp_transport, 2209 transports); 2210 sctp_apply_peer_addr_params(¶ms, trans, asoc, sp, 2211 hb_change, pmtud_change, 2212 sackdelay_change); 2213 } 2214 } 2215 2216 return 0; 2217 } 2218 2219 /* 7.1.24. Delayed Ack Timer (SCTP_DELAYED_ACK_TIME) 2220 * 2221 * This options will get or set the delayed ack timer. The time is set 2222 * in milliseconds. If the assoc_id is 0, then this sets or gets the 2223 * endpoints default delayed ack timer value. If the assoc_id field is 2224 * non-zero, then the set or get effects the specified association. 2225 * 2226 * struct sctp_assoc_value { 2227 * sctp_assoc_t assoc_id; 2228 * uint32_t assoc_value; 2229 * }; 2230 * 2231 * assoc_id - This parameter, indicates which association the 2232 * user is preforming an action upon. Note that if 2233 * this field's value is zero then the endpoints 2234 * default value is changed (effecting future 2235 * associations only). 2236 * 2237 * assoc_value - This parameter contains the number of milliseconds 2238 * that the user is requesting the delayed ACK timer 2239 * be set to. Note that this value is defined in 2240 * the standard to be between 200 and 500 milliseconds. 2241 * 2242 * Note: a value of zero will leave the value alone, 2243 * but disable SACK delay. A non-zero value will also 2244 * enable SACK delay. 2245 */ 2246 2247 static int sctp_setsockopt_delayed_ack_time(struct sock *sk, 2248 char __user *optval, int optlen) 2249 { 2250 struct sctp_assoc_value params; 2251 struct sctp_transport *trans = NULL; 2252 struct sctp_association *asoc = NULL; 2253 struct sctp_sock *sp = sctp_sk(sk); 2254 2255 if (optlen != sizeof(struct sctp_assoc_value)) 2256 return - EINVAL; 2257 2258 if (copy_from_user(¶ms, optval, optlen)) 2259 return -EFAULT; 2260 2261 /* Validate value parameter. */ 2262 if (params.assoc_value > 500) 2263 return -EINVAL; 2264 2265 /* Get association, if assoc_id != 0 and the socket is a one 2266 * to many style socket, and an association was not found, then 2267 * the id was invalid. 2268 */ 2269 asoc = sctp_id2assoc(sk, params.assoc_id); 2270 if (!asoc && params.assoc_id && sctp_style(sk, UDP)) 2271 return -EINVAL; 2272 2273 if (params.assoc_value) { 2274 if (asoc) { 2275 asoc->sackdelay = 2276 msecs_to_jiffies(params.assoc_value); 2277 asoc->param_flags = 2278 (asoc->param_flags & ~SPP_SACKDELAY) | 2279 SPP_SACKDELAY_ENABLE; 2280 } else { 2281 sp->sackdelay = params.assoc_value; 2282 sp->param_flags = 2283 (sp->param_flags & ~SPP_SACKDELAY) | 2284 SPP_SACKDELAY_ENABLE; 2285 } 2286 } else { 2287 if (asoc) { 2288 asoc->param_flags = 2289 (asoc->param_flags & ~SPP_SACKDELAY) | 2290 SPP_SACKDELAY_DISABLE; 2291 } else { 2292 sp->param_flags = 2293 (sp->param_flags & ~SPP_SACKDELAY) | 2294 SPP_SACKDELAY_DISABLE; 2295 } 2296 } 2297 2298 /* If change is for association, also apply to each transport. */ 2299 if (asoc) { 2300 struct list_head *pos; 2301 2302 list_for_each(pos, &asoc->peer.transport_addr_list) { 2303 trans = list_entry(pos, struct sctp_transport, 2304 transports); 2305 if (params.assoc_value) { 2306 trans->sackdelay = 2307 msecs_to_jiffies(params.assoc_value); 2308 trans->param_flags = 2309 (trans->param_flags & ~SPP_SACKDELAY) | 2310 SPP_SACKDELAY_ENABLE; 2311 } else { 2312 trans->param_flags = 2313 (trans->param_flags & ~SPP_SACKDELAY) | 2314 SPP_SACKDELAY_DISABLE; 2315 } 2316 } 2317 } 2318 2319 return 0; 2320 } 2321 2322 /* 7.1.3 Initialization Parameters (SCTP_INITMSG) 2323 * 2324 * Applications can specify protocol parameters for the default association 2325 * initialization. The option name argument to setsockopt() and getsockopt() 2326 * is SCTP_INITMSG. 2327 * 2328 * Setting initialization parameters is effective only on an unconnected 2329 * socket (for UDP-style sockets only future associations are effected 2330 * by the change). With TCP-style sockets, this option is inherited by 2331 * sockets derived from a listener socket. 2332 */ 2333 static int sctp_setsockopt_initmsg(struct sock *sk, char __user *optval, int optlen) 2334 { 2335 struct sctp_initmsg sinit; 2336 struct sctp_sock *sp = sctp_sk(sk); 2337 2338 if (optlen != sizeof(struct sctp_initmsg)) 2339 return -EINVAL; 2340 if (copy_from_user(&sinit, optval, optlen)) 2341 return -EFAULT; 2342 2343 if (sinit.sinit_num_ostreams) 2344 sp->initmsg.sinit_num_ostreams = sinit.sinit_num_ostreams; 2345 if (sinit.sinit_max_instreams) 2346 sp->initmsg.sinit_max_instreams = sinit.sinit_max_instreams; 2347 if (sinit.sinit_max_attempts) 2348 sp->initmsg.sinit_max_attempts = sinit.sinit_max_attempts; 2349 if (sinit.sinit_max_init_timeo) 2350 sp->initmsg.sinit_max_init_timeo = sinit.sinit_max_init_timeo; 2351 2352 return 0; 2353 } 2354 2355 /* 2356 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM) 2357 * 2358 * Applications that wish to use the sendto() system call may wish to 2359 * specify a default set of parameters that would normally be supplied 2360 * through the inclusion of ancillary data. This socket option allows 2361 * such an application to set the default sctp_sndrcvinfo structure. 2362 * The application that wishes to use this socket option simply passes 2363 * in to this call the sctp_sndrcvinfo structure defined in Section 2364 * 5.2.2) The input parameters accepted by this call include 2365 * sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context, 2366 * sinfo_timetolive. The user must provide the sinfo_assoc_id field in 2367 * to this call if the caller is using the UDP model. 2368 */ 2369 static int sctp_setsockopt_default_send_param(struct sock *sk, 2370 char __user *optval, int optlen) 2371 { 2372 struct sctp_sndrcvinfo info; 2373 struct sctp_association *asoc; 2374 struct sctp_sock *sp = sctp_sk(sk); 2375 2376 if (optlen != sizeof(struct sctp_sndrcvinfo)) 2377 return -EINVAL; 2378 if (copy_from_user(&info, optval, optlen)) 2379 return -EFAULT; 2380 2381 asoc = sctp_id2assoc(sk, info.sinfo_assoc_id); 2382 if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP)) 2383 return -EINVAL; 2384 2385 if (asoc) { 2386 asoc->default_stream = info.sinfo_stream; 2387 asoc->default_flags = info.sinfo_flags; 2388 asoc->default_ppid = info.sinfo_ppid; 2389 asoc->default_context = info.sinfo_context; 2390 asoc->default_timetolive = info.sinfo_timetolive; 2391 } else { 2392 sp->default_stream = info.sinfo_stream; 2393 sp->default_flags = info.sinfo_flags; 2394 sp->default_ppid = info.sinfo_ppid; 2395 sp->default_context = info.sinfo_context; 2396 sp->default_timetolive = info.sinfo_timetolive; 2397 } 2398 2399 return 0; 2400 } 2401 2402 /* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR) 2403 * 2404 * Requests that the local SCTP stack use the enclosed peer address as 2405 * the association primary. The enclosed address must be one of the 2406 * association peer's addresses. 2407 */ 2408 static int sctp_setsockopt_primary_addr(struct sock *sk, char __user *optval, 2409 int optlen) 2410 { 2411 struct sctp_prim prim; 2412 struct sctp_transport *trans; 2413 2414 if (optlen != sizeof(struct sctp_prim)) 2415 return -EINVAL; 2416 2417 if (copy_from_user(&prim, optval, sizeof(struct sctp_prim))) 2418 return -EFAULT; 2419 2420 trans = sctp_addr_id2transport(sk, &prim.ssp_addr, prim.ssp_assoc_id); 2421 if (!trans) 2422 return -EINVAL; 2423 2424 sctp_assoc_set_primary(trans->asoc, trans); 2425 2426 return 0; 2427 } 2428 2429 /* 2430 * 7.1.5 SCTP_NODELAY 2431 * 2432 * Turn on/off any Nagle-like algorithm. This means that packets are 2433 * generally sent as soon as possible and no unnecessary delays are 2434 * introduced, at the cost of more packets in the network. Expects an 2435 * integer boolean flag. 2436 */ 2437 static int sctp_setsockopt_nodelay(struct sock *sk, char __user *optval, 2438 int optlen) 2439 { 2440 int val; 2441 2442 if (optlen < sizeof(int)) 2443 return -EINVAL; 2444 if (get_user(val, (int __user *)optval)) 2445 return -EFAULT; 2446 2447 sctp_sk(sk)->nodelay = (val == 0) ? 0 : 1; 2448 return 0; 2449 } 2450 2451 /* 2452 * 2453 * 7.1.1 SCTP_RTOINFO 2454 * 2455 * The protocol parameters used to initialize and bound retransmission 2456 * timeout (RTO) are tunable. sctp_rtoinfo structure is used to access 2457 * and modify these parameters. 2458 * All parameters are time values, in milliseconds. A value of 0, when 2459 * modifying the parameters, indicates that the current value should not 2460 * be changed. 2461 * 2462 */ 2463 static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, int optlen) { 2464 struct sctp_rtoinfo rtoinfo; 2465 struct sctp_association *asoc; 2466 2467 if (optlen != sizeof (struct sctp_rtoinfo)) 2468 return -EINVAL; 2469 2470 if (copy_from_user(&rtoinfo, optval, optlen)) 2471 return -EFAULT; 2472 2473 asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id); 2474 2475 /* Set the values to the specific association */ 2476 if (!asoc && rtoinfo.srto_assoc_id && sctp_style(sk, UDP)) 2477 return -EINVAL; 2478 2479 if (asoc) { 2480 if (rtoinfo.srto_initial != 0) 2481 asoc->rto_initial = 2482 msecs_to_jiffies(rtoinfo.srto_initial); 2483 if (rtoinfo.srto_max != 0) 2484 asoc->rto_max = msecs_to_jiffies(rtoinfo.srto_max); 2485 if (rtoinfo.srto_min != 0) 2486 asoc->rto_min = msecs_to_jiffies(rtoinfo.srto_min); 2487 } else { 2488 /* If there is no association or the association-id = 0 2489 * set the values to the endpoint. 2490 */ 2491 struct sctp_sock *sp = sctp_sk(sk); 2492 2493 if (rtoinfo.srto_initial != 0) 2494 sp->rtoinfo.srto_initial = rtoinfo.srto_initial; 2495 if (rtoinfo.srto_max != 0) 2496 sp->rtoinfo.srto_max = rtoinfo.srto_max; 2497 if (rtoinfo.srto_min != 0) 2498 sp->rtoinfo.srto_min = rtoinfo.srto_min; 2499 } 2500 2501 return 0; 2502 } 2503 2504 /* 2505 * 2506 * 7.1.2 SCTP_ASSOCINFO 2507 * 2508 * This option is used to tune the the maximum retransmission attempts 2509 * of the association. 2510 * Returns an error if the new association retransmission value is 2511 * greater than the sum of the retransmission value of the peer. 2512 * See [SCTP] for more information. 2513 * 2514 */ 2515 static int sctp_setsockopt_associnfo(struct sock *sk, char __user *optval, int optlen) 2516 { 2517 2518 struct sctp_assocparams assocparams; 2519 struct sctp_association *asoc; 2520 2521 if (optlen != sizeof(struct sctp_assocparams)) 2522 return -EINVAL; 2523 if (copy_from_user(&assocparams, optval, optlen)) 2524 return -EFAULT; 2525 2526 asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id); 2527 2528 if (!asoc && assocparams.sasoc_assoc_id && sctp_style(sk, UDP)) 2529 return -EINVAL; 2530 2531 /* Set the values to the specific association */ 2532 if (asoc) { 2533 if (assocparams.sasoc_asocmaxrxt != 0) { 2534 __u32 path_sum = 0; 2535 int paths = 0; 2536 struct list_head *pos; 2537 struct sctp_transport *peer_addr; 2538 2539 list_for_each(pos, &asoc->peer.transport_addr_list) { 2540 peer_addr = list_entry(pos, 2541 struct sctp_transport, 2542 transports); 2543 path_sum += peer_addr->pathmaxrxt; 2544 paths++; 2545 } 2546 2547 /* Only validate asocmaxrxt if we have more then 2548 * one path/transport. We do this because path 2549 * retransmissions are only counted when we have more 2550 * then one path. 2551 */ 2552 if (paths > 1 && 2553 assocparams.sasoc_asocmaxrxt > path_sum) 2554 return -EINVAL; 2555 2556 asoc->max_retrans = assocparams.sasoc_asocmaxrxt; 2557 } 2558 2559 if (assocparams.sasoc_cookie_life != 0) { 2560 asoc->cookie_life.tv_sec = 2561 assocparams.sasoc_cookie_life / 1000; 2562 asoc->cookie_life.tv_usec = 2563 (assocparams.sasoc_cookie_life % 1000) 2564 * 1000; 2565 } 2566 } else { 2567 /* Set the values to the endpoint */ 2568 struct sctp_sock *sp = sctp_sk(sk); 2569 2570 if (assocparams.sasoc_asocmaxrxt != 0) 2571 sp->assocparams.sasoc_asocmaxrxt = 2572 assocparams.sasoc_asocmaxrxt; 2573 if (assocparams.sasoc_cookie_life != 0) 2574 sp->assocparams.sasoc_cookie_life = 2575 assocparams.sasoc_cookie_life; 2576 } 2577 return 0; 2578 } 2579 2580 /* 2581 * 7.1.16 Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR) 2582 * 2583 * This socket option is a boolean flag which turns on or off mapped V4 2584 * addresses. If this option is turned on and the socket is type 2585 * PF_INET6, then IPv4 addresses will be mapped to V6 representation. 2586 * If this option is turned off, then no mapping will be done of V4 2587 * addresses and a user will receive both PF_INET6 and PF_INET type 2588 * addresses on the socket. 2589 */ 2590 static int sctp_setsockopt_mappedv4(struct sock *sk, char __user *optval, int optlen) 2591 { 2592 int val; 2593 struct sctp_sock *sp = sctp_sk(sk); 2594 2595 if (optlen < sizeof(int)) 2596 return -EINVAL; 2597 if (get_user(val, (int __user *)optval)) 2598 return -EFAULT; 2599 if (val) 2600 sp->v4mapped = 1; 2601 else 2602 sp->v4mapped = 0; 2603 2604 return 0; 2605 } 2606 2607 /* 2608 * 7.1.17 Set the maximum fragrmentation size (SCTP_MAXSEG) 2609 * 2610 * This socket option specifies the maximum size to put in any outgoing 2611 * SCTP chunk. If a message is larger than this size it will be 2612 * fragmented by SCTP into the specified size. Note that the underlying 2613 * SCTP implementation may fragment into smaller sized chunks when the 2614 * PMTU of the underlying association is smaller than the value set by 2615 * the user. 2616 */ 2617 static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, int optlen) 2618 { 2619 struct sctp_association *asoc; 2620 struct list_head *pos; 2621 struct sctp_sock *sp = sctp_sk(sk); 2622 int val; 2623 2624 if (optlen < sizeof(int)) 2625 return -EINVAL; 2626 if (get_user(val, (int __user *)optval)) 2627 return -EFAULT; 2628 if ((val != 0) && ((val < 8) || (val > SCTP_MAX_CHUNK_LEN))) 2629 return -EINVAL; 2630 sp->user_frag = val; 2631 2632 /* Update the frag_point of the existing associations. */ 2633 list_for_each(pos, &(sp->ep->asocs)) { 2634 asoc = list_entry(pos, struct sctp_association, asocs); 2635 asoc->frag_point = sctp_frag_point(sp, asoc->pathmtu); 2636 } 2637 2638 return 0; 2639 } 2640 2641 2642 /* 2643 * 7.1.9 Set Peer Primary Address (SCTP_SET_PEER_PRIMARY_ADDR) 2644 * 2645 * Requests that the peer mark the enclosed address as the association 2646 * primary. The enclosed address must be one of the association's 2647 * locally bound addresses. The following structure is used to make a 2648 * set primary request: 2649 */ 2650 static int sctp_setsockopt_peer_primary_addr(struct sock *sk, char __user *optval, 2651 int optlen) 2652 { 2653 struct sctp_sock *sp; 2654 struct sctp_endpoint *ep; 2655 struct sctp_association *asoc = NULL; 2656 struct sctp_setpeerprim prim; 2657 struct sctp_chunk *chunk; 2658 int err; 2659 2660 sp = sctp_sk(sk); 2661 ep = sp->ep; 2662 2663 if (!sctp_addip_enable) 2664 return -EPERM; 2665 2666 if (optlen != sizeof(struct sctp_setpeerprim)) 2667 return -EINVAL; 2668 2669 if (copy_from_user(&prim, optval, optlen)) 2670 return -EFAULT; 2671 2672 asoc = sctp_id2assoc(sk, prim.sspp_assoc_id); 2673 if (!asoc) 2674 return -EINVAL; 2675 2676 if (!asoc->peer.asconf_capable) 2677 return -EPERM; 2678 2679 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_SET_PRIMARY) 2680 return -EPERM; 2681 2682 if (!sctp_state(asoc, ESTABLISHED)) 2683 return -ENOTCONN; 2684 2685 if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim.sspp_addr)) 2686 return -EADDRNOTAVAIL; 2687 2688 /* Create an ASCONF chunk with SET_PRIMARY parameter */ 2689 chunk = sctp_make_asconf_set_prim(asoc, 2690 (union sctp_addr *)&prim.sspp_addr); 2691 if (!chunk) 2692 return -ENOMEM; 2693 2694 err = sctp_send_asconf(asoc, chunk); 2695 2696 SCTP_DEBUG_PRINTK("We set peer primary addr primitively.\n"); 2697 2698 return err; 2699 } 2700 2701 static int sctp_setsockopt_adaption_layer(struct sock *sk, char __user *optval, 2702 int optlen) 2703 { 2704 struct sctp_setadaption adaption; 2705 2706 if (optlen != sizeof(struct sctp_setadaption)) 2707 return -EINVAL; 2708 if (copy_from_user(&adaption, optval, optlen)) 2709 return -EFAULT; 2710 2711 sctp_sk(sk)->adaption_ind = adaption.ssb_adaption_ind; 2712 2713 return 0; 2714 } 2715 2716 /* API 6.2 setsockopt(), getsockopt() 2717 * 2718 * Applications use setsockopt() and getsockopt() to set or retrieve 2719 * socket options. Socket options are used to change the default 2720 * behavior of sockets calls. They are described in Section 7. 2721 * 2722 * The syntax is: 2723 * 2724 * ret = getsockopt(int sd, int level, int optname, void __user *optval, 2725 * int __user *optlen); 2726 * ret = setsockopt(int sd, int level, int optname, const void __user *optval, 2727 * int optlen); 2728 * 2729 * sd - the socket descript. 2730 * level - set to IPPROTO_SCTP for all SCTP options. 2731 * optname - the option name. 2732 * optval - the buffer to store the value of the option. 2733 * optlen - the size of the buffer. 2734 */ 2735 SCTP_STATIC int sctp_setsockopt(struct sock *sk, int level, int optname, 2736 char __user *optval, int optlen) 2737 { 2738 int retval = 0; 2739 2740 SCTP_DEBUG_PRINTK("sctp_setsockopt(sk: %p... optname: %d)\n", 2741 sk, optname); 2742 2743 /* I can hardly begin to describe how wrong this is. This is 2744 * so broken as to be worse than useless. The API draft 2745 * REALLY is NOT helpful here... I am not convinced that the 2746 * semantics of setsockopt() with a level OTHER THAN SOL_SCTP 2747 * are at all well-founded. 2748 */ 2749 if (level != SOL_SCTP) { 2750 struct sctp_af *af = sctp_sk(sk)->pf->af; 2751 retval = af->setsockopt(sk, level, optname, optval, optlen); 2752 goto out_nounlock; 2753 } 2754 2755 sctp_lock_sock(sk); 2756 2757 switch (optname) { 2758 case SCTP_SOCKOPT_BINDX_ADD: 2759 /* 'optlen' is the size of the addresses buffer. */ 2760 retval = sctp_setsockopt_bindx(sk, (struct sockaddr __user *)optval, 2761 optlen, SCTP_BINDX_ADD_ADDR); 2762 break; 2763 2764 case SCTP_SOCKOPT_BINDX_REM: 2765 /* 'optlen' is the size of the addresses buffer. */ 2766 retval = sctp_setsockopt_bindx(sk, (struct sockaddr __user *)optval, 2767 optlen, SCTP_BINDX_REM_ADDR); 2768 break; 2769 2770 case SCTP_SOCKOPT_CONNECTX: 2771 /* 'optlen' is the size of the addresses buffer. */ 2772 retval = sctp_setsockopt_connectx(sk, (struct sockaddr __user *)optval, 2773 optlen); 2774 break; 2775 2776 case SCTP_DISABLE_FRAGMENTS: 2777 retval = sctp_setsockopt_disable_fragments(sk, optval, optlen); 2778 break; 2779 2780 case SCTP_EVENTS: 2781 retval = sctp_setsockopt_events(sk, optval, optlen); 2782 break; 2783 2784 case SCTP_AUTOCLOSE: 2785 retval = sctp_setsockopt_autoclose(sk, optval, optlen); 2786 break; 2787 2788 case SCTP_PEER_ADDR_PARAMS: 2789 retval = sctp_setsockopt_peer_addr_params(sk, optval, optlen); 2790 break; 2791 2792 case SCTP_DELAYED_ACK_TIME: 2793 retval = sctp_setsockopt_delayed_ack_time(sk, optval, optlen); 2794 break; 2795 2796 case SCTP_INITMSG: 2797 retval = sctp_setsockopt_initmsg(sk, optval, optlen); 2798 break; 2799 case SCTP_DEFAULT_SEND_PARAM: 2800 retval = sctp_setsockopt_default_send_param(sk, optval, 2801 optlen); 2802 break; 2803 case SCTP_PRIMARY_ADDR: 2804 retval = sctp_setsockopt_primary_addr(sk, optval, optlen); 2805 break; 2806 case SCTP_SET_PEER_PRIMARY_ADDR: 2807 retval = sctp_setsockopt_peer_primary_addr(sk, optval, optlen); 2808 break; 2809 case SCTP_NODELAY: 2810 retval = sctp_setsockopt_nodelay(sk, optval, optlen); 2811 break; 2812 case SCTP_RTOINFO: 2813 retval = sctp_setsockopt_rtoinfo(sk, optval, optlen); 2814 break; 2815 case SCTP_ASSOCINFO: 2816 retval = sctp_setsockopt_associnfo(sk, optval, optlen); 2817 break; 2818 case SCTP_I_WANT_MAPPED_V4_ADDR: 2819 retval = sctp_setsockopt_mappedv4(sk, optval, optlen); 2820 break; 2821 case SCTP_MAXSEG: 2822 retval = sctp_setsockopt_maxseg(sk, optval, optlen); 2823 break; 2824 case SCTP_ADAPTION_LAYER: 2825 retval = sctp_setsockopt_adaption_layer(sk, optval, optlen); 2826 break; 2827 2828 default: 2829 retval = -ENOPROTOOPT; 2830 break; 2831 }; 2832 2833 sctp_release_sock(sk); 2834 2835 out_nounlock: 2836 return retval; 2837 } 2838 2839 /* API 3.1.6 connect() - UDP Style Syntax 2840 * 2841 * An application may use the connect() call in the UDP model to initiate an 2842 * association without sending data. 2843 * 2844 * The syntax is: 2845 * 2846 * ret = connect(int sd, const struct sockaddr *nam, socklen_t len); 2847 * 2848 * sd: the socket descriptor to have a new association added to. 2849 * 2850 * nam: the address structure (either struct sockaddr_in or struct 2851 * sockaddr_in6 defined in RFC2553 [7]). 2852 * 2853 * len: the size of the address. 2854 */ 2855 SCTP_STATIC int sctp_connect(struct sock *sk, struct sockaddr *addr, 2856 int addr_len) 2857 { 2858 int err = 0; 2859 struct sctp_af *af; 2860 2861 sctp_lock_sock(sk); 2862 2863 SCTP_DEBUG_PRINTK("%s - sk: %p, sockaddr: %p, addr_len: %d\n", 2864 __FUNCTION__, sk, addr, addr_len); 2865 2866 /* Validate addr_len before calling common connect/connectx routine. */ 2867 af = sctp_get_af_specific(addr->sa_family); 2868 if (!af || addr_len < af->sockaddr_len) { 2869 err = -EINVAL; 2870 } else { 2871 /* Pass correct addr len to common routine (so it knows there 2872 * is only one address being passed. 2873 */ 2874 err = __sctp_connect(sk, addr, af->sockaddr_len); 2875 } 2876 2877 sctp_release_sock(sk); 2878 return err; 2879 } 2880 2881 /* FIXME: Write comments. */ 2882 SCTP_STATIC int sctp_disconnect(struct sock *sk, int flags) 2883 { 2884 return -EOPNOTSUPP; /* STUB */ 2885 } 2886 2887 /* 4.1.4 accept() - TCP Style Syntax 2888 * 2889 * Applications use accept() call to remove an established SCTP 2890 * association from the accept queue of the endpoint. A new socket 2891 * descriptor will be returned from accept() to represent the newly 2892 * formed association. 2893 */ 2894 SCTP_STATIC struct sock *sctp_accept(struct sock *sk, int flags, int *err) 2895 { 2896 struct sctp_sock *sp; 2897 struct sctp_endpoint *ep; 2898 struct sock *newsk = NULL; 2899 struct sctp_association *asoc; 2900 long timeo; 2901 int error = 0; 2902 2903 sctp_lock_sock(sk); 2904 2905 sp = sctp_sk(sk); 2906 ep = sp->ep; 2907 2908 if (!sctp_style(sk, TCP)) { 2909 error = -EOPNOTSUPP; 2910 goto out; 2911 } 2912 2913 if (!sctp_sstate(sk, LISTENING)) { 2914 error = -EINVAL; 2915 goto out; 2916 } 2917 2918 timeo = sock_rcvtimeo(sk, sk->sk_socket->file->f_flags & O_NONBLOCK); 2919 2920 error = sctp_wait_for_accept(sk, timeo); 2921 if (error) 2922 goto out; 2923 2924 /* We treat the list of associations on the endpoint as the accept 2925 * queue and pick the first association on the list. 2926 */ 2927 asoc = list_entry(ep->asocs.next, struct sctp_association, asocs); 2928 2929 newsk = sp->pf->create_accept_sk(sk, asoc); 2930 if (!newsk) { 2931 error = -ENOMEM; 2932 goto out; 2933 } 2934 2935 /* Populate the fields of the newsk from the oldsk and migrate the 2936 * asoc to the newsk. 2937 */ 2938 sctp_sock_migrate(sk, newsk, asoc, SCTP_SOCKET_TCP); 2939 2940 out: 2941 sctp_release_sock(sk); 2942 *err = error; 2943 return newsk; 2944 } 2945 2946 /* The SCTP ioctl handler. */ 2947 SCTP_STATIC int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg) 2948 { 2949 return -ENOIOCTLCMD; 2950 } 2951 2952 /* This is the function which gets called during socket creation to 2953 * initialized the SCTP-specific portion of the sock. 2954 * The sock structure should already be zero-filled memory. 2955 */ 2956 SCTP_STATIC int sctp_init_sock(struct sock *sk) 2957 { 2958 struct sctp_endpoint *ep; 2959 struct sctp_sock *sp; 2960 2961 SCTP_DEBUG_PRINTK("sctp_init_sock(sk: %p)\n", sk); 2962 2963 sp = sctp_sk(sk); 2964 2965 /* Initialize the SCTP per socket area. */ 2966 switch (sk->sk_type) { 2967 case SOCK_SEQPACKET: 2968 sp->type = SCTP_SOCKET_UDP; 2969 break; 2970 case SOCK_STREAM: 2971 sp->type = SCTP_SOCKET_TCP; 2972 break; 2973 default: 2974 return -ESOCKTNOSUPPORT; 2975 } 2976 2977 /* Initialize default send parameters. These parameters can be 2978 * modified with the SCTP_DEFAULT_SEND_PARAM socket option. 2979 */ 2980 sp->default_stream = 0; 2981 sp->default_ppid = 0; 2982 sp->default_flags = 0; 2983 sp->default_context = 0; 2984 sp->default_timetolive = 0; 2985 2986 /* Initialize default setup parameters. These parameters 2987 * can be modified with the SCTP_INITMSG socket option or 2988 * overridden by the SCTP_INIT CMSG. 2989 */ 2990 sp->initmsg.sinit_num_ostreams = sctp_max_outstreams; 2991 sp->initmsg.sinit_max_instreams = sctp_max_instreams; 2992 sp->initmsg.sinit_max_attempts = sctp_max_retrans_init; 2993 sp->initmsg.sinit_max_init_timeo = jiffies_to_msecs(sctp_rto_max); 2994 2995 /* Initialize default RTO related parameters. These parameters can 2996 * be modified for with the SCTP_RTOINFO socket option. 2997 */ 2998 sp->rtoinfo.srto_initial = jiffies_to_msecs(sctp_rto_initial); 2999 sp->rtoinfo.srto_max = jiffies_to_msecs(sctp_rto_max); 3000 sp->rtoinfo.srto_min = jiffies_to_msecs(sctp_rto_min); 3001 3002 /* Initialize default association related parameters. These parameters 3003 * can be modified with the SCTP_ASSOCINFO socket option. 3004 */ 3005 sp->assocparams.sasoc_asocmaxrxt = sctp_max_retrans_association; 3006 sp->assocparams.sasoc_number_peer_destinations = 0; 3007 sp->assocparams.sasoc_peer_rwnd = 0; 3008 sp->assocparams.sasoc_local_rwnd = 0; 3009 sp->assocparams.sasoc_cookie_life = 3010 jiffies_to_msecs(sctp_valid_cookie_life); 3011 3012 /* Initialize default event subscriptions. By default, all the 3013 * options are off. 3014 */ 3015 memset(&sp->subscribe, 0, sizeof(struct sctp_event_subscribe)); 3016 3017 /* Default Peer Address Parameters. These defaults can 3018 * be modified via SCTP_PEER_ADDR_PARAMS 3019 */ 3020 sp->hbinterval = jiffies_to_msecs(sctp_hb_interval); 3021 sp->pathmaxrxt = sctp_max_retrans_path; 3022 sp->pathmtu = 0; // allow default discovery 3023 sp->sackdelay = jiffies_to_msecs(sctp_sack_timeout); 3024 sp->param_flags = SPP_HB_ENABLE | 3025 SPP_PMTUD_ENABLE | 3026 SPP_SACKDELAY_ENABLE; 3027 3028 /* If enabled no SCTP message fragmentation will be performed. 3029 * Configure through SCTP_DISABLE_FRAGMENTS socket option. 3030 */ 3031 sp->disable_fragments = 0; 3032 3033 /* Turn on/off any Nagle-like algorithm. */ 3034 sp->nodelay = 1; 3035 3036 /* Enable by default. */ 3037 sp->v4mapped = 1; 3038 3039 /* Auto-close idle associations after the configured 3040 * number of seconds. A value of 0 disables this 3041 * feature. Configure through the SCTP_AUTOCLOSE socket option, 3042 * for UDP-style sockets only. 3043 */ 3044 sp->autoclose = 0; 3045 3046 /* User specified fragmentation limit. */ 3047 sp->user_frag = 0; 3048 3049 sp->adaption_ind = 0; 3050 3051 sp->pf = sctp_get_pf_specific(sk->sk_family); 3052 3053 /* Control variables for partial data delivery. */ 3054 sp->pd_mode = 0; 3055 skb_queue_head_init(&sp->pd_lobby); 3056 3057 /* Create a per socket endpoint structure. Even if we 3058 * change the data structure relationships, this may still 3059 * be useful for storing pre-connect address information. 3060 */ 3061 ep = sctp_endpoint_new(sk, GFP_KERNEL); 3062 if (!ep) 3063 return -ENOMEM; 3064 3065 sp->ep = ep; 3066 sp->hmac = NULL; 3067 3068 SCTP_DBG_OBJCNT_INC(sock); 3069 return 0; 3070 } 3071 3072 /* Cleanup any SCTP per socket resources. */ 3073 SCTP_STATIC int sctp_destroy_sock(struct sock *sk) 3074 { 3075 struct sctp_endpoint *ep; 3076 3077 SCTP_DEBUG_PRINTK("sctp_destroy_sock(sk: %p)\n", sk); 3078 3079 /* Release our hold on the endpoint. */ 3080 ep = sctp_sk(sk)->ep; 3081 sctp_endpoint_free(ep); 3082 3083 return 0; 3084 } 3085 3086 /* API 4.1.7 shutdown() - TCP Style Syntax 3087 * int shutdown(int socket, int how); 3088 * 3089 * sd - the socket descriptor of the association to be closed. 3090 * how - Specifies the type of shutdown. The values are 3091 * as follows: 3092 * SHUT_RD 3093 * Disables further receive operations. No SCTP 3094 * protocol action is taken. 3095 * SHUT_WR 3096 * Disables further send operations, and initiates 3097 * the SCTP shutdown sequence. 3098 * SHUT_RDWR 3099 * Disables further send and receive operations 3100 * and initiates the SCTP shutdown sequence. 3101 */ 3102 SCTP_STATIC void sctp_shutdown(struct sock *sk, int how) 3103 { 3104 struct sctp_endpoint *ep; 3105 struct sctp_association *asoc; 3106 3107 if (!sctp_style(sk, TCP)) 3108 return; 3109 3110 if (how & SEND_SHUTDOWN) { 3111 ep = sctp_sk(sk)->ep; 3112 if (!list_empty(&ep->asocs)) { 3113 asoc = list_entry(ep->asocs.next, 3114 struct sctp_association, asocs); 3115 sctp_primitive_SHUTDOWN(asoc, NULL); 3116 } 3117 } 3118 } 3119 3120 /* 7.2.1 Association Status (SCTP_STATUS) 3121 3122 * Applications can retrieve current status information about an 3123 * association, including association state, peer receiver window size, 3124 * number of unacked data chunks, and number of data chunks pending 3125 * receipt. This information is read-only. 3126 */ 3127 static int sctp_getsockopt_sctp_status(struct sock *sk, int len, 3128 char __user *optval, 3129 int __user *optlen) 3130 { 3131 struct sctp_status status; 3132 struct sctp_association *asoc = NULL; 3133 struct sctp_transport *transport; 3134 sctp_assoc_t associd; 3135 int retval = 0; 3136 3137 if (len != sizeof(status)) { 3138 retval = -EINVAL; 3139 goto out; 3140 } 3141 3142 if (copy_from_user(&status, optval, sizeof(status))) { 3143 retval = -EFAULT; 3144 goto out; 3145 } 3146 3147 associd = status.sstat_assoc_id; 3148 asoc = sctp_id2assoc(sk, associd); 3149 if (!asoc) { 3150 retval = -EINVAL; 3151 goto out; 3152 } 3153 3154 transport = asoc->peer.primary_path; 3155 3156 status.sstat_assoc_id = sctp_assoc2id(asoc); 3157 status.sstat_state = asoc->state; 3158 status.sstat_rwnd = asoc->peer.rwnd; 3159 status.sstat_unackdata = asoc->unack_data; 3160 3161 status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map); 3162 status.sstat_instrms = asoc->c.sinit_max_instreams; 3163 status.sstat_outstrms = asoc->c.sinit_num_ostreams; 3164 status.sstat_fragmentation_point = asoc->frag_point; 3165 status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc); 3166 memcpy(&status.sstat_primary.spinfo_address, 3167 &(transport->ipaddr), sizeof(union sctp_addr)); 3168 /* Map ipv4 address into v4-mapped-on-v6 address. */ 3169 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), 3170 (union sctp_addr *)&status.sstat_primary.spinfo_address); 3171 status.sstat_primary.spinfo_state = transport->state; 3172 status.sstat_primary.spinfo_cwnd = transport->cwnd; 3173 status.sstat_primary.spinfo_srtt = transport->srtt; 3174 status.sstat_primary.spinfo_rto = jiffies_to_msecs(transport->rto); 3175 status.sstat_primary.spinfo_mtu = transport->pathmtu; 3176 3177 if (status.sstat_primary.spinfo_state == SCTP_UNKNOWN) 3178 status.sstat_primary.spinfo_state = SCTP_ACTIVE; 3179 3180 if (put_user(len, optlen)) { 3181 retval = -EFAULT; 3182 goto out; 3183 } 3184 3185 SCTP_DEBUG_PRINTK("sctp_getsockopt_sctp_status(%d): %d %d %d\n", 3186 len, status.sstat_state, status.sstat_rwnd, 3187 status.sstat_assoc_id); 3188 3189 if (copy_to_user(optval, &status, len)) { 3190 retval = -EFAULT; 3191 goto out; 3192 } 3193 3194 out: 3195 return (retval); 3196 } 3197 3198 3199 /* 7.2.2 Peer Address Information (SCTP_GET_PEER_ADDR_INFO) 3200 * 3201 * Applications can retrieve information about a specific peer address 3202 * of an association, including its reachability state, congestion 3203 * window, and retransmission timer values. This information is 3204 * read-only. 3205 */ 3206 static int sctp_getsockopt_peer_addr_info(struct sock *sk, int len, 3207 char __user *optval, 3208 int __user *optlen) 3209 { 3210 struct sctp_paddrinfo pinfo; 3211 struct sctp_transport *transport; 3212 int retval = 0; 3213 3214 if (len != sizeof(pinfo)) { 3215 retval = -EINVAL; 3216 goto out; 3217 } 3218 3219 if (copy_from_user(&pinfo, optval, sizeof(pinfo))) { 3220 retval = -EFAULT; 3221 goto out; 3222 } 3223 3224 transport = sctp_addr_id2transport(sk, &pinfo.spinfo_address, 3225 pinfo.spinfo_assoc_id); 3226 if (!transport) 3227 return -EINVAL; 3228 3229 pinfo.spinfo_assoc_id = sctp_assoc2id(transport->asoc); 3230 pinfo.spinfo_state = transport->state; 3231 pinfo.spinfo_cwnd = transport->cwnd; 3232 pinfo.spinfo_srtt = transport->srtt; 3233 pinfo.spinfo_rto = jiffies_to_msecs(transport->rto); 3234 pinfo.spinfo_mtu = transport->pathmtu; 3235 3236 if (pinfo.spinfo_state == SCTP_UNKNOWN) 3237 pinfo.spinfo_state = SCTP_ACTIVE; 3238 3239 if (put_user(len, optlen)) { 3240 retval = -EFAULT; 3241 goto out; 3242 } 3243 3244 if (copy_to_user(optval, &pinfo, len)) { 3245 retval = -EFAULT; 3246 goto out; 3247 } 3248 3249 out: 3250 return (retval); 3251 } 3252 3253 /* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS) 3254 * 3255 * This option is a on/off flag. If enabled no SCTP message 3256 * fragmentation will be performed. Instead if a message being sent 3257 * exceeds the current PMTU size, the message will NOT be sent and 3258 * instead a error will be indicated to the user. 3259 */ 3260 static int sctp_getsockopt_disable_fragments(struct sock *sk, int len, 3261 char __user *optval, int __user *optlen) 3262 { 3263 int val; 3264 3265 if (len < sizeof(int)) 3266 return -EINVAL; 3267 3268 len = sizeof(int); 3269 val = (sctp_sk(sk)->disable_fragments == 1); 3270 if (put_user(len, optlen)) 3271 return -EFAULT; 3272 if (copy_to_user(optval, &val, len)) 3273 return -EFAULT; 3274 return 0; 3275 } 3276 3277 /* 7.1.15 Set notification and ancillary events (SCTP_EVENTS) 3278 * 3279 * This socket option is used to specify various notifications and 3280 * ancillary data the user wishes to receive. 3281 */ 3282 static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, 3283 int __user *optlen) 3284 { 3285 if (len != sizeof(struct sctp_event_subscribe)) 3286 return -EINVAL; 3287 if (copy_to_user(optval, &sctp_sk(sk)->subscribe, len)) 3288 return -EFAULT; 3289 return 0; 3290 } 3291 3292 /* 7.1.8 Automatic Close of associations (SCTP_AUTOCLOSE) 3293 * 3294 * This socket option is applicable to the UDP-style socket only. When 3295 * set it will cause associations that are idle for more than the 3296 * specified number of seconds to automatically close. An association 3297 * being idle is defined an association that has NOT sent or received 3298 * user data. The special value of '0' indicates that no automatic 3299 * close of any associations should be performed. The option expects an 3300 * integer defining the number of seconds of idle time before an 3301 * association is closed. 3302 */ 3303 static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen) 3304 { 3305 /* Applicable to UDP-style socket only */ 3306 if (sctp_style(sk, TCP)) 3307 return -EOPNOTSUPP; 3308 if (len != sizeof(int)) 3309 return -EINVAL; 3310 if (copy_to_user(optval, &sctp_sk(sk)->autoclose, len)) 3311 return -EFAULT; 3312 return 0; 3313 } 3314 3315 /* Helper routine to branch off an association to a new socket. */ 3316 SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc, 3317 struct socket **sockp) 3318 { 3319 struct sock *sk = asoc->base.sk; 3320 struct socket *sock; 3321 int err = 0; 3322 3323 /* An association cannot be branched off from an already peeled-off 3324 * socket, nor is this supported for tcp style sockets. 3325 */ 3326 if (!sctp_style(sk, UDP)) 3327 return -EINVAL; 3328 3329 /* Create a new socket. */ 3330 err = sock_create(sk->sk_family, SOCK_SEQPACKET, IPPROTO_SCTP, &sock); 3331 if (err < 0) 3332 return err; 3333 3334 /* Populate the fields of the newsk from the oldsk and migrate the 3335 * asoc to the newsk. 3336 */ 3337 sctp_sock_migrate(sk, sock->sk, asoc, SCTP_SOCKET_UDP_HIGH_BANDWIDTH); 3338 *sockp = sock; 3339 3340 return err; 3341 } 3342 3343 static int sctp_getsockopt_peeloff(struct sock *sk, int len, char __user *optval, int __user *optlen) 3344 { 3345 sctp_peeloff_arg_t peeloff; 3346 struct socket *newsock; 3347 int retval = 0; 3348 struct sctp_association *asoc; 3349 3350 if (len != sizeof(sctp_peeloff_arg_t)) 3351 return -EINVAL; 3352 if (copy_from_user(&peeloff, optval, len)) 3353 return -EFAULT; 3354 3355 asoc = sctp_id2assoc(sk, peeloff.associd); 3356 if (!asoc) { 3357 retval = -EINVAL; 3358 goto out; 3359 } 3360 3361 SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p\n", __FUNCTION__, sk, asoc); 3362 3363 retval = sctp_do_peeloff(asoc, &newsock); 3364 if (retval < 0) 3365 goto out; 3366 3367 /* Map the socket to an unused fd that can be returned to the user. */ 3368 retval = sock_map_fd(newsock); 3369 if (retval < 0) { 3370 sock_release(newsock); 3371 goto out; 3372 } 3373 3374 SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p newsk: %p sd: %d\n", 3375 __FUNCTION__, sk, asoc, newsock->sk, retval); 3376 3377 /* Return the fd mapped to the new socket. */ 3378 peeloff.sd = retval; 3379 if (copy_to_user(optval, &peeloff, len)) 3380 retval = -EFAULT; 3381 3382 out: 3383 return retval; 3384 } 3385 3386 /* 7.1.13 Peer Address Parameters (SCTP_PEER_ADDR_PARAMS) 3387 * 3388 * Applications can enable or disable heartbeats for any peer address of 3389 * an association, modify an address's heartbeat interval, force a 3390 * heartbeat to be sent immediately, and adjust the address's maximum 3391 * number of retransmissions sent before an address is considered 3392 * unreachable. The following structure is used to access and modify an 3393 * address's parameters: 3394 * 3395 * struct sctp_paddrparams { 3396 * sctp_assoc_t spp_assoc_id; 3397 * struct sockaddr_storage spp_address; 3398 * uint32_t spp_hbinterval; 3399 * uint16_t spp_pathmaxrxt; 3400 * uint32_t spp_pathmtu; 3401 * uint32_t spp_sackdelay; 3402 * uint32_t spp_flags; 3403 * }; 3404 * 3405 * spp_assoc_id - (one-to-many style socket) This is filled in the 3406 * application, and identifies the association for 3407 * this query. 3408 * spp_address - This specifies which address is of interest. 3409 * spp_hbinterval - This contains the value of the heartbeat interval, 3410 * in milliseconds. If a value of zero 3411 * is present in this field then no changes are to 3412 * be made to this parameter. 3413 * spp_pathmaxrxt - This contains the maximum number of 3414 * retransmissions before this address shall be 3415 * considered unreachable. If a value of zero 3416 * is present in this field then no changes are to 3417 * be made to this parameter. 3418 * spp_pathmtu - When Path MTU discovery is disabled the value 3419 * specified here will be the "fixed" path mtu. 3420 * Note that if the spp_address field is empty 3421 * then all associations on this address will 3422 * have this fixed path mtu set upon them. 3423 * 3424 * spp_sackdelay - When delayed sack is enabled, this value specifies 3425 * the number of milliseconds that sacks will be delayed 3426 * for. This value will apply to all addresses of an 3427 * association if the spp_address field is empty. Note 3428 * also, that if delayed sack is enabled and this 3429 * value is set to 0, no change is made to the last 3430 * recorded delayed sack timer value. 3431 * 3432 * spp_flags - These flags are used to control various features 3433 * on an association. The flag field may contain 3434 * zero or more of the following options. 3435 * 3436 * SPP_HB_ENABLE - Enable heartbeats on the 3437 * specified address. Note that if the address 3438 * field is empty all addresses for the association 3439 * have heartbeats enabled upon them. 3440 * 3441 * SPP_HB_DISABLE - Disable heartbeats on the 3442 * speicifed address. Note that if the address 3443 * field is empty all addresses for the association 3444 * will have their heartbeats disabled. Note also 3445 * that SPP_HB_ENABLE and SPP_HB_DISABLE are 3446 * mutually exclusive, only one of these two should 3447 * be specified. Enabling both fields will have 3448 * undetermined results. 3449 * 3450 * SPP_HB_DEMAND - Request a user initiated heartbeat 3451 * to be made immediately. 3452 * 3453 * SPP_PMTUD_ENABLE - This field will enable PMTU 3454 * discovery upon the specified address. Note that 3455 * if the address feild is empty then all addresses 3456 * on the association are effected. 3457 * 3458 * SPP_PMTUD_DISABLE - This field will disable PMTU 3459 * discovery upon the specified address. Note that 3460 * if the address feild is empty then all addresses 3461 * on the association are effected. Not also that 3462 * SPP_PMTUD_ENABLE and SPP_PMTUD_DISABLE are mutually 3463 * exclusive. Enabling both will have undetermined 3464 * results. 3465 * 3466 * SPP_SACKDELAY_ENABLE - Setting this flag turns 3467 * on delayed sack. The time specified in spp_sackdelay 3468 * is used to specify the sack delay for this address. Note 3469 * that if spp_address is empty then all addresses will 3470 * enable delayed sack and take on the sack delay 3471 * value specified in spp_sackdelay. 3472 * SPP_SACKDELAY_DISABLE - Setting this flag turns 3473 * off delayed sack. If the spp_address field is blank then 3474 * delayed sack is disabled for the entire association. Note 3475 * also that this field is mutually exclusive to 3476 * SPP_SACKDELAY_ENABLE, setting both will have undefined 3477 * results. 3478 */ 3479 static int sctp_getsockopt_peer_addr_params(struct sock *sk, int len, 3480 char __user *optval, int __user *optlen) 3481 { 3482 struct sctp_paddrparams params; 3483 struct sctp_transport *trans = NULL; 3484 struct sctp_association *asoc = NULL; 3485 struct sctp_sock *sp = sctp_sk(sk); 3486 3487 if (len != sizeof(struct sctp_paddrparams)) 3488 return -EINVAL; 3489 3490 if (copy_from_user(¶ms, optval, len)) 3491 return -EFAULT; 3492 3493 /* If an address other than INADDR_ANY is specified, and 3494 * no transport is found, then the request is invalid. 3495 */ 3496 if (!sctp_is_any(( union sctp_addr *)¶ms.spp_address)) { 3497 trans = sctp_addr_id2transport(sk, ¶ms.spp_address, 3498 params.spp_assoc_id); 3499 if (!trans) { 3500 SCTP_DEBUG_PRINTK("Failed no transport\n"); 3501 return -EINVAL; 3502 } 3503 } 3504 3505 /* Get association, if assoc_id != 0 and the socket is a one 3506 * to many style socket, and an association was not found, then 3507 * the id was invalid. 3508 */ 3509 asoc = sctp_id2assoc(sk, params.spp_assoc_id); 3510 if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) { 3511 SCTP_DEBUG_PRINTK("Failed no association\n"); 3512 return -EINVAL; 3513 } 3514 3515 if (trans) { 3516 /* Fetch transport values. */ 3517 params.spp_hbinterval = jiffies_to_msecs(trans->hbinterval); 3518 params.spp_pathmtu = trans->pathmtu; 3519 params.spp_pathmaxrxt = trans->pathmaxrxt; 3520 params.spp_sackdelay = jiffies_to_msecs(trans->sackdelay); 3521 3522 /*draft-11 doesn't say what to return in spp_flags*/ 3523 params.spp_flags = trans->param_flags; 3524 } else if (asoc) { 3525 /* Fetch association values. */ 3526 params.spp_hbinterval = jiffies_to_msecs(asoc->hbinterval); 3527 params.spp_pathmtu = asoc->pathmtu; 3528 params.spp_pathmaxrxt = asoc->pathmaxrxt; 3529 params.spp_sackdelay = jiffies_to_msecs(asoc->sackdelay); 3530 3531 /*draft-11 doesn't say what to return in spp_flags*/ 3532 params.spp_flags = asoc->param_flags; 3533 } else { 3534 /* Fetch socket values. */ 3535 params.spp_hbinterval = sp->hbinterval; 3536 params.spp_pathmtu = sp->pathmtu; 3537 params.spp_sackdelay = sp->sackdelay; 3538 params.spp_pathmaxrxt = sp->pathmaxrxt; 3539 3540 /*draft-11 doesn't say what to return in spp_flags*/ 3541 params.spp_flags = sp->param_flags; 3542 } 3543 3544 if (copy_to_user(optval, ¶ms, len)) 3545 return -EFAULT; 3546 3547 if (put_user(len, optlen)) 3548 return -EFAULT; 3549 3550 return 0; 3551 } 3552 3553 /* 7.1.24. Delayed Ack Timer (SCTP_DELAYED_ACK_TIME) 3554 * 3555 * This options will get or set the delayed ack timer. The time is set 3556 * in milliseconds. If the assoc_id is 0, then this sets or gets the 3557 * endpoints default delayed ack timer value. If the assoc_id field is 3558 * non-zero, then the set or get effects the specified association. 3559 * 3560 * struct sctp_assoc_value { 3561 * sctp_assoc_t assoc_id; 3562 * uint32_t assoc_value; 3563 * }; 3564 * 3565 * assoc_id - This parameter, indicates which association the 3566 * user is preforming an action upon. Note that if 3567 * this field's value is zero then the endpoints 3568 * default value is changed (effecting future 3569 * associations only). 3570 * 3571 * assoc_value - This parameter contains the number of milliseconds 3572 * that the user is requesting the delayed ACK timer 3573 * be set to. Note that this value is defined in 3574 * the standard to be between 200 and 500 milliseconds. 3575 * 3576 * Note: a value of zero will leave the value alone, 3577 * but disable SACK delay. A non-zero value will also 3578 * enable SACK delay. 3579 */ 3580 static int sctp_getsockopt_delayed_ack_time(struct sock *sk, int len, 3581 char __user *optval, 3582 int __user *optlen) 3583 { 3584 struct sctp_assoc_value params; 3585 struct sctp_association *asoc = NULL; 3586 struct sctp_sock *sp = sctp_sk(sk); 3587 3588 if (len != sizeof(struct sctp_assoc_value)) 3589 return - EINVAL; 3590 3591 if (copy_from_user(¶ms, optval, len)) 3592 return -EFAULT; 3593 3594 /* Get association, if assoc_id != 0 and the socket is a one 3595 * to many style socket, and an association was not found, then 3596 * the id was invalid. 3597 */ 3598 asoc = sctp_id2assoc(sk, params.assoc_id); 3599 if (!asoc && params.assoc_id && sctp_style(sk, UDP)) 3600 return -EINVAL; 3601 3602 if (asoc) { 3603 /* Fetch association values. */ 3604 if (asoc->param_flags & SPP_SACKDELAY_ENABLE) 3605 params.assoc_value = jiffies_to_msecs( 3606 asoc->sackdelay); 3607 else 3608 params.assoc_value = 0; 3609 } else { 3610 /* Fetch socket values. */ 3611 if (sp->param_flags & SPP_SACKDELAY_ENABLE) 3612 params.assoc_value = sp->sackdelay; 3613 else 3614 params.assoc_value = 0; 3615 } 3616 3617 if (copy_to_user(optval, ¶ms, len)) 3618 return -EFAULT; 3619 3620 if (put_user(len, optlen)) 3621 return -EFAULT; 3622 3623 return 0; 3624 } 3625 3626 /* 7.1.3 Initialization Parameters (SCTP_INITMSG) 3627 * 3628 * Applications can specify protocol parameters for the default association 3629 * initialization. The option name argument to setsockopt() and getsockopt() 3630 * is SCTP_INITMSG. 3631 * 3632 * Setting initialization parameters is effective only on an unconnected 3633 * socket (for UDP-style sockets only future associations are effected 3634 * by the change). With TCP-style sockets, this option is inherited by 3635 * sockets derived from a listener socket. 3636 */ 3637 static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen) 3638 { 3639 if (len != sizeof(struct sctp_initmsg)) 3640 return -EINVAL; 3641 if (copy_to_user(optval, &sctp_sk(sk)->initmsg, len)) 3642 return -EFAULT; 3643 return 0; 3644 } 3645 3646 static int sctp_getsockopt_peer_addrs_num_old(struct sock *sk, int len, 3647 char __user *optval, 3648 int __user *optlen) 3649 { 3650 sctp_assoc_t id; 3651 struct sctp_association *asoc; 3652 struct list_head *pos; 3653 int cnt = 0; 3654 3655 if (len != sizeof(sctp_assoc_t)) 3656 return -EINVAL; 3657 3658 if (copy_from_user(&id, optval, sizeof(sctp_assoc_t))) 3659 return -EFAULT; 3660 3661 /* For UDP-style sockets, id specifies the association to query. */ 3662 asoc = sctp_id2assoc(sk, id); 3663 if (!asoc) 3664 return -EINVAL; 3665 3666 list_for_each(pos, &asoc->peer.transport_addr_list) { 3667 cnt ++; 3668 } 3669 3670 return cnt; 3671 } 3672 3673 /* 3674 * Old API for getting list of peer addresses. Does not work for 32-bit 3675 * programs running on a 64-bit kernel 3676 */ 3677 static int sctp_getsockopt_peer_addrs_old(struct sock *sk, int len, 3678 char __user *optval, 3679 int __user *optlen) 3680 { 3681 struct sctp_association *asoc; 3682 struct list_head *pos; 3683 int cnt = 0; 3684 struct sctp_getaddrs_old getaddrs; 3685 struct sctp_transport *from; 3686 void __user *to; 3687 union sctp_addr temp; 3688 struct sctp_sock *sp = sctp_sk(sk); 3689 int addrlen; 3690 3691 if (len != sizeof(struct sctp_getaddrs_old)) 3692 return -EINVAL; 3693 3694 if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs_old))) 3695 return -EFAULT; 3696 3697 if (getaddrs.addr_num <= 0) return -EINVAL; 3698 3699 /* For UDP-style sockets, id specifies the association to query. */ 3700 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); 3701 if (!asoc) 3702 return -EINVAL; 3703 3704 to = (void __user *)getaddrs.addrs; 3705 list_for_each(pos, &asoc->peer.transport_addr_list) { 3706 from = list_entry(pos, struct sctp_transport, transports); 3707 memcpy(&temp, &from->ipaddr, sizeof(temp)); 3708 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); 3709 addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len; 3710 temp.v4.sin_port = htons(temp.v4.sin_port); 3711 if (copy_to_user(to, &temp, addrlen)) 3712 return -EFAULT; 3713 to += addrlen ; 3714 cnt ++; 3715 if (cnt >= getaddrs.addr_num) break; 3716 } 3717 getaddrs.addr_num = cnt; 3718 if (copy_to_user(optval, &getaddrs, sizeof(struct sctp_getaddrs_old))) 3719 return -EFAULT; 3720 3721 return 0; 3722 } 3723 3724 static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, 3725 char __user *optval, int __user *optlen) 3726 { 3727 struct sctp_association *asoc; 3728 struct list_head *pos; 3729 int cnt = 0; 3730 struct sctp_getaddrs getaddrs; 3731 struct sctp_transport *from; 3732 void __user *to; 3733 union sctp_addr temp; 3734 struct sctp_sock *sp = sctp_sk(sk); 3735 int addrlen; 3736 size_t space_left; 3737 int bytes_copied; 3738 3739 if (len < sizeof(struct sctp_getaddrs)) 3740 return -EINVAL; 3741 3742 if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) 3743 return -EFAULT; 3744 3745 /* For UDP-style sockets, id specifies the association to query. */ 3746 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); 3747 if (!asoc) 3748 return -EINVAL; 3749 3750 to = optval + offsetof(struct sctp_getaddrs,addrs); 3751 space_left = len - sizeof(struct sctp_getaddrs) - 3752 offsetof(struct sctp_getaddrs,addrs); 3753 3754 list_for_each(pos, &asoc->peer.transport_addr_list) { 3755 from = list_entry(pos, struct sctp_transport, transports); 3756 memcpy(&temp, &from->ipaddr, sizeof(temp)); 3757 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); 3758 addrlen = sctp_get_af_specific(sk->sk_family)->sockaddr_len; 3759 if(space_left < addrlen) 3760 return -ENOMEM; 3761 temp.v4.sin_port = htons(temp.v4.sin_port); 3762 if (copy_to_user(to, &temp, addrlen)) 3763 return -EFAULT; 3764 to += addrlen; 3765 cnt++; 3766 space_left -= addrlen; 3767 } 3768 3769 if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) 3770 return -EFAULT; 3771 bytes_copied = ((char __user *)to) - optval; 3772 if (put_user(bytes_copied, optlen)) 3773 return -EFAULT; 3774 3775 return 0; 3776 } 3777 3778 static int sctp_getsockopt_local_addrs_num_old(struct sock *sk, int len, 3779 char __user *optval, 3780 int __user *optlen) 3781 { 3782 sctp_assoc_t id; 3783 struct sctp_bind_addr *bp; 3784 struct sctp_association *asoc; 3785 struct list_head *pos; 3786 struct sctp_sockaddr_entry *addr; 3787 rwlock_t *addr_lock; 3788 unsigned long flags; 3789 int cnt = 0; 3790 3791 if (len != sizeof(sctp_assoc_t)) 3792 return -EINVAL; 3793 3794 if (copy_from_user(&id, optval, sizeof(sctp_assoc_t))) 3795 return -EFAULT; 3796 3797 /* 3798 * For UDP-style sockets, id specifies the association to query. 3799 * If the id field is set to the value '0' then the locally bound 3800 * addresses are returned without regard to any particular 3801 * association. 3802 */ 3803 if (0 == id) { 3804 bp = &sctp_sk(sk)->ep->base.bind_addr; 3805 addr_lock = &sctp_sk(sk)->ep->base.addr_lock; 3806 } else { 3807 asoc = sctp_id2assoc(sk, id); 3808 if (!asoc) 3809 return -EINVAL; 3810 bp = &asoc->base.bind_addr; 3811 addr_lock = &asoc->base.addr_lock; 3812 } 3813 3814 sctp_read_lock(addr_lock); 3815 3816 /* If the endpoint is bound to 0.0.0.0 or ::0, count the valid 3817 * addresses from the global local address list. 3818 */ 3819 if (sctp_list_single_entry(&bp->address_list)) { 3820 addr = list_entry(bp->address_list.next, 3821 struct sctp_sockaddr_entry, list); 3822 if (sctp_is_any(&addr->a)) { 3823 sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); 3824 list_for_each(pos, &sctp_local_addr_list) { 3825 addr = list_entry(pos, 3826 struct sctp_sockaddr_entry, 3827 list); 3828 if ((PF_INET == sk->sk_family) && 3829 (AF_INET6 == addr->a.sa.sa_family)) 3830 continue; 3831 cnt++; 3832 } 3833 sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, 3834 flags); 3835 } else { 3836 cnt = 1; 3837 } 3838 goto done; 3839 } 3840 3841 list_for_each(pos, &bp->address_list) { 3842 cnt ++; 3843 } 3844 3845 done: 3846 sctp_read_unlock(addr_lock); 3847 return cnt; 3848 } 3849 3850 /* Helper function that copies local addresses to user and returns the number 3851 * of addresses copied. 3852 */ 3853 static int sctp_copy_laddrs_to_user_old(struct sock *sk, __u16 port, int max_addrs, 3854 void __user *to) 3855 { 3856 struct list_head *pos; 3857 struct sctp_sockaddr_entry *addr; 3858 unsigned long flags; 3859 union sctp_addr temp; 3860 int cnt = 0; 3861 int addrlen; 3862 3863 sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); 3864 list_for_each(pos, &sctp_local_addr_list) { 3865 addr = list_entry(pos, struct sctp_sockaddr_entry, list); 3866 if ((PF_INET == sk->sk_family) && 3867 (AF_INET6 == addr->a.sa.sa_family)) 3868 continue; 3869 memcpy(&temp, &addr->a, sizeof(temp)); 3870 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), 3871 &temp); 3872 addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; 3873 temp.v4.sin_port = htons(port); 3874 if (copy_to_user(to, &temp, addrlen)) { 3875 sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, 3876 flags); 3877 return -EFAULT; 3878 } 3879 to += addrlen; 3880 cnt ++; 3881 if (cnt >= max_addrs) break; 3882 } 3883 sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, flags); 3884 3885 return cnt; 3886 } 3887 3888 static int sctp_copy_laddrs_to_user(struct sock *sk, __u16 port, 3889 void __user **to, size_t space_left) 3890 { 3891 struct list_head *pos; 3892 struct sctp_sockaddr_entry *addr; 3893 unsigned long flags; 3894 union sctp_addr temp; 3895 int cnt = 0; 3896 int addrlen; 3897 3898 sctp_spin_lock_irqsave(&sctp_local_addr_lock, flags); 3899 list_for_each(pos, &sctp_local_addr_list) { 3900 addr = list_entry(pos, struct sctp_sockaddr_entry, list); 3901 if ((PF_INET == sk->sk_family) && 3902 (AF_INET6 == addr->a.sa.sa_family)) 3903 continue; 3904 memcpy(&temp, &addr->a, sizeof(temp)); 3905 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sctp_sk(sk), 3906 &temp); 3907 addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; 3908 if(space_left<addrlen) 3909 return -ENOMEM; 3910 temp.v4.sin_port = htons(port); 3911 if (copy_to_user(*to, &temp, addrlen)) { 3912 sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, 3913 flags); 3914 return -EFAULT; 3915 } 3916 *to += addrlen; 3917 cnt ++; 3918 space_left -= addrlen; 3919 } 3920 sctp_spin_unlock_irqrestore(&sctp_local_addr_lock, flags); 3921 3922 return cnt; 3923 } 3924 3925 /* Old API for getting list of local addresses. Does not work for 32-bit 3926 * programs running on a 64-bit kernel 3927 */ 3928 static int sctp_getsockopt_local_addrs_old(struct sock *sk, int len, 3929 char __user *optval, int __user *optlen) 3930 { 3931 struct sctp_bind_addr *bp; 3932 struct sctp_association *asoc; 3933 struct list_head *pos; 3934 int cnt = 0; 3935 struct sctp_getaddrs_old getaddrs; 3936 struct sctp_sockaddr_entry *addr; 3937 void __user *to; 3938 union sctp_addr temp; 3939 struct sctp_sock *sp = sctp_sk(sk); 3940 int addrlen; 3941 rwlock_t *addr_lock; 3942 int err = 0; 3943 3944 if (len != sizeof(struct sctp_getaddrs_old)) 3945 return -EINVAL; 3946 3947 if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs_old))) 3948 return -EFAULT; 3949 3950 if (getaddrs.addr_num <= 0) return -EINVAL; 3951 /* 3952 * For UDP-style sockets, id specifies the association to query. 3953 * If the id field is set to the value '0' then the locally bound 3954 * addresses are returned without regard to any particular 3955 * association. 3956 */ 3957 if (0 == getaddrs.assoc_id) { 3958 bp = &sctp_sk(sk)->ep->base.bind_addr; 3959 addr_lock = &sctp_sk(sk)->ep->base.addr_lock; 3960 } else { 3961 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); 3962 if (!asoc) 3963 return -EINVAL; 3964 bp = &asoc->base.bind_addr; 3965 addr_lock = &asoc->base.addr_lock; 3966 } 3967 3968 to = getaddrs.addrs; 3969 3970 sctp_read_lock(addr_lock); 3971 3972 /* If the endpoint is bound to 0.0.0.0 or ::0, get the valid 3973 * addresses from the global local address list. 3974 */ 3975 if (sctp_list_single_entry(&bp->address_list)) { 3976 addr = list_entry(bp->address_list.next, 3977 struct sctp_sockaddr_entry, list); 3978 if (sctp_is_any(&addr->a)) { 3979 cnt = sctp_copy_laddrs_to_user_old(sk, bp->port, 3980 getaddrs.addr_num, 3981 to); 3982 if (cnt < 0) { 3983 err = cnt; 3984 goto unlock; 3985 } 3986 goto copy_getaddrs; 3987 } 3988 } 3989 3990 list_for_each(pos, &bp->address_list) { 3991 addr = list_entry(pos, struct sctp_sockaddr_entry, list); 3992 memcpy(&temp, &addr->a, sizeof(temp)); 3993 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); 3994 addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; 3995 temp.v4.sin_port = htons(temp.v4.sin_port); 3996 if (copy_to_user(to, &temp, addrlen)) { 3997 err = -EFAULT; 3998 goto unlock; 3999 } 4000 to += addrlen; 4001 cnt ++; 4002 if (cnt >= getaddrs.addr_num) break; 4003 } 4004 4005 copy_getaddrs: 4006 getaddrs.addr_num = cnt; 4007 if (copy_to_user(optval, &getaddrs, sizeof(struct sctp_getaddrs_old))) 4008 err = -EFAULT; 4009 4010 unlock: 4011 sctp_read_unlock(addr_lock); 4012 return err; 4013 } 4014 4015 static int sctp_getsockopt_local_addrs(struct sock *sk, int len, 4016 char __user *optval, int __user *optlen) 4017 { 4018 struct sctp_bind_addr *bp; 4019 struct sctp_association *asoc; 4020 struct list_head *pos; 4021 int cnt = 0; 4022 struct sctp_getaddrs getaddrs; 4023 struct sctp_sockaddr_entry *addr; 4024 void __user *to; 4025 union sctp_addr temp; 4026 struct sctp_sock *sp = sctp_sk(sk); 4027 int addrlen; 4028 rwlock_t *addr_lock; 4029 int err = 0; 4030 size_t space_left; 4031 int bytes_copied; 4032 4033 if (len <= sizeof(struct sctp_getaddrs)) 4034 return -EINVAL; 4035 4036 if (copy_from_user(&getaddrs, optval, sizeof(struct sctp_getaddrs))) 4037 return -EFAULT; 4038 4039 /* 4040 * For UDP-style sockets, id specifies the association to query. 4041 * If the id field is set to the value '0' then the locally bound 4042 * addresses are returned without regard to any particular 4043 * association. 4044 */ 4045 if (0 == getaddrs.assoc_id) { 4046 bp = &sctp_sk(sk)->ep->base.bind_addr; 4047 addr_lock = &sctp_sk(sk)->ep->base.addr_lock; 4048 } else { 4049 asoc = sctp_id2assoc(sk, getaddrs.assoc_id); 4050 if (!asoc) 4051 return -EINVAL; 4052 bp = &asoc->base.bind_addr; 4053 addr_lock = &asoc->base.addr_lock; 4054 } 4055 4056 to = optval + offsetof(struct sctp_getaddrs,addrs); 4057 space_left = len - sizeof(struct sctp_getaddrs) - 4058 offsetof(struct sctp_getaddrs,addrs); 4059 4060 sctp_read_lock(addr_lock); 4061 4062 /* If the endpoint is bound to 0.0.0.0 or ::0, get the valid 4063 * addresses from the global local address list. 4064 */ 4065 if (sctp_list_single_entry(&bp->address_list)) { 4066 addr = list_entry(bp->address_list.next, 4067 struct sctp_sockaddr_entry, list); 4068 if (sctp_is_any(&addr->a)) { 4069 cnt = sctp_copy_laddrs_to_user(sk, bp->port, 4070 &to, space_left); 4071 if (cnt < 0) { 4072 err = cnt; 4073 goto unlock; 4074 } 4075 goto copy_getaddrs; 4076 } 4077 } 4078 4079 list_for_each(pos, &bp->address_list) { 4080 addr = list_entry(pos, struct sctp_sockaddr_entry, list); 4081 memcpy(&temp, &addr->a, sizeof(temp)); 4082 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, &temp); 4083 addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; 4084 if(space_left < addrlen) 4085 return -ENOMEM; /*fixme: right error?*/ 4086 temp.v4.sin_port = htons(temp.v4.sin_port); 4087 if (copy_to_user(to, &temp, addrlen)) { 4088 err = -EFAULT; 4089 goto unlock; 4090 } 4091 to += addrlen; 4092 cnt ++; 4093 space_left -= addrlen; 4094 } 4095 4096 copy_getaddrs: 4097 if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) 4098 return -EFAULT; 4099 bytes_copied = ((char __user *)to) - optval; 4100 if (put_user(bytes_copied, optlen)) 4101 return -EFAULT; 4102 4103 unlock: 4104 sctp_read_unlock(addr_lock); 4105 return err; 4106 } 4107 4108 /* 7.1.10 Set Primary Address (SCTP_PRIMARY_ADDR) 4109 * 4110 * Requests that the local SCTP stack use the enclosed peer address as 4111 * the association primary. The enclosed address must be one of the 4112 * association peer's addresses. 4113 */ 4114 static int sctp_getsockopt_primary_addr(struct sock *sk, int len, 4115 char __user *optval, int __user *optlen) 4116 { 4117 struct sctp_prim prim; 4118 struct sctp_association *asoc; 4119 struct sctp_sock *sp = sctp_sk(sk); 4120 4121 if (len != sizeof(struct sctp_prim)) 4122 return -EINVAL; 4123 4124 if (copy_from_user(&prim, optval, sizeof(struct sctp_prim))) 4125 return -EFAULT; 4126 4127 asoc = sctp_id2assoc(sk, prim.ssp_assoc_id); 4128 if (!asoc) 4129 return -EINVAL; 4130 4131 if (!asoc->peer.primary_path) 4132 return -ENOTCONN; 4133 4134 asoc->peer.primary_path->ipaddr.v4.sin_port = 4135 htons(asoc->peer.primary_path->ipaddr.v4.sin_port); 4136 memcpy(&prim.ssp_addr, &asoc->peer.primary_path->ipaddr, 4137 sizeof(union sctp_addr)); 4138 asoc->peer.primary_path->ipaddr.v4.sin_port = 4139 ntohs(asoc->peer.primary_path->ipaddr.v4.sin_port); 4140 4141 sctp_get_pf_specific(sk->sk_family)->addr_v4map(sp, 4142 (union sctp_addr *)&prim.ssp_addr); 4143 4144 if (copy_to_user(optval, &prim, sizeof(struct sctp_prim))) 4145 return -EFAULT; 4146 4147 return 0; 4148 } 4149 4150 /* 4151 * 7.1.11 Set Adaption Layer Indicator (SCTP_ADAPTION_LAYER) 4152 * 4153 * Requests that the local endpoint set the specified Adaption Layer 4154 * Indication parameter for all future INIT and INIT-ACK exchanges. 4155 */ 4156 static int sctp_getsockopt_adaption_layer(struct sock *sk, int len, 4157 char __user *optval, int __user *optlen) 4158 { 4159 struct sctp_setadaption adaption; 4160 4161 if (len != sizeof(struct sctp_setadaption)) 4162 return -EINVAL; 4163 4164 adaption.ssb_adaption_ind = sctp_sk(sk)->adaption_ind; 4165 if (copy_to_user(optval, &adaption, len)) 4166 return -EFAULT; 4167 4168 return 0; 4169 } 4170 4171 /* 4172 * 4173 * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM) 4174 * 4175 * Applications that wish to use the sendto() system call may wish to 4176 * specify a default set of parameters that would normally be supplied 4177 * through the inclusion of ancillary data. This socket option allows 4178 * such an application to set the default sctp_sndrcvinfo structure. 4179 4180 4181 * The application that wishes to use this socket option simply passes 4182 * in to this call the sctp_sndrcvinfo structure defined in Section 4183 * 5.2.2) The input parameters accepted by this call include 4184 * sinfo_stream, sinfo_flags, sinfo_ppid, sinfo_context, 4185 * sinfo_timetolive. The user must provide the sinfo_assoc_id field in 4186 * to this call if the caller is using the UDP model. 4187 * 4188 * For getsockopt, it get the default sctp_sndrcvinfo structure. 4189 */ 4190 static int sctp_getsockopt_default_send_param(struct sock *sk, 4191 int len, char __user *optval, 4192 int __user *optlen) 4193 { 4194 struct sctp_sndrcvinfo info; 4195 struct sctp_association *asoc; 4196 struct sctp_sock *sp = sctp_sk(sk); 4197 4198 if (len != sizeof(struct sctp_sndrcvinfo)) 4199 return -EINVAL; 4200 if (copy_from_user(&info, optval, sizeof(struct sctp_sndrcvinfo))) 4201 return -EFAULT; 4202 4203 asoc = sctp_id2assoc(sk, info.sinfo_assoc_id); 4204 if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP)) 4205 return -EINVAL; 4206 4207 if (asoc) { 4208 info.sinfo_stream = asoc->default_stream; 4209 info.sinfo_flags = asoc->default_flags; 4210 info.sinfo_ppid = asoc->default_ppid; 4211 info.sinfo_context = asoc->default_context; 4212 info.sinfo_timetolive = asoc->default_timetolive; 4213 } else { 4214 info.sinfo_stream = sp->default_stream; 4215 info.sinfo_flags = sp->default_flags; 4216 info.sinfo_ppid = sp->default_ppid; 4217 info.sinfo_context = sp->default_context; 4218 info.sinfo_timetolive = sp->default_timetolive; 4219 } 4220 4221 if (copy_to_user(optval, &info, sizeof(struct sctp_sndrcvinfo))) 4222 return -EFAULT; 4223 4224 return 0; 4225 } 4226 4227 /* 4228 * 4229 * 7.1.5 SCTP_NODELAY 4230 * 4231 * Turn on/off any Nagle-like algorithm. This means that packets are 4232 * generally sent as soon as possible and no unnecessary delays are 4233 * introduced, at the cost of more packets in the network. Expects an 4234 * integer boolean flag. 4235 */ 4236 4237 static int sctp_getsockopt_nodelay(struct sock *sk, int len, 4238 char __user *optval, int __user *optlen) 4239 { 4240 int val; 4241 4242 if (len < sizeof(int)) 4243 return -EINVAL; 4244 4245 len = sizeof(int); 4246 val = (sctp_sk(sk)->nodelay == 1); 4247 if (put_user(len, optlen)) 4248 return -EFAULT; 4249 if (copy_to_user(optval, &val, len)) 4250 return -EFAULT; 4251 return 0; 4252 } 4253 4254 /* 4255 * 4256 * 7.1.1 SCTP_RTOINFO 4257 * 4258 * The protocol parameters used to initialize and bound retransmission 4259 * timeout (RTO) are tunable. sctp_rtoinfo structure is used to access 4260 * and modify these parameters. 4261 * All parameters are time values, in milliseconds. A value of 0, when 4262 * modifying the parameters, indicates that the current value should not 4263 * be changed. 4264 * 4265 */ 4266 static int sctp_getsockopt_rtoinfo(struct sock *sk, int len, 4267 char __user *optval, 4268 int __user *optlen) { 4269 struct sctp_rtoinfo rtoinfo; 4270 struct sctp_association *asoc; 4271 4272 if (len != sizeof (struct sctp_rtoinfo)) 4273 return -EINVAL; 4274 4275 if (copy_from_user(&rtoinfo, optval, sizeof (struct sctp_rtoinfo))) 4276 return -EFAULT; 4277 4278 asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id); 4279 4280 if (!asoc && rtoinfo.srto_assoc_id && sctp_style(sk, UDP)) 4281 return -EINVAL; 4282 4283 /* Values corresponding to the specific association. */ 4284 if (asoc) { 4285 rtoinfo.srto_initial = jiffies_to_msecs(asoc->rto_initial); 4286 rtoinfo.srto_max = jiffies_to_msecs(asoc->rto_max); 4287 rtoinfo.srto_min = jiffies_to_msecs(asoc->rto_min); 4288 } else { 4289 /* Values corresponding to the endpoint. */ 4290 struct sctp_sock *sp = sctp_sk(sk); 4291 4292 rtoinfo.srto_initial = sp->rtoinfo.srto_initial; 4293 rtoinfo.srto_max = sp->rtoinfo.srto_max; 4294 rtoinfo.srto_min = sp->rtoinfo.srto_min; 4295 } 4296 4297 if (put_user(len, optlen)) 4298 return -EFAULT; 4299 4300 if (copy_to_user(optval, &rtoinfo, len)) 4301 return -EFAULT; 4302 4303 return 0; 4304 } 4305 4306 /* 4307 * 4308 * 7.1.2 SCTP_ASSOCINFO 4309 * 4310 * This option is used to tune the the maximum retransmission attempts 4311 * of the association. 4312 * Returns an error if the new association retransmission value is 4313 * greater than the sum of the retransmission value of the peer. 4314 * See [SCTP] for more information. 4315 * 4316 */ 4317 static int sctp_getsockopt_associnfo(struct sock *sk, int len, 4318 char __user *optval, 4319 int __user *optlen) 4320 { 4321 4322 struct sctp_assocparams assocparams; 4323 struct sctp_association *asoc; 4324 struct list_head *pos; 4325 int cnt = 0; 4326 4327 if (len != sizeof (struct sctp_assocparams)) 4328 return -EINVAL; 4329 4330 if (copy_from_user(&assocparams, optval, 4331 sizeof (struct sctp_assocparams))) 4332 return -EFAULT; 4333 4334 asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id); 4335 4336 if (!asoc && assocparams.sasoc_assoc_id && sctp_style(sk, UDP)) 4337 return -EINVAL; 4338 4339 /* Values correspoinding to the specific association */ 4340 if (asoc) { 4341 assocparams.sasoc_asocmaxrxt = asoc->max_retrans; 4342 assocparams.sasoc_peer_rwnd = asoc->peer.rwnd; 4343 assocparams.sasoc_local_rwnd = asoc->a_rwnd; 4344 assocparams.sasoc_cookie_life = (asoc->cookie_life.tv_sec 4345 * 1000) + 4346 (asoc->cookie_life.tv_usec 4347 / 1000); 4348 4349 list_for_each(pos, &asoc->peer.transport_addr_list) { 4350 cnt ++; 4351 } 4352 4353 assocparams.sasoc_number_peer_destinations = cnt; 4354 } else { 4355 /* Values corresponding to the endpoint */ 4356 struct sctp_sock *sp = sctp_sk(sk); 4357 4358 assocparams.sasoc_asocmaxrxt = sp->assocparams.sasoc_asocmaxrxt; 4359 assocparams.sasoc_peer_rwnd = sp->assocparams.sasoc_peer_rwnd; 4360 assocparams.sasoc_local_rwnd = sp->assocparams.sasoc_local_rwnd; 4361 assocparams.sasoc_cookie_life = 4362 sp->assocparams.sasoc_cookie_life; 4363 assocparams.sasoc_number_peer_destinations = 4364 sp->assocparams. 4365 sasoc_number_peer_destinations; 4366 } 4367 4368 if (put_user(len, optlen)) 4369 return -EFAULT; 4370 4371 if (copy_to_user(optval, &assocparams, len)) 4372 return -EFAULT; 4373 4374 return 0; 4375 } 4376 4377 /* 4378 * 7.1.16 Set/clear IPv4 mapped addresses (SCTP_I_WANT_MAPPED_V4_ADDR) 4379 * 4380 * This socket option is a boolean flag which turns on or off mapped V4 4381 * addresses. If this option is turned on and the socket is type 4382 * PF_INET6, then IPv4 addresses will be mapped to V6 representation. 4383 * If this option is turned off, then no mapping will be done of V4 4384 * addresses and a user will receive both PF_INET6 and PF_INET type 4385 * addresses on the socket. 4386 */ 4387 static int sctp_getsockopt_mappedv4(struct sock *sk, int len, 4388 char __user *optval, int __user *optlen) 4389 { 4390 int val; 4391 struct sctp_sock *sp = sctp_sk(sk); 4392 4393 if (len < sizeof(int)) 4394 return -EINVAL; 4395 4396 len = sizeof(int); 4397 val = sp->v4mapped; 4398 if (put_user(len, optlen)) 4399 return -EFAULT; 4400 if (copy_to_user(optval, &val, len)) 4401 return -EFAULT; 4402 4403 return 0; 4404 } 4405 4406 /* 4407 * 7.1.17 Set the maximum fragrmentation size (SCTP_MAXSEG) 4408 * 4409 * This socket option specifies the maximum size to put in any outgoing 4410 * SCTP chunk. If a message is larger than this size it will be 4411 * fragmented by SCTP into the specified size. Note that the underlying 4412 * SCTP implementation may fragment into smaller sized chunks when the 4413 * PMTU of the underlying association is smaller than the value set by 4414 * the user. 4415 */ 4416 static int sctp_getsockopt_maxseg(struct sock *sk, int len, 4417 char __user *optval, int __user *optlen) 4418 { 4419 int val; 4420 4421 if (len < sizeof(int)) 4422 return -EINVAL; 4423 4424 len = sizeof(int); 4425 4426 val = sctp_sk(sk)->user_frag; 4427 if (put_user(len, optlen)) 4428 return -EFAULT; 4429 if (copy_to_user(optval, &val, len)) 4430 return -EFAULT; 4431 4432 return 0; 4433 } 4434 4435 SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname, 4436 char __user *optval, int __user *optlen) 4437 { 4438 int retval = 0; 4439 int len; 4440 4441 SCTP_DEBUG_PRINTK("sctp_getsockopt(sk: %p... optname: %d)\n", 4442 sk, optname); 4443 4444 /* I can hardly begin to describe how wrong this is. This is 4445 * so broken as to be worse than useless. The API draft 4446 * REALLY is NOT helpful here... I am not convinced that the 4447 * semantics of getsockopt() with a level OTHER THAN SOL_SCTP 4448 * are at all well-founded. 4449 */ 4450 if (level != SOL_SCTP) { 4451 struct sctp_af *af = sctp_sk(sk)->pf->af; 4452 4453 retval = af->getsockopt(sk, level, optname, optval, optlen); 4454 return retval; 4455 } 4456 4457 if (get_user(len, optlen)) 4458 return -EFAULT; 4459 4460 sctp_lock_sock(sk); 4461 4462 switch (optname) { 4463 case SCTP_STATUS: 4464 retval = sctp_getsockopt_sctp_status(sk, len, optval, optlen); 4465 break; 4466 case SCTP_DISABLE_FRAGMENTS: 4467 retval = sctp_getsockopt_disable_fragments(sk, len, optval, 4468 optlen); 4469 break; 4470 case SCTP_EVENTS: 4471 retval = sctp_getsockopt_events(sk, len, optval, optlen); 4472 break; 4473 case SCTP_AUTOCLOSE: 4474 retval = sctp_getsockopt_autoclose(sk, len, optval, optlen); 4475 break; 4476 case SCTP_SOCKOPT_PEELOFF: 4477 retval = sctp_getsockopt_peeloff(sk, len, optval, optlen); 4478 break; 4479 case SCTP_PEER_ADDR_PARAMS: 4480 retval = sctp_getsockopt_peer_addr_params(sk, len, optval, 4481 optlen); 4482 break; 4483 case SCTP_DELAYED_ACK_TIME: 4484 retval = sctp_getsockopt_delayed_ack_time(sk, len, optval, 4485 optlen); 4486 break; 4487 case SCTP_INITMSG: 4488 retval = sctp_getsockopt_initmsg(sk, len, optval, optlen); 4489 break; 4490 case SCTP_GET_PEER_ADDRS_NUM_OLD: 4491 retval = sctp_getsockopt_peer_addrs_num_old(sk, len, optval, 4492 optlen); 4493 break; 4494 case SCTP_GET_LOCAL_ADDRS_NUM_OLD: 4495 retval = sctp_getsockopt_local_addrs_num_old(sk, len, optval, 4496 optlen); 4497 break; 4498 case SCTP_GET_PEER_ADDRS_OLD: 4499 retval = sctp_getsockopt_peer_addrs_old(sk, len, optval, 4500 optlen); 4501 break; 4502 case SCTP_GET_LOCAL_ADDRS_OLD: 4503 retval = sctp_getsockopt_local_addrs_old(sk, len, optval, 4504 optlen); 4505 break; 4506 case SCTP_GET_PEER_ADDRS: 4507 retval = sctp_getsockopt_peer_addrs(sk, len, optval, 4508 optlen); 4509 break; 4510 case SCTP_GET_LOCAL_ADDRS: 4511 retval = sctp_getsockopt_local_addrs(sk, len, optval, 4512 optlen); 4513 break; 4514 case SCTP_DEFAULT_SEND_PARAM: 4515 retval = sctp_getsockopt_default_send_param(sk, len, 4516 optval, optlen); 4517 break; 4518 case SCTP_PRIMARY_ADDR: 4519 retval = sctp_getsockopt_primary_addr(sk, len, optval, optlen); 4520 break; 4521 case SCTP_NODELAY: 4522 retval = sctp_getsockopt_nodelay(sk, len, optval, optlen); 4523 break; 4524 case SCTP_RTOINFO: 4525 retval = sctp_getsockopt_rtoinfo(sk, len, optval, optlen); 4526 break; 4527 case SCTP_ASSOCINFO: 4528 retval = sctp_getsockopt_associnfo(sk, len, optval, optlen); 4529 break; 4530 case SCTP_I_WANT_MAPPED_V4_ADDR: 4531 retval = sctp_getsockopt_mappedv4(sk, len, optval, optlen); 4532 break; 4533 case SCTP_MAXSEG: 4534 retval = sctp_getsockopt_maxseg(sk, len, optval, optlen); 4535 break; 4536 case SCTP_GET_PEER_ADDR_INFO: 4537 retval = sctp_getsockopt_peer_addr_info(sk, len, optval, 4538 optlen); 4539 break; 4540 case SCTP_ADAPTION_LAYER: 4541 retval = sctp_getsockopt_adaption_layer(sk, len, optval, 4542 optlen); 4543 break; 4544 default: 4545 retval = -ENOPROTOOPT; 4546 break; 4547 }; 4548 4549 sctp_release_sock(sk); 4550 return retval; 4551 } 4552 4553 static void sctp_hash(struct sock *sk) 4554 { 4555 /* STUB */ 4556 } 4557 4558 static void sctp_unhash(struct sock *sk) 4559 { 4560 /* STUB */ 4561 } 4562 4563 /* Check if port is acceptable. Possibly find first available port. 4564 * 4565 * The port hash table (contained in the 'global' SCTP protocol storage 4566 * returned by struct sctp_protocol *sctp_get_protocol()). The hash 4567 * table is an array of 4096 lists (sctp_bind_hashbucket). Each 4568 * list (the list number is the port number hashed out, so as you 4569 * would expect from a hash function, all the ports in a given list have 4570 * such a number that hashes out to the same list number; you were 4571 * expecting that, right?); so each list has a set of ports, with a 4572 * link to the socket (struct sock) that uses it, the port number and 4573 * a fastreuse flag (FIXME: NPI ipg). 4574 */ 4575 static struct sctp_bind_bucket *sctp_bucket_create( 4576 struct sctp_bind_hashbucket *head, unsigned short snum); 4577 4578 static long sctp_get_port_local(struct sock *sk, union sctp_addr *addr) 4579 { 4580 struct sctp_bind_hashbucket *head; /* hash list */ 4581 struct sctp_bind_bucket *pp; /* hash list port iterator */ 4582 unsigned short snum; 4583 int ret; 4584 4585 /* NOTE: Remember to put this back to net order. */ 4586 addr->v4.sin_port = ntohs(addr->v4.sin_port); 4587 snum = addr->v4.sin_port; 4588 4589 SCTP_DEBUG_PRINTK("sctp_get_port() begins, snum=%d\n", snum); 4590 sctp_local_bh_disable(); 4591 4592 if (snum == 0) { 4593 /* Search for an available port. 4594 * 4595 * 'sctp_port_rover' was the last port assigned, so 4596 * we start to search from 'sctp_port_rover + 4597 * 1'. What we do is first check if port 'rover' is 4598 * already in the hash table; if not, we use that; if 4599 * it is, we try next. 4600 */ 4601 int low = sysctl_local_port_range[0]; 4602 int high = sysctl_local_port_range[1]; 4603 int remaining = (high - low) + 1; 4604 int rover; 4605 int index; 4606 4607 sctp_spin_lock(&sctp_port_alloc_lock); 4608 rover = sctp_port_rover; 4609 do { 4610 rover++; 4611 if ((rover < low) || (rover > high)) 4612 rover = low; 4613 index = sctp_phashfn(rover); 4614 head = &sctp_port_hashtable[index]; 4615 sctp_spin_lock(&head->lock); 4616 for (pp = head->chain; pp; pp = pp->next) 4617 if (pp->port == rover) 4618 goto next; 4619 break; 4620 next: 4621 sctp_spin_unlock(&head->lock); 4622 } while (--remaining > 0); 4623 sctp_port_rover = rover; 4624 sctp_spin_unlock(&sctp_port_alloc_lock); 4625 4626 /* Exhausted local port range during search? */ 4627 ret = 1; 4628 if (remaining <= 0) 4629 goto fail; 4630 4631 /* OK, here is the one we will use. HEAD (the port 4632 * hash table list entry) is non-NULL and we hold it's 4633 * mutex. 4634 */ 4635 snum = rover; 4636 } else { 4637 /* We are given an specific port number; we verify 4638 * that it is not being used. If it is used, we will 4639 * exahust the search in the hash list corresponding 4640 * to the port number (snum) - we detect that with the 4641 * port iterator, pp being NULL. 4642 */ 4643 head = &sctp_port_hashtable[sctp_phashfn(snum)]; 4644 sctp_spin_lock(&head->lock); 4645 for (pp = head->chain; pp; pp = pp->next) { 4646 if (pp->port == snum) 4647 goto pp_found; 4648 } 4649 } 4650 pp = NULL; 4651 goto pp_not_found; 4652 pp_found: 4653 if (!hlist_empty(&pp->owner)) { 4654 /* We had a port hash table hit - there is an 4655 * available port (pp != NULL) and it is being 4656 * used by other socket (pp->owner not empty); that other 4657 * socket is going to be sk2. 4658 */ 4659 int reuse = sk->sk_reuse; 4660 struct sock *sk2; 4661 struct hlist_node *node; 4662 4663 SCTP_DEBUG_PRINTK("sctp_get_port() found a possible match\n"); 4664 if (pp->fastreuse && sk->sk_reuse) 4665 goto success; 4666 4667 /* Run through the list of sockets bound to the port 4668 * (pp->port) [via the pointers bind_next and 4669 * bind_pprev in the struct sock *sk2 (pp->sk)]. On each one, 4670 * we get the endpoint they describe and run through 4671 * the endpoint's list of IP (v4 or v6) addresses, 4672 * comparing each of the addresses with the address of 4673 * the socket sk. If we find a match, then that means 4674 * that this port/socket (sk) combination are already 4675 * in an endpoint. 4676 */ 4677 sk_for_each_bound(sk2, node, &pp->owner) { 4678 struct sctp_endpoint *ep2; 4679 ep2 = sctp_sk(sk2)->ep; 4680 4681 if (reuse && sk2->sk_reuse) 4682 continue; 4683 4684 if (sctp_bind_addr_match(&ep2->base.bind_addr, addr, 4685 sctp_sk(sk))) { 4686 ret = (long)sk2; 4687 goto fail_unlock; 4688 } 4689 } 4690 SCTP_DEBUG_PRINTK("sctp_get_port(): Found a match\n"); 4691 } 4692 pp_not_found: 4693 /* If there was a hash table miss, create a new port. */ 4694 ret = 1; 4695 if (!pp && !(pp = sctp_bucket_create(head, snum))) 4696 goto fail_unlock; 4697 4698 /* In either case (hit or miss), make sure fastreuse is 1 only 4699 * if sk->sk_reuse is too (that is, if the caller requested 4700 * SO_REUSEADDR on this socket -sk-). 4701 */ 4702 if (hlist_empty(&pp->owner)) 4703 pp->fastreuse = sk->sk_reuse ? 1 : 0; 4704 else if (pp->fastreuse && !sk->sk_reuse) 4705 pp->fastreuse = 0; 4706 4707 /* We are set, so fill up all the data in the hash table 4708 * entry, tie the socket list information with the rest of the 4709 * sockets FIXME: Blurry, NPI (ipg). 4710 */ 4711 success: 4712 inet_sk(sk)->num = snum; 4713 if (!sctp_sk(sk)->bind_hash) { 4714 sk_add_bind_node(sk, &pp->owner); 4715 sctp_sk(sk)->bind_hash = pp; 4716 } 4717 ret = 0; 4718 4719 fail_unlock: 4720 sctp_spin_unlock(&head->lock); 4721 4722 fail: 4723 sctp_local_bh_enable(); 4724 addr->v4.sin_port = htons(addr->v4.sin_port); 4725 return ret; 4726 } 4727 4728 /* Assign a 'snum' port to the socket. If snum == 0, an ephemeral 4729 * port is requested. 4730 */ 4731 static int sctp_get_port(struct sock *sk, unsigned short snum) 4732 { 4733 long ret; 4734 union sctp_addr addr; 4735 struct sctp_af *af = sctp_sk(sk)->pf->af; 4736 4737 /* Set up a dummy address struct from the sk. */ 4738 af->from_sk(&addr, sk); 4739 addr.v4.sin_port = htons(snum); 4740 4741 /* Note: sk->sk_num gets filled in if ephemeral port request. */ 4742 ret = sctp_get_port_local(sk, &addr); 4743 4744 return (ret ? 1 : 0); 4745 } 4746 4747 /* 4748 * 3.1.3 listen() - UDP Style Syntax 4749 * 4750 * By default, new associations are not accepted for UDP style sockets. 4751 * An application uses listen() to mark a socket as being able to 4752 * accept new associations. 4753 */ 4754 SCTP_STATIC int sctp_seqpacket_listen(struct sock *sk, int backlog) 4755 { 4756 struct sctp_sock *sp = sctp_sk(sk); 4757 struct sctp_endpoint *ep = sp->ep; 4758 4759 /* Only UDP style sockets that are not peeled off are allowed to 4760 * listen(). 4761 */ 4762 if (!sctp_style(sk, UDP)) 4763 return -EINVAL; 4764 4765 /* If backlog is zero, disable listening. */ 4766 if (!backlog) { 4767 if (sctp_sstate(sk, CLOSED)) 4768 return 0; 4769 4770 sctp_unhash_endpoint(ep); 4771 sk->sk_state = SCTP_SS_CLOSED; 4772 } 4773 4774 /* Return if we are already listening. */ 4775 if (sctp_sstate(sk, LISTENING)) 4776 return 0; 4777 4778 /* 4779 * If a bind() or sctp_bindx() is not called prior to a listen() 4780 * call that allows new associations to be accepted, the system 4781 * picks an ephemeral port and will choose an address set equivalent 4782 * to binding with a wildcard address. 4783 * 4784 * This is not currently spelled out in the SCTP sockets 4785 * extensions draft, but follows the practice as seen in TCP 4786 * sockets. 4787 */ 4788 if (!ep->base.bind_addr.port) { 4789 if (sctp_autobind(sk)) 4790 return -EAGAIN; 4791 } 4792 sk->sk_state = SCTP_SS_LISTENING; 4793 sctp_hash_endpoint(ep); 4794 return 0; 4795 } 4796 4797 /* 4798 * 4.1.3 listen() - TCP Style Syntax 4799 * 4800 * Applications uses listen() to ready the SCTP endpoint for accepting 4801 * inbound associations. 4802 */ 4803 SCTP_STATIC int sctp_stream_listen(struct sock *sk, int backlog) 4804 { 4805 struct sctp_sock *sp = sctp_sk(sk); 4806 struct sctp_endpoint *ep = sp->ep; 4807 4808 /* If backlog is zero, disable listening. */ 4809 if (!backlog) { 4810 if (sctp_sstate(sk, CLOSED)) 4811 return 0; 4812 4813 sctp_unhash_endpoint(ep); 4814 sk->sk_state = SCTP_SS_CLOSED; 4815 } 4816 4817 if (sctp_sstate(sk, LISTENING)) 4818 return 0; 4819 4820 /* 4821 * If a bind() or sctp_bindx() is not called prior to a listen() 4822 * call that allows new associations to be accepted, the system 4823 * picks an ephemeral port and will choose an address set equivalent 4824 * to binding with a wildcard address. 4825 * 4826 * This is not currently spelled out in the SCTP sockets 4827 * extensions draft, but follows the practice as seen in TCP 4828 * sockets. 4829 */ 4830 if (!ep->base.bind_addr.port) { 4831 if (sctp_autobind(sk)) 4832 return -EAGAIN; 4833 } 4834 sk->sk_state = SCTP_SS_LISTENING; 4835 sk->sk_max_ack_backlog = backlog; 4836 sctp_hash_endpoint(ep); 4837 return 0; 4838 } 4839 4840 /* 4841 * Move a socket to LISTENING state. 4842 */ 4843 int sctp_inet_listen(struct socket *sock, int backlog) 4844 { 4845 struct sock *sk = sock->sk; 4846 struct crypto_tfm *tfm=NULL; 4847 int err = -EINVAL; 4848 4849 if (unlikely(backlog < 0)) 4850 goto out; 4851 4852 sctp_lock_sock(sk); 4853 4854 if (sock->state != SS_UNCONNECTED) 4855 goto out; 4856 4857 /* Allocate HMAC for generating cookie. */ 4858 if (sctp_hmac_alg) { 4859 tfm = sctp_crypto_alloc_tfm(sctp_hmac_alg, 0); 4860 if (!tfm) { 4861 err = -ENOSYS; 4862 goto out; 4863 } 4864 } 4865 4866 switch (sock->type) { 4867 case SOCK_SEQPACKET: 4868 err = sctp_seqpacket_listen(sk, backlog); 4869 break; 4870 case SOCK_STREAM: 4871 err = sctp_stream_listen(sk, backlog); 4872 break; 4873 default: 4874 break; 4875 }; 4876 if (err) 4877 goto cleanup; 4878 4879 /* Store away the transform reference. */ 4880 sctp_sk(sk)->hmac = tfm; 4881 out: 4882 sctp_release_sock(sk); 4883 return err; 4884 cleanup: 4885 sctp_crypto_free_tfm(tfm); 4886 goto out; 4887 } 4888 4889 /* 4890 * This function is done by modeling the current datagram_poll() and the 4891 * tcp_poll(). Note that, based on these implementations, we don't 4892 * lock the socket in this function, even though it seems that, 4893 * ideally, locking or some other mechanisms can be used to ensure 4894 * the integrity of the counters (sndbuf and wmem_alloc) used 4895 * in this place. We assume that we don't need locks either until proven 4896 * otherwise. 4897 * 4898 * Another thing to note is that we include the Async I/O support 4899 * here, again, by modeling the current TCP/UDP code. We don't have 4900 * a good way to test with it yet. 4901 */ 4902 unsigned int sctp_poll(struct file *file, struct socket *sock, poll_table *wait) 4903 { 4904 struct sock *sk = sock->sk; 4905 struct sctp_sock *sp = sctp_sk(sk); 4906 unsigned int mask; 4907 4908 poll_wait(file, sk->sk_sleep, wait); 4909 4910 /* A TCP-style listening socket becomes readable when the accept queue 4911 * is not empty. 4912 */ 4913 if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING)) 4914 return (!list_empty(&sp->ep->asocs)) ? 4915 (POLLIN | POLLRDNORM) : 0; 4916 4917 mask = 0; 4918 4919 /* Is there any exceptional events? */ 4920 if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue)) 4921 mask |= POLLERR; 4922 if (sk->sk_shutdown & RCV_SHUTDOWN) 4923 mask |= POLLRDHUP; 4924 if (sk->sk_shutdown == SHUTDOWN_MASK) 4925 mask |= POLLHUP; 4926 4927 /* Is it readable? Reconsider this code with TCP-style support. */ 4928 if (!skb_queue_empty(&sk->sk_receive_queue) || 4929 (sk->sk_shutdown & RCV_SHUTDOWN)) 4930 mask |= POLLIN | POLLRDNORM; 4931 4932 /* The association is either gone or not ready. */ 4933 if (!sctp_style(sk, UDP) && sctp_sstate(sk, CLOSED)) 4934 return mask; 4935 4936 /* Is it writable? */ 4937 if (sctp_writeable(sk)) { 4938 mask |= POLLOUT | POLLWRNORM; 4939 } else { 4940 set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); 4941 /* 4942 * Since the socket is not locked, the buffer 4943 * might be made available after the writeable check and 4944 * before the bit is set. This could cause a lost I/O 4945 * signal. tcp_poll() has a race breaker for this race 4946 * condition. Based on their implementation, we put 4947 * in the following code to cover it as well. 4948 */ 4949 if (sctp_writeable(sk)) 4950 mask |= POLLOUT | POLLWRNORM; 4951 } 4952 return mask; 4953 } 4954 4955 /******************************************************************** 4956 * 2nd Level Abstractions 4957 ********************************************************************/ 4958 4959 static struct sctp_bind_bucket *sctp_bucket_create( 4960 struct sctp_bind_hashbucket *head, unsigned short snum) 4961 { 4962 struct sctp_bind_bucket *pp; 4963 4964 pp = kmem_cache_alloc(sctp_bucket_cachep, SLAB_ATOMIC); 4965 SCTP_DBG_OBJCNT_INC(bind_bucket); 4966 if (pp) { 4967 pp->port = snum; 4968 pp->fastreuse = 0; 4969 INIT_HLIST_HEAD(&pp->owner); 4970 if ((pp->next = head->chain) != NULL) 4971 pp->next->pprev = &pp->next; 4972 head->chain = pp; 4973 pp->pprev = &head->chain; 4974 } 4975 return pp; 4976 } 4977 4978 /* Caller must hold hashbucket lock for this tb with local BH disabled */ 4979 static void sctp_bucket_destroy(struct sctp_bind_bucket *pp) 4980 { 4981 if (hlist_empty(&pp->owner)) { 4982 if (pp->next) 4983 pp->next->pprev = pp->pprev; 4984 *(pp->pprev) = pp->next; 4985 kmem_cache_free(sctp_bucket_cachep, pp); 4986 SCTP_DBG_OBJCNT_DEC(bind_bucket); 4987 } 4988 } 4989 4990 /* Release this socket's reference to a local port. */ 4991 static inline void __sctp_put_port(struct sock *sk) 4992 { 4993 struct sctp_bind_hashbucket *head = 4994 &sctp_port_hashtable[sctp_phashfn(inet_sk(sk)->num)]; 4995 struct sctp_bind_bucket *pp; 4996 4997 sctp_spin_lock(&head->lock); 4998 pp = sctp_sk(sk)->bind_hash; 4999 __sk_del_bind_node(sk); 5000 sctp_sk(sk)->bind_hash = NULL; 5001 inet_sk(sk)->num = 0; 5002 sctp_bucket_destroy(pp); 5003 sctp_spin_unlock(&head->lock); 5004 } 5005 5006 void sctp_put_port(struct sock *sk) 5007 { 5008 sctp_local_bh_disable(); 5009 __sctp_put_port(sk); 5010 sctp_local_bh_enable(); 5011 } 5012 5013 /* 5014 * The system picks an ephemeral port and choose an address set equivalent 5015 * to binding with a wildcard address. 5016 * One of those addresses will be the primary address for the association. 5017 * This automatically enables the multihoming capability of SCTP. 5018 */ 5019 static int sctp_autobind(struct sock *sk) 5020 { 5021 union sctp_addr autoaddr; 5022 struct sctp_af *af; 5023 unsigned short port; 5024 5025 /* Initialize a local sockaddr structure to INADDR_ANY. */ 5026 af = sctp_sk(sk)->pf->af; 5027 5028 port = htons(inet_sk(sk)->num); 5029 af->inaddr_any(&autoaddr, port); 5030 5031 return sctp_do_bind(sk, &autoaddr, af->sockaddr_len); 5032 } 5033 5034 /* Parse out IPPROTO_SCTP CMSG headers. Perform only minimal validation. 5035 * 5036 * From RFC 2292 5037 * 4.2 The cmsghdr Structure * 5038 * 5039 * When ancillary data is sent or received, any number of ancillary data 5040 * objects can be specified by the msg_control and msg_controllen members of 5041 * the msghdr structure, because each object is preceded by 5042 * a cmsghdr structure defining the object's length (the cmsg_len member). 5043 * Historically Berkeley-derived implementations have passed only one object 5044 * at a time, but this API allows multiple objects to be 5045 * passed in a single call to sendmsg() or recvmsg(). The following example 5046 * shows two ancillary data objects in a control buffer. 5047 * 5048 * |<--------------------------- msg_controllen -------------------------->| 5049 * | | 5050 * 5051 * |<----- ancillary data object ----->|<----- ancillary data object ----->| 5052 * 5053 * |<---------- CMSG_SPACE() --------->|<---------- CMSG_SPACE() --------->| 5054 * | | | 5055 * 5056 * |<---------- cmsg_len ---------->| |<--------- cmsg_len ----------->| | 5057 * 5058 * |<--------- CMSG_LEN() --------->| |<-------- CMSG_LEN() ---------->| | 5059 * | | | | | 5060 * 5061 * +-----+-----+-----+--+-----------+--+-----+-----+-----+--+-----------+--+ 5062 * |cmsg_|cmsg_|cmsg_|XX| |XX|cmsg_|cmsg_|cmsg_|XX| |XX| 5063 * 5064 * |len |level|type |XX|cmsg_data[]|XX|len |level|type |XX|cmsg_data[]|XX| 5065 * 5066 * +-----+-----+-----+--+-----------+--+-----+-----+-----+--+-----------+--+ 5067 * ^ 5068 * | 5069 * 5070 * msg_control 5071 * points here 5072 */ 5073 SCTP_STATIC int sctp_msghdr_parse(const struct msghdr *msg, 5074 sctp_cmsgs_t *cmsgs) 5075 { 5076 struct cmsghdr *cmsg; 5077 5078 for (cmsg = CMSG_FIRSTHDR(msg); 5079 cmsg != NULL; 5080 cmsg = CMSG_NXTHDR((struct msghdr*)msg, cmsg)) { 5081 if (!CMSG_OK(msg, cmsg)) 5082 return -EINVAL; 5083 5084 /* Should we parse this header or ignore? */ 5085 if (cmsg->cmsg_level != IPPROTO_SCTP) 5086 continue; 5087 5088 /* Strictly check lengths following example in SCM code. */ 5089 switch (cmsg->cmsg_type) { 5090 case SCTP_INIT: 5091 /* SCTP Socket API Extension 5092 * 5.2.1 SCTP Initiation Structure (SCTP_INIT) 5093 * 5094 * This cmsghdr structure provides information for 5095 * initializing new SCTP associations with sendmsg(). 5096 * The SCTP_INITMSG socket option uses this same data 5097 * structure. This structure is not used for 5098 * recvmsg(). 5099 * 5100 * cmsg_level cmsg_type cmsg_data[] 5101 * ------------ ------------ ---------------------- 5102 * IPPROTO_SCTP SCTP_INIT struct sctp_initmsg 5103 */ 5104 if (cmsg->cmsg_len != 5105 CMSG_LEN(sizeof(struct sctp_initmsg))) 5106 return -EINVAL; 5107 cmsgs->init = (struct sctp_initmsg *)CMSG_DATA(cmsg); 5108 break; 5109 5110 case SCTP_SNDRCV: 5111 /* SCTP Socket API Extension 5112 * 5.2.2 SCTP Header Information Structure(SCTP_SNDRCV) 5113 * 5114 * This cmsghdr structure specifies SCTP options for 5115 * sendmsg() and describes SCTP header information 5116 * about a received message through recvmsg(). 5117 * 5118 * cmsg_level cmsg_type cmsg_data[] 5119 * ------------ ------------ ---------------------- 5120 * IPPROTO_SCTP SCTP_SNDRCV struct sctp_sndrcvinfo 5121 */ 5122 if (cmsg->cmsg_len != 5123 CMSG_LEN(sizeof(struct sctp_sndrcvinfo))) 5124 return -EINVAL; 5125 5126 cmsgs->info = 5127 (struct sctp_sndrcvinfo *)CMSG_DATA(cmsg); 5128 5129 /* Minimally, validate the sinfo_flags. */ 5130 if (cmsgs->info->sinfo_flags & 5131 ~(SCTP_UNORDERED | SCTP_ADDR_OVER | 5132 SCTP_ABORT | SCTP_EOF)) 5133 return -EINVAL; 5134 break; 5135 5136 default: 5137 return -EINVAL; 5138 }; 5139 } 5140 return 0; 5141 } 5142 5143 /* 5144 * Wait for a packet.. 5145 * Note: This function is the same function as in core/datagram.c 5146 * with a few modifications to make lksctp work. 5147 */ 5148 static int sctp_wait_for_packet(struct sock * sk, int *err, long *timeo_p) 5149 { 5150 int error; 5151 DEFINE_WAIT(wait); 5152 5153 prepare_to_wait_exclusive(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); 5154 5155 /* Socket errors? */ 5156 error = sock_error(sk); 5157 if (error) 5158 goto out; 5159 5160 if (!skb_queue_empty(&sk->sk_receive_queue)) 5161 goto ready; 5162 5163 /* Socket shut down? */ 5164 if (sk->sk_shutdown & RCV_SHUTDOWN) 5165 goto out; 5166 5167 /* Sequenced packets can come disconnected. If so we report the 5168 * problem. 5169 */ 5170 error = -ENOTCONN; 5171 5172 /* Is there a good reason to think that we may receive some data? */ 5173 if (list_empty(&sctp_sk(sk)->ep->asocs) && !sctp_sstate(sk, LISTENING)) 5174 goto out; 5175 5176 /* Handle signals. */ 5177 if (signal_pending(current)) 5178 goto interrupted; 5179 5180 /* Let another process have a go. Since we are going to sleep 5181 * anyway. Note: This may cause odd behaviors if the message 5182 * does not fit in the user's buffer, but this seems to be the 5183 * only way to honor MSG_DONTWAIT realistically. 5184 */ 5185 sctp_release_sock(sk); 5186 *timeo_p = schedule_timeout(*timeo_p); 5187 sctp_lock_sock(sk); 5188 5189 ready: 5190 finish_wait(sk->sk_sleep, &wait); 5191 return 0; 5192 5193 interrupted: 5194 error = sock_intr_errno(*timeo_p); 5195 5196 out: 5197 finish_wait(sk->sk_sleep, &wait); 5198 *err = error; 5199 return error; 5200 } 5201 5202 /* Receive a datagram. 5203 * Note: This is pretty much the same routine as in core/datagram.c 5204 * with a few changes to make lksctp work. 5205 */ 5206 static struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags, 5207 int noblock, int *err) 5208 { 5209 int error; 5210 struct sk_buff *skb; 5211 long timeo; 5212 5213 timeo = sock_rcvtimeo(sk, noblock); 5214 5215 SCTP_DEBUG_PRINTK("Timeout: timeo: %ld, MAX: %ld.\n", 5216 timeo, MAX_SCHEDULE_TIMEOUT); 5217 5218 do { 5219 /* Again only user level code calls this function, 5220 * so nothing interrupt level 5221 * will suddenly eat the receive_queue. 5222 * 5223 * Look at current nfs client by the way... 5224 * However, this function was corrent in any case. 8) 5225 */ 5226 if (flags & MSG_PEEK) { 5227 spin_lock_bh(&sk->sk_receive_queue.lock); 5228 skb = skb_peek(&sk->sk_receive_queue); 5229 if (skb) 5230 atomic_inc(&skb->users); 5231 spin_unlock_bh(&sk->sk_receive_queue.lock); 5232 } else { 5233 skb = skb_dequeue(&sk->sk_receive_queue); 5234 } 5235 5236 if (skb) 5237 return skb; 5238 5239 /* Caller is allowed not to check sk->sk_err before calling. */ 5240 error = sock_error(sk); 5241 if (error) 5242 goto no_packet; 5243 5244 if (sk->sk_shutdown & RCV_SHUTDOWN) 5245 break; 5246 5247 /* User doesn't want to wait. */ 5248 error = -EAGAIN; 5249 if (!timeo) 5250 goto no_packet; 5251 } while (sctp_wait_for_packet(sk, err, &timeo) == 0); 5252 5253 return NULL; 5254 5255 no_packet: 5256 *err = error; 5257 return NULL; 5258 } 5259 5260 /* If sndbuf has changed, wake up per association sndbuf waiters. */ 5261 static void __sctp_write_space(struct sctp_association *asoc) 5262 { 5263 struct sock *sk = asoc->base.sk; 5264 struct socket *sock = sk->sk_socket; 5265 5266 if ((sctp_wspace(asoc) > 0) && sock) { 5267 if (waitqueue_active(&asoc->wait)) 5268 wake_up_interruptible(&asoc->wait); 5269 5270 if (sctp_writeable(sk)) { 5271 if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) 5272 wake_up_interruptible(sk->sk_sleep); 5273 5274 /* Note that we try to include the Async I/O support 5275 * here by modeling from the current TCP/UDP code. 5276 * We have not tested with it yet. 5277 */ 5278 if (sock->fasync_list && 5279 !(sk->sk_shutdown & SEND_SHUTDOWN)) 5280 sock_wake_async(sock, 2, POLL_OUT); 5281 } 5282 } 5283 } 5284 5285 /* Do accounting for the sndbuf space. 5286 * Decrement the used sndbuf space of the corresponding association by the 5287 * data size which was just transmitted(freed). 5288 */ 5289 static void sctp_wfree(struct sk_buff *skb) 5290 { 5291 struct sctp_association *asoc; 5292 struct sctp_chunk *chunk; 5293 struct sock *sk; 5294 5295 /* Get the saved chunk pointer. */ 5296 chunk = *((struct sctp_chunk **)(skb->cb)); 5297 asoc = chunk->asoc; 5298 sk = asoc->base.sk; 5299 asoc->sndbuf_used -= SCTP_DATA_SNDSIZE(chunk) + 5300 sizeof(struct sk_buff) + 5301 sizeof(struct sctp_chunk); 5302 5303 atomic_sub(sizeof(struct sctp_chunk), &sk->sk_wmem_alloc); 5304 5305 sock_wfree(skb); 5306 __sctp_write_space(asoc); 5307 5308 sctp_association_put(asoc); 5309 } 5310 5311 /* Helper function to wait for space in the sndbuf. */ 5312 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p, 5313 size_t msg_len) 5314 { 5315 struct sock *sk = asoc->base.sk; 5316 int err = 0; 5317 long current_timeo = *timeo_p; 5318 DEFINE_WAIT(wait); 5319 5320 SCTP_DEBUG_PRINTK("wait_for_sndbuf: asoc=%p, timeo=%ld, msg_len=%zu\n", 5321 asoc, (long)(*timeo_p), msg_len); 5322 5323 /* Increment the association's refcnt. */ 5324 sctp_association_hold(asoc); 5325 5326 /* Wait on the association specific sndbuf space. */ 5327 for (;;) { 5328 prepare_to_wait_exclusive(&asoc->wait, &wait, 5329 TASK_INTERRUPTIBLE); 5330 if (!*timeo_p) 5331 goto do_nonblock; 5332 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING || 5333 asoc->base.dead) 5334 goto do_error; 5335 if (signal_pending(current)) 5336 goto do_interrupted; 5337 if (msg_len <= sctp_wspace(asoc)) 5338 break; 5339 5340 /* Let another process have a go. Since we are going 5341 * to sleep anyway. 5342 */ 5343 sctp_release_sock(sk); 5344 current_timeo = schedule_timeout(current_timeo); 5345 BUG_ON(sk != asoc->base.sk); 5346 sctp_lock_sock(sk); 5347 5348 *timeo_p = current_timeo; 5349 } 5350 5351 out: 5352 finish_wait(&asoc->wait, &wait); 5353 5354 /* Release the association's refcnt. */ 5355 sctp_association_put(asoc); 5356 5357 return err; 5358 5359 do_error: 5360 err = -EPIPE; 5361 goto out; 5362 5363 do_interrupted: 5364 err = sock_intr_errno(*timeo_p); 5365 goto out; 5366 5367 do_nonblock: 5368 err = -EAGAIN; 5369 goto out; 5370 } 5371 5372 /* If socket sndbuf has changed, wake up all per association waiters. */ 5373 void sctp_write_space(struct sock *sk) 5374 { 5375 struct sctp_association *asoc; 5376 struct list_head *pos; 5377 5378 /* Wake up the tasks in each wait queue. */ 5379 list_for_each(pos, &((sctp_sk(sk))->ep->asocs)) { 5380 asoc = list_entry(pos, struct sctp_association, asocs); 5381 __sctp_write_space(asoc); 5382 } 5383 } 5384 5385 /* Is there any sndbuf space available on the socket? 5386 * 5387 * Note that sk_wmem_alloc is the sum of the send buffers on all of the 5388 * associations on the same socket. For a UDP-style socket with 5389 * multiple associations, it is possible for it to be "unwriteable" 5390 * prematurely. I assume that this is acceptable because 5391 * a premature "unwriteable" is better than an accidental "writeable" which 5392 * would cause an unwanted block under certain circumstances. For the 1-1 5393 * UDP-style sockets or TCP-style sockets, this code should work. 5394 * - Daisy 5395 */ 5396 static int sctp_writeable(struct sock *sk) 5397 { 5398 int amt = 0; 5399 5400 amt = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc); 5401 if (amt < 0) 5402 amt = 0; 5403 return amt; 5404 } 5405 5406 /* Wait for an association to go into ESTABLISHED state. If timeout is 0, 5407 * returns immediately with EINPROGRESS. 5408 */ 5409 static int sctp_wait_for_connect(struct sctp_association *asoc, long *timeo_p) 5410 { 5411 struct sock *sk = asoc->base.sk; 5412 int err = 0; 5413 long current_timeo = *timeo_p; 5414 DEFINE_WAIT(wait); 5415 5416 SCTP_DEBUG_PRINTK("%s: asoc=%p, timeo=%ld\n", __FUNCTION__, asoc, 5417 (long)(*timeo_p)); 5418 5419 /* Increment the association's refcnt. */ 5420 sctp_association_hold(asoc); 5421 5422 for (;;) { 5423 prepare_to_wait_exclusive(&asoc->wait, &wait, 5424 TASK_INTERRUPTIBLE); 5425 if (!*timeo_p) 5426 goto do_nonblock; 5427 if (sk->sk_shutdown & RCV_SHUTDOWN) 5428 break; 5429 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING || 5430 asoc->base.dead) 5431 goto do_error; 5432 if (signal_pending(current)) 5433 goto do_interrupted; 5434 5435 if (sctp_state(asoc, ESTABLISHED)) 5436 break; 5437 5438 /* Let another process have a go. Since we are going 5439 * to sleep anyway. 5440 */ 5441 sctp_release_sock(sk); 5442 current_timeo = schedule_timeout(current_timeo); 5443 sctp_lock_sock(sk); 5444 5445 *timeo_p = current_timeo; 5446 } 5447 5448 out: 5449 finish_wait(&asoc->wait, &wait); 5450 5451 /* Release the association's refcnt. */ 5452 sctp_association_put(asoc); 5453 5454 return err; 5455 5456 do_error: 5457 if (asoc->init_err_counter + 1 > asoc->max_init_attempts) 5458 err = -ETIMEDOUT; 5459 else 5460 err = -ECONNREFUSED; 5461 goto out; 5462 5463 do_interrupted: 5464 err = sock_intr_errno(*timeo_p); 5465 goto out; 5466 5467 do_nonblock: 5468 err = -EINPROGRESS; 5469 goto out; 5470 } 5471 5472 static int sctp_wait_for_accept(struct sock *sk, long timeo) 5473 { 5474 struct sctp_endpoint *ep; 5475 int err = 0; 5476 DEFINE_WAIT(wait); 5477 5478 ep = sctp_sk(sk)->ep; 5479 5480 5481 for (;;) { 5482 prepare_to_wait_exclusive(sk->sk_sleep, &wait, 5483 TASK_INTERRUPTIBLE); 5484 5485 if (list_empty(&ep->asocs)) { 5486 sctp_release_sock(sk); 5487 timeo = schedule_timeout(timeo); 5488 sctp_lock_sock(sk); 5489 } 5490 5491 err = -EINVAL; 5492 if (!sctp_sstate(sk, LISTENING)) 5493 break; 5494 5495 err = 0; 5496 if (!list_empty(&ep->asocs)) 5497 break; 5498 5499 err = sock_intr_errno(timeo); 5500 if (signal_pending(current)) 5501 break; 5502 5503 err = -EAGAIN; 5504 if (!timeo) 5505 break; 5506 } 5507 5508 finish_wait(sk->sk_sleep, &wait); 5509 5510 return err; 5511 } 5512 5513 void sctp_wait_for_close(struct sock *sk, long timeout) 5514 { 5515 DEFINE_WAIT(wait); 5516 5517 do { 5518 prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE); 5519 if (list_empty(&sctp_sk(sk)->ep->asocs)) 5520 break; 5521 sctp_release_sock(sk); 5522 timeout = schedule_timeout(timeout); 5523 sctp_lock_sock(sk); 5524 } while (!signal_pending(current) && timeout); 5525 5526 finish_wait(sk->sk_sleep, &wait); 5527 } 5528 5529 /* Populate the fields of the newsk from the oldsk and migrate the assoc 5530 * and its messages to the newsk. 5531 */ 5532 static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk, 5533 struct sctp_association *assoc, 5534 sctp_socket_type_t type) 5535 { 5536 struct sctp_sock *oldsp = sctp_sk(oldsk); 5537 struct sctp_sock *newsp = sctp_sk(newsk); 5538 struct sctp_bind_bucket *pp; /* hash list port iterator */ 5539 struct sctp_endpoint *newep = newsp->ep; 5540 struct sk_buff *skb, *tmp; 5541 struct sctp_ulpevent *event; 5542 int flags = 0; 5543 5544 /* Migrate socket buffer sizes and all the socket level options to the 5545 * new socket. 5546 */ 5547 newsk->sk_sndbuf = oldsk->sk_sndbuf; 5548 newsk->sk_rcvbuf = oldsk->sk_rcvbuf; 5549 /* Brute force copy old sctp opt. */ 5550 inet_sk_copy_descendant(newsk, oldsk); 5551 5552 /* Restore the ep value that was overwritten with the above structure 5553 * copy. 5554 */ 5555 newsp->ep = newep; 5556 newsp->hmac = NULL; 5557 5558 /* Hook this new socket in to the bind_hash list. */ 5559 pp = sctp_sk(oldsk)->bind_hash; 5560 sk_add_bind_node(newsk, &pp->owner); 5561 sctp_sk(newsk)->bind_hash = pp; 5562 inet_sk(newsk)->num = inet_sk(oldsk)->num; 5563 5564 /* Copy the bind_addr list from the original endpoint to the new 5565 * endpoint so that we can handle restarts properly 5566 */ 5567 if (assoc->peer.ipv4_address) 5568 flags |= SCTP_ADDR4_PEERSUPP; 5569 if (assoc->peer.ipv6_address) 5570 flags |= SCTP_ADDR6_PEERSUPP; 5571 sctp_bind_addr_copy(&newsp->ep->base.bind_addr, 5572 &oldsp->ep->base.bind_addr, 5573 SCTP_SCOPE_GLOBAL, GFP_KERNEL, flags); 5574 5575 /* Move any messages in the old socket's receive queue that are for the 5576 * peeled off association to the new socket's receive queue. 5577 */ 5578 sctp_skb_for_each(skb, &oldsk->sk_receive_queue, tmp) { 5579 event = sctp_skb2event(skb); 5580 if (event->asoc == assoc) { 5581 sock_rfree(skb); 5582 __skb_unlink(skb, &oldsk->sk_receive_queue); 5583 __skb_queue_tail(&newsk->sk_receive_queue, skb); 5584 skb_set_owner_r(skb, newsk); 5585 } 5586 } 5587 5588 /* Clean up any messages pending delivery due to partial 5589 * delivery. Three cases: 5590 * 1) No partial deliver; no work. 5591 * 2) Peeling off partial delivery; keep pd_lobby in new pd_lobby. 5592 * 3) Peeling off non-partial delivery; move pd_lobby to receive_queue. 5593 */ 5594 skb_queue_head_init(&newsp->pd_lobby); 5595 sctp_sk(newsk)->pd_mode = assoc->ulpq.pd_mode; 5596 5597 if (sctp_sk(oldsk)->pd_mode) { 5598 struct sk_buff_head *queue; 5599 5600 /* Decide which queue to move pd_lobby skbs to. */ 5601 if (assoc->ulpq.pd_mode) { 5602 queue = &newsp->pd_lobby; 5603 } else 5604 queue = &newsk->sk_receive_queue; 5605 5606 /* Walk through the pd_lobby, looking for skbs that 5607 * need moved to the new socket. 5608 */ 5609 sctp_skb_for_each(skb, &oldsp->pd_lobby, tmp) { 5610 event = sctp_skb2event(skb); 5611 if (event->asoc == assoc) { 5612 sock_rfree(skb); 5613 __skb_unlink(skb, &oldsp->pd_lobby); 5614 __skb_queue_tail(queue, skb); 5615 skb_set_owner_r(skb, newsk); 5616 } 5617 } 5618 5619 /* Clear up any skbs waiting for the partial 5620 * delivery to finish. 5621 */ 5622 if (assoc->ulpq.pd_mode) 5623 sctp_clear_pd(oldsk); 5624 5625 } 5626 5627 /* Set the type of socket to indicate that it is peeled off from the 5628 * original UDP-style socket or created with the accept() call on a 5629 * TCP-style socket.. 5630 */ 5631 newsp->type = type; 5632 5633 /* Mark the new socket "in-use" by the user so that any packets 5634 * that may arrive on the association after we've moved it are 5635 * queued to the backlog. This prevents a potential race between 5636 * backlog processing on the old socket and new-packet processing 5637 * on the new socket. 5638 */ 5639 sctp_lock_sock(newsk); 5640 sctp_assoc_migrate(assoc, newsk); 5641 5642 /* If the association on the newsk is already closed before accept() 5643 * is called, set RCV_SHUTDOWN flag. 5644 */ 5645 if (sctp_state(assoc, CLOSED) && sctp_style(newsk, TCP)) 5646 newsk->sk_shutdown |= RCV_SHUTDOWN; 5647 5648 newsk->sk_state = SCTP_SS_ESTABLISHED; 5649 sctp_release_sock(newsk); 5650 } 5651 5652 /* This proto struct describes the ULP interface for SCTP. */ 5653 struct proto sctp_prot = { 5654 .name = "SCTP", 5655 .owner = THIS_MODULE, 5656 .close = sctp_close, 5657 .connect = sctp_connect, 5658 .disconnect = sctp_disconnect, 5659 .accept = sctp_accept, 5660 .ioctl = sctp_ioctl, 5661 .init = sctp_init_sock, 5662 .destroy = sctp_destroy_sock, 5663 .shutdown = sctp_shutdown, 5664 .setsockopt = sctp_setsockopt, 5665 .getsockopt = sctp_getsockopt, 5666 .sendmsg = sctp_sendmsg, 5667 .recvmsg = sctp_recvmsg, 5668 .bind = sctp_bind, 5669 .backlog_rcv = sctp_backlog_rcv, 5670 .hash = sctp_hash, 5671 .unhash = sctp_unhash, 5672 .get_port = sctp_get_port, 5673 .obj_size = sizeof(struct sctp_sock), 5674 }; 5675 5676 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) 5677 struct proto sctpv6_prot = { 5678 .name = "SCTPv6", 5679 .owner = THIS_MODULE, 5680 .close = sctp_close, 5681 .connect = sctp_connect, 5682 .disconnect = sctp_disconnect, 5683 .accept = sctp_accept, 5684 .ioctl = sctp_ioctl, 5685 .init = sctp_init_sock, 5686 .destroy = sctp_destroy_sock, 5687 .shutdown = sctp_shutdown, 5688 .setsockopt = sctp_setsockopt, 5689 .getsockopt = sctp_getsockopt, 5690 .sendmsg = sctp_sendmsg, 5691 .recvmsg = sctp_recvmsg, 5692 .bind = sctp_bind, 5693 .backlog_rcv = sctp_backlog_rcv, 5694 .hash = sctp_hash, 5695 .unhash = sctp_unhash, 5696 .get_port = sctp_get_port, 5697 .obj_size = sizeof(struct sctp6_sock), 5698 }; 5699 #endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */ 5700