1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* SCTP kernel implementation 3 * (C) Copyright IBM Corp. 2001, 2004 4 * Copyright (c) 1999-2000 Cisco, Inc. 5 * Copyright (c) 1999-2001 Motorola, Inc. 6 * Copyright (c) 2001-2002 Intel Corp. 7 * Copyright (c) 2002 Nokia Corp. 8 * 9 * This is part of the SCTP Linux Kernel Implementation. 10 * 11 * These are the state functions for the state machine. 12 * 13 * Please send any bug reports or fixes you make to the 14 * email address(es): 15 * lksctp developers <linux-sctp@vger.kernel.org> 16 * 17 * Written or modified by: 18 * La Monte H.P. Yarroll <piggy@acm.org> 19 * Karl Knutson <karl@athena.chicago.il.us> 20 * Mathew Kotowsky <kotowsky@sctp.org> 21 * Sridhar Samudrala <samudrala@us.ibm.com> 22 * Jon Grimm <jgrimm@us.ibm.com> 23 * Hui Huang <hui.huang@nokia.com> 24 * Dajiang Zhang <dajiang.zhang@nokia.com> 25 * Daisy Chang <daisyc@us.ibm.com> 26 * Ardelle Fan <ardelle.fan@intel.com> 27 * Ryan Layer <rmlayer@us.ibm.com> 28 * Kevin Gao <kevin.gao@intel.com> 29 */ 30 31 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 32 33 #include <linux/types.h> 34 #include <linux/kernel.h> 35 #include <linux/ip.h> 36 #include <linux/ipv6.h> 37 #include <linux/net.h> 38 #include <linux/inet.h> 39 #include <linux/slab.h> 40 #include <net/sock.h> 41 #include <net/inet_ecn.h> 42 #include <linux/skbuff.h> 43 #include <net/sctp/sctp.h> 44 #include <net/sctp/sm.h> 45 #include <net/sctp/structs.h> 46 47 #define CREATE_TRACE_POINTS 48 #include <trace/events/sctp.h> 49 50 static struct sctp_packet *sctp_abort_pkt_new( 51 struct net *net, 52 const struct sctp_endpoint *ep, 53 const struct sctp_association *asoc, 54 struct sctp_chunk *chunk, 55 const void *payload, size_t paylen); 56 static int sctp_eat_data(const struct sctp_association *asoc, 57 struct sctp_chunk *chunk, 58 struct sctp_cmd_seq *commands); 59 static struct sctp_packet *sctp_ootb_pkt_new( 60 struct net *net, 61 const struct sctp_association *asoc, 62 const struct sctp_chunk *chunk); 63 static void sctp_send_stale_cookie_err(struct net *net, 64 const struct sctp_endpoint *ep, 65 const struct sctp_association *asoc, 66 const struct sctp_chunk *chunk, 67 struct sctp_cmd_seq *commands, 68 struct sctp_chunk *err_chunk); 69 static enum sctp_disposition sctp_sf_do_5_2_6_stale( 70 struct net *net, 71 const struct sctp_endpoint *ep, 72 const struct sctp_association *asoc, 73 const union sctp_subtype type, 74 void *arg, 75 struct sctp_cmd_seq *commands); 76 static enum sctp_disposition sctp_sf_shut_8_4_5( 77 struct net *net, 78 const struct sctp_endpoint *ep, 79 const struct sctp_association *asoc, 80 const union sctp_subtype type, 81 void *arg, 82 struct sctp_cmd_seq *commands); 83 static enum sctp_disposition sctp_sf_tabort_8_4_8( 84 struct net *net, 85 const struct sctp_endpoint *ep, 86 const struct sctp_association *asoc, 87 const union sctp_subtype type, 88 void *arg, 89 struct sctp_cmd_seq *commands); 90 static enum sctp_disposition sctp_sf_new_encap_port( 91 struct net *net, 92 const struct sctp_endpoint *ep, 93 const struct sctp_association *asoc, 94 const union sctp_subtype type, 95 void *arg, 96 struct sctp_cmd_seq *commands); 97 static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk); 98 99 static enum sctp_disposition sctp_stop_t1_and_abort( 100 struct net *net, 101 struct sctp_cmd_seq *commands, 102 __be16 error, int sk_err, 103 const struct sctp_association *asoc, 104 struct sctp_transport *transport); 105 106 static enum sctp_disposition sctp_sf_abort_violation( 107 struct net *net, 108 const struct sctp_endpoint *ep, 109 const struct sctp_association *asoc, 110 void *arg, 111 struct sctp_cmd_seq *commands, 112 const __u8 *payload, 113 const size_t paylen); 114 115 static enum sctp_disposition sctp_sf_violation_chunklen( 116 struct net *net, 117 const struct sctp_endpoint *ep, 118 const struct sctp_association *asoc, 119 const union sctp_subtype type, 120 void *arg, 121 struct sctp_cmd_seq *commands); 122 123 static enum sctp_disposition sctp_sf_violation_paramlen( 124 struct net *net, 125 const struct sctp_endpoint *ep, 126 const struct sctp_association *asoc, 127 const union sctp_subtype type, 128 void *arg, void *ext, 129 struct sctp_cmd_seq *commands); 130 131 static enum sctp_disposition sctp_sf_violation_ctsn( 132 struct net *net, 133 const struct sctp_endpoint *ep, 134 const struct sctp_association *asoc, 135 const union sctp_subtype type, 136 void *arg, 137 struct sctp_cmd_seq *commands); 138 139 static enum sctp_disposition sctp_sf_violation_chunk( 140 struct net *net, 141 const struct sctp_endpoint *ep, 142 const struct sctp_association *asoc, 143 const union sctp_subtype type, 144 void *arg, 145 struct sctp_cmd_seq *commands); 146 147 static enum sctp_ierror sctp_sf_authenticate( 148 const struct sctp_association *asoc, 149 struct sctp_chunk *chunk); 150 151 static enum sctp_disposition __sctp_sf_do_9_1_abort( 152 struct net *net, 153 const struct sctp_endpoint *ep, 154 const struct sctp_association *asoc, 155 const union sctp_subtype type, 156 void *arg, 157 struct sctp_cmd_seq *commands); 158 159 static enum sctp_disposition 160 __sctp_sf_do_9_2_reshutack(struct net *net, const struct sctp_endpoint *ep, 161 const struct sctp_association *asoc, 162 const union sctp_subtype type, void *arg, 163 struct sctp_cmd_seq *commands); 164 165 /* Small helper function that checks if the chunk length 166 * is of the appropriate length. The 'required_length' argument 167 * is set to be the size of a specific chunk we are testing. 168 * Return Values: true = Valid length 169 * false = Invalid length 170 * 171 */ 172 static inline bool sctp_chunk_length_valid(struct sctp_chunk *chunk, 173 __u16 required_length) 174 { 175 __u16 chunk_length = ntohs(chunk->chunk_hdr->length); 176 177 /* Previously already marked? */ 178 if (unlikely(chunk->pdiscard)) 179 return false; 180 if (unlikely(chunk_length < required_length)) 181 return false; 182 183 return true; 184 } 185 186 /* Check for format error in an ABORT chunk */ 187 static inline bool sctp_err_chunk_valid(struct sctp_chunk *chunk) 188 { 189 struct sctp_errhdr *err; 190 191 sctp_walk_errors(err, chunk->chunk_hdr); 192 193 return (void *)err == (void *)chunk->chunk_end; 194 } 195 196 /********************************************************** 197 * These are the state functions for handling chunk events. 198 **********************************************************/ 199 200 /* 201 * Process the final SHUTDOWN COMPLETE. 202 * 203 * Section: 4 (C) (diagram), 9.2 204 * Upon reception of the SHUTDOWN COMPLETE chunk the endpoint will verify 205 * that it is in SHUTDOWN-ACK-SENT state, if it is not the chunk should be 206 * discarded. If the endpoint is in the SHUTDOWN-ACK-SENT state the endpoint 207 * should stop the T2-shutdown timer and remove all knowledge of the 208 * association (and thus the association enters the CLOSED state). 209 * 210 * Verification Tag: 8.5.1(C), sctpimpguide 2.41. 211 * C) Rules for packet carrying SHUTDOWN COMPLETE: 212 * ... 213 * - The receiver of a SHUTDOWN COMPLETE shall accept the packet 214 * if the Verification Tag field of the packet matches its own tag and 215 * the T bit is not set 216 * OR 217 * it is set to its peer's tag and the T bit is set in the Chunk 218 * Flags. 219 * Otherwise, the receiver MUST silently discard the packet 220 * and take no further action. An endpoint MUST ignore the 221 * SHUTDOWN COMPLETE if it is not in the SHUTDOWN-ACK-SENT state. 222 * 223 * Inputs 224 * (endpoint, asoc, chunk) 225 * 226 * Outputs 227 * (asoc, reply_msg, msg_up, timers, counters) 228 * 229 * The return value is the disposition of the chunk. 230 */ 231 enum sctp_disposition sctp_sf_do_4_C(struct net *net, 232 const struct sctp_endpoint *ep, 233 const struct sctp_association *asoc, 234 const union sctp_subtype type, 235 void *arg, struct sctp_cmd_seq *commands) 236 { 237 struct sctp_chunk *chunk = arg; 238 struct sctp_ulpevent *ev; 239 240 if (!sctp_vtag_verify_either(chunk, asoc)) 241 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 242 243 /* RFC 2960 6.10 Bundling 244 * 245 * An endpoint MUST NOT bundle INIT, INIT ACK or 246 * SHUTDOWN COMPLETE with any other chunks. 247 */ 248 if (!chunk->singleton) 249 return sctp_sf_violation_chunk(net, ep, asoc, type, arg, commands); 250 251 /* Make sure that the SHUTDOWN_COMPLETE chunk has a valid length. */ 252 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 253 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 254 commands); 255 256 /* RFC 2960 10.2 SCTP-to-ULP 257 * 258 * H) SHUTDOWN COMPLETE notification 259 * 260 * When SCTP completes the shutdown procedures (section 9.2) this 261 * notification is passed to the upper layer. 262 */ 263 ev = sctp_ulpevent_make_assoc_change(asoc, 0, SCTP_SHUTDOWN_COMP, 264 0, 0, 0, NULL, GFP_ATOMIC); 265 if (ev) 266 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 267 SCTP_ULPEVENT(ev)); 268 269 /* Upon reception of the SHUTDOWN COMPLETE chunk the endpoint 270 * will verify that it is in SHUTDOWN-ACK-SENT state, if it is 271 * not the chunk should be discarded. If the endpoint is in 272 * the SHUTDOWN-ACK-SENT state the endpoint should stop the 273 * T2-shutdown timer and remove all knowledge of the 274 * association (and thus the association enters the CLOSED 275 * state). 276 */ 277 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 278 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 279 280 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 281 SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD)); 282 283 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 284 SCTP_STATE(SCTP_STATE_CLOSED)); 285 286 SCTP_INC_STATS(net, SCTP_MIB_SHUTDOWNS); 287 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 288 289 sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); 290 291 return SCTP_DISPOSITION_DELETE_TCB; 292 } 293 294 /* 295 * Respond to a normal INIT chunk. 296 * We are the side that is being asked for an association. 297 * 298 * Section: 5.1 Normal Establishment of an Association, B 299 * B) "Z" shall respond immediately with an INIT ACK chunk. The 300 * destination IP address of the INIT ACK MUST be set to the source 301 * IP address of the INIT to which this INIT ACK is responding. In 302 * the response, besides filling in other parameters, "Z" must set the 303 * Verification Tag field to Tag_A, and also provide its own 304 * Verification Tag (Tag_Z) in the Initiate Tag field. 305 * 306 * Verification Tag: Must be 0. 307 * 308 * Inputs 309 * (endpoint, asoc, chunk) 310 * 311 * Outputs 312 * (asoc, reply_msg, msg_up, timers, counters) 313 * 314 * The return value is the disposition of the chunk. 315 */ 316 enum sctp_disposition sctp_sf_do_5_1B_init(struct net *net, 317 const struct sctp_endpoint *ep, 318 const struct sctp_association *asoc, 319 const union sctp_subtype type, 320 void *arg, 321 struct sctp_cmd_seq *commands) 322 { 323 struct sctp_chunk *chunk = arg, *repl, *err_chunk; 324 struct sctp_unrecognized_param *unk_param; 325 struct sctp_association *new_asoc; 326 struct sctp_packet *packet; 327 int len; 328 329 /* 6.10 Bundling 330 * An endpoint MUST NOT bundle INIT, INIT ACK or 331 * SHUTDOWN COMPLETE with any other chunks. 332 * 333 * IG Section 2.11.2 334 * Furthermore, we require that the receiver of an INIT chunk MUST 335 * enforce these rules by silently discarding an arriving packet 336 * with an INIT chunk that is bundled with other chunks. 337 */ 338 if (!chunk->singleton) 339 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 340 341 /* Make sure that the INIT chunk has a valid length. 342 * Normally, this would cause an ABORT with a Protocol Violation 343 * error, but since we don't have an association, we'll 344 * just discard the packet. 345 */ 346 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) 347 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 348 349 /* If the packet is an OOTB packet which is temporarily on the 350 * control endpoint, respond with an ABORT. 351 */ 352 if (ep == sctp_sk(net->sctp.ctl_sock)->ep) { 353 SCTP_INC_STATS(net, SCTP_MIB_OUTOFBLUES); 354 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 355 } 356 357 /* 3.1 A packet containing an INIT chunk MUST have a zero Verification 358 * Tag. 359 */ 360 if (chunk->sctp_hdr->vtag != 0) 361 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 362 363 /* If the INIT is coming toward a closing socket, we'll send back 364 * and ABORT. Essentially, this catches the race of INIT being 365 * backloged to the socket at the same time as the user issues close(). 366 * Since the socket and all its associations are going away, we 367 * can treat this OOTB 368 */ 369 if (sctp_sstate(ep->base.sk, CLOSING)) 370 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 371 372 /* Verify the INIT chunk before processing it. */ 373 err_chunk = NULL; 374 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, 375 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, 376 &err_chunk)) { 377 /* This chunk contains fatal error. It is to be discarded. 378 * Send an ABORT, with causes if there is any. 379 */ 380 if (err_chunk) { 381 packet = sctp_abort_pkt_new(net, ep, asoc, arg, 382 (__u8 *)(err_chunk->chunk_hdr) + 383 sizeof(struct sctp_chunkhdr), 384 ntohs(err_chunk->chunk_hdr->length) - 385 sizeof(struct sctp_chunkhdr)); 386 387 sctp_chunk_free(err_chunk); 388 389 if (packet) { 390 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, 391 SCTP_PACKET(packet)); 392 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 393 return SCTP_DISPOSITION_CONSUME; 394 } else { 395 return SCTP_DISPOSITION_NOMEM; 396 } 397 } else { 398 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, 399 commands); 400 } 401 } 402 403 /* Grab the INIT header. */ 404 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; 405 406 /* Tag the variable length parameters. */ 407 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); 408 409 new_asoc = sctp_make_temp_asoc(ep, chunk, GFP_ATOMIC); 410 if (!new_asoc) 411 goto nomem; 412 413 /* Update socket peer label if first association. */ 414 if (security_sctp_assoc_request(new_asoc, chunk->skb)) { 415 sctp_association_free(new_asoc); 416 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 417 } 418 419 if (sctp_assoc_set_bind_addr_from_ep(new_asoc, 420 sctp_scope(sctp_source(chunk)), 421 GFP_ATOMIC) < 0) 422 goto nomem_init; 423 424 /* The call, sctp_process_init(), can fail on memory allocation. */ 425 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), 426 (struct sctp_init_chunk *)chunk->chunk_hdr, 427 GFP_ATOMIC)) 428 goto nomem_init; 429 430 /* B) "Z" shall respond immediately with an INIT ACK chunk. */ 431 432 /* If there are errors need to be reported for unknown parameters, 433 * make sure to reserve enough room in the INIT ACK for them. 434 */ 435 len = 0; 436 if (err_chunk) 437 len = ntohs(err_chunk->chunk_hdr->length) - 438 sizeof(struct sctp_chunkhdr); 439 440 repl = sctp_make_init_ack(new_asoc, chunk, GFP_ATOMIC, len); 441 if (!repl) 442 goto nomem_init; 443 444 /* If there are errors need to be reported for unknown parameters, 445 * include them in the outgoing INIT ACK as "Unrecognized parameter" 446 * parameter. 447 */ 448 if (err_chunk) { 449 /* Get the "Unrecognized parameter" parameter(s) out of the 450 * ERROR chunk generated by sctp_verify_init(). Since the 451 * error cause code for "unknown parameter" and the 452 * "Unrecognized parameter" type is the same, we can 453 * construct the parameters in INIT ACK by copying the 454 * ERROR causes over. 455 */ 456 unk_param = (struct sctp_unrecognized_param *) 457 ((__u8 *)(err_chunk->chunk_hdr) + 458 sizeof(struct sctp_chunkhdr)); 459 /* Replace the cause code with the "Unrecognized parameter" 460 * parameter type. 461 */ 462 sctp_addto_chunk(repl, len, unk_param); 463 sctp_chunk_free(err_chunk); 464 } 465 466 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_ASOC, SCTP_ASOC(new_asoc)); 467 468 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 469 470 /* 471 * Note: After sending out INIT ACK with the State Cookie parameter, 472 * "Z" MUST NOT allocate any resources, nor keep any states for the 473 * new association. Otherwise, "Z" will be vulnerable to resource 474 * attacks. 475 */ 476 sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); 477 478 return SCTP_DISPOSITION_DELETE_TCB; 479 480 nomem_init: 481 sctp_association_free(new_asoc); 482 nomem: 483 if (err_chunk) 484 sctp_chunk_free(err_chunk); 485 return SCTP_DISPOSITION_NOMEM; 486 } 487 488 /* 489 * Respond to a normal INIT ACK chunk. 490 * We are the side that is initiating the association. 491 * 492 * Section: 5.1 Normal Establishment of an Association, C 493 * C) Upon reception of the INIT ACK from "Z", "A" shall stop the T1-init 494 * timer and leave COOKIE-WAIT state. "A" shall then send the State 495 * Cookie received in the INIT ACK chunk in a COOKIE ECHO chunk, start 496 * the T1-cookie timer, and enter the COOKIE-ECHOED state. 497 * 498 * Note: The COOKIE ECHO chunk can be bundled with any pending outbound 499 * DATA chunks, but it MUST be the first chunk in the packet and 500 * until the COOKIE ACK is returned the sender MUST NOT send any 501 * other packets to the peer. 502 * 503 * Verification Tag: 3.3.3 504 * If the value of the Initiate Tag in a received INIT ACK chunk is 505 * found to be 0, the receiver MUST treat it as an error and close the 506 * association by transmitting an ABORT. 507 * 508 * Inputs 509 * (endpoint, asoc, chunk) 510 * 511 * Outputs 512 * (asoc, reply_msg, msg_up, timers, counters) 513 * 514 * The return value is the disposition of the chunk. 515 */ 516 enum sctp_disposition sctp_sf_do_5_1C_ack(struct net *net, 517 const struct sctp_endpoint *ep, 518 const struct sctp_association *asoc, 519 const union sctp_subtype type, 520 void *arg, 521 struct sctp_cmd_seq *commands) 522 { 523 struct sctp_init_chunk *initchunk; 524 struct sctp_chunk *chunk = arg; 525 struct sctp_chunk *err_chunk; 526 struct sctp_packet *packet; 527 528 if (!sctp_vtag_verify(chunk, asoc)) 529 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 530 531 /* 6.10 Bundling 532 * An endpoint MUST NOT bundle INIT, INIT ACK or 533 * SHUTDOWN COMPLETE with any other chunks. 534 */ 535 if (!chunk->singleton) 536 return sctp_sf_violation_chunk(net, ep, asoc, type, arg, commands); 537 538 /* Make sure that the INIT-ACK chunk has a valid length */ 539 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_initack_chunk))) 540 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 541 commands); 542 /* Grab the INIT header. */ 543 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; 544 545 /* Verify the INIT chunk before processing it. */ 546 err_chunk = NULL; 547 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, 548 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, 549 &err_chunk)) { 550 551 enum sctp_error error = SCTP_ERROR_NO_RESOURCE; 552 553 /* This chunk contains fatal error. It is to be discarded. 554 * Send an ABORT, with causes. If there are no causes, 555 * then there wasn't enough memory. Just terminate 556 * the association. 557 */ 558 if (err_chunk) { 559 packet = sctp_abort_pkt_new(net, ep, asoc, arg, 560 (__u8 *)(err_chunk->chunk_hdr) + 561 sizeof(struct sctp_chunkhdr), 562 ntohs(err_chunk->chunk_hdr->length) - 563 sizeof(struct sctp_chunkhdr)); 564 565 sctp_chunk_free(err_chunk); 566 567 if (packet) { 568 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, 569 SCTP_PACKET(packet)); 570 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 571 error = SCTP_ERROR_INV_PARAM; 572 } 573 } 574 575 /* SCTP-AUTH, Section 6.3: 576 * It should be noted that if the receiver wants to tear 577 * down an association in an authenticated way only, the 578 * handling of malformed packets should not result in 579 * tearing down the association. 580 * 581 * This means that if we only want to abort associations 582 * in an authenticated way (i.e AUTH+ABORT), then we 583 * can't destroy this association just because the packet 584 * was malformed. 585 */ 586 if (sctp_auth_recv_cid(SCTP_CID_ABORT, asoc)) 587 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 588 589 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 590 return sctp_stop_t1_and_abort(net, commands, error, ECONNREFUSED, 591 asoc, chunk->transport); 592 } 593 594 /* Tag the variable length parameters. Note that we never 595 * convert the parameters in an INIT chunk. 596 */ 597 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); 598 599 initchunk = (struct sctp_init_chunk *)chunk->chunk_hdr; 600 601 sctp_add_cmd_sf(commands, SCTP_CMD_PEER_INIT, 602 SCTP_PEER_INIT(initchunk)); 603 604 /* Reset init error count upon receipt of INIT-ACK. */ 605 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_COUNTER_RESET, SCTP_NULL()); 606 607 /* 5.1 C) "A" shall stop the T1-init timer and leave 608 * COOKIE-WAIT state. "A" shall then ... start the T1-cookie 609 * timer, and enter the COOKIE-ECHOED state. 610 */ 611 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 612 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 613 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START, 614 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_COOKIE)); 615 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 616 SCTP_STATE(SCTP_STATE_COOKIE_ECHOED)); 617 618 /* SCTP-AUTH: generate the association shared keys so that 619 * we can potentially sign the COOKIE-ECHO. 620 */ 621 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_SHKEY, SCTP_NULL()); 622 623 /* 5.1 C) "A" shall then send the State Cookie received in the 624 * INIT ACK chunk in a COOKIE ECHO chunk, ... 625 */ 626 /* If there is any errors to report, send the ERROR chunk generated 627 * for unknown parameters as well. 628 */ 629 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_COOKIE_ECHO, 630 SCTP_CHUNK(err_chunk)); 631 632 return SCTP_DISPOSITION_CONSUME; 633 } 634 635 static bool sctp_auth_chunk_verify(struct net *net, struct sctp_chunk *chunk, 636 const struct sctp_association *asoc) 637 { 638 struct sctp_chunk auth; 639 640 if (!chunk->auth_chunk) 641 return true; 642 643 /* SCTP-AUTH: auth_chunk pointer is only set when the cookie-echo 644 * is supposed to be authenticated and we have to do delayed 645 * authentication. We've just recreated the association using 646 * the information in the cookie and now it's much easier to 647 * do the authentication. 648 */ 649 650 /* Make sure that we and the peer are AUTH capable */ 651 if (!net->sctp.auth_enable || !asoc->peer.auth_capable) 652 return false; 653 654 /* set-up our fake chunk so that we can process it */ 655 auth.skb = chunk->auth_chunk; 656 auth.asoc = chunk->asoc; 657 auth.sctp_hdr = chunk->sctp_hdr; 658 auth.chunk_hdr = (struct sctp_chunkhdr *) 659 skb_push(chunk->auth_chunk, 660 sizeof(struct sctp_chunkhdr)); 661 skb_pull(chunk->auth_chunk, sizeof(struct sctp_chunkhdr)); 662 auth.transport = chunk->transport; 663 664 return sctp_sf_authenticate(asoc, &auth) == SCTP_IERROR_NO_ERROR; 665 } 666 667 /* 668 * Respond to a normal COOKIE ECHO chunk. 669 * We are the side that is being asked for an association. 670 * 671 * Section: 5.1 Normal Establishment of an Association, D 672 * D) Upon reception of the COOKIE ECHO chunk, Endpoint "Z" will reply 673 * with a COOKIE ACK chunk after building a TCB and moving to 674 * the ESTABLISHED state. A COOKIE ACK chunk may be bundled with 675 * any pending DATA chunks (and/or SACK chunks), but the COOKIE ACK 676 * chunk MUST be the first chunk in the packet. 677 * 678 * IMPLEMENTATION NOTE: An implementation may choose to send the 679 * Communication Up notification to the SCTP user upon reception 680 * of a valid COOKIE ECHO chunk. 681 * 682 * Verification Tag: 8.5.1 Exceptions in Verification Tag Rules 683 * D) Rules for packet carrying a COOKIE ECHO 684 * 685 * - When sending a COOKIE ECHO, the endpoint MUST use the value of the 686 * Initial Tag received in the INIT ACK. 687 * 688 * - The receiver of a COOKIE ECHO follows the procedures in Section 5. 689 * 690 * Inputs 691 * (endpoint, asoc, chunk) 692 * 693 * Outputs 694 * (asoc, reply_msg, msg_up, timers, counters) 695 * 696 * The return value is the disposition of the chunk. 697 */ 698 enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net, 699 const struct sctp_endpoint *ep, 700 const struct sctp_association *asoc, 701 const union sctp_subtype type, 702 void *arg, 703 struct sctp_cmd_seq *commands) 704 { 705 struct sctp_ulpevent *ev, *ai_ev = NULL, *auth_ev = NULL; 706 struct sctp_association *new_asoc; 707 struct sctp_init_chunk *peer_init; 708 struct sctp_chunk *chunk = arg; 709 struct sctp_chunk *err_chk_p; 710 struct sctp_chunk *repl; 711 struct sock *sk; 712 int error = 0; 713 714 if (asoc && !sctp_vtag_verify(chunk, asoc)) 715 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 716 717 /* If the packet is an OOTB packet which is temporarily on the 718 * control endpoint, respond with an ABORT. 719 */ 720 if (ep == sctp_sk(net->sctp.ctl_sock)->ep) { 721 SCTP_INC_STATS(net, SCTP_MIB_OUTOFBLUES); 722 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 723 } 724 725 /* Make sure that the COOKIE_ECHO chunk has a valid length. 726 * In this case, we check that we have enough for at least a 727 * chunk header. More detailed verification is done 728 * in sctp_unpack_cookie(). 729 */ 730 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 731 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 732 commands); 733 734 /* If the endpoint is not listening or if the number of associations 735 * on the TCP-style socket exceed the max backlog, respond with an 736 * ABORT. 737 */ 738 sk = ep->base.sk; 739 if (!sctp_sstate(sk, LISTENING) || 740 (sctp_style(sk, TCP) && sk_acceptq_is_full(sk))) 741 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 742 743 /* "Decode" the chunk. We have no optional parameters so we 744 * are in good shape. 745 */ 746 chunk->subh.cookie_hdr = 747 (struct sctp_signed_cookie *)chunk->skb->data; 748 if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) - 749 sizeof(struct sctp_chunkhdr))) 750 goto nomem; 751 752 /* 5.1 D) Upon reception of the COOKIE ECHO chunk, Endpoint 753 * "Z" will reply with a COOKIE ACK chunk after building a TCB 754 * and moving to the ESTABLISHED state. 755 */ 756 new_asoc = sctp_unpack_cookie(ep, asoc, chunk, GFP_ATOMIC, &error, 757 &err_chk_p); 758 759 /* FIXME: 760 * If the re-build failed, what is the proper error path 761 * from here? 762 * 763 * [We should abort the association. --piggy] 764 */ 765 if (!new_asoc) { 766 /* FIXME: Several errors are possible. A bad cookie should 767 * be silently discarded, but think about logging it too. 768 */ 769 switch (error) { 770 case -SCTP_IERROR_NOMEM: 771 goto nomem; 772 773 case -SCTP_IERROR_STALE_COOKIE: 774 sctp_send_stale_cookie_err(net, ep, asoc, chunk, commands, 775 err_chk_p); 776 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 777 778 case -SCTP_IERROR_BAD_SIG: 779 default: 780 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 781 } 782 } 783 784 if (security_sctp_assoc_request(new_asoc, chunk->skb)) { 785 sctp_association_free(new_asoc); 786 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 787 } 788 789 /* Delay state machine commands until later. 790 * 791 * Re-build the bind address for the association is done in 792 * the sctp_unpack_cookie() already. 793 */ 794 /* This is a brand-new association, so these are not yet side 795 * effects--it is safe to run them here. 796 */ 797 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; 798 799 if (!sctp_process_init(new_asoc, chunk, 800 &chunk->subh.cookie_hdr->c.peer_addr, 801 peer_init, GFP_ATOMIC)) 802 goto nomem_init; 803 804 /* SCTP-AUTH: Now that we've populate required fields in 805 * sctp_process_init, set up the association shared keys as 806 * necessary so that we can potentially authenticate the ACK 807 */ 808 error = sctp_auth_asoc_init_active_key(new_asoc, GFP_ATOMIC); 809 if (error) 810 goto nomem_init; 811 812 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) { 813 sctp_association_free(new_asoc); 814 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 815 } 816 817 repl = sctp_make_cookie_ack(new_asoc, chunk); 818 if (!repl) 819 goto nomem_init; 820 821 /* RFC 2960 5.1 Normal Establishment of an Association 822 * 823 * D) IMPLEMENTATION NOTE: An implementation may choose to 824 * send the Communication Up notification to the SCTP user 825 * upon reception of a valid COOKIE ECHO chunk. 826 */ 827 ev = sctp_ulpevent_make_assoc_change(new_asoc, 0, SCTP_COMM_UP, 0, 828 new_asoc->c.sinit_num_ostreams, 829 new_asoc->c.sinit_max_instreams, 830 NULL, GFP_ATOMIC); 831 if (!ev) 832 goto nomem_ev; 833 834 /* Sockets API Draft Section 5.3.1.6 835 * When a peer sends a Adaptation Layer Indication parameter , SCTP 836 * delivers this notification to inform the application that of the 837 * peers requested adaptation layer. 838 */ 839 if (new_asoc->peer.adaptation_ind) { 840 ai_ev = sctp_ulpevent_make_adaptation_indication(new_asoc, 841 GFP_ATOMIC); 842 if (!ai_ev) 843 goto nomem_aiev; 844 } 845 846 if (!new_asoc->peer.auth_capable) { 847 auth_ev = sctp_ulpevent_make_authkey(new_asoc, 0, 848 SCTP_AUTH_NO_AUTH, 849 GFP_ATOMIC); 850 if (!auth_ev) 851 goto nomem_authev; 852 } 853 854 /* Add all the state machine commands now since we've created 855 * everything. This way we don't introduce memory corruptions 856 * during side-effect processing and correctly count established 857 * associations. 858 */ 859 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_ASOC, SCTP_ASOC(new_asoc)); 860 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 861 SCTP_STATE(SCTP_STATE_ESTABLISHED)); 862 SCTP_INC_STATS(net, SCTP_MIB_CURRESTAB); 863 SCTP_INC_STATS(net, SCTP_MIB_PASSIVEESTABS); 864 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_START, SCTP_NULL()); 865 866 if (new_asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE]) 867 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START, 868 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE)); 869 870 /* This will send the COOKIE ACK */ 871 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 872 873 /* Queue the ASSOC_CHANGE event */ 874 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev)); 875 876 /* Send up the Adaptation Layer Indication event */ 877 if (ai_ev) 878 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 879 SCTP_ULPEVENT(ai_ev)); 880 881 if (auth_ev) 882 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 883 SCTP_ULPEVENT(auth_ev)); 884 885 return SCTP_DISPOSITION_CONSUME; 886 887 nomem_authev: 888 sctp_ulpevent_free(ai_ev); 889 nomem_aiev: 890 sctp_ulpevent_free(ev); 891 nomem_ev: 892 sctp_chunk_free(repl); 893 nomem_init: 894 sctp_association_free(new_asoc); 895 nomem: 896 return SCTP_DISPOSITION_NOMEM; 897 } 898 899 /* 900 * Respond to a normal COOKIE ACK chunk. 901 * We are the side that is asking for an association. 902 * 903 * RFC 2960 5.1 Normal Establishment of an Association 904 * 905 * E) Upon reception of the COOKIE ACK, endpoint "A" will move from the 906 * COOKIE-ECHOED state to the ESTABLISHED state, stopping the T1-cookie 907 * timer. It may also notify its ULP about the successful 908 * establishment of the association with a Communication Up 909 * notification (see Section 10). 910 * 911 * Verification Tag: 912 * Inputs 913 * (endpoint, asoc, chunk) 914 * 915 * Outputs 916 * (asoc, reply_msg, msg_up, timers, counters) 917 * 918 * The return value is the disposition of the chunk. 919 */ 920 enum sctp_disposition sctp_sf_do_5_1E_ca(struct net *net, 921 const struct sctp_endpoint *ep, 922 const struct sctp_association *asoc, 923 const union sctp_subtype type, 924 void *arg, 925 struct sctp_cmd_seq *commands) 926 { 927 struct sctp_chunk *chunk = arg; 928 struct sctp_ulpevent *ev; 929 930 if (!sctp_vtag_verify(chunk, asoc)) 931 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 932 933 /* Verify that the chunk length for the COOKIE-ACK is OK. 934 * If we don't do this, any bundled chunks may be junked. 935 */ 936 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 937 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 938 commands); 939 940 /* Reset init error count upon receipt of COOKIE-ACK, 941 * to avoid problems with the management of this 942 * counter in stale cookie situations when a transition back 943 * from the COOKIE-ECHOED state to the COOKIE-WAIT 944 * state is performed. 945 */ 946 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_COUNTER_RESET, SCTP_NULL()); 947 948 /* Set peer label for connection. */ 949 security_inet_conn_established(ep->base.sk, chunk->skb); 950 951 /* RFC 2960 5.1 Normal Establishment of an Association 952 * 953 * E) Upon reception of the COOKIE ACK, endpoint "A" will move 954 * from the COOKIE-ECHOED state to the ESTABLISHED state, 955 * stopping the T1-cookie timer. 956 */ 957 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 958 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_COOKIE)); 959 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 960 SCTP_STATE(SCTP_STATE_ESTABLISHED)); 961 SCTP_INC_STATS(net, SCTP_MIB_CURRESTAB); 962 SCTP_INC_STATS(net, SCTP_MIB_ACTIVEESTABS); 963 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_START, SCTP_NULL()); 964 if (asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE]) 965 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START, 966 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE)); 967 968 /* It may also notify its ULP about the successful 969 * establishment of the association with a Communication Up 970 * notification (see Section 10). 971 */ 972 ev = sctp_ulpevent_make_assoc_change(asoc, 0, SCTP_COMM_UP, 973 0, asoc->c.sinit_num_ostreams, 974 asoc->c.sinit_max_instreams, 975 NULL, GFP_ATOMIC); 976 977 if (!ev) 978 goto nomem; 979 980 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev)); 981 982 /* Sockets API Draft Section 5.3.1.6 983 * When a peer sends a Adaptation Layer Indication parameter , SCTP 984 * delivers this notification to inform the application that of the 985 * peers requested adaptation layer. 986 */ 987 if (asoc->peer.adaptation_ind) { 988 ev = sctp_ulpevent_make_adaptation_indication(asoc, GFP_ATOMIC); 989 if (!ev) 990 goto nomem; 991 992 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 993 SCTP_ULPEVENT(ev)); 994 } 995 996 if (!asoc->peer.auth_capable) { 997 ev = sctp_ulpevent_make_authkey(asoc, 0, SCTP_AUTH_NO_AUTH, 998 GFP_ATOMIC); 999 if (!ev) 1000 goto nomem; 1001 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 1002 SCTP_ULPEVENT(ev)); 1003 } 1004 1005 return SCTP_DISPOSITION_CONSUME; 1006 nomem: 1007 return SCTP_DISPOSITION_NOMEM; 1008 } 1009 1010 /* Generate and sendout a heartbeat packet. */ 1011 static enum sctp_disposition sctp_sf_heartbeat( 1012 const struct sctp_endpoint *ep, 1013 const struct sctp_association *asoc, 1014 const union sctp_subtype type, 1015 void *arg, 1016 struct sctp_cmd_seq *commands) 1017 { 1018 struct sctp_transport *transport = (struct sctp_transport *) arg; 1019 struct sctp_chunk *reply; 1020 1021 /* Send a heartbeat to our peer. */ 1022 reply = sctp_make_heartbeat(asoc, transport, 0); 1023 if (!reply) 1024 return SCTP_DISPOSITION_NOMEM; 1025 1026 /* Set rto_pending indicating that an RTT measurement 1027 * is started with this heartbeat chunk. 1028 */ 1029 sctp_add_cmd_sf(commands, SCTP_CMD_RTO_PENDING, 1030 SCTP_TRANSPORT(transport)); 1031 1032 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 1033 return SCTP_DISPOSITION_CONSUME; 1034 } 1035 1036 /* Generate a HEARTBEAT packet on the given transport. */ 1037 enum sctp_disposition sctp_sf_sendbeat_8_3(struct net *net, 1038 const struct sctp_endpoint *ep, 1039 const struct sctp_association *asoc, 1040 const union sctp_subtype type, 1041 void *arg, 1042 struct sctp_cmd_seq *commands) 1043 { 1044 struct sctp_transport *transport = (struct sctp_transport *) arg; 1045 1046 if (asoc->overall_error_count >= asoc->max_retrans) { 1047 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 1048 SCTP_ERROR(ETIMEDOUT)); 1049 /* CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */ 1050 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 1051 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 1052 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 1053 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 1054 return SCTP_DISPOSITION_DELETE_TCB; 1055 } 1056 1057 /* Section 3.3.5. 1058 * The Sender-specific Heartbeat Info field should normally include 1059 * information about the sender's current time when this HEARTBEAT 1060 * chunk is sent and the destination transport address to which this 1061 * HEARTBEAT is sent (see Section 8.3). 1062 */ 1063 1064 if (transport->param_flags & SPP_HB_ENABLE) { 1065 if (SCTP_DISPOSITION_NOMEM == 1066 sctp_sf_heartbeat(ep, asoc, type, arg, 1067 commands)) 1068 return SCTP_DISPOSITION_NOMEM; 1069 1070 /* Set transport error counter and association error counter 1071 * when sending heartbeat. 1072 */ 1073 sctp_add_cmd_sf(commands, SCTP_CMD_TRANSPORT_HB_SENT, 1074 SCTP_TRANSPORT(transport)); 1075 } 1076 sctp_add_cmd_sf(commands, SCTP_CMD_TRANSPORT_IDLE, 1077 SCTP_TRANSPORT(transport)); 1078 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMER_UPDATE, 1079 SCTP_TRANSPORT(transport)); 1080 1081 return SCTP_DISPOSITION_CONSUME; 1082 } 1083 1084 /* resend asoc strreset_chunk. */ 1085 enum sctp_disposition sctp_sf_send_reconf(struct net *net, 1086 const struct sctp_endpoint *ep, 1087 const struct sctp_association *asoc, 1088 const union sctp_subtype type, 1089 void *arg, 1090 struct sctp_cmd_seq *commands) 1091 { 1092 struct sctp_transport *transport = arg; 1093 1094 if (asoc->overall_error_count >= asoc->max_retrans) { 1095 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 1096 SCTP_ERROR(ETIMEDOUT)); 1097 /* CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */ 1098 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 1099 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 1100 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 1101 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 1102 return SCTP_DISPOSITION_DELETE_TCB; 1103 } 1104 1105 sctp_chunk_hold(asoc->strreset_chunk); 1106 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 1107 SCTP_CHUNK(asoc->strreset_chunk)); 1108 sctp_add_cmd_sf(commands, SCTP_CMD_STRIKE, SCTP_TRANSPORT(transport)); 1109 1110 return SCTP_DISPOSITION_CONSUME; 1111 } 1112 1113 /* send hb chunk with padding for PLPMUTD. */ 1114 enum sctp_disposition sctp_sf_send_probe(struct net *net, 1115 const struct sctp_endpoint *ep, 1116 const struct sctp_association *asoc, 1117 const union sctp_subtype type, 1118 void *arg, 1119 struct sctp_cmd_seq *commands) 1120 { 1121 struct sctp_transport *transport = (struct sctp_transport *)arg; 1122 struct sctp_chunk *reply; 1123 1124 if (!sctp_transport_pl_enabled(transport)) 1125 return SCTP_DISPOSITION_CONSUME; 1126 1127 if (sctp_transport_pl_send(transport)) { 1128 reply = sctp_make_heartbeat(asoc, transport, transport->pl.probe_size); 1129 if (!reply) 1130 return SCTP_DISPOSITION_NOMEM; 1131 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 1132 } 1133 sctp_add_cmd_sf(commands, SCTP_CMD_PROBE_TIMER_UPDATE, 1134 SCTP_TRANSPORT(transport)); 1135 1136 return SCTP_DISPOSITION_CONSUME; 1137 } 1138 1139 /* 1140 * Process an heartbeat request. 1141 * 1142 * Section: 8.3 Path Heartbeat 1143 * The receiver of the HEARTBEAT should immediately respond with a 1144 * HEARTBEAT ACK that contains the Heartbeat Information field copied 1145 * from the received HEARTBEAT chunk. 1146 * 1147 * Verification Tag: 8.5 Verification Tag [Normal verification] 1148 * When receiving an SCTP packet, the endpoint MUST ensure that the 1149 * value in the Verification Tag field of the received SCTP packet 1150 * matches its own Tag. If the received Verification Tag value does not 1151 * match the receiver's own tag value, the receiver shall silently 1152 * discard the packet and shall not process it any further except for 1153 * those cases listed in Section 8.5.1 below. 1154 * 1155 * Inputs 1156 * (endpoint, asoc, chunk) 1157 * 1158 * Outputs 1159 * (asoc, reply_msg, msg_up, timers, counters) 1160 * 1161 * The return value is the disposition of the chunk. 1162 */ 1163 enum sctp_disposition sctp_sf_beat_8_3(struct net *net, 1164 const struct sctp_endpoint *ep, 1165 const struct sctp_association *asoc, 1166 const union sctp_subtype type, 1167 void *arg, struct sctp_cmd_seq *commands) 1168 { 1169 struct sctp_paramhdr *param_hdr; 1170 struct sctp_chunk *chunk = arg; 1171 struct sctp_chunk *reply; 1172 size_t paylen = 0; 1173 1174 if (!sctp_vtag_verify(chunk, asoc)) 1175 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 1176 1177 /* Make sure that the HEARTBEAT chunk has a valid length. */ 1178 if (!sctp_chunk_length_valid(chunk, 1179 sizeof(struct sctp_heartbeat_chunk))) 1180 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 1181 commands); 1182 1183 /* 8.3 The receiver of the HEARTBEAT should immediately 1184 * respond with a HEARTBEAT ACK that contains the Heartbeat 1185 * Information field copied from the received HEARTBEAT chunk. 1186 */ 1187 chunk->subh.hb_hdr = (struct sctp_heartbeathdr *)chunk->skb->data; 1188 param_hdr = (struct sctp_paramhdr *)chunk->subh.hb_hdr; 1189 paylen = ntohs(chunk->chunk_hdr->length) - sizeof(struct sctp_chunkhdr); 1190 1191 if (ntohs(param_hdr->length) > paylen) 1192 return sctp_sf_violation_paramlen(net, ep, asoc, type, arg, 1193 param_hdr, commands); 1194 1195 if (!pskb_pull(chunk->skb, paylen)) 1196 goto nomem; 1197 1198 reply = sctp_make_heartbeat_ack(asoc, chunk, param_hdr, paylen); 1199 if (!reply) 1200 goto nomem; 1201 1202 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 1203 return SCTP_DISPOSITION_CONSUME; 1204 1205 nomem: 1206 return SCTP_DISPOSITION_NOMEM; 1207 } 1208 1209 /* 1210 * Process the returning HEARTBEAT ACK. 1211 * 1212 * Section: 8.3 Path Heartbeat 1213 * Upon the receipt of the HEARTBEAT ACK, the sender of the HEARTBEAT 1214 * should clear the error counter of the destination transport 1215 * address to which the HEARTBEAT was sent, and mark the destination 1216 * transport address as active if it is not so marked. The endpoint may 1217 * optionally report to the upper layer when an inactive destination 1218 * address is marked as active due to the reception of the latest 1219 * HEARTBEAT ACK. The receiver of the HEARTBEAT ACK must also 1220 * clear the association overall error count as well (as defined 1221 * in section 8.1). 1222 * 1223 * The receiver of the HEARTBEAT ACK should also perform an RTT 1224 * measurement for that destination transport address using the time 1225 * value carried in the HEARTBEAT ACK chunk. 1226 * 1227 * Verification Tag: 8.5 Verification Tag [Normal verification] 1228 * 1229 * Inputs 1230 * (endpoint, asoc, chunk) 1231 * 1232 * Outputs 1233 * (asoc, reply_msg, msg_up, timers, counters) 1234 * 1235 * The return value is the disposition of the chunk. 1236 */ 1237 enum sctp_disposition sctp_sf_backbeat_8_3(struct net *net, 1238 const struct sctp_endpoint *ep, 1239 const struct sctp_association *asoc, 1240 const union sctp_subtype type, 1241 void *arg, 1242 struct sctp_cmd_seq *commands) 1243 { 1244 struct sctp_sender_hb_info *hbinfo; 1245 struct sctp_chunk *chunk = arg; 1246 struct sctp_transport *link; 1247 unsigned long max_interval; 1248 union sctp_addr from_addr; 1249 1250 if (!sctp_vtag_verify(chunk, asoc)) 1251 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 1252 1253 /* Make sure that the HEARTBEAT-ACK chunk has a valid length. */ 1254 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr) + 1255 sizeof(*hbinfo))) 1256 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 1257 commands); 1258 1259 hbinfo = (struct sctp_sender_hb_info *)chunk->skb->data; 1260 /* Make sure that the length of the parameter is what we expect */ 1261 if (ntohs(hbinfo->param_hdr.length) != sizeof(*hbinfo)) 1262 return SCTP_DISPOSITION_DISCARD; 1263 1264 from_addr = hbinfo->daddr; 1265 link = sctp_assoc_lookup_paddr(asoc, &from_addr); 1266 1267 /* This should never happen, but lets log it if so. */ 1268 if (unlikely(!link)) { 1269 if (from_addr.sa.sa_family == AF_INET6) { 1270 net_warn_ratelimited("%s association %p could not find address %pI6\n", 1271 __func__, 1272 asoc, 1273 &from_addr.v6.sin6_addr); 1274 } else { 1275 net_warn_ratelimited("%s association %p could not find address %pI4\n", 1276 __func__, 1277 asoc, 1278 &from_addr.v4.sin_addr.s_addr); 1279 } 1280 return SCTP_DISPOSITION_DISCARD; 1281 } 1282 1283 /* Validate the 64-bit random nonce. */ 1284 if (hbinfo->hb_nonce != link->hb_nonce) 1285 return SCTP_DISPOSITION_DISCARD; 1286 1287 if (hbinfo->probe_size) { 1288 if (hbinfo->probe_size != link->pl.probe_size || 1289 !sctp_transport_pl_enabled(link)) 1290 return SCTP_DISPOSITION_DISCARD; 1291 1292 if (sctp_transport_pl_recv(link)) 1293 return SCTP_DISPOSITION_CONSUME; 1294 1295 return sctp_sf_send_probe(net, ep, asoc, type, link, commands); 1296 } 1297 1298 max_interval = link->hbinterval + link->rto; 1299 1300 /* Check if the timestamp looks valid. */ 1301 if (time_after(hbinfo->sent_at, jiffies) || 1302 time_after(jiffies, hbinfo->sent_at + max_interval)) { 1303 pr_debug("%s: HEARTBEAT ACK with invalid timestamp received " 1304 "for transport:%p\n", __func__, link); 1305 1306 return SCTP_DISPOSITION_DISCARD; 1307 } 1308 1309 /* 8.3 Upon the receipt of the HEARTBEAT ACK, the sender of 1310 * the HEARTBEAT should clear the error counter of the 1311 * destination transport address to which the HEARTBEAT was 1312 * sent and mark the destination transport address as active if 1313 * it is not so marked. 1314 */ 1315 sctp_add_cmd_sf(commands, SCTP_CMD_TRANSPORT_ON, SCTP_TRANSPORT(link)); 1316 1317 return SCTP_DISPOSITION_CONSUME; 1318 } 1319 1320 /* Helper function to send out an abort for the restart 1321 * condition. 1322 */ 1323 static int sctp_sf_send_restart_abort(struct net *net, union sctp_addr *ssa, 1324 struct sctp_chunk *init, 1325 struct sctp_cmd_seq *commands) 1326 { 1327 struct sctp_af *af = sctp_get_af_specific(ssa->v4.sin_family); 1328 union sctp_addr_param *addrparm; 1329 struct sctp_errhdr *errhdr; 1330 char buffer[sizeof(*errhdr) + sizeof(*addrparm)]; 1331 struct sctp_endpoint *ep; 1332 struct sctp_packet *pkt; 1333 int len; 1334 1335 /* Build the error on the stack. We are way to malloc crazy 1336 * throughout the code today. 1337 */ 1338 errhdr = (struct sctp_errhdr *)buffer; 1339 addrparm = (union sctp_addr_param *)errhdr->variable; 1340 1341 /* Copy into a parm format. */ 1342 len = af->to_addr_param(ssa, addrparm); 1343 len += sizeof(*errhdr); 1344 1345 errhdr->cause = SCTP_ERROR_RESTART; 1346 errhdr->length = htons(len); 1347 1348 /* Assign to the control socket. */ 1349 ep = sctp_sk(net->sctp.ctl_sock)->ep; 1350 1351 /* Association is NULL since this may be a restart attack and we 1352 * want to send back the attacker's vtag. 1353 */ 1354 pkt = sctp_abort_pkt_new(net, ep, NULL, init, errhdr, len); 1355 1356 if (!pkt) 1357 goto out; 1358 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, SCTP_PACKET(pkt)); 1359 1360 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 1361 1362 /* Discard the rest of the inbound packet. */ 1363 sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL()); 1364 1365 out: 1366 /* Even if there is no memory, treat as a failure so 1367 * the packet will get dropped. 1368 */ 1369 return 0; 1370 } 1371 1372 static bool list_has_sctp_addr(const struct list_head *list, 1373 union sctp_addr *ipaddr) 1374 { 1375 struct sctp_transport *addr; 1376 1377 list_for_each_entry(addr, list, transports) { 1378 if (sctp_cmp_addr_exact(ipaddr, &addr->ipaddr)) 1379 return true; 1380 } 1381 1382 return false; 1383 } 1384 /* A restart is occurring, check to make sure no new addresses 1385 * are being added as we may be under a takeover attack. 1386 */ 1387 static int sctp_sf_check_restart_addrs(const struct sctp_association *new_asoc, 1388 const struct sctp_association *asoc, 1389 struct sctp_chunk *init, 1390 struct sctp_cmd_seq *commands) 1391 { 1392 struct net *net = new_asoc->base.net; 1393 struct sctp_transport *new_addr; 1394 int ret = 1; 1395 1396 /* Implementor's Guide - Section 5.2.2 1397 * ... 1398 * Before responding the endpoint MUST check to see if the 1399 * unexpected INIT adds new addresses to the association. If new 1400 * addresses are added to the association, the endpoint MUST respond 1401 * with an ABORT.. 1402 */ 1403 1404 /* Search through all current addresses and make sure 1405 * we aren't adding any new ones. 1406 */ 1407 list_for_each_entry(new_addr, &new_asoc->peer.transport_addr_list, 1408 transports) { 1409 if (!list_has_sctp_addr(&asoc->peer.transport_addr_list, 1410 &new_addr->ipaddr)) { 1411 sctp_sf_send_restart_abort(net, &new_addr->ipaddr, init, 1412 commands); 1413 ret = 0; 1414 break; 1415 } 1416 } 1417 1418 /* Return success if all addresses were found. */ 1419 return ret; 1420 } 1421 1422 /* Populate the verification/tie tags based on overlapping INIT 1423 * scenario. 1424 * 1425 * Note: Do not use in CLOSED or SHUTDOWN-ACK-SENT state. 1426 */ 1427 static void sctp_tietags_populate(struct sctp_association *new_asoc, 1428 const struct sctp_association *asoc) 1429 { 1430 switch (asoc->state) { 1431 1432 /* 5.2.1 INIT received in COOKIE-WAIT or COOKIE-ECHOED State */ 1433 1434 case SCTP_STATE_COOKIE_WAIT: 1435 new_asoc->c.my_vtag = asoc->c.my_vtag; 1436 new_asoc->c.my_ttag = asoc->c.my_vtag; 1437 new_asoc->c.peer_ttag = 0; 1438 break; 1439 1440 case SCTP_STATE_COOKIE_ECHOED: 1441 new_asoc->c.my_vtag = asoc->c.my_vtag; 1442 new_asoc->c.my_ttag = asoc->c.my_vtag; 1443 new_asoc->c.peer_ttag = asoc->c.peer_vtag; 1444 break; 1445 1446 /* 5.2.2 Unexpected INIT in States Other than CLOSED, COOKIE-ECHOED, 1447 * COOKIE-WAIT and SHUTDOWN-ACK-SENT 1448 */ 1449 default: 1450 new_asoc->c.my_ttag = asoc->c.my_vtag; 1451 new_asoc->c.peer_ttag = asoc->c.peer_vtag; 1452 break; 1453 } 1454 1455 /* Other parameters for the endpoint SHOULD be copied from the 1456 * existing parameters of the association (e.g. number of 1457 * outbound streams) into the INIT ACK and cookie. 1458 */ 1459 new_asoc->rwnd = asoc->rwnd; 1460 new_asoc->c.sinit_num_ostreams = asoc->c.sinit_num_ostreams; 1461 new_asoc->c.sinit_max_instreams = asoc->c.sinit_max_instreams; 1462 new_asoc->c.initial_tsn = asoc->c.initial_tsn; 1463 } 1464 1465 /* 1466 * Compare vtag/tietag values to determine unexpected COOKIE-ECHO 1467 * handling action. 1468 * 1469 * RFC 2960 5.2.4 Handle a COOKIE ECHO when a TCB exists. 1470 * 1471 * Returns value representing action to be taken. These action values 1472 * correspond to Action/Description values in RFC 2960, Table 2. 1473 */ 1474 static char sctp_tietags_compare(struct sctp_association *new_asoc, 1475 const struct sctp_association *asoc) 1476 { 1477 /* In this case, the peer may have restarted. */ 1478 if ((asoc->c.my_vtag != new_asoc->c.my_vtag) && 1479 (asoc->c.peer_vtag != new_asoc->c.peer_vtag) && 1480 (asoc->c.my_vtag == new_asoc->c.my_ttag) && 1481 (asoc->c.peer_vtag == new_asoc->c.peer_ttag)) 1482 return 'A'; 1483 1484 /* Collision case B. */ 1485 if ((asoc->c.my_vtag == new_asoc->c.my_vtag) && 1486 ((asoc->c.peer_vtag != new_asoc->c.peer_vtag) || 1487 (0 == asoc->c.peer_vtag))) { 1488 return 'B'; 1489 } 1490 1491 /* Collision case D. */ 1492 if ((asoc->c.my_vtag == new_asoc->c.my_vtag) && 1493 (asoc->c.peer_vtag == new_asoc->c.peer_vtag)) 1494 return 'D'; 1495 1496 /* Collision case C. */ 1497 if ((asoc->c.my_vtag != new_asoc->c.my_vtag) && 1498 (asoc->c.peer_vtag == new_asoc->c.peer_vtag) && 1499 (0 == new_asoc->c.my_ttag) && 1500 (0 == new_asoc->c.peer_ttag)) 1501 return 'C'; 1502 1503 /* No match to any of the special cases; discard this packet. */ 1504 return 'E'; 1505 } 1506 1507 /* Common helper routine for both duplicate and simultaneous INIT 1508 * chunk handling. 1509 */ 1510 static enum sctp_disposition sctp_sf_do_unexpected_init( 1511 struct net *net, 1512 const struct sctp_endpoint *ep, 1513 const struct sctp_association *asoc, 1514 const union sctp_subtype type, 1515 void *arg, 1516 struct sctp_cmd_seq *commands) 1517 { 1518 struct sctp_chunk *chunk = arg, *repl, *err_chunk; 1519 struct sctp_unrecognized_param *unk_param; 1520 struct sctp_association *new_asoc; 1521 enum sctp_disposition retval; 1522 struct sctp_packet *packet; 1523 int len; 1524 1525 /* 6.10 Bundling 1526 * An endpoint MUST NOT bundle INIT, INIT ACK or 1527 * SHUTDOWN COMPLETE with any other chunks. 1528 * 1529 * IG Section 2.11.2 1530 * Furthermore, we require that the receiver of an INIT chunk MUST 1531 * enforce these rules by silently discarding an arriving packet 1532 * with an INIT chunk that is bundled with other chunks. 1533 */ 1534 if (!chunk->singleton) 1535 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 1536 1537 /* Make sure that the INIT chunk has a valid length. */ 1538 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) 1539 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 1540 1541 /* 3.1 A packet containing an INIT chunk MUST have a zero Verification 1542 * Tag. 1543 */ 1544 if (chunk->sctp_hdr->vtag != 0) 1545 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 1546 1547 if (SCTP_INPUT_CB(chunk->skb)->encap_port != chunk->transport->encap_port) 1548 return sctp_sf_new_encap_port(net, ep, asoc, type, arg, commands); 1549 1550 /* Grab the INIT header. */ 1551 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; 1552 1553 /* Tag the variable length parameters. */ 1554 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); 1555 1556 /* Verify the INIT chunk before processing it. */ 1557 err_chunk = NULL; 1558 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, 1559 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, 1560 &err_chunk)) { 1561 /* This chunk contains fatal error. It is to be discarded. 1562 * Send an ABORT, with causes if there is any. 1563 */ 1564 if (err_chunk) { 1565 packet = sctp_abort_pkt_new(net, ep, asoc, arg, 1566 (__u8 *)(err_chunk->chunk_hdr) + 1567 sizeof(struct sctp_chunkhdr), 1568 ntohs(err_chunk->chunk_hdr->length) - 1569 sizeof(struct sctp_chunkhdr)); 1570 1571 if (packet) { 1572 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, 1573 SCTP_PACKET(packet)); 1574 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 1575 retval = SCTP_DISPOSITION_CONSUME; 1576 } else { 1577 retval = SCTP_DISPOSITION_NOMEM; 1578 } 1579 goto cleanup; 1580 } else { 1581 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, 1582 commands); 1583 } 1584 } 1585 1586 /* 1587 * Other parameters for the endpoint SHOULD be copied from the 1588 * existing parameters of the association (e.g. number of 1589 * outbound streams) into the INIT ACK and cookie. 1590 * FIXME: We are copying parameters from the endpoint not the 1591 * association. 1592 */ 1593 new_asoc = sctp_make_temp_asoc(ep, chunk, GFP_ATOMIC); 1594 if (!new_asoc) 1595 goto nomem; 1596 1597 /* Update socket peer label if first association. */ 1598 if (security_sctp_assoc_request(new_asoc, chunk->skb)) { 1599 sctp_association_free(new_asoc); 1600 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 1601 } 1602 1603 if (sctp_assoc_set_bind_addr_from_ep(new_asoc, 1604 sctp_scope(sctp_source(chunk)), GFP_ATOMIC) < 0) 1605 goto nomem; 1606 1607 /* In the outbound INIT ACK the endpoint MUST copy its current 1608 * Verification Tag and Peers Verification tag into a reserved 1609 * place (local tie-tag and per tie-tag) within the state cookie. 1610 */ 1611 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), 1612 (struct sctp_init_chunk *)chunk->chunk_hdr, 1613 GFP_ATOMIC)) 1614 goto nomem; 1615 1616 /* Make sure no new addresses are being added during the 1617 * restart. Do not do this check for COOKIE-WAIT state, 1618 * since there are no peer addresses to check against. 1619 * Upon return an ABORT will have been sent if needed. 1620 */ 1621 if (!sctp_state(asoc, COOKIE_WAIT)) { 1622 if (!sctp_sf_check_restart_addrs(new_asoc, asoc, chunk, 1623 commands)) { 1624 retval = SCTP_DISPOSITION_CONSUME; 1625 goto nomem_retval; 1626 } 1627 } 1628 1629 sctp_tietags_populate(new_asoc, asoc); 1630 1631 /* B) "Z" shall respond immediately with an INIT ACK chunk. */ 1632 1633 /* If there are errors need to be reported for unknown parameters, 1634 * make sure to reserve enough room in the INIT ACK for them. 1635 */ 1636 len = 0; 1637 if (err_chunk) { 1638 len = ntohs(err_chunk->chunk_hdr->length) - 1639 sizeof(struct sctp_chunkhdr); 1640 } 1641 1642 repl = sctp_make_init_ack(new_asoc, chunk, GFP_ATOMIC, len); 1643 if (!repl) 1644 goto nomem; 1645 1646 /* If there are errors need to be reported for unknown parameters, 1647 * include them in the outgoing INIT ACK as "Unrecognized parameter" 1648 * parameter. 1649 */ 1650 if (err_chunk) { 1651 /* Get the "Unrecognized parameter" parameter(s) out of the 1652 * ERROR chunk generated by sctp_verify_init(). Since the 1653 * error cause code for "unknown parameter" and the 1654 * "Unrecognized parameter" type is the same, we can 1655 * construct the parameters in INIT ACK by copying the 1656 * ERROR causes over. 1657 */ 1658 unk_param = (struct sctp_unrecognized_param *) 1659 ((__u8 *)(err_chunk->chunk_hdr) + 1660 sizeof(struct sctp_chunkhdr)); 1661 /* Replace the cause code with the "Unrecognized parameter" 1662 * parameter type. 1663 */ 1664 sctp_addto_chunk(repl, len, unk_param); 1665 } 1666 1667 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_ASOC, SCTP_ASOC(new_asoc)); 1668 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 1669 1670 /* 1671 * Note: After sending out INIT ACK with the State Cookie parameter, 1672 * "Z" MUST NOT allocate any resources for this new association. 1673 * Otherwise, "Z" will be vulnerable to resource attacks. 1674 */ 1675 sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); 1676 retval = SCTP_DISPOSITION_CONSUME; 1677 1678 return retval; 1679 1680 nomem: 1681 retval = SCTP_DISPOSITION_NOMEM; 1682 nomem_retval: 1683 if (new_asoc) 1684 sctp_association_free(new_asoc); 1685 cleanup: 1686 if (err_chunk) 1687 sctp_chunk_free(err_chunk); 1688 return retval; 1689 } 1690 1691 /* 1692 * Handle simultaneous INIT. 1693 * This means we started an INIT and then we got an INIT request from 1694 * our peer. 1695 * 1696 * Section: 5.2.1 INIT received in COOKIE-WAIT or COOKIE-ECHOED State (Item B) 1697 * This usually indicates an initialization collision, i.e., each 1698 * endpoint is attempting, at about the same time, to establish an 1699 * association with the other endpoint. 1700 * 1701 * Upon receipt of an INIT in the COOKIE-WAIT or COOKIE-ECHOED state, an 1702 * endpoint MUST respond with an INIT ACK using the same parameters it 1703 * sent in its original INIT chunk (including its Verification Tag, 1704 * unchanged). These original parameters are combined with those from the 1705 * newly received INIT chunk. The endpoint shall also generate a State 1706 * Cookie with the INIT ACK. The endpoint uses the parameters sent in its 1707 * INIT to calculate the State Cookie. 1708 * 1709 * After that, the endpoint MUST NOT change its state, the T1-init 1710 * timer shall be left running and the corresponding TCB MUST NOT be 1711 * destroyed. The normal procedures for handling State Cookies when 1712 * a TCB exists will resolve the duplicate INITs to a single association. 1713 * 1714 * For an endpoint that is in the COOKIE-ECHOED state it MUST populate 1715 * its Tie-Tags with the Tag information of itself and its peer (see 1716 * section 5.2.2 for a description of the Tie-Tags). 1717 * 1718 * Verification Tag: Not explicit, but an INIT can not have a valid 1719 * verification tag, so we skip the check. 1720 * 1721 * Inputs 1722 * (endpoint, asoc, chunk) 1723 * 1724 * Outputs 1725 * (asoc, reply_msg, msg_up, timers, counters) 1726 * 1727 * The return value is the disposition of the chunk. 1728 */ 1729 enum sctp_disposition sctp_sf_do_5_2_1_siminit( 1730 struct net *net, 1731 const struct sctp_endpoint *ep, 1732 const struct sctp_association *asoc, 1733 const union sctp_subtype type, 1734 void *arg, 1735 struct sctp_cmd_seq *commands) 1736 { 1737 /* Call helper to do the real work for both simultaneous and 1738 * duplicate INIT chunk handling. 1739 */ 1740 return sctp_sf_do_unexpected_init(net, ep, asoc, type, arg, commands); 1741 } 1742 1743 /* 1744 * Handle duplicated INIT messages. These are usually delayed 1745 * restransmissions. 1746 * 1747 * Section: 5.2.2 Unexpected INIT in States Other than CLOSED, 1748 * COOKIE-ECHOED and COOKIE-WAIT 1749 * 1750 * Unless otherwise stated, upon reception of an unexpected INIT for 1751 * this association, the endpoint shall generate an INIT ACK with a 1752 * State Cookie. In the outbound INIT ACK the endpoint MUST copy its 1753 * current Verification Tag and peer's Verification Tag into a reserved 1754 * place within the state cookie. We shall refer to these locations as 1755 * the Peer's-Tie-Tag and the Local-Tie-Tag. The outbound SCTP packet 1756 * containing this INIT ACK MUST carry a Verification Tag value equal to 1757 * the Initiation Tag found in the unexpected INIT. And the INIT ACK 1758 * MUST contain a new Initiation Tag (randomly generated see Section 1759 * 5.3.1). Other parameters for the endpoint SHOULD be copied from the 1760 * existing parameters of the association (e.g. number of outbound 1761 * streams) into the INIT ACK and cookie. 1762 * 1763 * After sending out the INIT ACK, the endpoint shall take no further 1764 * actions, i.e., the existing association, including its current state, 1765 * and the corresponding TCB MUST NOT be changed. 1766 * 1767 * Note: Only when a TCB exists and the association is not in a COOKIE- 1768 * WAIT state are the Tie-Tags populated. For a normal association INIT 1769 * (i.e. the endpoint is in a COOKIE-WAIT state), the Tie-Tags MUST be 1770 * set to 0 (indicating that no previous TCB existed). The INIT ACK and 1771 * State Cookie are populated as specified in section 5.2.1. 1772 * 1773 * Verification Tag: Not specified, but an INIT has no way of knowing 1774 * what the verification tag could be, so we ignore it. 1775 * 1776 * Inputs 1777 * (endpoint, asoc, chunk) 1778 * 1779 * Outputs 1780 * (asoc, reply_msg, msg_up, timers, counters) 1781 * 1782 * The return value is the disposition of the chunk. 1783 */ 1784 enum sctp_disposition sctp_sf_do_5_2_2_dupinit( 1785 struct net *net, 1786 const struct sctp_endpoint *ep, 1787 const struct sctp_association *asoc, 1788 const union sctp_subtype type, 1789 void *arg, 1790 struct sctp_cmd_seq *commands) 1791 { 1792 /* Call helper to do the real work for both simultaneous and 1793 * duplicate INIT chunk handling. 1794 */ 1795 return sctp_sf_do_unexpected_init(net, ep, asoc, type, arg, commands); 1796 } 1797 1798 1799 /* 1800 * Unexpected INIT-ACK handler. 1801 * 1802 * Section 5.2.3 1803 * If an INIT ACK received by an endpoint in any state other than the 1804 * COOKIE-WAIT state, the endpoint should discard the INIT ACK chunk. 1805 * An unexpected INIT ACK usually indicates the processing of an old or 1806 * duplicated INIT chunk. 1807 */ 1808 enum sctp_disposition sctp_sf_do_5_2_3_initack( 1809 struct net *net, 1810 const struct sctp_endpoint *ep, 1811 const struct sctp_association *asoc, 1812 const union sctp_subtype type, 1813 void *arg, 1814 struct sctp_cmd_seq *commands) 1815 { 1816 /* Per the above section, we'll discard the chunk if we have an 1817 * endpoint. If this is an OOTB INIT-ACK, treat it as such. 1818 */ 1819 if (ep == sctp_sk(net->sctp.ctl_sock)->ep) 1820 return sctp_sf_ootb(net, ep, asoc, type, arg, commands); 1821 else 1822 return sctp_sf_discard_chunk(net, ep, asoc, type, arg, commands); 1823 } 1824 1825 static int sctp_sf_do_assoc_update(struct sctp_association *asoc, 1826 struct sctp_association *new, 1827 struct sctp_cmd_seq *cmds) 1828 { 1829 struct net *net = asoc->base.net; 1830 struct sctp_chunk *abort; 1831 1832 if (!sctp_assoc_update(asoc, new)) 1833 return 0; 1834 1835 abort = sctp_make_abort(asoc, NULL, sizeof(struct sctp_errhdr)); 1836 if (abort) { 1837 sctp_init_cause(abort, SCTP_ERROR_RSRC_LOW, 0); 1838 sctp_add_cmd_sf(cmds, SCTP_CMD_REPLY, SCTP_CHUNK(abort)); 1839 } 1840 sctp_add_cmd_sf(cmds, SCTP_CMD_SET_SK_ERR, SCTP_ERROR(ECONNABORTED)); 1841 sctp_add_cmd_sf(cmds, SCTP_CMD_ASSOC_FAILED, 1842 SCTP_PERR(SCTP_ERROR_RSRC_LOW)); 1843 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 1844 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 1845 1846 return -ENOMEM; 1847 } 1848 1849 /* Unexpected COOKIE-ECHO handler for peer restart (Table 2, action 'A') 1850 * 1851 * Section 5.2.4 1852 * A) In this case, the peer may have restarted. 1853 */ 1854 static enum sctp_disposition sctp_sf_do_dupcook_a( 1855 struct net *net, 1856 const struct sctp_endpoint *ep, 1857 const struct sctp_association *asoc, 1858 struct sctp_chunk *chunk, 1859 struct sctp_cmd_seq *commands, 1860 struct sctp_association *new_asoc) 1861 { 1862 struct sctp_init_chunk *peer_init; 1863 enum sctp_disposition disposition; 1864 struct sctp_ulpevent *ev; 1865 struct sctp_chunk *repl; 1866 struct sctp_chunk *err; 1867 1868 /* new_asoc is a brand-new association, so these are not yet 1869 * side effects--it is safe to run them here. 1870 */ 1871 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; 1872 1873 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init, 1874 GFP_ATOMIC)) 1875 goto nomem; 1876 1877 if (sctp_auth_asoc_init_active_key(new_asoc, GFP_ATOMIC)) 1878 goto nomem; 1879 1880 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) 1881 return SCTP_DISPOSITION_DISCARD; 1882 1883 /* Make sure no new addresses are being added during the 1884 * restart. Though this is a pretty complicated attack 1885 * since you'd have to get inside the cookie. 1886 */ 1887 if (!sctp_sf_check_restart_addrs(new_asoc, asoc, chunk, commands)) 1888 return SCTP_DISPOSITION_CONSUME; 1889 1890 /* If the endpoint is in the SHUTDOWN-ACK-SENT state and recognizes 1891 * the peer has restarted (Action A), it MUST NOT setup a new 1892 * association but instead resend the SHUTDOWN ACK and send an ERROR 1893 * chunk with a "Cookie Received while Shutting Down" error cause to 1894 * its peer. 1895 */ 1896 if (sctp_state(asoc, SHUTDOWN_ACK_SENT)) { 1897 disposition = __sctp_sf_do_9_2_reshutack(net, ep, asoc, 1898 SCTP_ST_CHUNK(chunk->chunk_hdr->type), 1899 chunk, commands); 1900 if (SCTP_DISPOSITION_NOMEM == disposition) 1901 goto nomem; 1902 1903 err = sctp_make_op_error(asoc, chunk, 1904 SCTP_ERROR_COOKIE_IN_SHUTDOWN, 1905 NULL, 0, 0); 1906 if (err) 1907 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 1908 SCTP_CHUNK(err)); 1909 1910 return SCTP_DISPOSITION_CONSUME; 1911 } 1912 1913 /* For now, stop pending T3-rtx and SACK timers, fail any unsent/unacked 1914 * data. Consider the optional choice of resending of this data. 1915 */ 1916 sctp_add_cmd_sf(commands, SCTP_CMD_T3_RTX_TIMERS_STOP, SCTP_NULL()); 1917 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 1918 SCTP_TO(SCTP_EVENT_TIMEOUT_SACK)); 1919 sctp_add_cmd_sf(commands, SCTP_CMD_PURGE_OUTQUEUE, SCTP_NULL()); 1920 1921 /* Stop pending T4-rto timer, teardown ASCONF queue, ASCONF-ACK queue 1922 * and ASCONF-ACK cache. 1923 */ 1924 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 1925 SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); 1926 sctp_add_cmd_sf(commands, SCTP_CMD_PURGE_ASCONF_QUEUE, SCTP_NULL()); 1927 1928 /* Update the content of current association. */ 1929 if (sctp_sf_do_assoc_update((struct sctp_association *)asoc, new_asoc, commands)) 1930 goto nomem; 1931 1932 repl = sctp_make_cookie_ack(asoc, chunk); 1933 if (!repl) 1934 goto nomem; 1935 1936 /* Report association restart to upper layer. */ 1937 ev = sctp_ulpevent_make_assoc_change(asoc, 0, SCTP_RESTART, 0, 1938 asoc->c.sinit_num_ostreams, 1939 asoc->c.sinit_max_instreams, 1940 NULL, GFP_ATOMIC); 1941 if (!ev) 1942 goto nomem_ev; 1943 1944 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev)); 1945 if ((sctp_state(asoc, SHUTDOWN_PENDING) || 1946 sctp_state(asoc, SHUTDOWN_SENT)) && 1947 (sctp_sstate(asoc->base.sk, CLOSING) || 1948 sock_flag(asoc->base.sk, SOCK_DEAD))) { 1949 /* If the socket has been closed by user, don't 1950 * transition to ESTABLISHED. Instead trigger SHUTDOWN 1951 * bundled with COOKIE_ACK. 1952 */ 1953 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 1954 return sctp_sf_do_9_2_start_shutdown(net, ep, asoc, 1955 SCTP_ST_CHUNK(0), repl, 1956 commands); 1957 } else { 1958 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 1959 SCTP_STATE(SCTP_STATE_ESTABLISHED)); 1960 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 1961 } 1962 return SCTP_DISPOSITION_CONSUME; 1963 1964 nomem_ev: 1965 sctp_chunk_free(repl); 1966 nomem: 1967 return SCTP_DISPOSITION_NOMEM; 1968 } 1969 1970 /* Unexpected COOKIE-ECHO handler for setup collision (Table 2, action 'B') 1971 * 1972 * Section 5.2.4 1973 * B) In this case, both sides may be attempting to start an association 1974 * at about the same time but the peer endpoint started its INIT 1975 * after responding to the local endpoint's INIT 1976 */ 1977 /* This case represents an initialization collision. */ 1978 static enum sctp_disposition sctp_sf_do_dupcook_b( 1979 struct net *net, 1980 const struct sctp_endpoint *ep, 1981 const struct sctp_association *asoc, 1982 struct sctp_chunk *chunk, 1983 struct sctp_cmd_seq *commands, 1984 struct sctp_association *new_asoc) 1985 { 1986 struct sctp_init_chunk *peer_init; 1987 struct sctp_chunk *repl; 1988 1989 /* new_asoc is a brand-new association, so these are not yet 1990 * side effects--it is safe to run them here. 1991 */ 1992 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; 1993 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init, 1994 GFP_ATOMIC)) 1995 goto nomem; 1996 1997 if (sctp_auth_asoc_init_active_key(new_asoc, GFP_ATOMIC)) 1998 goto nomem; 1999 2000 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) 2001 return SCTP_DISPOSITION_DISCARD; 2002 2003 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 2004 SCTP_STATE(SCTP_STATE_ESTABLISHED)); 2005 if (asoc->state < SCTP_STATE_ESTABLISHED) 2006 SCTP_INC_STATS(net, SCTP_MIB_CURRESTAB); 2007 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_START, SCTP_NULL()); 2008 2009 /* Update the content of current association. */ 2010 if (sctp_sf_do_assoc_update((struct sctp_association *)asoc, new_asoc, commands)) 2011 goto nomem; 2012 2013 repl = sctp_make_cookie_ack(asoc, chunk); 2014 if (!repl) 2015 goto nomem; 2016 2017 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 2018 2019 /* RFC 2960 5.1 Normal Establishment of an Association 2020 * 2021 * D) IMPLEMENTATION NOTE: An implementation may choose to 2022 * send the Communication Up notification to the SCTP user 2023 * upon reception of a valid COOKIE ECHO chunk. 2024 * 2025 * Sadly, this needs to be implemented as a side-effect, because 2026 * we are not guaranteed to have set the association id of the real 2027 * association and so these notifications need to be delayed until 2028 * the association id is allocated. 2029 */ 2030 2031 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_CHANGE, SCTP_U8(SCTP_COMM_UP)); 2032 2033 /* Sockets API Draft Section 5.3.1.6 2034 * When a peer sends a Adaptation Layer Indication parameter , SCTP 2035 * delivers this notification to inform the application that of the 2036 * peers requested adaptation layer. 2037 * 2038 * This also needs to be done as a side effect for the same reason as 2039 * above. 2040 */ 2041 if (asoc->peer.adaptation_ind) 2042 sctp_add_cmd_sf(commands, SCTP_CMD_ADAPTATION_IND, SCTP_NULL()); 2043 2044 if (!asoc->peer.auth_capable) 2045 sctp_add_cmd_sf(commands, SCTP_CMD_PEER_NO_AUTH, SCTP_NULL()); 2046 2047 return SCTP_DISPOSITION_CONSUME; 2048 2049 nomem: 2050 return SCTP_DISPOSITION_NOMEM; 2051 } 2052 2053 /* Unexpected COOKIE-ECHO handler for setup collision (Table 2, action 'C') 2054 * 2055 * Section 5.2.4 2056 * C) In this case, the local endpoint's cookie has arrived late. 2057 * Before it arrived, the local endpoint sent an INIT and received an 2058 * INIT-ACK and finally sent a COOKIE ECHO with the peer's same tag 2059 * but a new tag of its own. 2060 */ 2061 /* This case represents an initialization collision. */ 2062 static enum sctp_disposition sctp_sf_do_dupcook_c( 2063 struct net *net, 2064 const struct sctp_endpoint *ep, 2065 const struct sctp_association *asoc, 2066 struct sctp_chunk *chunk, 2067 struct sctp_cmd_seq *commands, 2068 struct sctp_association *new_asoc) 2069 { 2070 /* The cookie should be silently discarded. 2071 * The endpoint SHOULD NOT change states and should leave 2072 * any timers running. 2073 */ 2074 return SCTP_DISPOSITION_DISCARD; 2075 } 2076 2077 /* Unexpected COOKIE-ECHO handler lost chunk (Table 2, action 'D') 2078 * 2079 * Section 5.2.4 2080 * 2081 * D) When both local and remote tags match the endpoint should always 2082 * enter the ESTABLISHED state, if it has not already done so. 2083 */ 2084 /* This case represents an initialization collision. */ 2085 static enum sctp_disposition sctp_sf_do_dupcook_d( 2086 struct net *net, 2087 const struct sctp_endpoint *ep, 2088 const struct sctp_association *asoc, 2089 struct sctp_chunk *chunk, 2090 struct sctp_cmd_seq *commands, 2091 struct sctp_association *new_asoc) 2092 { 2093 struct sctp_ulpevent *ev = NULL, *ai_ev = NULL, *auth_ev = NULL; 2094 struct sctp_chunk *repl; 2095 2096 /* Clarification from Implementor's Guide: 2097 * D) When both local and remote tags match the endpoint should 2098 * enter the ESTABLISHED state, if it is in the COOKIE-ECHOED state. 2099 * It should stop any cookie timer that may be running and send 2100 * a COOKIE ACK. 2101 */ 2102 2103 if (!sctp_auth_chunk_verify(net, chunk, asoc)) 2104 return SCTP_DISPOSITION_DISCARD; 2105 2106 /* Don't accidentally move back into established state. */ 2107 if (asoc->state < SCTP_STATE_ESTABLISHED) { 2108 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 2109 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_COOKIE)); 2110 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 2111 SCTP_STATE(SCTP_STATE_ESTABLISHED)); 2112 SCTP_INC_STATS(net, SCTP_MIB_CURRESTAB); 2113 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_START, 2114 SCTP_NULL()); 2115 2116 /* RFC 2960 5.1 Normal Establishment of an Association 2117 * 2118 * D) IMPLEMENTATION NOTE: An implementation may choose 2119 * to send the Communication Up notification to the 2120 * SCTP user upon reception of a valid COOKIE 2121 * ECHO chunk. 2122 */ 2123 ev = sctp_ulpevent_make_assoc_change(asoc, 0, 2124 SCTP_COMM_UP, 0, 2125 asoc->c.sinit_num_ostreams, 2126 asoc->c.sinit_max_instreams, 2127 NULL, GFP_ATOMIC); 2128 if (!ev) 2129 goto nomem; 2130 2131 /* Sockets API Draft Section 5.3.1.6 2132 * When a peer sends a Adaptation Layer Indication parameter, 2133 * SCTP delivers this notification to inform the application 2134 * that of the peers requested adaptation layer. 2135 */ 2136 if (asoc->peer.adaptation_ind) { 2137 ai_ev = sctp_ulpevent_make_adaptation_indication(asoc, 2138 GFP_ATOMIC); 2139 if (!ai_ev) 2140 goto nomem; 2141 2142 } 2143 2144 if (!asoc->peer.auth_capable) { 2145 auth_ev = sctp_ulpevent_make_authkey(asoc, 0, 2146 SCTP_AUTH_NO_AUTH, 2147 GFP_ATOMIC); 2148 if (!auth_ev) 2149 goto nomem; 2150 } 2151 } 2152 2153 repl = sctp_make_cookie_ack(asoc, chunk); 2154 if (!repl) 2155 goto nomem; 2156 2157 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 2158 2159 if (ev) 2160 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 2161 SCTP_ULPEVENT(ev)); 2162 if (ai_ev) 2163 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 2164 SCTP_ULPEVENT(ai_ev)); 2165 if (auth_ev) 2166 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 2167 SCTP_ULPEVENT(auth_ev)); 2168 2169 return SCTP_DISPOSITION_CONSUME; 2170 2171 nomem: 2172 if (auth_ev) 2173 sctp_ulpevent_free(auth_ev); 2174 if (ai_ev) 2175 sctp_ulpevent_free(ai_ev); 2176 if (ev) 2177 sctp_ulpevent_free(ev); 2178 return SCTP_DISPOSITION_NOMEM; 2179 } 2180 2181 /* 2182 * Handle a duplicate COOKIE-ECHO. This usually means a cookie-carrying 2183 * chunk was retransmitted and then delayed in the network. 2184 * 2185 * Section: 5.2.4 Handle a COOKIE ECHO when a TCB exists 2186 * 2187 * Verification Tag: None. Do cookie validation. 2188 * 2189 * Inputs 2190 * (endpoint, asoc, chunk) 2191 * 2192 * Outputs 2193 * (asoc, reply_msg, msg_up, timers, counters) 2194 * 2195 * The return value is the disposition of the chunk. 2196 */ 2197 enum sctp_disposition sctp_sf_do_5_2_4_dupcook( 2198 struct net *net, 2199 const struct sctp_endpoint *ep, 2200 const struct sctp_association *asoc, 2201 const union sctp_subtype type, 2202 void *arg, 2203 struct sctp_cmd_seq *commands) 2204 { 2205 struct sctp_association *new_asoc; 2206 struct sctp_chunk *chunk = arg; 2207 enum sctp_disposition retval; 2208 struct sctp_chunk *err_chk_p; 2209 int error = 0; 2210 char action; 2211 2212 /* Make sure that the chunk has a valid length from the protocol 2213 * perspective. In this case check to make sure we have at least 2214 * enough for the chunk header. Cookie length verification is 2215 * done later. 2216 */ 2217 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) { 2218 if (!sctp_vtag_verify(chunk, asoc)) 2219 asoc = NULL; 2220 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, commands); 2221 } 2222 2223 /* "Decode" the chunk. We have no optional parameters so we 2224 * are in good shape. 2225 */ 2226 chunk->subh.cookie_hdr = (struct sctp_signed_cookie *)chunk->skb->data; 2227 if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) - 2228 sizeof(struct sctp_chunkhdr))) 2229 goto nomem; 2230 2231 /* In RFC 2960 5.2.4 3, if both Verification Tags in the State Cookie 2232 * of a duplicate COOKIE ECHO match the Verification Tags of the 2233 * current association, consider the State Cookie valid even if 2234 * the lifespan is exceeded. 2235 */ 2236 new_asoc = sctp_unpack_cookie(ep, asoc, chunk, GFP_ATOMIC, &error, 2237 &err_chk_p); 2238 2239 /* FIXME: 2240 * If the re-build failed, what is the proper error path 2241 * from here? 2242 * 2243 * [We should abort the association. --piggy] 2244 */ 2245 if (!new_asoc) { 2246 /* FIXME: Several errors are possible. A bad cookie should 2247 * be silently discarded, but think about logging it too. 2248 */ 2249 switch (error) { 2250 case -SCTP_IERROR_NOMEM: 2251 goto nomem; 2252 2253 case -SCTP_IERROR_STALE_COOKIE: 2254 sctp_send_stale_cookie_err(net, ep, asoc, chunk, commands, 2255 err_chk_p); 2256 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2257 case -SCTP_IERROR_BAD_SIG: 2258 default: 2259 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2260 } 2261 } 2262 2263 /* Update socket peer label if first association. */ 2264 if (security_sctp_assoc_request(new_asoc, chunk->skb)) { 2265 sctp_association_free(new_asoc); 2266 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2267 } 2268 2269 /* Set temp so that it won't be added into hashtable */ 2270 new_asoc->temp = 1; 2271 2272 /* Compare the tie_tag in cookie with the verification tag of 2273 * current association. 2274 */ 2275 action = sctp_tietags_compare(new_asoc, asoc); 2276 2277 switch (action) { 2278 case 'A': /* Association restart. */ 2279 retval = sctp_sf_do_dupcook_a(net, ep, asoc, chunk, commands, 2280 new_asoc); 2281 break; 2282 2283 case 'B': /* Collision case B. */ 2284 retval = sctp_sf_do_dupcook_b(net, ep, asoc, chunk, commands, 2285 new_asoc); 2286 break; 2287 2288 case 'C': /* Collision case C. */ 2289 retval = sctp_sf_do_dupcook_c(net, ep, asoc, chunk, commands, 2290 new_asoc); 2291 break; 2292 2293 case 'D': /* Collision case D. */ 2294 retval = sctp_sf_do_dupcook_d(net, ep, asoc, chunk, commands, 2295 new_asoc); 2296 break; 2297 2298 default: /* Discard packet for all others. */ 2299 retval = sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2300 break; 2301 } 2302 2303 /* Delete the temporary new association. */ 2304 sctp_add_cmd_sf(commands, SCTP_CMD_SET_ASOC, SCTP_ASOC(new_asoc)); 2305 sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); 2306 2307 /* Restore association pointer to provide SCTP command interpreter 2308 * with a valid context in case it needs to manipulate 2309 * the queues */ 2310 sctp_add_cmd_sf(commands, SCTP_CMD_SET_ASOC, 2311 SCTP_ASOC((struct sctp_association *)asoc)); 2312 2313 return retval; 2314 2315 nomem: 2316 return SCTP_DISPOSITION_NOMEM; 2317 } 2318 2319 /* 2320 * Process an ABORT. (SHUTDOWN-PENDING state) 2321 * 2322 * See sctp_sf_do_9_1_abort(). 2323 */ 2324 enum sctp_disposition sctp_sf_shutdown_pending_abort( 2325 struct net *net, 2326 const struct sctp_endpoint *ep, 2327 const struct sctp_association *asoc, 2328 const union sctp_subtype type, 2329 void *arg, 2330 struct sctp_cmd_seq *commands) 2331 { 2332 struct sctp_chunk *chunk = arg; 2333 2334 if (!sctp_vtag_verify_either(chunk, asoc)) 2335 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2336 2337 /* Make sure that the ABORT chunk has a valid length. 2338 * Since this is an ABORT chunk, we have to discard it 2339 * because of the following text: 2340 * RFC 2960, Section 3.3.7 2341 * If an endpoint receives an ABORT with a format error or for an 2342 * association that doesn't exist, it MUST silently discard it. 2343 * Because the length is "invalid", we can't really discard just 2344 * as we do not know its true length. So, to be safe, discard the 2345 * packet. 2346 */ 2347 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) 2348 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2349 2350 /* ADD-IP: Special case for ABORT chunks 2351 * F4) One special consideration is that ABORT Chunks arriving 2352 * destined to the IP address being deleted MUST be 2353 * ignored (see Section 5.3.1 for further details). 2354 */ 2355 if (SCTP_ADDR_DEL == 2356 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) 2357 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2358 2359 if (!sctp_err_chunk_valid(chunk)) 2360 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2361 2362 return __sctp_sf_do_9_1_abort(net, ep, asoc, type, arg, commands); 2363 } 2364 2365 /* 2366 * Process an ABORT. (SHUTDOWN-SENT state) 2367 * 2368 * See sctp_sf_do_9_1_abort(). 2369 */ 2370 enum sctp_disposition sctp_sf_shutdown_sent_abort( 2371 struct net *net, 2372 const struct sctp_endpoint *ep, 2373 const struct sctp_association *asoc, 2374 const union sctp_subtype type, 2375 void *arg, 2376 struct sctp_cmd_seq *commands) 2377 { 2378 struct sctp_chunk *chunk = arg; 2379 2380 if (!sctp_vtag_verify_either(chunk, asoc)) 2381 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2382 2383 /* Make sure that the ABORT chunk has a valid length. 2384 * Since this is an ABORT chunk, we have to discard it 2385 * because of the following text: 2386 * RFC 2960, Section 3.3.7 2387 * If an endpoint receives an ABORT with a format error or for an 2388 * association that doesn't exist, it MUST silently discard it. 2389 * Because the length is "invalid", we can't really discard just 2390 * as we do not know its true length. So, to be safe, discard the 2391 * packet. 2392 */ 2393 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) 2394 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2395 2396 /* ADD-IP: Special case for ABORT chunks 2397 * F4) One special consideration is that ABORT Chunks arriving 2398 * destined to the IP address being deleted MUST be 2399 * ignored (see Section 5.3.1 for further details). 2400 */ 2401 if (SCTP_ADDR_DEL == 2402 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) 2403 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2404 2405 if (!sctp_err_chunk_valid(chunk)) 2406 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2407 2408 /* Stop the T2-shutdown timer. */ 2409 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 2410 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 2411 2412 /* Stop the T5-shutdown guard timer. */ 2413 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 2414 SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD)); 2415 2416 return __sctp_sf_do_9_1_abort(net, ep, asoc, type, arg, commands); 2417 } 2418 2419 /* 2420 * Process an ABORT. (SHUTDOWN-ACK-SENT state) 2421 * 2422 * See sctp_sf_do_9_1_abort(). 2423 */ 2424 enum sctp_disposition sctp_sf_shutdown_ack_sent_abort( 2425 struct net *net, 2426 const struct sctp_endpoint *ep, 2427 const struct sctp_association *asoc, 2428 const union sctp_subtype type, 2429 void *arg, 2430 struct sctp_cmd_seq *commands) 2431 { 2432 /* The same T2 timer, so we should be able to use 2433 * common function with the SHUTDOWN-SENT state. 2434 */ 2435 return sctp_sf_shutdown_sent_abort(net, ep, asoc, type, arg, commands); 2436 } 2437 2438 /* 2439 * Handle an Error received in COOKIE_ECHOED state. 2440 * 2441 * Only handle the error type of stale COOKIE Error, the other errors will 2442 * be ignored. 2443 * 2444 * Inputs 2445 * (endpoint, asoc, chunk) 2446 * 2447 * Outputs 2448 * (asoc, reply_msg, msg_up, timers, counters) 2449 * 2450 * The return value is the disposition of the chunk. 2451 */ 2452 enum sctp_disposition sctp_sf_cookie_echoed_err( 2453 struct net *net, 2454 const struct sctp_endpoint *ep, 2455 const struct sctp_association *asoc, 2456 const union sctp_subtype type, 2457 void *arg, 2458 struct sctp_cmd_seq *commands) 2459 { 2460 struct sctp_chunk *chunk = arg; 2461 struct sctp_errhdr *err; 2462 2463 if (!sctp_vtag_verify(chunk, asoc)) 2464 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2465 2466 /* Make sure that the ERROR chunk has a valid length. 2467 * The parameter walking depends on this as well. 2468 */ 2469 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_operr_chunk))) 2470 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 2471 commands); 2472 2473 /* Process the error here */ 2474 /* FUTURE FIXME: When PR-SCTP related and other optional 2475 * parms are emitted, this will have to change to handle multiple 2476 * errors. 2477 */ 2478 sctp_walk_errors(err, chunk->chunk_hdr) { 2479 if (SCTP_ERROR_STALE_COOKIE == err->cause) 2480 return sctp_sf_do_5_2_6_stale(net, ep, asoc, type, 2481 arg, commands); 2482 } 2483 2484 /* It is possible to have malformed error causes, and that 2485 * will cause us to end the walk early. However, since 2486 * we are discarding the packet, there should be no adverse 2487 * affects. 2488 */ 2489 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2490 } 2491 2492 /* 2493 * Handle a Stale COOKIE Error 2494 * 2495 * Section: 5.2.6 Handle Stale COOKIE Error 2496 * If the association is in the COOKIE-ECHOED state, the endpoint may elect 2497 * one of the following three alternatives. 2498 * ... 2499 * 3) Send a new INIT chunk to the endpoint, adding a Cookie 2500 * Preservative parameter requesting an extension to the lifetime of 2501 * the State Cookie. When calculating the time extension, an 2502 * implementation SHOULD use the RTT information measured based on the 2503 * previous COOKIE ECHO / ERROR exchange, and should add no more 2504 * than 1 second beyond the measured RTT, due to long State Cookie 2505 * lifetimes making the endpoint more subject to a replay attack. 2506 * 2507 * Verification Tag: Not explicit, but safe to ignore. 2508 * 2509 * Inputs 2510 * (endpoint, asoc, chunk) 2511 * 2512 * Outputs 2513 * (asoc, reply_msg, msg_up, timers, counters) 2514 * 2515 * The return value is the disposition of the chunk. 2516 */ 2517 static enum sctp_disposition sctp_sf_do_5_2_6_stale( 2518 struct net *net, 2519 const struct sctp_endpoint *ep, 2520 const struct sctp_association *asoc, 2521 const union sctp_subtype type, 2522 void *arg, 2523 struct sctp_cmd_seq *commands) 2524 { 2525 int attempts = asoc->init_err_counter + 1; 2526 struct sctp_chunk *chunk = arg, *reply; 2527 struct sctp_cookie_preserve_param bht; 2528 struct sctp_bind_addr *bp; 2529 struct sctp_errhdr *err; 2530 u32 stale; 2531 2532 if (attempts > asoc->max_init_attempts) { 2533 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 2534 SCTP_ERROR(ETIMEDOUT)); 2535 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED, 2536 SCTP_PERR(SCTP_ERROR_STALE_COOKIE)); 2537 return SCTP_DISPOSITION_DELETE_TCB; 2538 } 2539 2540 err = (struct sctp_errhdr *)(chunk->skb->data); 2541 2542 /* When calculating the time extension, an implementation 2543 * SHOULD use the RTT information measured based on the 2544 * previous COOKIE ECHO / ERROR exchange, and should add no 2545 * more than 1 second beyond the measured RTT, due to long 2546 * State Cookie lifetimes making the endpoint more subject to 2547 * a replay attack. 2548 * Measure of Staleness's unit is usec. (1/1000000 sec) 2549 * Suggested Cookie Life-span Increment's unit is msec. 2550 * (1/1000 sec) 2551 * In general, if you use the suggested cookie life, the value 2552 * found in the field of measure of staleness should be doubled 2553 * to give ample time to retransmit the new cookie and thus 2554 * yield a higher probability of success on the reattempt. 2555 */ 2556 stale = ntohl(*(__be32 *)((u8 *)err + sizeof(*err))); 2557 stale = (stale * 2) / 1000; 2558 2559 bht.param_hdr.type = SCTP_PARAM_COOKIE_PRESERVATIVE; 2560 bht.param_hdr.length = htons(sizeof(bht)); 2561 bht.lifespan_increment = htonl(stale); 2562 2563 /* Build that new INIT chunk. */ 2564 bp = (struct sctp_bind_addr *) &asoc->base.bind_addr; 2565 reply = sctp_make_init(asoc, bp, GFP_ATOMIC, sizeof(bht)); 2566 if (!reply) 2567 goto nomem; 2568 2569 sctp_addto_chunk(reply, sizeof(bht), &bht); 2570 2571 /* Clear peer's init_tag cached in assoc as we are sending a new INIT */ 2572 sctp_add_cmd_sf(commands, SCTP_CMD_CLEAR_INIT_TAG, SCTP_NULL()); 2573 2574 /* Stop pending T3-rtx and heartbeat timers */ 2575 sctp_add_cmd_sf(commands, SCTP_CMD_T3_RTX_TIMERS_STOP, SCTP_NULL()); 2576 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_STOP, SCTP_NULL()); 2577 2578 /* Delete non-primary peer ip addresses since we are transitioning 2579 * back to the COOKIE-WAIT state 2580 */ 2581 sctp_add_cmd_sf(commands, SCTP_CMD_DEL_NON_PRIMARY, SCTP_NULL()); 2582 2583 /* If we've sent any data bundled with COOKIE-ECHO we will need to 2584 * resend 2585 */ 2586 sctp_add_cmd_sf(commands, SCTP_CMD_T1_RETRAN, 2587 SCTP_TRANSPORT(asoc->peer.primary_path)); 2588 2589 /* Cast away the const modifier, as we want to just 2590 * rerun it through as a sideffect. 2591 */ 2592 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_COUNTER_INC, SCTP_NULL()); 2593 2594 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 2595 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_COOKIE)); 2596 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 2597 SCTP_STATE(SCTP_STATE_COOKIE_WAIT)); 2598 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START, 2599 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 2600 2601 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 2602 2603 return SCTP_DISPOSITION_CONSUME; 2604 2605 nomem: 2606 return SCTP_DISPOSITION_NOMEM; 2607 } 2608 2609 /* 2610 * Process an ABORT. 2611 * 2612 * Section: 9.1 2613 * After checking the Verification Tag, the receiving endpoint shall 2614 * remove the association from its record, and shall report the 2615 * termination to its upper layer. 2616 * 2617 * Verification Tag: 8.5.1 Exceptions in Verification Tag Rules 2618 * B) Rules for packet carrying ABORT: 2619 * 2620 * - The endpoint shall always fill in the Verification Tag field of the 2621 * outbound packet with the destination endpoint's tag value if it 2622 * is known. 2623 * 2624 * - If the ABORT is sent in response to an OOTB packet, the endpoint 2625 * MUST follow the procedure described in Section 8.4. 2626 * 2627 * - The receiver MUST accept the packet if the Verification Tag 2628 * matches either its own tag, OR the tag of its peer. Otherwise, the 2629 * receiver MUST silently discard the packet and take no further 2630 * action. 2631 * 2632 * Inputs 2633 * (endpoint, asoc, chunk) 2634 * 2635 * Outputs 2636 * (asoc, reply_msg, msg_up, timers, counters) 2637 * 2638 * The return value is the disposition of the chunk. 2639 */ 2640 enum sctp_disposition sctp_sf_do_9_1_abort( 2641 struct net *net, 2642 const struct sctp_endpoint *ep, 2643 const struct sctp_association *asoc, 2644 const union sctp_subtype type, 2645 void *arg, 2646 struct sctp_cmd_seq *commands) 2647 { 2648 struct sctp_chunk *chunk = arg; 2649 2650 if (!sctp_vtag_verify_either(chunk, asoc)) 2651 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2652 2653 /* Make sure that the ABORT chunk has a valid length. 2654 * Since this is an ABORT chunk, we have to discard it 2655 * because of the following text: 2656 * RFC 2960, Section 3.3.7 2657 * If an endpoint receives an ABORT with a format error or for an 2658 * association that doesn't exist, it MUST silently discard it. 2659 * Because the length is "invalid", we can't really discard just 2660 * as we do not know its true length. So, to be safe, discard the 2661 * packet. 2662 */ 2663 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) 2664 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2665 2666 /* ADD-IP: Special case for ABORT chunks 2667 * F4) One special consideration is that ABORT Chunks arriving 2668 * destined to the IP address being deleted MUST be 2669 * ignored (see Section 5.3.1 for further details). 2670 */ 2671 if (SCTP_ADDR_DEL == 2672 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) 2673 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2674 2675 if (!sctp_err_chunk_valid(chunk)) 2676 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2677 2678 return __sctp_sf_do_9_1_abort(net, ep, asoc, type, arg, commands); 2679 } 2680 2681 static enum sctp_disposition __sctp_sf_do_9_1_abort( 2682 struct net *net, 2683 const struct sctp_endpoint *ep, 2684 const struct sctp_association *asoc, 2685 const union sctp_subtype type, 2686 void *arg, 2687 struct sctp_cmd_seq *commands) 2688 { 2689 __be16 error = SCTP_ERROR_NO_ERROR; 2690 struct sctp_chunk *chunk = arg; 2691 unsigned int len; 2692 2693 /* See if we have an error cause code in the chunk. */ 2694 len = ntohs(chunk->chunk_hdr->length); 2695 if (len >= sizeof(struct sctp_chunkhdr) + sizeof(struct sctp_errhdr)) 2696 error = ((struct sctp_errhdr *)chunk->skb->data)->cause; 2697 2698 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, SCTP_ERROR(ECONNRESET)); 2699 /* ASSOC_FAILED will DELETE_TCB. */ 2700 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, SCTP_PERR(error)); 2701 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 2702 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 2703 2704 return SCTP_DISPOSITION_ABORT; 2705 } 2706 2707 /* 2708 * Process an ABORT. (COOKIE-WAIT state) 2709 * 2710 * See sctp_sf_do_9_1_abort() above. 2711 */ 2712 enum sctp_disposition sctp_sf_cookie_wait_abort( 2713 struct net *net, 2714 const struct sctp_endpoint *ep, 2715 const struct sctp_association *asoc, 2716 const union sctp_subtype type, 2717 void *arg, 2718 struct sctp_cmd_seq *commands) 2719 { 2720 __be16 error = SCTP_ERROR_NO_ERROR; 2721 struct sctp_chunk *chunk = arg; 2722 unsigned int len; 2723 2724 if (!sctp_vtag_verify_either(chunk, asoc)) 2725 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2726 2727 /* Make sure that the ABORT chunk has a valid length. 2728 * Since this is an ABORT chunk, we have to discard it 2729 * because of the following text: 2730 * RFC 2960, Section 3.3.7 2731 * If an endpoint receives an ABORT with a format error or for an 2732 * association that doesn't exist, it MUST silently discard it. 2733 * Because the length is "invalid", we can't really discard just 2734 * as we do not know its true length. So, to be safe, discard the 2735 * packet. 2736 */ 2737 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) 2738 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2739 2740 /* See if we have an error cause code in the chunk. */ 2741 len = ntohs(chunk->chunk_hdr->length); 2742 if (len >= sizeof(struct sctp_chunkhdr) + sizeof(struct sctp_errhdr)) 2743 error = ((struct sctp_errhdr *)chunk->skb->data)->cause; 2744 2745 return sctp_stop_t1_and_abort(net, commands, error, ECONNREFUSED, asoc, 2746 chunk->transport); 2747 } 2748 2749 /* 2750 * Process an incoming ICMP as an ABORT. (COOKIE-WAIT state) 2751 */ 2752 enum sctp_disposition sctp_sf_cookie_wait_icmp_abort( 2753 struct net *net, 2754 const struct sctp_endpoint *ep, 2755 const struct sctp_association *asoc, 2756 const union sctp_subtype type, 2757 void *arg, 2758 struct sctp_cmd_seq *commands) 2759 { 2760 return sctp_stop_t1_and_abort(net, commands, SCTP_ERROR_NO_ERROR, 2761 ENOPROTOOPT, asoc, 2762 (struct sctp_transport *)arg); 2763 } 2764 2765 /* 2766 * Process an ABORT. (COOKIE-ECHOED state) 2767 */ 2768 enum sctp_disposition sctp_sf_cookie_echoed_abort( 2769 struct net *net, 2770 const struct sctp_endpoint *ep, 2771 const struct sctp_association *asoc, 2772 const union sctp_subtype type, 2773 void *arg, 2774 struct sctp_cmd_seq *commands) 2775 { 2776 /* There is a single T1 timer, so we should be able to use 2777 * common function with the COOKIE-WAIT state. 2778 */ 2779 return sctp_sf_cookie_wait_abort(net, ep, asoc, type, arg, commands); 2780 } 2781 2782 /* 2783 * Stop T1 timer and abort association with "INIT failed". 2784 * 2785 * This is common code called by several sctp_sf_*_abort() functions above. 2786 */ 2787 static enum sctp_disposition sctp_stop_t1_and_abort( 2788 struct net *net, 2789 struct sctp_cmd_seq *commands, 2790 __be16 error, int sk_err, 2791 const struct sctp_association *asoc, 2792 struct sctp_transport *transport) 2793 { 2794 pr_debug("%s: ABORT received (INIT)\n", __func__); 2795 2796 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 2797 SCTP_STATE(SCTP_STATE_CLOSED)); 2798 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 2799 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 2800 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 2801 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, SCTP_ERROR(sk_err)); 2802 /* CMD_INIT_FAILED will DELETE_TCB. */ 2803 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED, 2804 SCTP_PERR(error)); 2805 2806 return SCTP_DISPOSITION_ABORT; 2807 } 2808 2809 /* 2810 * sctp_sf_do_9_2_shut 2811 * 2812 * Section: 9.2 2813 * Upon the reception of the SHUTDOWN, the peer endpoint shall 2814 * - enter the SHUTDOWN-RECEIVED state, 2815 * 2816 * - stop accepting new data from its SCTP user 2817 * 2818 * - verify, by checking the Cumulative TSN Ack field of the chunk, 2819 * that all its outstanding DATA chunks have been received by the 2820 * SHUTDOWN sender. 2821 * 2822 * Once an endpoint as reached the SHUTDOWN-RECEIVED state it MUST NOT 2823 * send a SHUTDOWN in response to a ULP request. And should discard 2824 * subsequent SHUTDOWN chunks. 2825 * 2826 * If there are still outstanding DATA chunks left, the SHUTDOWN 2827 * receiver shall continue to follow normal data transmission 2828 * procedures defined in Section 6 until all outstanding DATA chunks 2829 * are acknowledged; however, the SHUTDOWN receiver MUST NOT accept 2830 * new data from its SCTP user. 2831 * 2832 * Verification Tag: 8.5 Verification Tag [Normal verification] 2833 * 2834 * Inputs 2835 * (endpoint, asoc, chunk) 2836 * 2837 * Outputs 2838 * (asoc, reply_msg, msg_up, timers, counters) 2839 * 2840 * The return value is the disposition of the chunk. 2841 */ 2842 enum sctp_disposition sctp_sf_do_9_2_shutdown( 2843 struct net *net, 2844 const struct sctp_endpoint *ep, 2845 const struct sctp_association *asoc, 2846 const union sctp_subtype type, 2847 void *arg, 2848 struct sctp_cmd_seq *commands) 2849 { 2850 enum sctp_disposition disposition; 2851 struct sctp_chunk *chunk = arg; 2852 struct sctp_shutdownhdr *sdh; 2853 struct sctp_ulpevent *ev; 2854 __u32 ctsn; 2855 2856 if (!sctp_vtag_verify(chunk, asoc)) 2857 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2858 2859 /* Make sure that the SHUTDOWN chunk has a valid length. */ 2860 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_shutdown_chunk))) 2861 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 2862 commands); 2863 2864 /* Convert the elaborate header. */ 2865 sdh = (struct sctp_shutdownhdr *)chunk->skb->data; 2866 skb_pull(chunk->skb, sizeof(*sdh)); 2867 chunk->subh.shutdown_hdr = sdh; 2868 ctsn = ntohl(sdh->cum_tsn_ack); 2869 2870 if (TSN_lt(ctsn, asoc->ctsn_ack_point)) { 2871 pr_debug("%s: ctsn:%x, ctsn_ack_point:%x\n", __func__, ctsn, 2872 asoc->ctsn_ack_point); 2873 2874 return SCTP_DISPOSITION_DISCARD; 2875 } 2876 2877 /* If Cumulative TSN Ack beyond the max tsn currently 2878 * send, terminating the association and respond to the 2879 * sender with an ABORT. 2880 */ 2881 if (!TSN_lt(ctsn, asoc->next_tsn)) 2882 return sctp_sf_violation_ctsn(net, ep, asoc, type, arg, commands); 2883 2884 /* API 5.3.1.5 SCTP_SHUTDOWN_EVENT 2885 * When a peer sends a SHUTDOWN, SCTP delivers this notification to 2886 * inform the application that it should cease sending data. 2887 */ 2888 ev = sctp_ulpevent_make_shutdown_event(asoc, 0, GFP_ATOMIC); 2889 if (!ev) { 2890 disposition = SCTP_DISPOSITION_NOMEM; 2891 goto out; 2892 } 2893 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev)); 2894 2895 /* Upon the reception of the SHUTDOWN, the peer endpoint shall 2896 * - enter the SHUTDOWN-RECEIVED state, 2897 * - stop accepting new data from its SCTP user 2898 * 2899 * [This is implicit in the new state.] 2900 */ 2901 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 2902 SCTP_STATE(SCTP_STATE_SHUTDOWN_RECEIVED)); 2903 disposition = SCTP_DISPOSITION_CONSUME; 2904 2905 if (sctp_outq_is_empty(&asoc->outqueue)) { 2906 disposition = sctp_sf_do_9_2_shutdown_ack(net, ep, asoc, type, 2907 arg, commands); 2908 } 2909 2910 if (SCTP_DISPOSITION_NOMEM == disposition) 2911 goto out; 2912 2913 /* - verify, by checking the Cumulative TSN Ack field of the 2914 * chunk, that all its outstanding DATA chunks have been 2915 * received by the SHUTDOWN sender. 2916 */ 2917 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_CTSN, 2918 SCTP_BE32(chunk->subh.shutdown_hdr->cum_tsn_ack)); 2919 2920 out: 2921 return disposition; 2922 } 2923 2924 /* 2925 * sctp_sf_do_9_2_shut_ctsn 2926 * 2927 * Once an endpoint has reached the SHUTDOWN-RECEIVED state, 2928 * it MUST NOT send a SHUTDOWN in response to a ULP request. 2929 * The Cumulative TSN Ack of the received SHUTDOWN chunk 2930 * MUST be processed. 2931 */ 2932 enum sctp_disposition sctp_sf_do_9_2_shut_ctsn( 2933 struct net *net, 2934 const struct sctp_endpoint *ep, 2935 const struct sctp_association *asoc, 2936 const union sctp_subtype type, 2937 void *arg, 2938 struct sctp_cmd_seq *commands) 2939 { 2940 struct sctp_chunk *chunk = arg; 2941 struct sctp_shutdownhdr *sdh; 2942 __u32 ctsn; 2943 2944 if (!sctp_vtag_verify(chunk, asoc)) 2945 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 2946 2947 /* Make sure that the SHUTDOWN chunk has a valid length. */ 2948 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_shutdown_chunk))) 2949 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 2950 commands); 2951 2952 sdh = (struct sctp_shutdownhdr *)chunk->skb->data; 2953 ctsn = ntohl(sdh->cum_tsn_ack); 2954 2955 if (TSN_lt(ctsn, asoc->ctsn_ack_point)) { 2956 pr_debug("%s: ctsn:%x, ctsn_ack_point:%x\n", __func__, ctsn, 2957 asoc->ctsn_ack_point); 2958 2959 return SCTP_DISPOSITION_DISCARD; 2960 } 2961 2962 /* If Cumulative TSN Ack beyond the max tsn currently 2963 * send, terminating the association and respond to the 2964 * sender with an ABORT. 2965 */ 2966 if (!TSN_lt(ctsn, asoc->next_tsn)) 2967 return sctp_sf_violation_ctsn(net, ep, asoc, type, arg, commands); 2968 2969 /* verify, by checking the Cumulative TSN Ack field of the 2970 * chunk, that all its outstanding DATA chunks have been 2971 * received by the SHUTDOWN sender. 2972 */ 2973 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_CTSN, 2974 SCTP_BE32(sdh->cum_tsn_ack)); 2975 2976 return SCTP_DISPOSITION_CONSUME; 2977 } 2978 2979 /* RFC 2960 9.2 2980 * If an endpoint is in SHUTDOWN-ACK-SENT state and receives an INIT chunk 2981 * (e.g., if the SHUTDOWN COMPLETE was lost) with source and destination 2982 * transport addresses (either in the IP addresses or in the INIT chunk) 2983 * that belong to this association, it should discard the INIT chunk and 2984 * retransmit the SHUTDOWN ACK chunk. 2985 */ 2986 static enum sctp_disposition 2987 __sctp_sf_do_9_2_reshutack(struct net *net, const struct sctp_endpoint *ep, 2988 const struct sctp_association *asoc, 2989 const union sctp_subtype type, void *arg, 2990 struct sctp_cmd_seq *commands) 2991 { 2992 struct sctp_chunk *chunk = arg; 2993 struct sctp_chunk *reply; 2994 2995 /* Make sure that the chunk has a valid length */ 2996 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 2997 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 2998 commands); 2999 3000 /* Since we are not going to really process this INIT, there 3001 * is no point in verifying chunk boundaries. Just generate 3002 * the SHUTDOWN ACK. 3003 */ 3004 reply = sctp_make_shutdown_ack(asoc, chunk); 3005 if (NULL == reply) 3006 goto nomem; 3007 3008 /* Set the transport for the SHUTDOWN ACK chunk and the timeout for 3009 * the T2-SHUTDOWN timer. 3010 */ 3011 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T2, SCTP_CHUNK(reply)); 3012 3013 /* and restart the T2-shutdown timer. */ 3014 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 3015 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 3016 3017 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 3018 3019 return SCTP_DISPOSITION_CONSUME; 3020 nomem: 3021 return SCTP_DISPOSITION_NOMEM; 3022 } 3023 3024 enum sctp_disposition 3025 sctp_sf_do_9_2_reshutack(struct net *net, const struct sctp_endpoint *ep, 3026 const struct sctp_association *asoc, 3027 const union sctp_subtype type, void *arg, 3028 struct sctp_cmd_seq *commands) 3029 { 3030 struct sctp_chunk *chunk = arg; 3031 3032 if (!chunk->singleton) 3033 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3034 3035 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) 3036 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3037 3038 if (chunk->sctp_hdr->vtag != 0) 3039 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 3040 3041 return __sctp_sf_do_9_2_reshutack(net, ep, asoc, type, arg, commands); 3042 } 3043 3044 /* 3045 * sctp_sf_do_ecn_cwr 3046 * 3047 * Section: Appendix A: Explicit Congestion Notification 3048 * 3049 * CWR: 3050 * 3051 * RFC 2481 details a specific bit for a sender to send in the header of 3052 * its next outbound TCP segment to indicate to its peer that it has 3053 * reduced its congestion window. This is termed the CWR bit. For 3054 * SCTP the same indication is made by including the CWR chunk. 3055 * This chunk contains one data element, i.e. the TSN number that 3056 * was sent in the ECNE chunk. This element represents the lowest 3057 * TSN number in the datagram that was originally marked with the 3058 * CE bit. 3059 * 3060 * Verification Tag: 8.5 Verification Tag [Normal verification] 3061 * Inputs 3062 * (endpoint, asoc, chunk) 3063 * 3064 * Outputs 3065 * (asoc, reply_msg, msg_up, timers, counters) 3066 * 3067 * The return value is the disposition of the chunk. 3068 */ 3069 enum sctp_disposition sctp_sf_do_ecn_cwr(struct net *net, 3070 const struct sctp_endpoint *ep, 3071 const struct sctp_association *asoc, 3072 const union sctp_subtype type, 3073 void *arg, 3074 struct sctp_cmd_seq *commands) 3075 { 3076 struct sctp_chunk *chunk = arg; 3077 struct sctp_cwrhdr *cwr; 3078 u32 lowest_tsn; 3079 3080 if (!sctp_vtag_verify(chunk, asoc)) 3081 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3082 3083 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_ecne_chunk))) 3084 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3085 commands); 3086 3087 cwr = (struct sctp_cwrhdr *)chunk->skb->data; 3088 skb_pull(chunk->skb, sizeof(*cwr)); 3089 3090 lowest_tsn = ntohl(cwr->lowest_tsn); 3091 3092 /* Does this CWR ack the last sent congestion notification? */ 3093 if (TSN_lte(asoc->last_ecne_tsn, lowest_tsn)) { 3094 /* Stop sending ECNE. */ 3095 sctp_add_cmd_sf(commands, 3096 SCTP_CMD_ECN_CWR, 3097 SCTP_U32(lowest_tsn)); 3098 } 3099 return SCTP_DISPOSITION_CONSUME; 3100 } 3101 3102 /* 3103 * sctp_sf_do_ecne 3104 * 3105 * Section: Appendix A: Explicit Congestion Notification 3106 * 3107 * ECN-Echo 3108 * 3109 * RFC 2481 details a specific bit for a receiver to send back in its 3110 * TCP acknowledgements to notify the sender of the Congestion 3111 * Experienced (CE) bit having arrived from the network. For SCTP this 3112 * same indication is made by including the ECNE chunk. This chunk 3113 * contains one data element, i.e. the lowest TSN associated with the IP 3114 * datagram marked with the CE bit..... 3115 * 3116 * Verification Tag: 8.5 Verification Tag [Normal verification] 3117 * Inputs 3118 * (endpoint, asoc, chunk) 3119 * 3120 * Outputs 3121 * (asoc, reply_msg, msg_up, timers, counters) 3122 * 3123 * The return value is the disposition of the chunk. 3124 */ 3125 enum sctp_disposition sctp_sf_do_ecne(struct net *net, 3126 const struct sctp_endpoint *ep, 3127 const struct sctp_association *asoc, 3128 const union sctp_subtype type, 3129 void *arg, struct sctp_cmd_seq *commands) 3130 { 3131 struct sctp_chunk *chunk = arg; 3132 struct sctp_ecnehdr *ecne; 3133 3134 if (!sctp_vtag_verify(chunk, asoc)) 3135 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3136 3137 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_ecne_chunk))) 3138 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3139 commands); 3140 3141 ecne = (struct sctp_ecnehdr *)chunk->skb->data; 3142 skb_pull(chunk->skb, sizeof(*ecne)); 3143 3144 /* If this is a newer ECNE than the last CWR packet we sent out */ 3145 sctp_add_cmd_sf(commands, SCTP_CMD_ECN_ECNE, 3146 SCTP_U32(ntohl(ecne->lowest_tsn))); 3147 3148 return SCTP_DISPOSITION_CONSUME; 3149 } 3150 3151 /* 3152 * Section: 6.2 Acknowledgement on Reception of DATA Chunks 3153 * 3154 * The SCTP endpoint MUST always acknowledge the reception of each valid 3155 * DATA chunk. 3156 * 3157 * The guidelines on delayed acknowledgement algorithm specified in 3158 * Section 4.2 of [RFC2581] SHOULD be followed. Specifically, an 3159 * acknowledgement SHOULD be generated for at least every second packet 3160 * (not every second DATA chunk) received, and SHOULD be generated within 3161 * 200 ms of the arrival of any unacknowledged DATA chunk. In some 3162 * situations it may be beneficial for an SCTP transmitter to be more 3163 * conservative than the algorithms detailed in this document allow. 3164 * However, an SCTP transmitter MUST NOT be more aggressive than the 3165 * following algorithms allow. 3166 * 3167 * A SCTP receiver MUST NOT generate more than one SACK for every 3168 * incoming packet, other than to update the offered window as the 3169 * receiving application consumes new data. 3170 * 3171 * Verification Tag: 8.5 Verification Tag [Normal verification] 3172 * 3173 * Inputs 3174 * (endpoint, asoc, chunk) 3175 * 3176 * Outputs 3177 * (asoc, reply_msg, msg_up, timers, counters) 3178 * 3179 * The return value is the disposition of the chunk. 3180 */ 3181 enum sctp_disposition sctp_sf_eat_data_6_2(struct net *net, 3182 const struct sctp_endpoint *ep, 3183 const struct sctp_association *asoc, 3184 const union sctp_subtype type, 3185 void *arg, 3186 struct sctp_cmd_seq *commands) 3187 { 3188 union sctp_arg force = SCTP_NOFORCE(); 3189 struct sctp_chunk *chunk = arg; 3190 int error; 3191 3192 if (!sctp_vtag_verify(chunk, asoc)) { 3193 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 3194 SCTP_NULL()); 3195 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3196 } 3197 3198 if (!sctp_chunk_length_valid(chunk, sctp_datachk_len(&asoc->stream))) 3199 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3200 commands); 3201 3202 error = sctp_eat_data(asoc, chunk, commands); 3203 switch (error) { 3204 case SCTP_IERROR_NO_ERROR: 3205 break; 3206 case SCTP_IERROR_HIGH_TSN: 3207 case SCTP_IERROR_BAD_STREAM: 3208 SCTP_INC_STATS(net, SCTP_MIB_IN_DATA_CHUNK_DISCARDS); 3209 goto discard_noforce; 3210 case SCTP_IERROR_DUP_TSN: 3211 case SCTP_IERROR_IGNORE_TSN: 3212 SCTP_INC_STATS(net, SCTP_MIB_IN_DATA_CHUNK_DISCARDS); 3213 goto discard_force; 3214 case SCTP_IERROR_NO_DATA: 3215 return SCTP_DISPOSITION_ABORT; 3216 case SCTP_IERROR_PROTO_VIOLATION: 3217 return sctp_sf_abort_violation(net, ep, asoc, chunk, commands, 3218 (u8 *)chunk->subh.data_hdr, 3219 sctp_datahdr_len(&asoc->stream)); 3220 default: 3221 BUG(); 3222 } 3223 3224 if (chunk->chunk_hdr->flags & SCTP_DATA_SACK_IMM) 3225 force = SCTP_FORCE(); 3226 3227 if (asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE]) { 3228 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 3229 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE)); 3230 } 3231 3232 /* If this is the last chunk in a packet, we need to count it 3233 * toward sack generation. Note that we need to SACK every 3234 * OTHER packet containing data chunks, EVEN IF WE DISCARD 3235 * THEM. We elect to NOT generate SACK's if the chunk fails 3236 * the verification tag test. 3237 * 3238 * RFC 2960 6.2 Acknowledgement on Reception of DATA Chunks 3239 * 3240 * The SCTP endpoint MUST always acknowledge the reception of 3241 * each valid DATA chunk. 3242 * 3243 * The guidelines on delayed acknowledgement algorithm 3244 * specified in Section 4.2 of [RFC2581] SHOULD be followed. 3245 * Specifically, an acknowledgement SHOULD be generated for at 3246 * least every second packet (not every second DATA chunk) 3247 * received, and SHOULD be generated within 200 ms of the 3248 * arrival of any unacknowledged DATA chunk. In some 3249 * situations it may be beneficial for an SCTP transmitter to 3250 * be more conservative than the algorithms detailed in this 3251 * document allow. However, an SCTP transmitter MUST NOT be 3252 * more aggressive than the following algorithms allow. 3253 */ 3254 if (chunk->end_of_packet) 3255 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, force); 3256 3257 return SCTP_DISPOSITION_CONSUME; 3258 3259 discard_force: 3260 /* RFC 2960 6.2 Acknowledgement on Reception of DATA Chunks 3261 * 3262 * When a packet arrives with duplicate DATA chunk(s) and with 3263 * no new DATA chunk(s), the endpoint MUST immediately send a 3264 * SACK with no delay. If a packet arrives with duplicate 3265 * DATA chunk(s) bundled with new DATA chunks, the endpoint 3266 * MAY immediately send a SACK. Normally receipt of duplicate 3267 * DATA chunks will occur when the original SACK chunk was lost 3268 * and the peer's RTO has expired. The duplicate TSN number(s) 3269 * SHOULD be reported in the SACK as duplicate. 3270 */ 3271 /* In our case, we split the MAY SACK advice up whether or not 3272 * the last chunk is a duplicate.' 3273 */ 3274 if (chunk->end_of_packet) 3275 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE()); 3276 return SCTP_DISPOSITION_DISCARD; 3277 3278 discard_noforce: 3279 if (chunk->end_of_packet) 3280 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, force); 3281 3282 return SCTP_DISPOSITION_DISCARD; 3283 } 3284 3285 /* 3286 * sctp_sf_eat_data_fast_4_4 3287 * 3288 * Section: 4 (4) 3289 * (4) In SHUTDOWN-SENT state the endpoint MUST acknowledge any received 3290 * DATA chunks without delay. 3291 * 3292 * Verification Tag: 8.5 Verification Tag [Normal verification] 3293 * Inputs 3294 * (endpoint, asoc, chunk) 3295 * 3296 * Outputs 3297 * (asoc, reply_msg, msg_up, timers, counters) 3298 * 3299 * The return value is the disposition of the chunk. 3300 */ 3301 enum sctp_disposition sctp_sf_eat_data_fast_4_4( 3302 struct net *net, 3303 const struct sctp_endpoint *ep, 3304 const struct sctp_association *asoc, 3305 const union sctp_subtype type, 3306 void *arg, 3307 struct sctp_cmd_seq *commands) 3308 { 3309 struct sctp_chunk *chunk = arg; 3310 int error; 3311 3312 if (!sctp_vtag_verify(chunk, asoc)) { 3313 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 3314 SCTP_NULL()); 3315 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3316 } 3317 3318 if (!sctp_chunk_length_valid(chunk, sctp_datachk_len(&asoc->stream))) 3319 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3320 commands); 3321 3322 error = sctp_eat_data(asoc, chunk, commands); 3323 switch (error) { 3324 case SCTP_IERROR_NO_ERROR: 3325 case SCTP_IERROR_HIGH_TSN: 3326 case SCTP_IERROR_DUP_TSN: 3327 case SCTP_IERROR_IGNORE_TSN: 3328 case SCTP_IERROR_BAD_STREAM: 3329 break; 3330 case SCTP_IERROR_NO_DATA: 3331 return SCTP_DISPOSITION_ABORT; 3332 case SCTP_IERROR_PROTO_VIOLATION: 3333 return sctp_sf_abort_violation(net, ep, asoc, chunk, commands, 3334 (u8 *)chunk->subh.data_hdr, 3335 sctp_datahdr_len(&asoc->stream)); 3336 default: 3337 BUG(); 3338 } 3339 3340 /* Go a head and force a SACK, since we are shutting down. */ 3341 3342 /* Implementor's Guide. 3343 * 3344 * While in SHUTDOWN-SENT state, the SHUTDOWN sender MUST immediately 3345 * respond to each received packet containing one or more DATA chunk(s) 3346 * with a SACK, a SHUTDOWN chunk, and restart the T2-shutdown timer 3347 */ 3348 if (chunk->end_of_packet) { 3349 /* We must delay the chunk creation since the cumulative 3350 * TSN has not been updated yet. 3351 */ 3352 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SHUTDOWN, SCTP_NULL()); 3353 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE()); 3354 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 3355 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 3356 } 3357 3358 return SCTP_DISPOSITION_CONSUME; 3359 } 3360 3361 /* 3362 * Section: 6.2 Processing a Received SACK 3363 * D) Any time a SACK arrives, the endpoint performs the following: 3364 * 3365 * i) If Cumulative TSN Ack is less than the Cumulative TSN Ack Point, 3366 * then drop the SACK. Since Cumulative TSN Ack is monotonically 3367 * increasing, a SACK whose Cumulative TSN Ack is less than the 3368 * Cumulative TSN Ack Point indicates an out-of-order SACK. 3369 * 3370 * ii) Set rwnd equal to the newly received a_rwnd minus the number 3371 * of bytes still outstanding after processing the Cumulative TSN Ack 3372 * and the Gap Ack Blocks. 3373 * 3374 * iii) If the SACK is missing a TSN that was previously 3375 * acknowledged via a Gap Ack Block (e.g., the data receiver 3376 * reneged on the data), then mark the corresponding DATA chunk 3377 * as available for retransmit: Mark it as missing for fast 3378 * retransmit as described in Section 7.2.4 and if no retransmit 3379 * timer is running for the destination address to which the DATA 3380 * chunk was originally transmitted, then T3-rtx is started for 3381 * that destination address. 3382 * 3383 * Verification Tag: 8.5 Verification Tag [Normal verification] 3384 * 3385 * Inputs 3386 * (endpoint, asoc, chunk) 3387 * 3388 * Outputs 3389 * (asoc, reply_msg, msg_up, timers, counters) 3390 * 3391 * The return value is the disposition of the chunk. 3392 */ 3393 enum sctp_disposition sctp_sf_eat_sack_6_2(struct net *net, 3394 const struct sctp_endpoint *ep, 3395 const struct sctp_association *asoc, 3396 const union sctp_subtype type, 3397 void *arg, 3398 struct sctp_cmd_seq *commands) 3399 { 3400 struct sctp_chunk *chunk = arg; 3401 struct sctp_sackhdr *sackh; 3402 __u32 ctsn; 3403 3404 if (!sctp_vtag_verify(chunk, asoc)) 3405 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3406 3407 /* Make sure that the SACK chunk has a valid length. */ 3408 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_sack_chunk))) 3409 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3410 commands); 3411 3412 /* Pull the SACK chunk from the data buffer */ 3413 sackh = sctp_sm_pull_sack(chunk); 3414 /* Was this a bogus SACK? */ 3415 if (!sackh) 3416 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3417 chunk->subh.sack_hdr = sackh; 3418 ctsn = ntohl(sackh->cum_tsn_ack); 3419 3420 /* If Cumulative TSN Ack beyond the max tsn currently 3421 * send, terminating the association and respond to the 3422 * sender with an ABORT. 3423 */ 3424 if (TSN_lte(asoc->next_tsn, ctsn)) 3425 return sctp_sf_violation_ctsn(net, ep, asoc, type, arg, commands); 3426 3427 trace_sctp_probe(ep, asoc, chunk); 3428 3429 /* i) If Cumulative TSN Ack is less than the Cumulative TSN 3430 * Ack Point, then drop the SACK. Since Cumulative TSN 3431 * Ack is monotonically increasing, a SACK whose 3432 * Cumulative TSN Ack is less than the Cumulative TSN Ack 3433 * Point indicates an out-of-order SACK. 3434 */ 3435 if (TSN_lt(ctsn, asoc->ctsn_ack_point)) { 3436 pr_debug("%s: ctsn:%x, ctsn_ack_point:%x\n", __func__, ctsn, 3437 asoc->ctsn_ack_point); 3438 3439 return SCTP_DISPOSITION_DISCARD; 3440 } 3441 3442 /* Return this SACK for further processing. */ 3443 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_SACK, SCTP_CHUNK(chunk)); 3444 3445 /* Note: We do the rest of the work on the PROCESS_SACK 3446 * sideeffect. 3447 */ 3448 return SCTP_DISPOSITION_CONSUME; 3449 } 3450 3451 /* 3452 * Generate an ABORT in response to a packet. 3453 * 3454 * Section: 8.4 Handle "Out of the blue" Packets, sctpimpguide 2.41 3455 * 3456 * 8) The receiver should respond to the sender of the OOTB packet with 3457 * an ABORT. When sending the ABORT, the receiver of the OOTB packet 3458 * MUST fill in the Verification Tag field of the outbound packet 3459 * with the value found in the Verification Tag field of the OOTB 3460 * packet and set the T-bit in the Chunk Flags to indicate that the 3461 * Verification Tag is reflected. After sending this ABORT, the 3462 * receiver of the OOTB packet shall discard the OOTB packet and take 3463 * no further action. 3464 * 3465 * Verification Tag: 3466 * 3467 * The return value is the disposition of the chunk. 3468 */ 3469 static enum sctp_disposition sctp_sf_tabort_8_4_8( 3470 struct net *net, 3471 const struct sctp_endpoint *ep, 3472 const struct sctp_association *asoc, 3473 const union sctp_subtype type, 3474 void *arg, 3475 struct sctp_cmd_seq *commands) 3476 { 3477 struct sctp_packet *packet = NULL; 3478 struct sctp_chunk *chunk = arg; 3479 struct sctp_chunk *abort; 3480 3481 packet = sctp_ootb_pkt_new(net, asoc, chunk); 3482 if (!packet) 3483 return SCTP_DISPOSITION_NOMEM; 3484 3485 /* Make an ABORT. The T bit will be set if the asoc 3486 * is NULL. 3487 */ 3488 abort = sctp_make_abort(asoc, chunk, 0); 3489 if (!abort) { 3490 sctp_ootb_pkt_free(packet); 3491 return SCTP_DISPOSITION_NOMEM; 3492 } 3493 3494 /* Reflect vtag if T-Bit is set */ 3495 if (sctp_test_T_bit(abort)) 3496 packet->vtag = ntohl(chunk->sctp_hdr->vtag); 3497 3498 /* Set the skb to the belonging sock for accounting. */ 3499 abort->skb->sk = ep->base.sk; 3500 3501 sctp_packet_append_chunk(packet, abort); 3502 3503 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, SCTP_PACKET(packet)); 3504 3505 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 3506 3507 sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3508 return SCTP_DISPOSITION_CONSUME; 3509 } 3510 3511 /* Handling of SCTP Packets Containing an INIT Chunk Matching an 3512 * Existing Associations when the UDP encap port is incorrect. 3513 * 3514 * From Section 4 at draft-tuexen-tsvwg-sctp-udp-encaps-cons-03. 3515 */ 3516 static enum sctp_disposition sctp_sf_new_encap_port( 3517 struct net *net, 3518 const struct sctp_endpoint *ep, 3519 const struct sctp_association *asoc, 3520 const union sctp_subtype type, 3521 void *arg, 3522 struct sctp_cmd_seq *commands) 3523 { 3524 struct sctp_packet *packet = NULL; 3525 struct sctp_chunk *chunk = arg; 3526 struct sctp_chunk *abort; 3527 3528 packet = sctp_ootb_pkt_new(net, asoc, chunk); 3529 if (!packet) 3530 return SCTP_DISPOSITION_NOMEM; 3531 3532 abort = sctp_make_new_encap_port(asoc, chunk); 3533 if (!abort) { 3534 sctp_ootb_pkt_free(packet); 3535 return SCTP_DISPOSITION_NOMEM; 3536 } 3537 3538 abort->skb->sk = ep->base.sk; 3539 3540 sctp_packet_append_chunk(packet, abort); 3541 3542 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, 3543 SCTP_PACKET(packet)); 3544 3545 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 3546 3547 sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3548 return SCTP_DISPOSITION_CONSUME; 3549 } 3550 3551 /* 3552 * Received an ERROR chunk from peer. Generate SCTP_REMOTE_ERROR 3553 * event as ULP notification for each cause included in the chunk. 3554 * 3555 * API 5.3.1.3 - SCTP_REMOTE_ERROR 3556 * 3557 * The return value is the disposition of the chunk. 3558 */ 3559 enum sctp_disposition sctp_sf_operr_notify(struct net *net, 3560 const struct sctp_endpoint *ep, 3561 const struct sctp_association *asoc, 3562 const union sctp_subtype type, 3563 void *arg, 3564 struct sctp_cmd_seq *commands) 3565 { 3566 struct sctp_chunk *chunk = arg; 3567 struct sctp_errhdr *err; 3568 3569 if (!sctp_vtag_verify(chunk, asoc)) 3570 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3571 3572 /* Make sure that the ERROR chunk has a valid length. */ 3573 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_operr_chunk))) 3574 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3575 commands); 3576 sctp_walk_errors(err, chunk->chunk_hdr); 3577 if ((void *)err != (void *)chunk->chunk_end) 3578 return sctp_sf_violation_paramlen(net, ep, asoc, type, arg, 3579 (void *)err, commands); 3580 3581 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_OPERR, 3582 SCTP_CHUNK(chunk)); 3583 3584 return SCTP_DISPOSITION_CONSUME; 3585 } 3586 3587 /* 3588 * Process an inbound SHUTDOWN ACK. 3589 * 3590 * From Section 9.2: 3591 * Upon the receipt of the SHUTDOWN ACK, the SHUTDOWN sender shall 3592 * stop the T2-shutdown timer, send a SHUTDOWN COMPLETE chunk to its 3593 * peer, and remove all record of the association. 3594 * 3595 * The return value is the disposition. 3596 */ 3597 enum sctp_disposition sctp_sf_do_9_2_final(struct net *net, 3598 const struct sctp_endpoint *ep, 3599 const struct sctp_association *asoc, 3600 const union sctp_subtype type, 3601 void *arg, 3602 struct sctp_cmd_seq *commands) 3603 { 3604 struct sctp_chunk *chunk = arg; 3605 struct sctp_chunk *reply; 3606 struct sctp_ulpevent *ev; 3607 3608 if (!sctp_vtag_verify(chunk, asoc)) 3609 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3610 3611 /* Make sure that the SHUTDOWN_ACK chunk has a valid length. */ 3612 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 3613 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3614 commands); 3615 /* 10.2 H) SHUTDOWN COMPLETE notification 3616 * 3617 * When SCTP completes the shutdown procedures (section 9.2) this 3618 * notification is passed to the upper layer. 3619 */ 3620 ev = sctp_ulpevent_make_assoc_change(asoc, 0, SCTP_SHUTDOWN_COMP, 3621 0, 0, 0, NULL, GFP_ATOMIC); 3622 if (!ev) 3623 goto nomem; 3624 3625 /* ...send a SHUTDOWN COMPLETE chunk to its peer, */ 3626 reply = sctp_make_shutdown_complete(asoc, chunk); 3627 if (!reply) 3628 goto nomem_chunk; 3629 3630 /* Do all the commands now (after allocation), so that we 3631 * have consistent state if memory allocation fails 3632 */ 3633 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(ev)); 3634 3635 /* Upon the receipt of the SHUTDOWN ACK, the SHUTDOWN sender shall 3636 * stop the T2-shutdown timer, 3637 */ 3638 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 3639 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 3640 3641 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 3642 SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD)); 3643 3644 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 3645 SCTP_STATE(SCTP_STATE_CLOSED)); 3646 SCTP_INC_STATS(net, SCTP_MIB_SHUTDOWNS); 3647 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 3648 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 3649 3650 /* ...and remove all record of the association. */ 3651 sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); 3652 return SCTP_DISPOSITION_DELETE_TCB; 3653 3654 nomem_chunk: 3655 sctp_ulpevent_free(ev); 3656 nomem: 3657 return SCTP_DISPOSITION_NOMEM; 3658 } 3659 3660 /* 3661 * RFC 2960, 8.4 - Handle "Out of the blue" Packets, sctpimpguide 2.41. 3662 * 3663 * 5) If the packet contains a SHUTDOWN ACK chunk, the receiver should 3664 * respond to the sender of the OOTB packet with a SHUTDOWN COMPLETE. 3665 * When sending the SHUTDOWN COMPLETE, the receiver of the OOTB 3666 * packet must fill in the Verification Tag field of the outbound 3667 * packet with the Verification Tag received in the SHUTDOWN ACK and 3668 * set the T-bit in the Chunk Flags to indicate that the Verification 3669 * Tag is reflected. 3670 * 3671 * 8) The receiver should respond to the sender of the OOTB packet with 3672 * an ABORT. When sending the ABORT, the receiver of the OOTB packet 3673 * MUST fill in the Verification Tag field of the outbound packet 3674 * with the value found in the Verification Tag field of the OOTB 3675 * packet and set the T-bit in the Chunk Flags to indicate that the 3676 * Verification Tag is reflected. After sending this ABORT, the 3677 * receiver of the OOTB packet shall discard the OOTB packet and take 3678 * no further action. 3679 */ 3680 enum sctp_disposition sctp_sf_ootb(struct net *net, 3681 const struct sctp_endpoint *ep, 3682 const struct sctp_association *asoc, 3683 const union sctp_subtype type, 3684 void *arg, struct sctp_cmd_seq *commands) 3685 { 3686 struct sctp_chunk *chunk = arg; 3687 struct sk_buff *skb = chunk->skb; 3688 struct sctp_chunkhdr *ch; 3689 struct sctp_errhdr *err; 3690 int ootb_cookie_ack = 0; 3691 int ootb_shut_ack = 0; 3692 __u8 *ch_end; 3693 3694 SCTP_INC_STATS(net, SCTP_MIB_OUTOFBLUES); 3695 3696 if (asoc && !sctp_vtag_verify(chunk, asoc)) 3697 asoc = NULL; 3698 3699 ch = (struct sctp_chunkhdr *)chunk->chunk_hdr; 3700 do { 3701 /* Report violation if the chunk is less then minimal */ 3702 if (ntohs(ch->length) < sizeof(*ch)) 3703 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3704 commands); 3705 3706 /* Report violation if chunk len overflows */ 3707 ch_end = ((__u8 *)ch) + SCTP_PAD4(ntohs(ch->length)); 3708 if (ch_end > skb_tail_pointer(skb)) 3709 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3710 commands); 3711 3712 /* Now that we know we at least have a chunk header, 3713 * do things that are type appropriate. 3714 */ 3715 if (SCTP_CID_SHUTDOWN_ACK == ch->type) 3716 ootb_shut_ack = 1; 3717 3718 /* RFC 2960, Section 3.3.7 3719 * Moreover, under any circumstances, an endpoint that 3720 * receives an ABORT MUST NOT respond to that ABORT by 3721 * sending an ABORT of its own. 3722 */ 3723 if (SCTP_CID_ABORT == ch->type) 3724 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3725 3726 /* RFC 8.4, 7) If the packet contains a "Stale cookie" ERROR 3727 * or a COOKIE ACK the SCTP Packet should be silently 3728 * discarded. 3729 */ 3730 3731 if (SCTP_CID_COOKIE_ACK == ch->type) 3732 ootb_cookie_ack = 1; 3733 3734 if (SCTP_CID_ERROR == ch->type) { 3735 sctp_walk_errors(err, ch) { 3736 if (SCTP_ERROR_STALE_COOKIE == err->cause) { 3737 ootb_cookie_ack = 1; 3738 break; 3739 } 3740 } 3741 } 3742 3743 ch = (struct sctp_chunkhdr *)ch_end; 3744 } while (ch_end < skb_tail_pointer(skb)); 3745 3746 if (ootb_shut_ack) 3747 return sctp_sf_shut_8_4_5(net, ep, asoc, type, arg, commands); 3748 else if (ootb_cookie_ack) 3749 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3750 else 3751 return sctp_sf_tabort_8_4_8(net, ep, asoc, type, arg, commands); 3752 } 3753 3754 /* 3755 * Handle an "Out of the blue" SHUTDOWN ACK. 3756 * 3757 * Section: 8.4 5, sctpimpguide 2.41. 3758 * 3759 * 5) If the packet contains a SHUTDOWN ACK chunk, the receiver should 3760 * respond to the sender of the OOTB packet with a SHUTDOWN COMPLETE. 3761 * When sending the SHUTDOWN COMPLETE, the receiver of the OOTB 3762 * packet must fill in the Verification Tag field of the outbound 3763 * packet with the Verification Tag received in the SHUTDOWN ACK and 3764 * set the T-bit in the Chunk Flags to indicate that the Verification 3765 * Tag is reflected. 3766 * 3767 * Inputs 3768 * (endpoint, asoc, type, arg, commands) 3769 * 3770 * Outputs 3771 * (enum sctp_disposition) 3772 * 3773 * The return value is the disposition of the chunk. 3774 */ 3775 static enum sctp_disposition sctp_sf_shut_8_4_5( 3776 struct net *net, 3777 const struct sctp_endpoint *ep, 3778 const struct sctp_association *asoc, 3779 const union sctp_subtype type, 3780 void *arg, 3781 struct sctp_cmd_seq *commands) 3782 { 3783 struct sctp_packet *packet = NULL; 3784 struct sctp_chunk *chunk = arg; 3785 struct sctp_chunk *shut; 3786 3787 packet = sctp_ootb_pkt_new(net, asoc, chunk); 3788 if (!packet) 3789 return SCTP_DISPOSITION_NOMEM; 3790 3791 /* Make an SHUTDOWN_COMPLETE. 3792 * The T bit will be set if the asoc is NULL. 3793 */ 3794 shut = sctp_make_shutdown_complete(asoc, chunk); 3795 if (!shut) { 3796 sctp_ootb_pkt_free(packet); 3797 return SCTP_DISPOSITION_NOMEM; 3798 } 3799 3800 /* Reflect vtag if T-Bit is set */ 3801 if (sctp_test_T_bit(shut)) 3802 packet->vtag = ntohl(chunk->sctp_hdr->vtag); 3803 3804 /* Set the skb to the belonging sock for accounting. */ 3805 shut->skb->sk = ep->base.sk; 3806 3807 sctp_packet_append_chunk(packet, shut); 3808 3809 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, 3810 SCTP_PACKET(packet)); 3811 3812 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 3813 3814 /* We need to discard the rest of the packet to prevent 3815 * potential boomming attacks from additional bundled chunks. 3816 * This is documented in SCTP Threats ID. 3817 */ 3818 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3819 } 3820 3821 /* 3822 * Handle SHUTDOWN ACK in COOKIE_ECHOED or COOKIE_WAIT state. 3823 * 3824 * Verification Tag: 8.5.1 E) Rules for packet carrying a SHUTDOWN ACK 3825 * If the receiver is in COOKIE-ECHOED or COOKIE-WAIT state the 3826 * procedures in section 8.4 SHOULD be followed, in other words it 3827 * should be treated as an Out Of The Blue packet. 3828 * [This means that we do NOT check the Verification Tag on these 3829 * chunks. --piggy ] 3830 * 3831 */ 3832 enum sctp_disposition sctp_sf_do_8_5_1_E_sa(struct net *net, 3833 const struct sctp_endpoint *ep, 3834 const struct sctp_association *asoc, 3835 const union sctp_subtype type, 3836 void *arg, 3837 struct sctp_cmd_seq *commands) 3838 { 3839 struct sctp_chunk *chunk = arg; 3840 3841 if (!sctp_vtag_verify(chunk, asoc)) 3842 asoc = NULL; 3843 3844 /* Make sure that the SHUTDOWN_ACK chunk has a valid length. */ 3845 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 3846 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3847 commands); 3848 3849 /* Although we do have an association in this case, it corresponds 3850 * to a restarted association. So the packet is treated as an OOTB 3851 * packet and the state function that handles OOTB SHUTDOWN_ACK is 3852 * called with a NULL association. 3853 */ 3854 SCTP_INC_STATS(net, SCTP_MIB_OUTOFBLUES); 3855 3856 return sctp_sf_shut_8_4_5(net, ep, NULL, type, arg, commands); 3857 } 3858 3859 /* ADDIP Section 4.2 Upon reception of an ASCONF Chunk. */ 3860 enum sctp_disposition sctp_sf_do_asconf(struct net *net, 3861 const struct sctp_endpoint *ep, 3862 const struct sctp_association *asoc, 3863 const union sctp_subtype type, 3864 void *arg, 3865 struct sctp_cmd_seq *commands) 3866 { 3867 struct sctp_paramhdr *err_param = NULL; 3868 struct sctp_chunk *asconf_ack = NULL; 3869 struct sctp_chunk *chunk = arg; 3870 struct sctp_addiphdr *hdr; 3871 __u32 serial; 3872 3873 if (!sctp_vtag_verify(chunk, asoc)) { 3874 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 3875 SCTP_NULL()); 3876 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3877 } 3878 3879 /* Make sure that the ASCONF ADDIP chunk has a valid length. */ 3880 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_addip_chunk))) 3881 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 3882 commands); 3883 3884 /* ADD-IP: Section 4.1.1 3885 * This chunk MUST be sent in an authenticated way by using 3886 * the mechanism defined in [I-D.ietf-tsvwg-sctp-auth]. If this chunk 3887 * is received unauthenticated it MUST be silently discarded as 3888 * described in [I-D.ietf-tsvwg-sctp-auth]. 3889 */ 3890 if (!asoc->peer.asconf_capable || 3891 (!net->sctp.addip_noauth && !chunk->auth)) 3892 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 3893 3894 hdr = (struct sctp_addiphdr *)chunk->skb->data; 3895 serial = ntohl(hdr->serial); 3896 3897 /* Verify the ASCONF chunk before processing it. */ 3898 if (!sctp_verify_asconf(asoc, chunk, true, &err_param)) 3899 return sctp_sf_violation_paramlen(net, ep, asoc, type, arg, 3900 (void *)err_param, commands); 3901 3902 /* ADDIP 5.2 E1) Compare the value of the serial number to the value 3903 * the endpoint stored in a new association variable 3904 * 'Peer-Serial-Number'. 3905 */ 3906 if (serial == asoc->peer.addip_serial + 1) { 3907 /* If this is the first instance of ASCONF in the packet, 3908 * we can clean our old ASCONF-ACKs. 3909 */ 3910 if (!chunk->has_asconf) 3911 sctp_assoc_clean_asconf_ack_cache(asoc); 3912 3913 /* ADDIP 5.2 E4) When the Sequence Number matches the next one 3914 * expected, process the ASCONF as described below and after 3915 * processing the ASCONF Chunk, append an ASCONF-ACK Chunk to 3916 * the response packet and cache a copy of it (in the event it 3917 * later needs to be retransmitted). 3918 * 3919 * Essentially, do V1-V5. 3920 */ 3921 asconf_ack = sctp_process_asconf((struct sctp_association *) 3922 asoc, chunk); 3923 if (!asconf_ack) 3924 return SCTP_DISPOSITION_NOMEM; 3925 } else if (serial < asoc->peer.addip_serial + 1) { 3926 /* ADDIP 5.2 E2) 3927 * If the value found in the Sequence Number is less than the 3928 * ('Peer- Sequence-Number' + 1), simply skip to the next 3929 * ASCONF, and include in the outbound response packet 3930 * any previously cached ASCONF-ACK response that was 3931 * sent and saved that matches the Sequence Number of the 3932 * ASCONF. Note: It is possible that no cached ASCONF-ACK 3933 * Chunk exists. This will occur when an older ASCONF 3934 * arrives out of order. In such a case, the receiver 3935 * should skip the ASCONF Chunk and not include ASCONF-ACK 3936 * Chunk for that chunk. 3937 */ 3938 asconf_ack = sctp_assoc_lookup_asconf_ack(asoc, hdr->serial); 3939 if (!asconf_ack) 3940 return SCTP_DISPOSITION_DISCARD; 3941 3942 /* Reset the transport so that we select the correct one 3943 * this time around. This is to make sure that we don't 3944 * accidentally use a stale transport that's been removed. 3945 */ 3946 asconf_ack->transport = NULL; 3947 } else { 3948 /* ADDIP 5.2 E5) Otherwise, the ASCONF Chunk is discarded since 3949 * it must be either a stale packet or from an attacker. 3950 */ 3951 return SCTP_DISPOSITION_DISCARD; 3952 } 3953 3954 /* ADDIP 5.2 E6) The destination address of the SCTP packet 3955 * containing the ASCONF-ACK Chunks MUST be the source address of 3956 * the SCTP packet that held the ASCONF Chunks. 3957 * 3958 * To do this properly, we'll set the destination address of the chunk 3959 * and at the transmit time, will try look up the transport to use. 3960 * Since ASCONFs may be bundled, the correct transport may not be 3961 * created until we process the entire packet, thus this workaround. 3962 */ 3963 asconf_ack->dest = chunk->source; 3964 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(asconf_ack)); 3965 if (asoc->new_transport) { 3966 sctp_sf_heartbeat(ep, asoc, type, asoc->new_transport, commands); 3967 ((struct sctp_association *)asoc)->new_transport = NULL; 3968 } 3969 3970 return SCTP_DISPOSITION_CONSUME; 3971 } 3972 3973 static enum sctp_disposition sctp_send_next_asconf( 3974 struct net *net, 3975 const struct sctp_endpoint *ep, 3976 struct sctp_association *asoc, 3977 const union sctp_subtype type, 3978 struct sctp_cmd_seq *commands) 3979 { 3980 struct sctp_chunk *asconf; 3981 struct list_head *entry; 3982 3983 if (list_empty(&asoc->addip_chunk_list)) 3984 return SCTP_DISPOSITION_CONSUME; 3985 3986 entry = asoc->addip_chunk_list.next; 3987 asconf = list_entry(entry, struct sctp_chunk, list); 3988 3989 list_del_init(entry); 3990 sctp_chunk_hold(asconf); 3991 asoc->addip_last_asconf = asconf; 3992 3993 return sctp_sf_do_prm_asconf(net, ep, asoc, type, asconf, commands); 3994 } 3995 3996 /* 3997 * ADDIP Section 4.3 General rules for address manipulation 3998 * When building TLV parameters for the ASCONF Chunk that will add or 3999 * delete IP addresses the D0 to D13 rules should be applied: 4000 */ 4001 enum sctp_disposition sctp_sf_do_asconf_ack(struct net *net, 4002 const struct sctp_endpoint *ep, 4003 const struct sctp_association *asoc, 4004 const union sctp_subtype type, 4005 void *arg, 4006 struct sctp_cmd_seq *commands) 4007 { 4008 struct sctp_chunk *last_asconf = asoc->addip_last_asconf; 4009 struct sctp_paramhdr *err_param = NULL; 4010 struct sctp_chunk *asconf_ack = arg; 4011 struct sctp_addiphdr *addip_hdr; 4012 __u32 sent_serial, rcvd_serial; 4013 struct sctp_chunk *abort; 4014 4015 if (!sctp_vtag_verify(asconf_ack, asoc)) { 4016 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 4017 SCTP_NULL()); 4018 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4019 } 4020 4021 /* Make sure that the ADDIP chunk has a valid length. */ 4022 if (!sctp_chunk_length_valid(asconf_ack, 4023 sizeof(struct sctp_addip_chunk))) 4024 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4025 commands); 4026 4027 /* ADD-IP, Section 4.1.2: 4028 * This chunk MUST be sent in an authenticated way by using 4029 * the mechanism defined in [I-D.ietf-tsvwg-sctp-auth]. If this chunk 4030 * is received unauthenticated it MUST be silently discarded as 4031 * described in [I-D.ietf-tsvwg-sctp-auth]. 4032 */ 4033 if (!asoc->peer.asconf_capable || 4034 (!net->sctp.addip_noauth && !asconf_ack->auth)) 4035 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4036 4037 addip_hdr = (struct sctp_addiphdr *)asconf_ack->skb->data; 4038 rcvd_serial = ntohl(addip_hdr->serial); 4039 4040 /* Verify the ASCONF-ACK chunk before processing it. */ 4041 if (!sctp_verify_asconf(asoc, asconf_ack, false, &err_param)) 4042 return sctp_sf_violation_paramlen(net, ep, asoc, type, arg, 4043 (void *)err_param, commands); 4044 4045 if (last_asconf) { 4046 addip_hdr = (struct sctp_addiphdr *)last_asconf->subh.addip_hdr; 4047 sent_serial = ntohl(addip_hdr->serial); 4048 } else { 4049 sent_serial = asoc->addip_serial - 1; 4050 } 4051 4052 /* D0) If an endpoint receives an ASCONF-ACK that is greater than or 4053 * equal to the next serial number to be used but no ASCONF chunk is 4054 * outstanding the endpoint MUST ABORT the association. Note that a 4055 * sequence number is greater than if it is no more than 2^^31-1 4056 * larger than the current sequence number (using serial arithmetic). 4057 */ 4058 if (ADDIP_SERIAL_gte(rcvd_serial, sent_serial + 1) && 4059 !(asoc->addip_last_asconf)) { 4060 abort = sctp_make_abort(asoc, asconf_ack, 4061 sizeof(struct sctp_errhdr)); 4062 if (abort) { 4063 sctp_init_cause(abort, SCTP_ERROR_ASCONF_ACK, 0); 4064 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 4065 SCTP_CHUNK(abort)); 4066 } 4067 /* We are going to ABORT, so we might as well stop 4068 * processing the rest of the chunks in the packet. 4069 */ 4070 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 4071 SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); 4072 sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL()); 4073 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 4074 SCTP_ERROR(ECONNABORTED)); 4075 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 4076 SCTP_PERR(SCTP_ERROR_ASCONF_ACK)); 4077 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 4078 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 4079 return SCTP_DISPOSITION_ABORT; 4080 } 4081 4082 if ((rcvd_serial == sent_serial) && asoc->addip_last_asconf) { 4083 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 4084 SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); 4085 4086 if (!sctp_process_asconf_ack((struct sctp_association *)asoc, 4087 asconf_ack)) 4088 return sctp_send_next_asconf(net, ep, 4089 (struct sctp_association *)asoc, 4090 type, commands); 4091 4092 abort = sctp_make_abort(asoc, asconf_ack, 4093 sizeof(struct sctp_errhdr)); 4094 if (abort) { 4095 sctp_init_cause(abort, SCTP_ERROR_RSRC_LOW, 0); 4096 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 4097 SCTP_CHUNK(abort)); 4098 } 4099 /* We are going to ABORT, so we might as well stop 4100 * processing the rest of the chunks in the packet. 4101 */ 4102 sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL()); 4103 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 4104 SCTP_ERROR(ECONNABORTED)); 4105 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 4106 SCTP_PERR(SCTP_ERROR_ASCONF_ACK)); 4107 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 4108 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 4109 return SCTP_DISPOSITION_ABORT; 4110 } 4111 4112 return SCTP_DISPOSITION_DISCARD; 4113 } 4114 4115 /* RE-CONFIG Section 5.2 Upon reception of an RECONF Chunk. */ 4116 enum sctp_disposition sctp_sf_do_reconf(struct net *net, 4117 const struct sctp_endpoint *ep, 4118 const struct sctp_association *asoc, 4119 const union sctp_subtype type, 4120 void *arg, 4121 struct sctp_cmd_seq *commands) 4122 { 4123 struct sctp_paramhdr *err_param = NULL; 4124 struct sctp_chunk *chunk = arg; 4125 struct sctp_reconf_chunk *hdr; 4126 union sctp_params param; 4127 4128 if (!sctp_vtag_verify(chunk, asoc)) { 4129 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 4130 SCTP_NULL()); 4131 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4132 } 4133 4134 /* Make sure that the RECONF chunk has a valid length. */ 4135 if (!sctp_chunk_length_valid(chunk, sizeof(*hdr))) 4136 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4137 commands); 4138 4139 if (!sctp_verify_reconf(asoc, chunk, &err_param)) 4140 return sctp_sf_violation_paramlen(net, ep, asoc, type, arg, 4141 (void *)err_param, commands); 4142 4143 hdr = (struct sctp_reconf_chunk *)chunk->chunk_hdr; 4144 sctp_walk_params(param, hdr, params) { 4145 struct sctp_chunk *reply = NULL; 4146 struct sctp_ulpevent *ev = NULL; 4147 4148 if (param.p->type == SCTP_PARAM_RESET_OUT_REQUEST) 4149 reply = sctp_process_strreset_outreq( 4150 (struct sctp_association *)asoc, param, &ev); 4151 else if (param.p->type == SCTP_PARAM_RESET_IN_REQUEST) 4152 reply = sctp_process_strreset_inreq( 4153 (struct sctp_association *)asoc, param, &ev); 4154 else if (param.p->type == SCTP_PARAM_RESET_TSN_REQUEST) 4155 reply = sctp_process_strreset_tsnreq( 4156 (struct sctp_association *)asoc, param, &ev); 4157 else if (param.p->type == SCTP_PARAM_RESET_ADD_OUT_STREAMS) 4158 reply = sctp_process_strreset_addstrm_out( 4159 (struct sctp_association *)asoc, param, &ev); 4160 else if (param.p->type == SCTP_PARAM_RESET_ADD_IN_STREAMS) 4161 reply = sctp_process_strreset_addstrm_in( 4162 (struct sctp_association *)asoc, param, &ev); 4163 else if (param.p->type == SCTP_PARAM_RESET_RESPONSE) 4164 reply = sctp_process_strreset_resp( 4165 (struct sctp_association *)asoc, param, &ev); 4166 4167 if (ev) 4168 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 4169 SCTP_ULPEVENT(ev)); 4170 4171 if (reply) 4172 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 4173 SCTP_CHUNK(reply)); 4174 } 4175 4176 return SCTP_DISPOSITION_CONSUME; 4177 } 4178 4179 /* 4180 * PR-SCTP Section 3.6 Receiver Side Implementation of PR-SCTP 4181 * 4182 * When a FORWARD TSN chunk arrives, the data receiver MUST first update 4183 * its cumulative TSN point to the value carried in the FORWARD TSN 4184 * chunk, and then MUST further advance its cumulative TSN point locally 4185 * if possible. 4186 * After the above processing, the data receiver MUST stop reporting any 4187 * missing TSNs earlier than or equal to the new cumulative TSN point. 4188 * 4189 * Verification Tag: 8.5 Verification Tag [Normal verification] 4190 * 4191 * The return value is the disposition of the chunk. 4192 */ 4193 enum sctp_disposition sctp_sf_eat_fwd_tsn(struct net *net, 4194 const struct sctp_endpoint *ep, 4195 const struct sctp_association *asoc, 4196 const union sctp_subtype type, 4197 void *arg, 4198 struct sctp_cmd_seq *commands) 4199 { 4200 struct sctp_fwdtsn_hdr *fwdtsn_hdr; 4201 struct sctp_chunk *chunk = arg; 4202 __u16 len; 4203 __u32 tsn; 4204 4205 if (!sctp_vtag_verify(chunk, asoc)) { 4206 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 4207 SCTP_NULL()); 4208 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4209 } 4210 4211 if (!asoc->peer.prsctp_capable) 4212 return sctp_sf_unk_chunk(net, ep, asoc, type, arg, commands); 4213 4214 /* Make sure that the FORWARD_TSN chunk has valid length. */ 4215 if (!sctp_chunk_length_valid(chunk, sctp_ftsnchk_len(&asoc->stream))) 4216 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4217 commands); 4218 4219 fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data; 4220 chunk->subh.fwdtsn_hdr = fwdtsn_hdr; 4221 len = ntohs(chunk->chunk_hdr->length); 4222 len -= sizeof(struct sctp_chunkhdr); 4223 skb_pull(chunk->skb, len); 4224 4225 tsn = ntohl(fwdtsn_hdr->new_cum_tsn); 4226 pr_debug("%s: TSN 0x%x\n", __func__, tsn); 4227 4228 /* The TSN is too high--silently discard the chunk and count on it 4229 * getting retransmitted later. 4230 */ 4231 if (sctp_tsnmap_check(&asoc->peer.tsn_map, tsn) < 0) 4232 goto discard_noforce; 4233 4234 if (!asoc->stream.si->validate_ftsn(chunk)) 4235 goto discard_noforce; 4236 4237 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_FWDTSN, SCTP_U32(tsn)); 4238 if (len > sctp_ftsnhdr_len(&asoc->stream)) 4239 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_FWDTSN, 4240 SCTP_CHUNK(chunk)); 4241 4242 /* Count this as receiving DATA. */ 4243 if (asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE]) { 4244 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 4245 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE)); 4246 } 4247 4248 /* FIXME: For now send a SACK, but DATA processing may 4249 * send another. 4250 */ 4251 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_NOFORCE()); 4252 4253 return SCTP_DISPOSITION_CONSUME; 4254 4255 discard_noforce: 4256 return SCTP_DISPOSITION_DISCARD; 4257 } 4258 4259 enum sctp_disposition sctp_sf_eat_fwd_tsn_fast( 4260 struct net *net, 4261 const struct sctp_endpoint *ep, 4262 const struct sctp_association *asoc, 4263 const union sctp_subtype type, 4264 void *arg, 4265 struct sctp_cmd_seq *commands) 4266 { 4267 struct sctp_fwdtsn_hdr *fwdtsn_hdr; 4268 struct sctp_chunk *chunk = arg; 4269 __u16 len; 4270 __u32 tsn; 4271 4272 if (!sctp_vtag_verify(chunk, asoc)) { 4273 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 4274 SCTP_NULL()); 4275 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4276 } 4277 4278 if (!asoc->peer.prsctp_capable) 4279 return sctp_sf_unk_chunk(net, ep, asoc, type, arg, commands); 4280 4281 /* Make sure that the FORWARD_TSN chunk has a valid length. */ 4282 if (!sctp_chunk_length_valid(chunk, sctp_ftsnchk_len(&asoc->stream))) 4283 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4284 commands); 4285 4286 fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data; 4287 chunk->subh.fwdtsn_hdr = fwdtsn_hdr; 4288 len = ntohs(chunk->chunk_hdr->length); 4289 len -= sizeof(struct sctp_chunkhdr); 4290 skb_pull(chunk->skb, len); 4291 4292 tsn = ntohl(fwdtsn_hdr->new_cum_tsn); 4293 pr_debug("%s: TSN 0x%x\n", __func__, tsn); 4294 4295 /* The TSN is too high--silently discard the chunk and count on it 4296 * getting retransmitted later. 4297 */ 4298 if (sctp_tsnmap_check(&asoc->peer.tsn_map, tsn) < 0) 4299 goto gen_shutdown; 4300 4301 if (!asoc->stream.si->validate_ftsn(chunk)) 4302 goto gen_shutdown; 4303 4304 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_FWDTSN, SCTP_U32(tsn)); 4305 if (len > sctp_ftsnhdr_len(&asoc->stream)) 4306 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_FWDTSN, 4307 SCTP_CHUNK(chunk)); 4308 4309 /* Go a head and force a SACK, since we are shutting down. */ 4310 gen_shutdown: 4311 /* Implementor's Guide. 4312 * 4313 * While in SHUTDOWN-SENT state, the SHUTDOWN sender MUST immediately 4314 * respond to each received packet containing one or more DATA chunk(s) 4315 * with a SACK, a SHUTDOWN chunk, and restart the T2-shutdown timer 4316 */ 4317 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SHUTDOWN, SCTP_NULL()); 4318 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE()); 4319 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 4320 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 4321 4322 return SCTP_DISPOSITION_CONSUME; 4323 } 4324 4325 /* 4326 * SCTP-AUTH Section 6.3 Receiving authenticated chunks 4327 * 4328 * The receiver MUST use the HMAC algorithm indicated in the HMAC 4329 * Identifier field. If this algorithm was not specified by the 4330 * receiver in the HMAC-ALGO parameter in the INIT or INIT-ACK chunk 4331 * during association setup, the AUTH chunk and all chunks after it MUST 4332 * be discarded and an ERROR chunk SHOULD be sent with the error cause 4333 * defined in Section 4.1. 4334 * 4335 * If an endpoint with no shared key receives a Shared Key Identifier 4336 * other than 0, it MUST silently discard all authenticated chunks. If 4337 * the endpoint has at least one endpoint pair shared key for the peer, 4338 * it MUST use the key specified by the Shared Key Identifier if a 4339 * key has been configured for that Shared Key Identifier. If no 4340 * endpoint pair shared key has been configured for that Shared Key 4341 * Identifier, all authenticated chunks MUST be silently discarded. 4342 * 4343 * Verification Tag: 8.5 Verification Tag [Normal verification] 4344 * 4345 * The return value is the disposition of the chunk. 4346 */ 4347 static enum sctp_ierror sctp_sf_authenticate( 4348 const struct sctp_association *asoc, 4349 struct sctp_chunk *chunk) 4350 { 4351 struct sctp_shared_key *sh_key = NULL; 4352 struct sctp_authhdr *auth_hdr; 4353 __u8 *save_digest, *digest; 4354 struct sctp_hmac *hmac; 4355 unsigned int sig_len; 4356 __u16 key_id; 4357 4358 /* Pull in the auth header, so we can do some more verification */ 4359 auth_hdr = (struct sctp_authhdr *)chunk->skb->data; 4360 chunk->subh.auth_hdr = auth_hdr; 4361 skb_pull(chunk->skb, sizeof(*auth_hdr)); 4362 4363 /* Make sure that we support the HMAC algorithm from the auth 4364 * chunk. 4365 */ 4366 if (!sctp_auth_asoc_verify_hmac_id(asoc, auth_hdr->hmac_id)) 4367 return SCTP_IERROR_AUTH_BAD_HMAC; 4368 4369 /* Make sure that the provided shared key identifier has been 4370 * configured 4371 */ 4372 key_id = ntohs(auth_hdr->shkey_id); 4373 if (key_id != asoc->active_key_id) { 4374 sh_key = sctp_auth_get_shkey(asoc, key_id); 4375 if (!sh_key) 4376 return SCTP_IERROR_AUTH_BAD_KEYID; 4377 } 4378 4379 /* Make sure that the length of the signature matches what 4380 * we expect. 4381 */ 4382 sig_len = ntohs(chunk->chunk_hdr->length) - 4383 sizeof(struct sctp_auth_chunk); 4384 hmac = sctp_auth_get_hmac(ntohs(auth_hdr->hmac_id)); 4385 if (sig_len != hmac->hmac_len) 4386 return SCTP_IERROR_PROTO_VIOLATION; 4387 4388 /* Now that we've done validation checks, we can compute and 4389 * verify the hmac. The steps involved are: 4390 * 1. Save the digest from the chunk. 4391 * 2. Zero out the digest in the chunk. 4392 * 3. Compute the new digest 4393 * 4. Compare saved and new digests. 4394 */ 4395 digest = auth_hdr->hmac; 4396 skb_pull(chunk->skb, sig_len); 4397 4398 save_digest = kmemdup(digest, sig_len, GFP_ATOMIC); 4399 if (!save_digest) 4400 goto nomem; 4401 4402 memset(digest, 0, sig_len); 4403 4404 sctp_auth_calculate_hmac(asoc, chunk->skb, 4405 (struct sctp_auth_chunk *)chunk->chunk_hdr, 4406 sh_key, GFP_ATOMIC); 4407 4408 /* Discard the packet if the digests do not match */ 4409 if (memcmp(save_digest, digest, sig_len)) { 4410 kfree(save_digest); 4411 return SCTP_IERROR_BAD_SIG; 4412 } 4413 4414 kfree(save_digest); 4415 chunk->auth = 1; 4416 4417 return SCTP_IERROR_NO_ERROR; 4418 nomem: 4419 return SCTP_IERROR_NOMEM; 4420 } 4421 4422 enum sctp_disposition sctp_sf_eat_auth(struct net *net, 4423 const struct sctp_endpoint *ep, 4424 const struct sctp_association *asoc, 4425 const union sctp_subtype type, 4426 void *arg, struct sctp_cmd_seq *commands) 4427 { 4428 struct sctp_chunk *chunk = arg; 4429 struct sctp_authhdr *auth_hdr; 4430 struct sctp_chunk *err_chunk; 4431 enum sctp_ierror error; 4432 4433 /* Make sure that the peer has AUTH capable */ 4434 if (!asoc->peer.auth_capable) 4435 return sctp_sf_unk_chunk(net, ep, asoc, type, arg, commands); 4436 4437 if (!sctp_vtag_verify(chunk, asoc)) { 4438 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG, 4439 SCTP_NULL()); 4440 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4441 } 4442 4443 /* Make sure that the AUTH chunk has valid length. */ 4444 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_auth_chunk))) 4445 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4446 commands); 4447 4448 auth_hdr = (struct sctp_authhdr *)chunk->skb->data; 4449 error = sctp_sf_authenticate(asoc, chunk); 4450 switch (error) { 4451 case SCTP_IERROR_AUTH_BAD_HMAC: 4452 /* Generate the ERROR chunk and discard the rest 4453 * of the packet 4454 */ 4455 err_chunk = sctp_make_op_error(asoc, chunk, 4456 SCTP_ERROR_UNSUP_HMAC, 4457 &auth_hdr->hmac_id, 4458 sizeof(__u16), 0); 4459 if (err_chunk) { 4460 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 4461 SCTP_CHUNK(err_chunk)); 4462 } 4463 fallthrough; 4464 case SCTP_IERROR_AUTH_BAD_KEYID: 4465 case SCTP_IERROR_BAD_SIG: 4466 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4467 4468 case SCTP_IERROR_PROTO_VIOLATION: 4469 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4470 commands); 4471 4472 case SCTP_IERROR_NOMEM: 4473 return SCTP_DISPOSITION_NOMEM; 4474 4475 default: /* Prevent gcc warnings */ 4476 break; 4477 } 4478 4479 if (asoc->active_key_id != ntohs(auth_hdr->shkey_id)) { 4480 struct sctp_ulpevent *ev; 4481 4482 ev = sctp_ulpevent_make_authkey(asoc, ntohs(auth_hdr->shkey_id), 4483 SCTP_AUTH_NEW_KEY, GFP_ATOMIC); 4484 4485 if (!ev) 4486 return -ENOMEM; 4487 4488 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, 4489 SCTP_ULPEVENT(ev)); 4490 } 4491 4492 return SCTP_DISPOSITION_CONSUME; 4493 } 4494 4495 /* 4496 * Process an unknown chunk. 4497 * 4498 * Section: 3.2. Also, 2.1 in the implementor's guide. 4499 * 4500 * Chunk Types are encoded such that the highest-order two bits specify 4501 * the action that must be taken if the processing endpoint does not 4502 * recognize the Chunk Type. 4503 * 4504 * 00 - Stop processing this SCTP packet and discard it, do not process 4505 * any further chunks within it. 4506 * 4507 * 01 - Stop processing this SCTP packet and discard it, do not process 4508 * any further chunks within it, and report the unrecognized 4509 * chunk in an 'Unrecognized Chunk Type'. 4510 * 4511 * 10 - Skip this chunk and continue processing. 4512 * 4513 * 11 - Skip this chunk and continue processing, but report in an ERROR 4514 * Chunk using the 'Unrecognized Chunk Type' cause of error. 4515 * 4516 * The return value is the disposition of the chunk. 4517 */ 4518 enum sctp_disposition sctp_sf_unk_chunk(struct net *net, 4519 const struct sctp_endpoint *ep, 4520 const struct sctp_association *asoc, 4521 const union sctp_subtype type, 4522 void *arg, 4523 struct sctp_cmd_seq *commands) 4524 { 4525 struct sctp_chunk *unk_chunk = arg; 4526 struct sctp_chunk *err_chunk; 4527 struct sctp_chunkhdr *hdr; 4528 4529 pr_debug("%s: processing unknown chunk id:%d\n", __func__, type.chunk); 4530 4531 if (!sctp_vtag_verify(unk_chunk, asoc)) 4532 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4533 4534 /* Make sure that the chunk has a valid length. 4535 * Since we don't know the chunk type, we use a general 4536 * chunkhdr structure to make a comparison. 4537 */ 4538 if (!sctp_chunk_length_valid(unk_chunk, sizeof(*hdr))) 4539 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4540 commands); 4541 4542 switch (type.chunk & SCTP_CID_ACTION_MASK) { 4543 case SCTP_CID_ACTION_DISCARD: 4544 /* Discard the packet. */ 4545 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4546 case SCTP_CID_ACTION_DISCARD_ERR: 4547 /* Generate an ERROR chunk as response. */ 4548 hdr = unk_chunk->chunk_hdr; 4549 err_chunk = sctp_make_op_error(asoc, unk_chunk, 4550 SCTP_ERROR_UNKNOWN_CHUNK, hdr, 4551 SCTP_PAD4(ntohs(hdr->length)), 4552 0); 4553 if (err_chunk) { 4554 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 4555 SCTP_CHUNK(err_chunk)); 4556 } 4557 4558 /* Discard the packet. */ 4559 sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4560 return SCTP_DISPOSITION_CONSUME; 4561 case SCTP_CID_ACTION_SKIP: 4562 /* Skip the chunk. */ 4563 return SCTP_DISPOSITION_DISCARD; 4564 case SCTP_CID_ACTION_SKIP_ERR: 4565 /* Generate an ERROR chunk as response. */ 4566 hdr = unk_chunk->chunk_hdr; 4567 err_chunk = sctp_make_op_error(asoc, unk_chunk, 4568 SCTP_ERROR_UNKNOWN_CHUNK, hdr, 4569 SCTP_PAD4(ntohs(hdr->length)), 4570 0); 4571 if (err_chunk) { 4572 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 4573 SCTP_CHUNK(err_chunk)); 4574 } 4575 /* Skip the chunk. */ 4576 return SCTP_DISPOSITION_CONSUME; 4577 default: 4578 break; 4579 } 4580 4581 return SCTP_DISPOSITION_DISCARD; 4582 } 4583 4584 /* 4585 * Discard the chunk. 4586 * 4587 * Section: 0.2, 5.2.3, 5.2.5, 5.2.6, 6.0, 8.4.6, 8.5.1c, 9.2 4588 * [Too numerous to mention...] 4589 * Verification Tag: No verification needed. 4590 * Inputs 4591 * (endpoint, asoc, chunk) 4592 * 4593 * Outputs 4594 * (asoc, reply_msg, msg_up, timers, counters) 4595 * 4596 * The return value is the disposition of the chunk. 4597 */ 4598 enum sctp_disposition sctp_sf_discard_chunk(struct net *net, 4599 const struct sctp_endpoint *ep, 4600 const struct sctp_association *asoc, 4601 const union sctp_subtype type, 4602 void *arg, 4603 struct sctp_cmd_seq *commands) 4604 { 4605 struct sctp_chunk *chunk = arg; 4606 4607 if (asoc && !sctp_vtag_verify(chunk, asoc)) 4608 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4609 4610 /* Make sure that the chunk has a valid length. 4611 * Since we don't know the chunk type, we use a general 4612 * chunkhdr structure to make a comparison. 4613 */ 4614 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 4615 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4616 commands); 4617 4618 pr_debug("%s: chunk:%d is discarded\n", __func__, type.chunk); 4619 4620 return SCTP_DISPOSITION_DISCARD; 4621 } 4622 4623 /* 4624 * Discard the whole packet. 4625 * 4626 * Section: 8.4 2) 4627 * 4628 * 2) If the OOTB packet contains an ABORT chunk, the receiver MUST 4629 * silently discard the OOTB packet and take no further action. 4630 * 4631 * Verification Tag: No verification necessary 4632 * 4633 * Inputs 4634 * (endpoint, asoc, chunk) 4635 * 4636 * Outputs 4637 * (asoc, reply_msg, msg_up, timers, counters) 4638 * 4639 * The return value is the disposition of the chunk. 4640 */ 4641 enum sctp_disposition sctp_sf_pdiscard(struct net *net, 4642 const struct sctp_endpoint *ep, 4643 const struct sctp_association *asoc, 4644 const union sctp_subtype type, 4645 void *arg, struct sctp_cmd_seq *commands) 4646 { 4647 SCTP_INC_STATS(net, SCTP_MIB_IN_PKT_DISCARDS); 4648 sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL()); 4649 4650 return SCTP_DISPOSITION_CONSUME; 4651 } 4652 4653 4654 /* 4655 * The other end is violating protocol. 4656 * 4657 * Section: Not specified 4658 * Verification Tag: Not specified 4659 * Inputs 4660 * (endpoint, asoc, chunk) 4661 * 4662 * Outputs 4663 * (asoc, reply_msg, msg_up, timers, counters) 4664 * 4665 * We simply tag the chunk as a violation. The state machine will log 4666 * the violation and continue. 4667 */ 4668 enum sctp_disposition sctp_sf_violation(struct net *net, 4669 const struct sctp_endpoint *ep, 4670 const struct sctp_association *asoc, 4671 const union sctp_subtype type, 4672 void *arg, 4673 struct sctp_cmd_seq *commands) 4674 { 4675 struct sctp_chunk *chunk = arg; 4676 4677 if (!sctp_vtag_verify(chunk, asoc)) 4678 return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands); 4679 4680 /* Make sure that the chunk has a valid length. */ 4681 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) 4682 return sctp_sf_violation_chunklen(net, ep, asoc, type, arg, 4683 commands); 4684 4685 return SCTP_DISPOSITION_VIOLATION; 4686 } 4687 4688 /* 4689 * Common function to handle a protocol violation. 4690 */ 4691 static enum sctp_disposition sctp_sf_abort_violation( 4692 struct net *net, 4693 const struct sctp_endpoint *ep, 4694 const struct sctp_association *asoc, 4695 void *arg, 4696 struct sctp_cmd_seq *commands, 4697 const __u8 *payload, 4698 const size_t paylen) 4699 { 4700 struct sctp_packet *packet = NULL; 4701 struct sctp_chunk *chunk = arg; 4702 struct sctp_chunk *abort = NULL; 4703 4704 /* SCTP-AUTH, Section 6.3: 4705 * It should be noted that if the receiver wants to tear 4706 * down an association in an authenticated way only, the 4707 * handling of malformed packets should not result in 4708 * tearing down the association. 4709 * 4710 * This means that if we only want to abort associations 4711 * in an authenticated way (i.e AUTH+ABORT), then we 4712 * can't destroy this association just because the packet 4713 * was malformed. 4714 */ 4715 if (sctp_auth_recv_cid(SCTP_CID_ABORT, asoc)) 4716 goto discard; 4717 4718 /* Make the abort chunk. */ 4719 abort = sctp_make_abort_violation(asoc, chunk, payload, paylen); 4720 if (!abort) 4721 goto nomem; 4722 4723 if (asoc) { 4724 /* Treat INIT-ACK as a special case during COOKIE-WAIT. */ 4725 if (chunk->chunk_hdr->type == SCTP_CID_INIT_ACK && 4726 !asoc->peer.i.init_tag) { 4727 struct sctp_initack_chunk *initack; 4728 4729 initack = (struct sctp_initack_chunk *)chunk->chunk_hdr; 4730 if (!sctp_chunk_length_valid(chunk, sizeof(*initack))) 4731 abort->chunk_hdr->flags |= SCTP_CHUNK_FLAG_T; 4732 else { 4733 unsigned int inittag; 4734 4735 inittag = ntohl(initack->init_hdr.init_tag); 4736 sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_INITTAG, 4737 SCTP_U32(inittag)); 4738 } 4739 } 4740 4741 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort)); 4742 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 4743 4744 if (asoc->state <= SCTP_STATE_COOKIE_ECHOED) { 4745 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 4746 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 4747 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 4748 SCTP_ERROR(ECONNREFUSED)); 4749 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED, 4750 SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION)); 4751 } else { 4752 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 4753 SCTP_ERROR(ECONNABORTED)); 4754 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 4755 SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION)); 4756 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 4757 } 4758 } else { 4759 packet = sctp_ootb_pkt_new(net, asoc, chunk); 4760 4761 if (!packet) 4762 goto nomem_pkt; 4763 4764 if (sctp_test_T_bit(abort)) 4765 packet->vtag = ntohl(chunk->sctp_hdr->vtag); 4766 4767 abort->skb->sk = ep->base.sk; 4768 4769 sctp_packet_append_chunk(packet, abort); 4770 4771 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, 4772 SCTP_PACKET(packet)); 4773 4774 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 4775 } 4776 4777 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 4778 4779 discard: 4780 sctp_sf_pdiscard(net, ep, asoc, SCTP_ST_CHUNK(0), arg, commands); 4781 return SCTP_DISPOSITION_ABORT; 4782 4783 nomem_pkt: 4784 sctp_chunk_free(abort); 4785 nomem: 4786 return SCTP_DISPOSITION_NOMEM; 4787 } 4788 4789 /* 4790 * Handle a protocol violation when the chunk length is invalid. 4791 * "Invalid" length is identified as smaller than the minimal length a 4792 * given chunk can be. For example, a SACK chunk has invalid length 4793 * if its length is set to be smaller than the size of struct sctp_sack_chunk. 4794 * 4795 * We inform the other end by sending an ABORT with a Protocol Violation 4796 * error code. 4797 * 4798 * Section: Not specified 4799 * Verification Tag: Nothing to do 4800 * Inputs 4801 * (endpoint, asoc, chunk) 4802 * 4803 * Outputs 4804 * (reply_msg, msg_up, counters) 4805 * 4806 * Generate an ABORT chunk and terminate the association. 4807 */ 4808 static enum sctp_disposition sctp_sf_violation_chunklen( 4809 struct net *net, 4810 const struct sctp_endpoint *ep, 4811 const struct sctp_association *asoc, 4812 const union sctp_subtype type, 4813 void *arg, 4814 struct sctp_cmd_seq *commands) 4815 { 4816 static const char err_str[] = "The following chunk had invalid length:"; 4817 4818 return sctp_sf_abort_violation(net, ep, asoc, arg, commands, err_str, 4819 sizeof(err_str)); 4820 } 4821 4822 /* 4823 * Handle a protocol violation when the parameter length is invalid. 4824 * If the length is smaller than the minimum length of a given parameter, 4825 * or accumulated length in multi parameters exceeds the end of the chunk, 4826 * the length is considered as invalid. 4827 */ 4828 static enum sctp_disposition sctp_sf_violation_paramlen( 4829 struct net *net, 4830 const struct sctp_endpoint *ep, 4831 const struct sctp_association *asoc, 4832 const union sctp_subtype type, 4833 void *arg, void *ext, 4834 struct sctp_cmd_seq *commands) 4835 { 4836 struct sctp_paramhdr *param = ext; 4837 struct sctp_chunk *abort = NULL; 4838 struct sctp_chunk *chunk = arg; 4839 4840 if (sctp_auth_recv_cid(SCTP_CID_ABORT, asoc)) 4841 goto discard; 4842 4843 /* Make the abort chunk. */ 4844 abort = sctp_make_violation_paramlen(asoc, chunk, param); 4845 if (!abort) 4846 goto nomem; 4847 4848 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort)); 4849 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 4850 4851 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 4852 SCTP_ERROR(ECONNABORTED)); 4853 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 4854 SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION)); 4855 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 4856 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 4857 4858 discard: 4859 sctp_sf_pdiscard(net, ep, asoc, SCTP_ST_CHUNK(0), arg, commands); 4860 return SCTP_DISPOSITION_ABORT; 4861 nomem: 4862 return SCTP_DISPOSITION_NOMEM; 4863 } 4864 4865 /* Handle a protocol violation when the peer trying to advance the 4866 * cumulative tsn ack to a point beyond the max tsn currently sent. 4867 * 4868 * We inform the other end by sending an ABORT with a Protocol Violation 4869 * error code. 4870 */ 4871 static enum sctp_disposition sctp_sf_violation_ctsn( 4872 struct net *net, 4873 const struct sctp_endpoint *ep, 4874 const struct sctp_association *asoc, 4875 const union sctp_subtype type, 4876 void *arg, 4877 struct sctp_cmd_seq *commands) 4878 { 4879 static const char err_str[] = "The cumulative tsn ack beyond the max tsn currently sent:"; 4880 4881 return sctp_sf_abort_violation(net, ep, asoc, arg, commands, err_str, 4882 sizeof(err_str)); 4883 } 4884 4885 /* Handle protocol violation of an invalid chunk bundling. For example, 4886 * when we have an association and we receive bundled INIT-ACK, or 4887 * SHUTDOWN-COMPLETE, our peer is clearly violating the "MUST NOT bundle" 4888 * statement from the specs. Additionally, there might be an attacker 4889 * on the path and we may not want to continue this communication. 4890 */ 4891 static enum sctp_disposition sctp_sf_violation_chunk( 4892 struct net *net, 4893 const struct sctp_endpoint *ep, 4894 const struct sctp_association *asoc, 4895 const union sctp_subtype type, 4896 void *arg, 4897 struct sctp_cmd_seq *commands) 4898 { 4899 static const char err_str[] = "The following chunk violates protocol:"; 4900 4901 return sctp_sf_abort_violation(net, ep, asoc, arg, commands, err_str, 4902 sizeof(err_str)); 4903 } 4904 /*************************************************************************** 4905 * These are the state functions for handling primitive (Section 10) events. 4906 ***************************************************************************/ 4907 /* 4908 * sctp_sf_do_prm_asoc 4909 * 4910 * Section: 10.1 ULP-to-SCTP 4911 * B) Associate 4912 * 4913 * Format: ASSOCIATE(local SCTP instance name, destination transport addr, 4914 * outbound stream count) 4915 * -> association id [,destination transport addr list] [,outbound stream 4916 * count] 4917 * 4918 * This primitive allows the upper layer to initiate an association to a 4919 * specific peer endpoint. 4920 * 4921 * The peer endpoint shall be specified by one of the transport addresses 4922 * which defines the endpoint (see Section 1.4). If the local SCTP 4923 * instance has not been initialized, the ASSOCIATE is considered an 4924 * error. 4925 * [This is not relevant for the kernel implementation since we do all 4926 * initialization at boot time. It we hadn't initialized we wouldn't 4927 * get anywhere near this code.] 4928 * 4929 * An association id, which is a local handle to the SCTP association, 4930 * will be returned on successful establishment of the association. If 4931 * SCTP is not able to open an SCTP association with the peer endpoint, 4932 * an error is returned. 4933 * [In the kernel implementation, the struct sctp_association needs to 4934 * be created BEFORE causing this primitive to run.] 4935 * 4936 * Other association parameters may be returned, including the 4937 * complete destination transport addresses of the peer as well as the 4938 * outbound stream count of the local endpoint. One of the transport 4939 * address from the returned destination addresses will be selected by 4940 * the local endpoint as default primary path for sending SCTP packets 4941 * to this peer. The returned "destination transport addr list" can 4942 * be used by the ULP to change the default primary path or to force 4943 * sending a packet to a specific transport address. [All of this 4944 * stuff happens when the INIT ACK arrives. This is a NON-BLOCKING 4945 * function.] 4946 * 4947 * Mandatory attributes: 4948 * 4949 * o local SCTP instance name - obtained from the INITIALIZE operation. 4950 * [This is the argument asoc.] 4951 * o destination transport addr - specified as one of the transport 4952 * addresses of the peer endpoint with which the association is to be 4953 * established. 4954 * [This is asoc->peer.active_path.] 4955 * o outbound stream count - the number of outbound streams the ULP 4956 * would like to open towards this peer endpoint. 4957 * [BUG: This is not currently implemented.] 4958 * Optional attributes: 4959 * 4960 * None. 4961 * 4962 * The return value is a disposition. 4963 */ 4964 enum sctp_disposition sctp_sf_do_prm_asoc(struct net *net, 4965 const struct sctp_endpoint *ep, 4966 const struct sctp_association *asoc, 4967 const union sctp_subtype type, 4968 void *arg, 4969 struct sctp_cmd_seq *commands) 4970 { 4971 struct sctp_association *my_asoc; 4972 struct sctp_chunk *repl; 4973 4974 /* The comment below says that we enter COOKIE-WAIT AFTER 4975 * sending the INIT, but that doesn't actually work in our 4976 * implementation... 4977 */ 4978 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 4979 SCTP_STATE(SCTP_STATE_COOKIE_WAIT)); 4980 4981 /* RFC 2960 5.1 Normal Establishment of an Association 4982 * 4983 * A) "A" first sends an INIT chunk to "Z". In the INIT, "A" 4984 * must provide its Verification Tag (Tag_A) in the Initiate 4985 * Tag field. Tag_A SHOULD be a random number in the range of 4986 * 1 to 4294967295 (see 5.3.1 for Tag value selection). ... 4987 */ 4988 4989 repl = sctp_make_init(asoc, &asoc->base.bind_addr, GFP_ATOMIC, 0); 4990 if (!repl) 4991 goto nomem; 4992 4993 /* Choose transport for INIT. */ 4994 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_CHOOSE_TRANSPORT, 4995 SCTP_CHUNK(repl)); 4996 4997 /* Cast away the const modifier, as we want to just 4998 * rerun it through as a sideffect. 4999 */ 5000 my_asoc = (struct sctp_association *)asoc; 5001 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_ASOC, SCTP_ASOC(my_asoc)); 5002 5003 /* After sending the INIT, "A" starts the T1-init timer and 5004 * enters the COOKIE-WAIT state. 5005 */ 5006 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START, 5007 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 5008 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 5009 return SCTP_DISPOSITION_CONSUME; 5010 5011 nomem: 5012 return SCTP_DISPOSITION_NOMEM; 5013 } 5014 5015 /* 5016 * Process the SEND primitive. 5017 * 5018 * Section: 10.1 ULP-to-SCTP 5019 * E) Send 5020 * 5021 * Format: SEND(association id, buffer address, byte count [,context] 5022 * [,stream id] [,life time] [,destination transport address] 5023 * [,unorder flag] [,no-bundle flag] [,payload protocol-id] ) 5024 * -> result 5025 * 5026 * This is the main method to send user data via SCTP. 5027 * 5028 * Mandatory attributes: 5029 * 5030 * o association id - local handle to the SCTP association 5031 * 5032 * o buffer address - the location where the user message to be 5033 * transmitted is stored; 5034 * 5035 * o byte count - The size of the user data in number of bytes; 5036 * 5037 * Optional attributes: 5038 * 5039 * o context - an optional 32 bit integer that will be carried in the 5040 * sending failure notification to the ULP if the transportation of 5041 * this User Message fails. 5042 * 5043 * o stream id - to indicate which stream to send the data on. If not 5044 * specified, stream 0 will be used. 5045 * 5046 * o life time - specifies the life time of the user data. The user data 5047 * will not be sent by SCTP after the life time expires. This 5048 * parameter can be used to avoid efforts to transmit stale 5049 * user messages. SCTP notifies the ULP if the data cannot be 5050 * initiated to transport (i.e. sent to the destination via SCTP's 5051 * send primitive) within the life time variable. However, the 5052 * user data will be transmitted if SCTP has attempted to transmit a 5053 * chunk before the life time expired. 5054 * 5055 * o destination transport address - specified as one of the destination 5056 * transport addresses of the peer endpoint to which this packet 5057 * should be sent. Whenever possible, SCTP should use this destination 5058 * transport address for sending the packets, instead of the current 5059 * primary path. 5060 * 5061 * o unorder flag - this flag, if present, indicates that the user 5062 * would like the data delivered in an unordered fashion to the peer 5063 * (i.e., the U flag is set to 1 on all DATA chunks carrying this 5064 * message). 5065 * 5066 * o no-bundle flag - instructs SCTP not to bundle this user data with 5067 * other outbound DATA chunks. SCTP MAY still bundle even when 5068 * this flag is present, when faced with network congestion. 5069 * 5070 * o payload protocol-id - A 32 bit unsigned integer that is to be 5071 * passed to the peer indicating the type of payload protocol data 5072 * being transmitted. This value is passed as opaque data by SCTP. 5073 * 5074 * The return value is the disposition. 5075 */ 5076 enum sctp_disposition sctp_sf_do_prm_send(struct net *net, 5077 const struct sctp_endpoint *ep, 5078 const struct sctp_association *asoc, 5079 const union sctp_subtype type, 5080 void *arg, 5081 struct sctp_cmd_seq *commands) 5082 { 5083 struct sctp_datamsg *msg = arg; 5084 5085 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_MSG, SCTP_DATAMSG(msg)); 5086 return SCTP_DISPOSITION_CONSUME; 5087 } 5088 5089 /* 5090 * Process the SHUTDOWN primitive. 5091 * 5092 * Section: 10.1: 5093 * C) Shutdown 5094 * 5095 * Format: SHUTDOWN(association id) 5096 * -> result 5097 * 5098 * Gracefully closes an association. Any locally queued user data 5099 * will be delivered to the peer. The association will be terminated only 5100 * after the peer acknowledges all the SCTP packets sent. A success code 5101 * will be returned on successful termination of the association. If 5102 * attempting to terminate the association results in a failure, an error 5103 * code shall be returned. 5104 * 5105 * Mandatory attributes: 5106 * 5107 * o association id - local handle to the SCTP association 5108 * 5109 * Optional attributes: 5110 * 5111 * None. 5112 * 5113 * The return value is the disposition. 5114 */ 5115 enum sctp_disposition sctp_sf_do_9_2_prm_shutdown( 5116 struct net *net, 5117 const struct sctp_endpoint *ep, 5118 const struct sctp_association *asoc, 5119 const union sctp_subtype type, 5120 void *arg, 5121 struct sctp_cmd_seq *commands) 5122 { 5123 enum sctp_disposition disposition; 5124 5125 /* From 9.2 Shutdown of an Association 5126 * Upon receipt of the SHUTDOWN primitive from its upper 5127 * layer, the endpoint enters SHUTDOWN-PENDING state and 5128 * remains there until all outstanding data has been 5129 * acknowledged by its peer. The endpoint accepts no new data 5130 * from its upper layer, but retransmits data to the far end 5131 * if necessary to fill gaps. 5132 */ 5133 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 5134 SCTP_STATE(SCTP_STATE_SHUTDOWN_PENDING)); 5135 5136 disposition = SCTP_DISPOSITION_CONSUME; 5137 if (sctp_outq_is_empty(&asoc->outqueue)) { 5138 disposition = sctp_sf_do_9_2_start_shutdown(net, ep, asoc, type, 5139 arg, commands); 5140 } 5141 5142 return disposition; 5143 } 5144 5145 /* 5146 * Process the ABORT primitive. 5147 * 5148 * Section: 10.1: 5149 * C) Abort 5150 * 5151 * Format: Abort(association id [, cause code]) 5152 * -> result 5153 * 5154 * Ungracefully closes an association. Any locally queued user data 5155 * will be discarded and an ABORT chunk is sent to the peer. A success code 5156 * will be returned on successful abortion of the association. If 5157 * attempting to abort the association results in a failure, an error 5158 * code shall be returned. 5159 * 5160 * Mandatory attributes: 5161 * 5162 * o association id - local handle to the SCTP association 5163 * 5164 * Optional attributes: 5165 * 5166 * o cause code - reason of the abort to be passed to the peer 5167 * 5168 * None. 5169 * 5170 * The return value is the disposition. 5171 */ 5172 enum sctp_disposition sctp_sf_do_9_1_prm_abort( 5173 struct net *net, 5174 const struct sctp_endpoint *ep, 5175 const struct sctp_association *asoc, 5176 const union sctp_subtype type, 5177 void *arg, 5178 struct sctp_cmd_seq *commands) 5179 { 5180 /* From 9.1 Abort of an Association 5181 * Upon receipt of the ABORT primitive from its upper 5182 * layer, the endpoint enters CLOSED state and 5183 * discard all outstanding data has been 5184 * acknowledged by its peer. The endpoint accepts no new data 5185 * from its upper layer, but retransmits data to the far end 5186 * if necessary to fill gaps. 5187 */ 5188 struct sctp_chunk *abort = arg; 5189 5190 if (abort) 5191 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort)); 5192 5193 /* Even if we can't send the ABORT due to low memory delete the 5194 * TCB. This is a departure from our typical NOMEM handling. 5195 */ 5196 5197 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 5198 SCTP_ERROR(ECONNABORTED)); 5199 /* Delete the established association. */ 5200 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 5201 SCTP_PERR(SCTP_ERROR_USER_ABORT)); 5202 5203 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 5204 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 5205 5206 return SCTP_DISPOSITION_ABORT; 5207 } 5208 5209 /* We tried an illegal operation on an association which is closed. */ 5210 enum sctp_disposition sctp_sf_error_closed(struct net *net, 5211 const struct sctp_endpoint *ep, 5212 const struct sctp_association *asoc, 5213 const union sctp_subtype type, 5214 void *arg, 5215 struct sctp_cmd_seq *commands) 5216 { 5217 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_ERROR, SCTP_ERROR(-EINVAL)); 5218 return SCTP_DISPOSITION_CONSUME; 5219 } 5220 5221 /* We tried an illegal operation on an association which is shutting 5222 * down. 5223 */ 5224 enum sctp_disposition sctp_sf_error_shutdown( 5225 struct net *net, 5226 const struct sctp_endpoint *ep, 5227 const struct sctp_association *asoc, 5228 const union sctp_subtype type, 5229 void *arg, 5230 struct sctp_cmd_seq *commands) 5231 { 5232 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_ERROR, 5233 SCTP_ERROR(-ESHUTDOWN)); 5234 return SCTP_DISPOSITION_CONSUME; 5235 } 5236 5237 /* 5238 * sctp_cookie_wait_prm_shutdown 5239 * 5240 * Section: 4 Note: 2 5241 * Verification Tag: 5242 * Inputs 5243 * (endpoint, asoc) 5244 * 5245 * The RFC does not explicitly address this issue, but is the route through the 5246 * state table when someone issues a shutdown while in COOKIE_WAIT state. 5247 * 5248 * Outputs 5249 * (timers) 5250 */ 5251 enum sctp_disposition sctp_sf_cookie_wait_prm_shutdown( 5252 struct net *net, 5253 const struct sctp_endpoint *ep, 5254 const struct sctp_association *asoc, 5255 const union sctp_subtype type, 5256 void *arg, 5257 struct sctp_cmd_seq *commands) 5258 { 5259 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 5260 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 5261 5262 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 5263 SCTP_STATE(SCTP_STATE_CLOSED)); 5264 5265 SCTP_INC_STATS(net, SCTP_MIB_SHUTDOWNS); 5266 5267 sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL()); 5268 5269 return SCTP_DISPOSITION_DELETE_TCB; 5270 } 5271 5272 /* 5273 * sctp_cookie_echoed_prm_shutdown 5274 * 5275 * Section: 4 Note: 2 5276 * Verification Tag: 5277 * Inputs 5278 * (endpoint, asoc) 5279 * 5280 * The RFC does not explicitly address this issue, but is the route through the 5281 * state table when someone issues a shutdown while in COOKIE_ECHOED state. 5282 * 5283 * Outputs 5284 * (timers) 5285 */ 5286 enum sctp_disposition sctp_sf_cookie_echoed_prm_shutdown( 5287 struct net *net, 5288 const struct sctp_endpoint *ep, 5289 const struct sctp_association *asoc, 5290 const union sctp_subtype type, 5291 void *arg, 5292 struct sctp_cmd_seq *commands) 5293 { 5294 /* There is a single T1 timer, so we should be able to use 5295 * common function with the COOKIE-WAIT state. 5296 */ 5297 return sctp_sf_cookie_wait_prm_shutdown(net, ep, asoc, type, arg, commands); 5298 } 5299 5300 /* 5301 * sctp_sf_cookie_wait_prm_abort 5302 * 5303 * Section: 4 Note: 2 5304 * Verification Tag: 5305 * Inputs 5306 * (endpoint, asoc) 5307 * 5308 * The RFC does not explicitly address this issue, but is the route through the 5309 * state table when someone issues an abort while in COOKIE_WAIT state. 5310 * 5311 * Outputs 5312 * (timers) 5313 */ 5314 enum sctp_disposition sctp_sf_cookie_wait_prm_abort( 5315 struct net *net, 5316 const struct sctp_endpoint *ep, 5317 const struct sctp_association *asoc, 5318 const union sctp_subtype type, 5319 void *arg, 5320 struct sctp_cmd_seq *commands) 5321 { 5322 struct sctp_chunk *abort = arg; 5323 5324 /* Stop T1-init timer */ 5325 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 5326 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 5327 5328 if (abort) 5329 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort)); 5330 5331 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 5332 SCTP_STATE(SCTP_STATE_CLOSED)); 5333 5334 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 5335 5336 /* Even if we can't send the ABORT due to low memory delete the 5337 * TCB. This is a departure from our typical NOMEM handling. 5338 */ 5339 5340 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 5341 SCTP_ERROR(ECONNREFUSED)); 5342 /* Delete the established association. */ 5343 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED, 5344 SCTP_PERR(SCTP_ERROR_USER_ABORT)); 5345 5346 return SCTP_DISPOSITION_ABORT; 5347 } 5348 5349 /* 5350 * sctp_sf_cookie_echoed_prm_abort 5351 * 5352 * Section: 4 Note: 3 5353 * Verification Tag: 5354 * Inputs 5355 * (endpoint, asoc) 5356 * 5357 * The RFC does not explcitly address this issue, but is the route through the 5358 * state table when someone issues an abort while in COOKIE_ECHOED state. 5359 * 5360 * Outputs 5361 * (timers) 5362 */ 5363 enum sctp_disposition sctp_sf_cookie_echoed_prm_abort( 5364 struct net *net, 5365 const struct sctp_endpoint *ep, 5366 const struct sctp_association *asoc, 5367 const union sctp_subtype type, 5368 void *arg, 5369 struct sctp_cmd_seq *commands) 5370 { 5371 /* There is a single T1 timer, so we should be able to use 5372 * common function with the COOKIE-WAIT state. 5373 */ 5374 return sctp_sf_cookie_wait_prm_abort(net, ep, asoc, type, arg, commands); 5375 } 5376 5377 /* 5378 * sctp_sf_shutdown_pending_prm_abort 5379 * 5380 * Inputs 5381 * (endpoint, asoc) 5382 * 5383 * The RFC does not explicitly address this issue, but is the route through the 5384 * state table when someone issues an abort while in SHUTDOWN-PENDING state. 5385 * 5386 * Outputs 5387 * (timers) 5388 */ 5389 enum sctp_disposition sctp_sf_shutdown_pending_prm_abort( 5390 struct net *net, 5391 const struct sctp_endpoint *ep, 5392 const struct sctp_association *asoc, 5393 const union sctp_subtype type, 5394 void *arg, 5395 struct sctp_cmd_seq *commands) 5396 { 5397 /* Stop the T5-shutdown guard timer. */ 5398 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 5399 SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD)); 5400 5401 return sctp_sf_do_9_1_prm_abort(net, ep, asoc, type, arg, commands); 5402 } 5403 5404 /* 5405 * sctp_sf_shutdown_sent_prm_abort 5406 * 5407 * Inputs 5408 * (endpoint, asoc) 5409 * 5410 * The RFC does not explicitly address this issue, but is the route through the 5411 * state table when someone issues an abort while in SHUTDOWN-SENT state. 5412 * 5413 * Outputs 5414 * (timers) 5415 */ 5416 enum sctp_disposition sctp_sf_shutdown_sent_prm_abort( 5417 struct net *net, 5418 const struct sctp_endpoint *ep, 5419 const struct sctp_association *asoc, 5420 const union sctp_subtype type, 5421 void *arg, 5422 struct sctp_cmd_seq *commands) 5423 { 5424 /* Stop the T2-shutdown timer. */ 5425 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 5426 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 5427 5428 /* Stop the T5-shutdown guard timer. */ 5429 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 5430 SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD)); 5431 5432 return sctp_sf_do_9_1_prm_abort(net, ep, asoc, type, arg, commands); 5433 } 5434 5435 /* 5436 * sctp_sf_cookie_echoed_prm_abort 5437 * 5438 * Inputs 5439 * (endpoint, asoc) 5440 * 5441 * The RFC does not explcitly address this issue, but is the route through the 5442 * state table when someone issues an abort while in COOKIE_ECHOED state. 5443 * 5444 * Outputs 5445 * (timers) 5446 */ 5447 enum sctp_disposition sctp_sf_shutdown_ack_sent_prm_abort( 5448 struct net *net, 5449 const struct sctp_endpoint *ep, 5450 const struct sctp_association *asoc, 5451 const union sctp_subtype type, 5452 void *arg, 5453 struct sctp_cmd_seq *commands) 5454 { 5455 /* The same T2 timer, so we should be able to use 5456 * common function with the SHUTDOWN-SENT state. 5457 */ 5458 return sctp_sf_shutdown_sent_prm_abort(net, ep, asoc, type, arg, commands); 5459 } 5460 5461 /* 5462 * Process the REQUESTHEARTBEAT primitive 5463 * 5464 * 10.1 ULP-to-SCTP 5465 * J) Request Heartbeat 5466 * 5467 * Format: REQUESTHEARTBEAT(association id, destination transport address) 5468 * 5469 * -> result 5470 * 5471 * Instructs the local endpoint to perform a HeartBeat on the specified 5472 * destination transport address of the given association. The returned 5473 * result should indicate whether the transmission of the HEARTBEAT 5474 * chunk to the destination address is successful. 5475 * 5476 * Mandatory attributes: 5477 * 5478 * o association id - local handle to the SCTP association 5479 * 5480 * o destination transport address - the transport address of the 5481 * association on which a heartbeat should be issued. 5482 */ 5483 enum sctp_disposition sctp_sf_do_prm_requestheartbeat( 5484 struct net *net, 5485 const struct sctp_endpoint *ep, 5486 const struct sctp_association *asoc, 5487 const union sctp_subtype type, 5488 void *arg, 5489 struct sctp_cmd_seq *commands) 5490 { 5491 if (SCTP_DISPOSITION_NOMEM == sctp_sf_heartbeat(ep, asoc, type, 5492 (struct sctp_transport *)arg, commands)) 5493 return SCTP_DISPOSITION_NOMEM; 5494 5495 /* 5496 * RFC 2960 (bis), section 8.3 5497 * 5498 * D) Request an on-demand HEARTBEAT on a specific destination 5499 * transport address of a given association. 5500 * 5501 * The endpoint should increment the respective error counter of 5502 * the destination transport address each time a HEARTBEAT is sent 5503 * to that address and not acknowledged within one RTO. 5504 * 5505 */ 5506 sctp_add_cmd_sf(commands, SCTP_CMD_TRANSPORT_HB_SENT, 5507 SCTP_TRANSPORT(arg)); 5508 return SCTP_DISPOSITION_CONSUME; 5509 } 5510 5511 /* 5512 * ADDIP Section 4.1 ASCONF Chunk Procedures 5513 * When an endpoint has an ASCONF signaled change to be sent to the 5514 * remote endpoint it should do A1 to A9 5515 */ 5516 enum sctp_disposition sctp_sf_do_prm_asconf(struct net *net, 5517 const struct sctp_endpoint *ep, 5518 const struct sctp_association *asoc, 5519 const union sctp_subtype type, 5520 void *arg, 5521 struct sctp_cmd_seq *commands) 5522 { 5523 struct sctp_chunk *chunk = arg; 5524 5525 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk)); 5526 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START, 5527 SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); 5528 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk)); 5529 return SCTP_DISPOSITION_CONSUME; 5530 } 5531 5532 /* RE-CONFIG Section 5.1 RECONF Chunk Procedures */ 5533 enum sctp_disposition sctp_sf_do_prm_reconf(struct net *net, 5534 const struct sctp_endpoint *ep, 5535 const struct sctp_association *asoc, 5536 const union sctp_subtype type, 5537 void *arg, 5538 struct sctp_cmd_seq *commands) 5539 { 5540 struct sctp_chunk *chunk = arg; 5541 5542 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk)); 5543 return SCTP_DISPOSITION_CONSUME; 5544 } 5545 5546 /* 5547 * Ignore the primitive event 5548 * 5549 * The return value is the disposition of the primitive. 5550 */ 5551 enum sctp_disposition sctp_sf_ignore_primitive( 5552 struct net *net, 5553 const struct sctp_endpoint *ep, 5554 const struct sctp_association *asoc, 5555 const union sctp_subtype type, 5556 void *arg, 5557 struct sctp_cmd_seq *commands) 5558 { 5559 pr_debug("%s: primitive type:%d is ignored\n", __func__, 5560 type.primitive); 5561 5562 return SCTP_DISPOSITION_DISCARD; 5563 } 5564 5565 /*************************************************************************** 5566 * These are the state functions for the OTHER events. 5567 ***************************************************************************/ 5568 5569 /* 5570 * When the SCTP stack has no more user data to send or retransmit, this 5571 * notification is given to the user. Also, at the time when a user app 5572 * subscribes to this event, if there is no data to be sent or 5573 * retransmit, the stack will immediately send up this notification. 5574 */ 5575 enum sctp_disposition sctp_sf_do_no_pending_tsn( 5576 struct net *net, 5577 const struct sctp_endpoint *ep, 5578 const struct sctp_association *asoc, 5579 const union sctp_subtype type, 5580 void *arg, 5581 struct sctp_cmd_seq *commands) 5582 { 5583 struct sctp_ulpevent *event; 5584 5585 event = sctp_ulpevent_make_sender_dry_event(asoc, GFP_ATOMIC); 5586 if (!event) 5587 return SCTP_DISPOSITION_NOMEM; 5588 5589 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP, SCTP_ULPEVENT(event)); 5590 5591 return SCTP_DISPOSITION_CONSUME; 5592 } 5593 5594 /* 5595 * Start the shutdown negotiation. 5596 * 5597 * From Section 9.2: 5598 * Once all its outstanding data has been acknowledged, the endpoint 5599 * shall send a SHUTDOWN chunk to its peer including in the Cumulative 5600 * TSN Ack field the last sequential TSN it has received from the peer. 5601 * It shall then start the T2-shutdown timer and enter the SHUTDOWN-SENT 5602 * state. If the timer expires, the endpoint must re-send the SHUTDOWN 5603 * with the updated last sequential TSN received from its peer. 5604 * 5605 * The return value is the disposition. 5606 */ 5607 enum sctp_disposition sctp_sf_do_9_2_start_shutdown( 5608 struct net *net, 5609 const struct sctp_endpoint *ep, 5610 const struct sctp_association *asoc, 5611 const union sctp_subtype type, 5612 void *arg, 5613 struct sctp_cmd_seq *commands) 5614 { 5615 struct sctp_chunk *reply; 5616 5617 /* Once all its outstanding data has been acknowledged, the 5618 * endpoint shall send a SHUTDOWN chunk to its peer including 5619 * in the Cumulative TSN Ack field the last sequential TSN it 5620 * has received from the peer. 5621 */ 5622 reply = sctp_make_shutdown(asoc, arg); 5623 if (!reply) 5624 goto nomem; 5625 5626 /* Set the transport for the SHUTDOWN chunk and the timeout for the 5627 * T2-shutdown timer. 5628 */ 5629 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T2, SCTP_CHUNK(reply)); 5630 5631 /* It shall then start the T2-shutdown timer */ 5632 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START, 5633 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 5634 5635 /* RFC 4960 Section 9.2 5636 * The sender of the SHUTDOWN MAY also start an overall guard timer 5637 * 'T5-shutdown-guard' to bound the overall time for shutdown sequence. 5638 */ 5639 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 5640 SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD)); 5641 5642 if (asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE]) 5643 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 5644 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE)); 5645 5646 /* and enter the SHUTDOWN-SENT state. */ 5647 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 5648 SCTP_STATE(SCTP_STATE_SHUTDOWN_SENT)); 5649 5650 /* sctp-implguide 2.10 Issues with Heartbeating and failover 5651 * 5652 * HEARTBEAT ... is discontinued after sending either SHUTDOWN 5653 * or SHUTDOWN-ACK. 5654 */ 5655 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_STOP, SCTP_NULL()); 5656 5657 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 5658 5659 return SCTP_DISPOSITION_CONSUME; 5660 5661 nomem: 5662 return SCTP_DISPOSITION_NOMEM; 5663 } 5664 5665 /* 5666 * Generate a SHUTDOWN ACK now that everything is SACK'd. 5667 * 5668 * From Section 9.2: 5669 * 5670 * If it has no more outstanding DATA chunks, the SHUTDOWN receiver 5671 * shall send a SHUTDOWN ACK and start a T2-shutdown timer of its own, 5672 * entering the SHUTDOWN-ACK-SENT state. If the timer expires, the 5673 * endpoint must re-send the SHUTDOWN ACK. 5674 * 5675 * The return value is the disposition. 5676 */ 5677 enum sctp_disposition sctp_sf_do_9_2_shutdown_ack( 5678 struct net *net, 5679 const struct sctp_endpoint *ep, 5680 const struct sctp_association *asoc, 5681 const union sctp_subtype type, 5682 void *arg, 5683 struct sctp_cmd_seq *commands) 5684 { 5685 struct sctp_chunk *chunk = arg; 5686 struct sctp_chunk *reply; 5687 5688 /* There are 2 ways of getting here: 5689 * 1) called in response to a SHUTDOWN chunk 5690 * 2) called when SCTP_EVENT_NO_PENDING_TSN event is issued. 5691 * 5692 * For the case (2), the arg parameter is set to NULL. We need 5693 * to check that we have a chunk before accessing it's fields. 5694 */ 5695 if (chunk) { 5696 if (!sctp_vtag_verify(chunk, asoc)) 5697 return sctp_sf_pdiscard(net, ep, asoc, type, arg, 5698 commands); 5699 5700 /* Make sure that the SHUTDOWN chunk has a valid length. */ 5701 if (!sctp_chunk_length_valid( 5702 chunk, sizeof(struct sctp_shutdown_chunk))) 5703 return sctp_sf_violation_chunklen(net, ep, asoc, type, 5704 arg, commands); 5705 } 5706 5707 /* If it has no more outstanding DATA chunks, the SHUTDOWN receiver 5708 * shall send a SHUTDOWN ACK ... 5709 */ 5710 reply = sctp_make_shutdown_ack(asoc, chunk); 5711 if (!reply) 5712 goto nomem; 5713 5714 /* Set the transport for the SHUTDOWN ACK chunk and the timeout for 5715 * the T2-shutdown timer. 5716 */ 5717 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T2, SCTP_CHUNK(reply)); 5718 5719 /* and start/restart a T2-shutdown timer of its own, */ 5720 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 5721 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 5722 5723 if (asoc->timeouts[SCTP_EVENT_TIMEOUT_AUTOCLOSE]) 5724 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 5725 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE)); 5726 5727 /* Enter the SHUTDOWN-ACK-SENT state. */ 5728 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 5729 SCTP_STATE(SCTP_STATE_SHUTDOWN_ACK_SENT)); 5730 5731 /* sctp-implguide 2.10 Issues with Heartbeating and failover 5732 * 5733 * HEARTBEAT ... is discontinued after sending either SHUTDOWN 5734 * or SHUTDOWN-ACK. 5735 */ 5736 sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_STOP, SCTP_NULL()); 5737 5738 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 5739 5740 return SCTP_DISPOSITION_CONSUME; 5741 5742 nomem: 5743 return SCTP_DISPOSITION_NOMEM; 5744 } 5745 5746 /* 5747 * Ignore the event defined as other 5748 * 5749 * The return value is the disposition of the event. 5750 */ 5751 enum sctp_disposition sctp_sf_ignore_other(struct net *net, 5752 const struct sctp_endpoint *ep, 5753 const struct sctp_association *asoc, 5754 const union sctp_subtype type, 5755 void *arg, 5756 struct sctp_cmd_seq *commands) 5757 { 5758 pr_debug("%s: the event other type:%d is ignored\n", 5759 __func__, type.other); 5760 5761 return SCTP_DISPOSITION_DISCARD; 5762 } 5763 5764 /************************************************************ 5765 * These are the state functions for handling timeout events. 5766 ************************************************************/ 5767 5768 /* 5769 * RTX Timeout 5770 * 5771 * Section: 6.3.3 Handle T3-rtx Expiration 5772 * 5773 * Whenever the retransmission timer T3-rtx expires for a destination 5774 * address, do the following: 5775 * [See below] 5776 * 5777 * The return value is the disposition of the chunk. 5778 */ 5779 enum sctp_disposition sctp_sf_do_6_3_3_rtx(struct net *net, 5780 const struct sctp_endpoint *ep, 5781 const struct sctp_association *asoc, 5782 const union sctp_subtype type, 5783 void *arg, 5784 struct sctp_cmd_seq *commands) 5785 { 5786 struct sctp_transport *transport = arg; 5787 5788 SCTP_INC_STATS(net, SCTP_MIB_T3_RTX_EXPIREDS); 5789 5790 if (asoc->overall_error_count >= asoc->max_retrans) { 5791 if (asoc->peer.zero_window_announced && 5792 asoc->state == SCTP_STATE_SHUTDOWN_PENDING) { 5793 /* 5794 * We are here likely because the receiver had its rwnd 5795 * closed for a while and we have not been able to 5796 * transmit the locally queued data within the maximum 5797 * retransmission attempts limit. Start the T5 5798 * shutdown guard timer to give the receiver one last 5799 * chance and some additional time to recover before 5800 * aborting. 5801 */ 5802 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START_ONCE, 5803 SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD)); 5804 } else { 5805 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 5806 SCTP_ERROR(ETIMEDOUT)); 5807 /* CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */ 5808 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 5809 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 5810 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 5811 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 5812 return SCTP_DISPOSITION_DELETE_TCB; 5813 } 5814 } 5815 5816 /* E1) For the destination address for which the timer 5817 * expires, adjust its ssthresh with rules defined in Section 5818 * 7.2.3 and set the cwnd <- MTU. 5819 */ 5820 5821 /* E2) For the destination address for which the timer 5822 * expires, set RTO <- RTO * 2 ("back off the timer"). The 5823 * maximum value discussed in rule C7 above (RTO.max) may be 5824 * used to provide an upper bound to this doubling operation. 5825 */ 5826 5827 /* E3) Determine how many of the earliest (i.e., lowest TSN) 5828 * outstanding DATA chunks for the address for which the 5829 * T3-rtx has expired will fit into a single packet, subject 5830 * to the MTU constraint for the path corresponding to the 5831 * destination transport address to which the retransmission 5832 * is being sent (this may be different from the address for 5833 * which the timer expires [see Section 6.4]). Call this 5834 * value K. Bundle and retransmit those K DATA chunks in a 5835 * single packet to the destination endpoint. 5836 * 5837 * Note: Any DATA chunks that were sent to the address for 5838 * which the T3-rtx timer expired but did not fit in one MTU 5839 * (rule E3 above), should be marked for retransmission and 5840 * sent as soon as cwnd allows (normally when a SACK arrives). 5841 */ 5842 5843 /* Do some failure management (Section 8.2). */ 5844 sctp_add_cmd_sf(commands, SCTP_CMD_STRIKE, SCTP_TRANSPORT(transport)); 5845 5846 /* NB: Rules E4 and F1 are implicit in R1. */ 5847 sctp_add_cmd_sf(commands, SCTP_CMD_RETRAN, SCTP_TRANSPORT(transport)); 5848 5849 return SCTP_DISPOSITION_CONSUME; 5850 } 5851 5852 /* 5853 * Generate delayed SACK on timeout 5854 * 5855 * Section: 6.2 Acknowledgement on Reception of DATA Chunks 5856 * 5857 * The guidelines on delayed acknowledgement algorithm specified in 5858 * Section 4.2 of [RFC2581] SHOULD be followed. Specifically, an 5859 * acknowledgement SHOULD be generated for at least every second packet 5860 * (not every second DATA chunk) received, and SHOULD be generated 5861 * within 200 ms of the arrival of any unacknowledged DATA chunk. In 5862 * some situations it may be beneficial for an SCTP transmitter to be 5863 * more conservative than the algorithms detailed in this document 5864 * allow. However, an SCTP transmitter MUST NOT be more aggressive than 5865 * the following algorithms allow. 5866 */ 5867 enum sctp_disposition sctp_sf_do_6_2_sack(struct net *net, 5868 const struct sctp_endpoint *ep, 5869 const struct sctp_association *asoc, 5870 const union sctp_subtype type, 5871 void *arg, 5872 struct sctp_cmd_seq *commands) 5873 { 5874 SCTP_INC_STATS(net, SCTP_MIB_DELAY_SACK_EXPIREDS); 5875 sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE()); 5876 return SCTP_DISPOSITION_CONSUME; 5877 } 5878 5879 /* 5880 * sctp_sf_t1_init_timer_expire 5881 * 5882 * Section: 4 Note: 2 5883 * Verification Tag: 5884 * Inputs 5885 * (endpoint, asoc) 5886 * 5887 * RFC 2960 Section 4 Notes 5888 * 2) If the T1-init timer expires, the endpoint MUST retransmit INIT 5889 * and re-start the T1-init timer without changing state. This MUST 5890 * be repeated up to 'Max.Init.Retransmits' times. After that, the 5891 * endpoint MUST abort the initialization process and report the 5892 * error to SCTP user. 5893 * 5894 * Outputs 5895 * (timers, events) 5896 * 5897 */ 5898 enum sctp_disposition sctp_sf_t1_init_timer_expire( 5899 struct net *net, 5900 const struct sctp_endpoint *ep, 5901 const struct sctp_association *asoc, 5902 const union sctp_subtype type, 5903 void *arg, 5904 struct sctp_cmd_seq *commands) 5905 { 5906 int attempts = asoc->init_err_counter + 1; 5907 struct sctp_chunk *repl = NULL; 5908 struct sctp_bind_addr *bp; 5909 5910 pr_debug("%s: timer T1 expired (INIT)\n", __func__); 5911 5912 SCTP_INC_STATS(net, SCTP_MIB_T1_INIT_EXPIREDS); 5913 5914 if (attempts <= asoc->max_init_attempts) { 5915 bp = (struct sctp_bind_addr *) &asoc->base.bind_addr; 5916 repl = sctp_make_init(asoc, bp, GFP_ATOMIC, 0); 5917 if (!repl) 5918 return SCTP_DISPOSITION_NOMEM; 5919 5920 /* Choose transport for INIT. */ 5921 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_CHOOSE_TRANSPORT, 5922 SCTP_CHUNK(repl)); 5923 5924 /* Issue a sideeffect to do the needed accounting. */ 5925 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_RESTART, 5926 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT)); 5927 5928 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 5929 } else { 5930 pr_debug("%s: giving up on INIT, attempts:%d " 5931 "max_init_attempts:%d\n", __func__, attempts, 5932 asoc->max_init_attempts); 5933 5934 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 5935 SCTP_ERROR(ETIMEDOUT)); 5936 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED, 5937 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 5938 return SCTP_DISPOSITION_DELETE_TCB; 5939 } 5940 5941 return SCTP_DISPOSITION_CONSUME; 5942 } 5943 5944 /* 5945 * sctp_sf_t1_cookie_timer_expire 5946 * 5947 * Section: 4 Note: 2 5948 * Verification Tag: 5949 * Inputs 5950 * (endpoint, asoc) 5951 * 5952 * RFC 2960 Section 4 Notes 5953 * 3) If the T1-cookie timer expires, the endpoint MUST retransmit 5954 * COOKIE ECHO and re-start the T1-cookie timer without changing 5955 * state. This MUST be repeated up to 'Max.Init.Retransmits' times. 5956 * After that, the endpoint MUST abort the initialization process and 5957 * report the error to SCTP user. 5958 * 5959 * Outputs 5960 * (timers, events) 5961 * 5962 */ 5963 enum sctp_disposition sctp_sf_t1_cookie_timer_expire( 5964 struct net *net, 5965 const struct sctp_endpoint *ep, 5966 const struct sctp_association *asoc, 5967 const union sctp_subtype type, 5968 void *arg, 5969 struct sctp_cmd_seq *commands) 5970 { 5971 int attempts = asoc->init_err_counter + 1; 5972 struct sctp_chunk *repl = NULL; 5973 5974 pr_debug("%s: timer T1 expired (COOKIE-ECHO)\n", __func__); 5975 5976 SCTP_INC_STATS(net, SCTP_MIB_T1_COOKIE_EXPIREDS); 5977 5978 if (attempts <= asoc->max_init_attempts) { 5979 repl = sctp_make_cookie_echo(asoc, NULL); 5980 if (!repl) 5981 return SCTP_DISPOSITION_NOMEM; 5982 5983 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_CHOOSE_TRANSPORT, 5984 SCTP_CHUNK(repl)); 5985 /* Issue a sideeffect to do the needed accounting. */ 5986 sctp_add_cmd_sf(commands, SCTP_CMD_COOKIEECHO_RESTART, 5987 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_COOKIE)); 5988 5989 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl)); 5990 } else { 5991 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 5992 SCTP_ERROR(ETIMEDOUT)); 5993 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED, 5994 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 5995 return SCTP_DISPOSITION_DELETE_TCB; 5996 } 5997 5998 return SCTP_DISPOSITION_CONSUME; 5999 } 6000 6001 /* RFC2960 9.2 If the timer expires, the endpoint must re-send the SHUTDOWN 6002 * with the updated last sequential TSN received from its peer. 6003 * 6004 * An endpoint should limit the number of retransmission of the 6005 * SHUTDOWN chunk to the protocol parameter 'Association.Max.Retrans'. 6006 * If this threshold is exceeded the endpoint should destroy the TCB and 6007 * MUST report the peer endpoint unreachable to the upper layer (and 6008 * thus the association enters the CLOSED state). The reception of any 6009 * packet from its peer (i.e. as the peer sends all of its queued DATA 6010 * chunks) should clear the endpoint's retransmission count and restart 6011 * the T2-Shutdown timer, giving its peer ample opportunity to transmit 6012 * all of its queued DATA chunks that have not yet been sent. 6013 */ 6014 enum sctp_disposition sctp_sf_t2_timer_expire( 6015 struct net *net, 6016 const struct sctp_endpoint *ep, 6017 const struct sctp_association *asoc, 6018 const union sctp_subtype type, 6019 void *arg, 6020 struct sctp_cmd_seq *commands) 6021 { 6022 struct sctp_chunk *reply = NULL; 6023 6024 pr_debug("%s: timer T2 expired\n", __func__); 6025 6026 SCTP_INC_STATS(net, SCTP_MIB_T2_SHUTDOWN_EXPIREDS); 6027 6028 ((struct sctp_association *)asoc)->shutdown_retries++; 6029 6030 if (asoc->overall_error_count >= asoc->max_retrans) { 6031 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 6032 SCTP_ERROR(ETIMEDOUT)); 6033 /* Note: CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */ 6034 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 6035 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 6036 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 6037 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 6038 return SCTP_DISPOSITION_DELETE_TCB; 6039 } 6040 6041 switch (asoc->state) { 6042 case SCTP_STATE_SHUTDOWN_SENT: 6043 reply = sctp_make_shutdown(asoc, NULL); 6044 break; 6045 6046 case SCTP_STATE_SHUTDOWN_ACK_SENT: 6047 reply = sctp_make_shutdown_ack(asoc, NULL); 6048 break; 6049 6050 default: 6051 BUG(); 6052 break; 6053 } 6054 6055 if (!reply) 6056 goto nomem; 6057 6058 /* Do some failure management (Section 8.2). 6059 * If we remove the transport an SHUTDOWN was last sent to, don't 6060 * do failure management. 6061 */ 6062 if (asoc->shutdown_last_sent_to) 6063 sctp_add_cmd_sf(commands, SCTP_CMD_STRIKE, 6064 SCTP_TRANSPORT(asoc->shutdown_last_sent_to)); 6065 6066 /* Set the transport for the SHUTDOWN/ACK chunk and the timeout for 6067 * the T2-shutdown timer. 6068 */ 6069 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T2, SCTP_CHUNK(reply)); 6070 6071 /* Restart the T2-shutdown timer. */ 6072 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 6073 SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN)); 6074 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 6075 return SCTP_DISPOSITION_CONSUME; 6076 6077 nomem: 6078 return SCTP_DISPOSITION_NOMEM; 6079 } 6080 6081 /* 6082 * ADDIP Section 4.1 ASCONF Chunk Procedures 6083 * If the T4 RTO timer expires the endpoint should do B1 to B5 6084 */ 6085 enum sctp_disposition sctp_sf_t4_timer_expire( 6086 struct net *net, 6087 const struct sctp_endpoint *ep, 6088 const struct sctp_association *asoc, 6089 const union sctp_subtype type, 6090 void *arg, 6091 struct sctp_cmd_seq *commands) 6092 { 6093 struct sctp_chunk *chunk = asoc->addip_last_asconf; 6094 struct sctp_transport *transport = chunk->transport; 6095 6096 SCTP_INC_STATS(net, SCTP_MIB_T4_RTO_EXPIREDS); 6097 6098 /* ADDIP 4.1 B1) Increment the error counters and perform path failure 6099 * detection on the appropriate destination address as defined in 6100 * RFC2960 [5] section 8.1 and 8.2. 6101 */ 6102 if (transport) 6103 sctp_add_cmd_sf(commands, SCTP_CMD_STRIKE, 6104 SCTP_TRANSPORT(transport)); 6105 6106 /* Reconfig T4 timer and transport. */ 6107 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk)); 6108 6109 /* ADDIP 4.1 B2) Increment the association error counters and perform 6110 * endpoint failure detection on the association as defined in 6111 * RFC2960 [5] section 8.1 and 8.2. 6112 * association error counter is incremented in SCTP_CMD_STRIKE. 6113 */ 6114 if (asoc->overall_error_count >= asoc->max_retrans) { 6115 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP, 6116 SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); 6117 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 6118 SCTP_ERROR(ETIMEDOUT)); 6119 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 6120 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 6121 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 6122 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 6123 return SCTP_DISPOSITION_ABORT; 6124 } 6125 6126 /* ADDIP 4.1 B3) Back-off the destination address RTO value to which 6127 * the ASCONF chunk was sent by doubling the RTO timer value. 6128 * This is done in SCTP_CMD_STRIKE. 6129 */ 6130 6131 /* ADDIP 4.1 B4) Re-transmit the ASCONF Chunk last sent and if possible 6132 * choose an alternate destination address (please refer to RFC2960 6133 * [5] section 6.4.1). An endpoint MUST NOT add new parameters to this 6134 * chunk, it MUST be the same (including its serial number) as the last 6135 * ASCONF sent. 6136 */ 6137 sctp_chunk_hold(asoc->addip_last_asconf); 6138 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 6139 SCTP_CHUNK(asoc->addip_last_asconf)); 6140 6141 /* ADDIP 4.1 B5) Restart the T-4 RTO timer. Note that if a different 6142 * destination is selected, then the RTO used will be that of the new 6143 * destination address. 6144 */ 6145 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART, 6146 SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO)); 6147 6148 return SCTP_DISPOSITION_CONSUME; 6149 } 6150 6151 /* sctpimpguide-05 Section 2.12.2 6152 * The sender of the SHUTDOWN MAY also start an overall guard timer 6153 * 'T5-shutdown-guard' to bound the overall time for shutdown sequence. 6154 * At the expiration of this timer the sender SHOULD abort the association 6155 * by sending an ABORT chunk. 6156 */ 6157 enum sctp_disposition sctp_sf_t5_timer_expire( 6158 struct net *net, 6159 const struct sctp_endpoint *ep, 6160 const struct sctp_association *asoc, 6161 const union sctp_subtype type, 6162 void *arg, 6163 struct sctp_cmd_seq *commands) 6164 { 6165 struct sctp_chunk *reply = NULL; 6166 6167 pr_debug("%s: timer T5 expired\n", __func__); 6168 6169 SCTP_INC_STATS(net, SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS); 6170 6171 reply = sctp_make_abort(asoc, NULL, 0); 6172 if (!reply) 6173 goto nomem; 6174 6175 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply)); 6176 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 6177 SCTP_ERROR(ETIMEDOUT)); 6178 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 6179 SCTP_PERR(SCTP_ERROR_NO_ERROR)); 6180 6181 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 6182 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 6183 6184 return SCTP_DISPOSITION_DELETE_TCB; 6185 nomem: 6186 return SCTP_DISPOSITION_NOMEM; 6187 } 6188 6189 /* Handle expiration of AUTOCLOSE timer. When the autoclose timer expires, 6190 * the association is automatically closed by starting the shutdown process. 6191 * The work that needs to be done is same as when SHUTDOWN is initiated by 6192 * the user. So this routine looks same as sctp_sf_do_9_2_prm_shutdown(). 6193 */ 6194 enum sctp_disposition sctp_sf_autoclose_timer_expire( 6195 struct net *net, 6196 const struct sctp_endpoint *ep, 6197 const struct sctp_association *asoc, 6198 const union sctp_subtype type, 6199 void *arg, 6200 struct sctp_cmd_seq *commands) 6201 { 6202 enum sctp_disposition disposition; 6203 6204 SCTP_INC_STATS(net, SCTP_MIB_AUTOCLOSE_EXPIREDS); 6205 6206 /* From 9.2 Shutdown of an Association 6207 * Upon receipt of the SHUTDOWN primitive from its upper 6208 * layer, the endpoint enters SHUTDOWN-PENDING state and 6209 * remains there until all outstanding data has been 6210 * acknowledged by its peer. The endpoint accepts no new data 6211 * from its upper layer, but retransmits data to the far end 6212 * if necessary to fill gaps. 6213 */ 6214 sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE, 6215 SCTP_STATE(SCTP_STATE_SHUTDOWN_PENDING)); 6216 6217 disposition = SCTP_DISPOSITION_CONSUME; 6218 if (sctp_outq_is_empty(&asoc->outqueue)) { 6219 disposition = sctp_sf_do_9_2_start_shutdown(net, ep, asoc, type, 6220 NULL, commands); 6221 } 6222 6223 return disposition; 6224 } 6225 6226 /***************************************************************************** 6227 * These are sa state functions which could apply to all types of events. 6228 ****************************************************************************/ 6229 6230 /* 6231 * This table entry is not implemented. 6232 * 6233 * Inputs 6234 * (endpoint, asoc, chunk) 6235 * 6236 * The return value is the disposition of the chunk. 6237 */ 6238 enum sctp_disposition sctp_sf_not_impl(struct net *net, 6239 const struct sctp_endpoint *ep, 6240 const struct sctp_association *asoc, 6241 const union sctp_subtype type, 6242 void *arg, struct sctp_cmd_seq *commands) 6243 { 6244 return SCTP_DISPOSITION_NOT_IMPL; 6245 } 6246 6247 /* 6248 * This table entry represents a bug. 6249 * 6250 * Inputs 6251 * (endpoint, asoc, chunk) 6252 * 6253 * The return value is the disposition of the chunk. 6254 */ 6255 enum sctp_disposition sctp_sf_bug(struct net *net, 6256 const struct sctp_endpoint *ep, 6257 const struct sctp_association *asoc, 6258 const union sctp_subtype type, 6259 void *arg, struct sctp_cmd_seq *commands) 6260 { 6261 return SCTP_DISPOSITION_BUG; 6262 } 6263 6264 /* 6265 * This table entry represents the firing of a timer in the wrong state. 6266 * Since timer deletion cannot be guaranteed a timer 'may' end up firing 6267 * when the association is in the wrong state. This event should 6268 * be ignored, so as to prevent any rearming of the timer. 6269 * 6270 * Inputs 6271 * (endpoint, asoc, chunk) 6272 * 6273 * The return value is the disposition of the chunk. 6274 */ 6275 enum sctp_disposition sctp_sf_timer_ignore(struct net *net, 6276 const struct sctp_endpoint *ep, 6277 const struct sctp_association *asoc, 6278 const union sctp_subtype type, 6279 void *arg, 6280 struct sctp_cmd_seq *commands) 6281 { 6282 pr_debug("%s: timer %d ignored\n", __func__, type.chunk); 6283 6284 return SCTP_DISPOSITION_CONSUME; 6285 } 6286 6287 /******************************************************************** 6288 * 2nd Level Abstractions 6289 ********************************************************************/ 6290 6291 /* Pull the SACK chunk based on the SACK header. */ 6292 static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk) 6293 { 6294 struct sctp_sackhdr *sack; 6295 __u16 num_dup_tsns; 6296 unsigned int len; 6297 __u16 num_blocks; 6298 6299 /* Protect ourselves from reading too far into 6300 * the skb from a bogus sender. 6301 */ 6302 sack = (struct sctp_sackhdr *) chunk->skb->data; 6303 6304 num_blocks = ntohs(sack->num_gap_ack_blocks); 6305 num_dup_tsns = ntohs(sack->num_dup_tsns); 6306 len = sizeof(struct sctp_sackhdr); 6307 len += (num_blocks + num_dup_tsns) * sizeof(__u32); 6308 if (len > chunk->skb->len) 6309 return NULL; 6310 6311 skb_pull(chunk->skb, len); 6312 6313 return sack; 6314 } 6315 6316 /* Create an ABORT packet to be sent as a response, with the specified 6317 * error causes. 6318 */ 6319 static struct sctp_packet *sctp_abort_pkt_new( 6320 struct net *net, 6321 const struct sctp_endpoint *ep, 6322 const struct sctp_association *asoc, 6323 struct sctp_chunk *chunk, 6324 const void *payload, size_t paylen) 6325 { 6326 struct sctp_packet *packet; 6327 struct sctp_chunk *abort; 6328 6329 packet = sctp_ootb_pkt_new(net, asoc, chunk); 6330 6331 if (packet) { 6332 /* Make an ABORT. 6333 * The T bit will be set if the asoc is NULL. 6334 */ 6335 abort = sctp_make_abort(asoc, chunk, paylen); 6336 if (!abort) { 6337 sctp_ootb_pkt_free(packet); 6338 return NULL; 6339 } 6340 6341 /* Reflect vtag if T-Bit is set */ 6342 if (sctp_test_T_bit(abort)) 6343 packet->vtag = ntohl(chunk->sctp_hdr->vtag); 6344 6345 /* Add specified error causes, i.e., payload, to the 6346 * end of the chunk. 6347 */ 6348 sctp_addto_chunk(abort, paylen, payload); 6349 6350 /* Set the skb to the belonging sock for accounting. */ 6351 abort->skb->sk = ep->base.sk; 6352 6353 sctp_packet_append_chunk(packet, abort); 6354 6355 } 6356 6357 return packet; 6358 } 6359 6360 /* Allocate a packet for responding in the OOTB conditions. */ 6361 static struct sctp_packet *sctp_ootb_pkt_new( 6362 struct net *net, 6363 const struct sctp_association *asoc, 6364 const struct sctp_chunk *chunk) 6365 { 6366 struct sctp_transport *transport; 6367 struct sctp_packet *packet; 6368 __u16 sport, dport; 6369 __u32 vtag; 6370 6371 /* Get the source and destination port from the inbound packet. */ 6372 sport = ntohs(chunk->sctp_hdr->dest); 6373 dport = ntohs(chunk->sctp_hdr->source); 6374 6375 /* The V-tag is going to be the same as the inbound packet if no 6376 * association exists, otherwise, use the peer's vtag. 6377 */ 6378 if (asoc) { 6379 /* Special case the INIT-ACK as there is no peer's vtag 6380 * yet. 6381 */ 6382 switch (chunk->chunk_hdr->type) { 6383 case SCTP_CID_INIT: 6384 case SCTP_CID_INIT_ACK: 6385 { 6386 struct sctp_initack_chunk *initack; 6387 6388 initack = (struct sctp_initack_chunk *)chunk->chunk_hdr; 6389 vtag = ntohl(initack->init_hdr.init_tag); 6390 break; 6391 } 6392 default: 6393 vtag = asoc->peer.i.init_tag; 6394 break; 6395 } 6396 } else { 6397 /* Special case the INIT and stale COOKIE_ECHO as there is no 6398 * vtag yet. 6399 */ 6400 switch (chunk->chunk_hdr->type) { 6401 case SCTP_CID_INIT: 6402 { 6403 struct sctp_init_chunk *init; 6404 6405 init = (struct sctp_init_chunk *)chunk->chunk_hdr; 6406 vtag = ntohl(init->init_hdr.init_tag); 6407 break; 6408 } 6409 default: 6410 vtag = ntohl(chunk->sctp_hdr->vtag); 6411 break; 6412 } 6413 } 6414 6415 /* Make a transport for the bucket, Eliza... */ 6416 transport = sctp_transport_new(net, sctp_source(chunk), GFP_ATOMIC); 6417 if (!transport) 6418 goto nomem; 6419 6420 transport->encap_port = SCTP_INPUT_CB(chunk->skb)->encap_port; 6421 6422 /* Cache a route for the transport with the chunk's destination as 6423 * the source address. 6424 */ 6425 sctp_transport_route(transport, (union sctp_addr *)&chunk->dest, 6426 sctp_sk(net->sctp.ctl_sock)); 6427 6428 packet = &transport->packet; 6429 sctp_packet_init(packet, transport, sport, dport); 6430 sctp_packet_config(packet, vtag, 0); 6431 6432 return packet; 6433 6434 nomem: 6435 return NULL; 6436 } 6437 6438 /* Free the packet allocated earlier for responding in the OOTB condition. */ 6439 void sctp_ootb_pkt_free(struct sctp_packet *packet) 6440 { 6441 sctp_transport_free(packet->transport); 6442 } 6443 6444 /* Send a stale cookie error when a invalid COOKIE ECHO chunk is found */ 6445 static void sctp_send_stale_cookie_err(struct net *net, 6446 const struct sctp_endpoint *ep, 6447 const struct sctp_association *asoc, 6448 const struct sctp_chunk *chunk, 6449 struct sctp_cmd_seq *commands, 6450 struct sctp_chunk *err_chunk) 6451 { 6452 struct sctp_packet *packet; 6453 6454 if (err_chunk) { 6455 packet = sctp_ootb_pkt_new(net, asoc, chunk); 6456 if (packet) { 6457 struct sctp_signed_cookie *cookie; 6458 6459 /* Override the OOTB vtag from the cookie. */ 6460 cookie = chunk->subh.cookie_hdr; 6461 packet->vtag = cookie->c.peer_vtag; 6462 6463 /* Set the skb to the belonging sock for accounting. */ 6464 err_chunk->skb->sk = ep->base.sk; 6465 sctp_packet_append_chunk(packet, err_chunk); 6466 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT, 6467 SCTP_PACKET(packet)); 6468 SCTP_INC_STATS(net, SCTP_MIB_OUTCTRLCHUNKS); 6469 } else 6470 sctp_chunk_free (err_chunk); 6471 } 6472 } 6473 6474 6475 /* Process a data chunk */ 6476 static int sctp_eat_data(const struct sctp_association *asoc, 6477 struct sctp_chunk *chunk, 6478 struct sctp_cmd_seq *commands) 6479 { 6480 struct sctp_tsnmap *map = (struct sctp_tsnmap *)&asoc->peer.tsn_map; 6481 struct sock *sk = asoc->base.sk; 6482 struct net *net = sock_net(sk); 6483 struct sctp_datahdr *data_hdr; 6484 struct sctp_chunk *err; 6485 enum sctp_verb deliver; 6486 size_t datalen; 6487 __u32 tsn; 6488 int tmp; 6489 6490 data_hdr = (struct sctp_datahdr *)chunk->skb->data; 6491 chunk->subh.data_hdr = data_hdr; 6492 skb_pull(chunk->skb, sctp_datahdr_len(&asoc->stream)); 6493 6494 tsn = ntohl(data_hdr->tsn); 6495 pr_debug("%s: TSN 0x%x\n", __func__, tsn); 6496 6497 /* ASSERT: Now skb->data is really the user data. */ 6498 6499 /* Process ECN based congestion. 6500 * 6501 * Since the chunk structure is reused for all chunks within 6502 * a packet, we use ecn_ce_done to track if we've already 6503 * done CE processing for this packet. 6504 * 6505 * We need to do ECN processing even if we plan to discard the 6506 * chunk later. 6507 */ 6508 6509 if (asoc->peer.ecn_capable && !chunk->ecn_ce_done) { 6510 struct sctp_af *af = SCTP_INPUT_CB(chunk->skb)->af; 6511 chunk->ecn_ce_done = 1; 6512 6513 if (af->is_ce(sctp_gso_headskb(chunk->skb))) { 6514 /* Do real work as side effect. */ 6515 sctp_add_cmd_sf(commands, SCTP_CMD_ECN_CE, 6516 SCTP_U32(tsn)); 6517 } 6518 } 6519 6520 tmp = sctp_tsnmap_check(&asoc->peer.tsn_map, tsn); 6521 if (tmp < 0) { 6522 /* The TSN is too high--silently discard the chunk and 6523 * count on it getting retransmitted later. 6524 */ 6525 if (chunk->asoc) 6526 chunk->asoc->stats.outofseqtsns++; 6527 return SCTP_IERROR_HIGH_TSN; 6528 } else if (tmp > 0) { 6529 /* This is a duplicate. Record it. */ 6530 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_DUP, SCTP_U32(tsn)); 6531 return SCTP_IERROR_DUP_TSN; 6532 } 6533 6534 /* This is a new TSN. */ 6535 6536 /* Discard if there is no room in the receive window. 6537 * Actually, allow a little bit of overflow (up to a MTU). 6538 */ 6539 datalen = ntohs(chunk->chunk_hdr->length); 6540 datalen -= sctp_datachk_len(&asoc->stream); 6541 6542 deliver = SCTP_CMD_CHUNK_ULP; 6543 6544 /* Think about partial delivery. */ 6545 if ((datalen >= asoc->rwnd) && (!asoc->ulpq.pd_mode)) { 6546 6547 /* Even if we don't accept this chunk there is 6548 * memory pressure. 6549 */ 6550 sctp_add_cmd_sf(commands, SCTP_CMD_PART_DELIVER, SCTP_NULL()); 6551 } 6552 6553 /* Spill over rwnd a little bit. Note: While allowed, this spill over 6554 * seems a bit troublesome in that frag_point varies based on 6555 * PMTU. In cases, such as loopback, this might be a rather 6556 * large spill over. 6557 */ 6558 if ((!chunk->data_accepted) && (!asoc->rwnd || asoc->rwnd_over || 6559 (datalen > asoc->rwnd + asoc->frag_point))) { 6560 6561 /* If this is the next TSN, consider reneging to make 6562 * room. Note: Playing nice with a confused sender. A 6563 * malicious sender can still eat up all our buffer 6564 * space and in the future we may want to detect and 6565 * do more drastic reneging. 6566 */ 6567 if (sctp_tsnmap_has_gap(map) && 6568 (sctp_tsnmap_get_ctsn(map) + 1) == tsn) { 6569 pr_debug("%s: reneging for tsn:%u\n", __func__, tsn); 6570 deliver = SCTP_CMD_RENEGE; 6571 } else { 6572 pr_debug("%s: discard tsn:%u len:%zu, rwnd:%d\n", 6573 __func__, tsn, datalen, asoc->rwnd); 6574 6575 return SCTP_IERROR_IGNORE_TSN; 6576 } 6577 } 6578 6579 /* 6580 * Also try to renege to limit our memory usage in the event that 6581 * we are under memory pressure 6582 * If we can't renege, don't worry about it, the sk_rmem_schedule 6583 * in sctp_ulpevent_make_rcvmsg will drop the frame if we grow our 6584 * memory usage too much 6585 */ 6586 if (sk_under_memory_pressure(sk)) { 6587 if (sctp_tsnmap_has_gap(map) && 6588 (sctp_tsnmap_get_ctsn(map) + 1) == tsn) { 6589 pr_debug("%s: under pressure, reneging for tsn:%u\n", 6590 __func__, tsn); 6591 deliver = SCTP_CMD_RENEGE; 6592 } else { 6593 sk_mem_reclaim(sk); 6594 } 6595 } 6596 6597 /* 6598 * Section 3.3.10.9 No User Data (9) 6599 * 6600 * Cause of error 6601 * --------------- 6602 * No User Data: This error cause is returned to the originator of a 6603 * DATA chunk if a received DATA chunk has no user data. 6604 */ 6605 if (unlikely(0 == datalen)) { 6606 err = sctp_make_abort_no_data(asoc, chunk, tsn); 6607 if (err) { 6608 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 6609 SCTP_CHUNK(err)); 6610 } 6611 /* We are going to ABORT, so we might as well stop 6612 * processing the rest of the chunks in the packet. 6613 */ 6614 sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL()); 6615 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR, 6616 SCTP_ERROR(ECONNABORTED)); 6617 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED, 6618 SCTP_PERR(SCTP_ERROR_NO_DATA)); 6619 SCTP_INC_STATS(net, SCTP_MIB_ABORTEDS); 6620 SCTP_DEC_STATS(net, SCTP_MIB_CURRESTAB); 6621 return SCTP_IERROR_NO_DATA; 6622 } 6623 6624 chunk->data_accepted = 1; 6625 6626 /* Note: Some chunks may get overcounted (if we drop) or overcounted 6627 * if we renege and the chunk arrives again. 6628 */ 6629 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) { 6630 SCTP_INC_STATS(net, SCTP_MIB_INUNORDERCHUNKS); 6631 if (chunk->asoc) 6632 chunk->asoc->stats.iuodchunks++; 6633 } else { 6634 SCTP_INC_STATS(net, SCTP_MIB_INORDERCHUNKS); 6635 if (chunk->asoc) 6636 chunk->asoc->stats.iodchunks++; 6637 } 6638 6639 /* RFC 2960 6.5 Stream Identifier and Stream Sequence Number 6640 * 6641 * If an endpoint receive a DATA chunk with an invalid stream 6642 * identifier, it shall acknowledge the reception of the DATA chunk 6643 * following the normal procedure, immediately send an ERROR chunk 6644 * with cause set to "Invalid Stream Identifier" (See Section 3.3.10) 6645 * and discard the DATA chunk. 6646 */ 6647 if (ntohs(data_hdr->stream) >= asoc->stream.incnt) { 6648 /* Mark tsn as received even though we drop it */ 6649 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_TSN, SCTP_U32(tsn)); 6650 6651 err = sctp_make_op_error(asoc, chunk, SCTP_ERROR_INV_STRM, 6652 &data_hdr->stream, 6653 sizeof(data_hdr->stream), 6654 sizeof(u16)); 6655 if (err) 6656 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, 6657 SCTP_CHUNK(err)); 6658 return SCTP_IERROR_BAD_STREAM; 6659 } 6660 6661 /* Check to see if the SSN is possible for this TSN. 6662 * The biggest gap we can record is 4K wide. Since SSNs wrap 6663 * at an unsigned short, there is no way that an SSN can 6664 * wrap and for a valid TSN. We can simply check if the current 6665 * SSN is smaller then the next expected one. If it is, it wrapped 6666 * and is invalid. 6667 */ 6668 if (!asoc->stream.si->validate_data(chunk)) 6669 return SCTP_IERROR_PROTO_VIOLATION; 6670 6671 /* Send the data up to the user. Note: Schedule the 6672 * SCTP_CMD_CHUNK_ULP cmd before the SCTP_CMD_GEN_SACK, as the SACK 6673 * chunk needs the updated rwnd. 6674 */ 6675 sctp_add_cmd_sf(commands, deliver, SCTP_CHUNK(chunk)); 6676 6677 return SCTP_IERROR_NO_ERROR; 6678 } 6679