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 Intel Corp. 7 * Copyright (c) 2001 Nokia, Inc. 8 * Copyright (c) 2001 La Monte H.P. Yarroll 9 * 10 * These functions manipulate an sctp event. The struct ulpevent is used 11 * to carry notifications and data to the ULP (sockets). 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 * Jon Grimm <jgrimm@us.ibm.com> 19 * La Monte H.P. Yarroll <piggy@acm.org> 20 * Ardelle Fan <ardelle.fan@intel.com> 21 * Sridhar Samudrala <sri@us.ibm.com> 22 */ 23 24 #include <linux/slab.h> 25 #include <linux/types.h> 26 #include <linux/skbuff.h> 27 #include <net/sctp/structs.h> 28 #include <net/sctp/sctp.h> 29 #include <net/sctp/sm.h> 30 31 static void sctp_ulpevent_receive_data(struct sctp_ulpevent *event, 32 struct sctp_association *asoc); 33 static void sctp_ulpevent_release_data(struct sctp_ulpevent *event); 34 static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event); 35 36 37 /* Initialize an ULP event from an given skb. */ 38 static void sctp_ulpevent_init(struct sctp_ulpevent *event, 39 __u16 msg_flags, 40 unsigned int len) 41 { 42 memset(event, 0, sizeof(struct sctp_ulpevent)); 43 event->msg_flags = msg_flags; 44 event->rmem_len = len; 45 } 46 47 /* Create a new sctp_ulpevent. */ 48 static struct sctp_ulpevent *sctp_ulpevent_new(int size, __u16 msg_flags, 49 gfp_t gfp) 50 { 51 struct sctp_ulpevent *event; 52 struct sk_buff *skb; 53 54 skb = alloc_skb(size, gfp); 55 if (!skb) 56 goto fail; 57 58 event = sctp_skb2event(skb); 59 sctp_ulpevent_init(event, msg_flags, skb->truesize); 60 61 return event; 62 63 fail: 64 return NULL; 65 } 66 67 /* Is this a MSG_NOTIFICATION? */ 68 int sctp_ulpevent_is_notification(const struct sctp_ulpevent *event) 69 { 70 return MSG_NOTIFICATION == (event->msg_flags & MSG_NOTIFICATION); 71 } 72 73 /* Hold the association in case the msg_name needs read out of 74 * the association. 75 */ 76 static inline void sctp_ulpevent_set_owner(struct sctp_ulpevent *event, 77 const struct sctp_association *asoc) 78 { 79 struct sctp_chunk *chunk = event->chunk; 80 struct sk_buff *skb; 81 82 /* Cast away the const, as we are just wanting to 83 * bump the reference count. 84 */ 85 sctp_association_hold((struct sctp_association *)asoc); 86 skb = sctp_event2skb(event); 87 event->asoc = (struct sctp_association *)asoc; 88 atomic_add(event->rmem_len, &event->asoc->rmem_alloc); 89 sctp_skb_set_owner_r(skb, asoc->base.sk); 90 if (chunk && chunk->head_skb && !chunk->head_skb->sk) 91 chunk->head_skb->sk = asoc->base.sk; 92 } 93 94 /* A simple destructor to give up the reference to the association. */ 95 static inline void sctp_ulpevent_release_owner(struct sctp_ulpevent *event) 96 { 97 struct sctp_association *asoc = event->asoc; 98 99 atomic_sub(event->rmem_len, &asoc->rmem_alloc); 100 sctp_association_put(asoc); 101 } 102 103 /* Create and initialize an SCTP_ASSOC_CHANGE event. 104 * 105 * 5.3.1.1 SCTP_ASSOC_CHANGE 106 * 107 * Communication notifications inform the ULP that an SCTP association 108 * has either begun or ended. The identifier for a new association is 109 * provided by this notification. 110 * 111 * Note: There is no field checking here. If a field is unused it will be 112 * zero'd out. 113 */ 114 struct sctp_ulpevent *sctp_ulpevent_make_assoc_change( 115 const struct sctp_association *asoc, 116 __u16 flags, __u16 state, __u16 error, __u16 outbound, 117 __u16 inbound, struct sctp_chunk *chunk, gfp_t gfp) 118 { 119 struct sctp_ulpevent *event; 120 struct sctp_assoc_change *sac; 121 struct sk_buff *skb; 122 123 /* If the lower layer passed in the chunk, it will be 124 * an ABORT, so we need to include it in the sac_info. 125 */ 126 if (chunk) { 127 /* Copy the chunk data to a new skb and reserve enough 128 * head room to use as notification. 129 */ 130 skb = skb_copy_expand(chunk->skb, 131 sizeof(struct sctp_assoc_change), 0, gfp); 132 133 if (!skb) 134 goto fail; 135 136 /* Embed the event fields inside the cloned skb. */ 137 event = sctp_skb2event(skb); 138 sctp_ulpevent_init(event, MSG_NOTIFICATION, skb->truesize); 139 140 /* Include the notification structure */ 141 sac = skb_push(skb, sizeof(struct sctp_assoc_change)); 142 143 /* Trim the buffer to the right length. */ 144 skb_trim(skb, sizeof(struct sctp_assoc_change) + 145 ntohs(chunk->chunk_hdr->length) - 146 sizeof(struct sctp_chunkhdr)); 147 } else { 148 event = sctp_ulpevent_new(sizeof(struct sctp_assoc_change), 149 MSG_NOTIFICATION, gfp); 150 if (!event) 151 goto fail; 152 153 skb = sctp_event2skb(event); 154 sac = skb_put(skb, sizeof(struct sctp_assoc_change)); 155 } 156 157 /* Socket Extensions for SCTP 158 * 5.3.1.1 SCTP_ASSOC_CHANGE 159 * 160 * sac_type: 161 * It should be SCTP_ASSOC_CHANGE. 162 */ 163 sac->sac_type = SCTP_ASSOC_CHANGE; 164 165 /* Socket Extensions for SCTP 166 * 5.3.1.1 SCTP_ASSOC_CHANGE 167 * 168 * sac_state: 32 bits (signed integer) 169 * This field holds one of a number of values that communicate the 170 * event that happened to the association. 171 */ 172 sac->sac_state = state; 173 174 /* Socket Extensions for SCTP 175 * 5.3.1.1 SCTP_ASSOC_CHANGE 176 * 177 * sac_flags: 16 bits (unsigned integer) 178 * Currently unused. 179 */ 180 sac->sac_flags = 0; 181 182 /* Socket Extensions for SCTP 183 * 5.3.1.1 SCTP_ASSOC_CHANGE 184 * 185 * sac_length: sizeof (__u32) 186 * This field is the total length of the notification data, including 187 * the notification header. 188 */ 189 sac->sac_length = skb->len; 190 191 /* Socket Extensions for SCTP 192 * 5.3.1.1 SCTP_ASSOC_CHANGE 193 * 194 * sac_error: 32 bits (signed integer) 195 * 196 * If the state was reached due to a error condition (e.g. 197 * COMMUNICATION_LOST) any relevant error information is available in 198 * this field. This corresponds to the protocol error codes defined in 199 * [SCTP]. 200 */ 201 sac->sac_error = error; 202 203 /* Socket Extensions for SCTP 204 * 5.3.1.1 SCTP_ASSOC_CHANGE 205 * 206 * sac_outbound_streams: 16 bits (unsigned integer) 207 * sac_inbound_streams: 16 bits (unsigned integer) 208 * 209 * The maximum number of streams allowed in each direction are 210 * available in sac_outbound_streams and sac_inbound streams. 211 */ 212 sac->sac_outbound_streams = outbound; 213 sac->sac_inbound_streams = inbound; 214 215 /* Socket Extensions for SCTP 216 * 5.3.1.1 SCTP_ASSOC_CHANGE 217 * 218 * sac_assoc_id: sizeof (sctp_assoc_t) 219 * 220 * The association id field, holds the identifier for the association. 221 * All notifications for a given association have the same association 222 * identifier. For TCP style socket, this field is ignored. 223 */ 224 sctp_ulpevent_set_owner(event, asoc); 225 sac->sac_assoc_id = sctp_assoc2id(asoc); 226 227 return event; 228 229 fail: 230 return NULL; 231 } 232 233 /* Create and initialize an SCTP_PEER_ADDR_CHANGE event. 234 * 235 * Socket Extensions for SCTP - draft-01 236 * 5.3.1.2 SCTP_PEER_ADDR_CHANGE 237 * 238 * When a destination address on a multi-homed peer encounters a change 239 * an interface details event is sent. 240 */ 241 static struct sctp_ulpevent *sctp_ulpevent_make_peer_addr_change( 242 const struct sctp_association *asoc, 243 const struct sockaddr_storage *aaddr, 244 int flags, int state, int error, gfp_t gfp) 245 { 246 struct sctp_ulpevent *event; 247 struct sctp_paddr_change *spc; 248 struct sk_buff *skb; 249 250 event = sctp_ulpevent_new(sizeof(struct sctp_paddr_change), 251 MSG_NOTIFICATION, gfp); 252 if (!event) 253 goto fail; 254 255 skb = sctp_event2skb(event); 256 spc = skb_put(skb, sizeof(struct sctp_paddr_change)); 257 258 /* Sockets API Extensions for SCTP 259 * Section 5.3.1.2 SCTP_PEER_ADDR_CHANGE 260 * 261 * spc_type: 262 * 263 * It should be SCTP_PEER_ADDR_CHANGE. 264 */ 265 spc->spc_type = SCTP_PEER_ADDR_CHANGE; 266 267 /* Sockets API Extensions for SCTP 268 * Section 5.3.1.2 SCTP_PEER_ADDR_CHANGE 269 * 270 * spc_length: sizeof (__u32) 271 * 272 * This field is the total length of the notification data, including 273 * the notification header. 274 */ 275 spc->spc_length = sizeof(struct sctp_paddr_change); 276 277 /* Sockets API Extensions for SCTP 278 * Section 5.3.1.2 SCTP_PEER_ADDR_CHANGE 279 * 280 * spc_flags: 16 bits (unsigned integer) 281 * Currently unused. 282 */ 283 spc->spc_flags = 0; 284 285 /* Sockets API Extensions for SCTP 286 * Section 5.3.1.2 SCTP_PEER_ADDR_CHANGE 287 * 288 * spc_state: 32 bits (signed integer) 289 * 290 * This field holds one of a number of values that communicate the 291 * event that happened to the address. 292 */ 293 spc->spc_state = state; 294 295 /* Sockets API Extensions for SCTP 296 * Section 5.3.1.2 SCTP_PEER_ADDR_CHANGE 297 * 298 * spc_error: 32 bits (signed integer) 299 * 300 * If the state was reached due to any error condition (e.g. 301 * ADDRESS_UNREACHABLE) any relevant error information is available in 302 * this field. 303 */ 304 spc->spc_error = error; 305 306 /* Socket Extensions for SCTP 307 * 5.3.1.1 SCTP_ASSOC_CHANGE 308 * 309 * spc_assoc_id: sizeof (sctp_assoc_t) 310 * 311 * The association id field, holds the identifier for the association. 312 * All notifications for a given association have the same association 313 * identifier. For TCP style socket, this field is ignored. 314 */ 315 sctp_ulpevent_set_owner(event, asoc); 316 spc->spc_assoc_id = sctp_assoc2id(asoc); 317 318 /* Sockets API Extensions for SCTP 319 * Section 5.3.1.2 SCTP_PEER_ADDR_CHANGE 320 * 321 * spc_aaddr: sizeof (struct sockaddr_storage) 322 * 323 * The affected address field, holds the remote peer's address that is 324 * encountering the change of state. 325 */ 326 memcpy(&spc->spc_aaddr, aaddr, sizeof(struct sockaddr_storage)); 327 328 /* Map ipv4 address into v4-mapped-on-v6 address. */ 329 sctp_get_pf_specific(asoc->base.sk->sk_family)->addr_to_user( 330 sctp_sk(asoc->base.sk), 331 (union sctp_addr *)&spc->spc_aaddr); 332 333 return event; 334 335 fail: 336 return NULL; 337 } 338 339 void sctp_ulpevent_nofity_peer_addr_change(struct sctp_transport *transport, 340 int state, int error) 341 { 342 struct sctp_association *asoc = transport->asoc; 343 struct sockaddr_storage addr; 344 struct sctp_ulpevent *event; 345 346 memset(&addr, 0, sizeof(struct sockaddr_storage)); 347 memcpy(&addr, &transport->ipaddr, transport->af_specific->sockaddr_len); 348 349 event = sctp_ulpevent_make_peer_addr_change(asoc, &addr, 0, state, 350 error, GFP_ATOMIC); 351 if (event) 352 asoc->stream.si->enqueue_event(&asoc->ulpq, event); 353 } 354 355 /* Create and initialize an SCTP_REMOTE_ERROR notification. 356 * 357 * Note: This assumes that the chunk->skb->data already points to the 358 * operation error payload. 359 * 360 * Socket Extensions for SCTP - draft-01 361 * 5.3.1.3 SCTP_REMOTE_ERROR 362 * 363 * A remote peer may send an Operational Error message to its peer. 364 * This message indicates a variety of error conditions on an 365 * association. The entire error TLV as it appears on the wire is 366 * included in a SCTP_REMOTE_ERROR event. Please refer to the SCTP 367 * specification [SCTP] and any extensions for a list of possible 368 * error formats. 369 */ 370 struct sctp_ulpevent * 371 sctp_ulpevent_make_remote_error(const struct sctp_association *asoc, 372 struct sctp_chunk *chunk, __u16 flags, 373 gfp_t gfp) 374 { 375 struct sctp_remote_error *sre; 376 struct sctp_ulpevent *event; 377 struct sctp_errhdr *ch; 378 struct sk_buff *skb; 379 __be16 cause; 380 int elen; 381 382 ch = (struct sctp_errhdr *)(chunk->skb->data); 383 cause = ch->cause; 384 elen = SCTP_PAD4(ntohs(ch->length)) - sizeof(*ch); 385 386 /* Pull off the ERROR header. */ 387 skb_pull(chunk->skb, sizeof(*ch)); 388 389 /* Copy the skb to a new skb with room for us to prepend 390 * notification with. 391 */ 392 skb = skb_copy_expand(chunk->skb, sizeof(*sre), 0, gfp); 393 394 /* Pull off the rest of the cause TLV from the chunk. */ 395 skb_pull(chunk->skb, elen); 396 if (!skb) 397 goto fail; 398 399 /* Embed the event fields inside the cloned skb. */ 400 event = sctp_skb2event(skb); 401 sctp_ulpevent_init(event, MSG_NOTIFICATION, skb->truesize); 402 403 sre = skb_push(skb, sizeof(*sre)); 404 405 /* Trim the buffer to the right length. */ 406 skb_trim(skb, sizeof(*sre) + elen); 407 408 /* RFC6458, Section 6.1.3. SCTP_REMOTE_ERROR */ 409 memset(sre, 0, sizeof(*sre)); 410 sre->sre_type = SCTP_REMOTE_ERROR; 411 sre->sre_flags = 0; 412 sre->sre_length = skb->len; 413 sre->sre_error = cause; 414 sctp_ulpevent_set_owner(event, asoc); 415 sre->sre_assoc_id = sctp_assoc2id(asoc); 416 417 return event; 418 fail: 419 return NULL; 420 } 421 422 /* Create and initialize a SCTP_SEND_FAILED notification. 423 * 424 * Socket Extensions for SCTP - draft-01 425 * 5.3.1.4 SCTP_SEND_FAILED 426 */ 427 struct sctp_ulpevent *sctp_ulpevent_make_send_failed( 428 const struct sctp_association *asoc, struct sctp_chunk *chunk, 429 __u16 flags, __u32 error, gfp_t gfp) 430 { 431 struct sctp_ulpevent *event; 432 struct sctp_send_failed *ssf; 433 struct sk_buff *skb; 434 435 /* Pull off any padding. */ 436 int len = ntohs(chunk->chunk_hdr->length); 437 438 /* Make skb with more room so we can prepend notification. */ 439 skb = skb_copy_expand(chunk->skb, 440 sizeof(struct sctp_send_failed), /* headroom */ 441 0, /* tailroom */ 442 gfp); 443 if (!skb) 444 goto fail; 445 446 /* Pull off the common chunk header and DATA header. */ 447 skb_pull(skb, sctp_datachk_len(&asoc->stream)); 448 len -= sctp_datachk_len(&asoc->stream); 449 450 /* Embed the event fields inside the cloned skb. */ 451 event = sctp_skb2event(skb); 452 sctp_ulpevent_init(event, MSG_NOTIFICATION, skb->truesize); 453 454 ssf = skb_push(skb, sizeof(struct sctp_send_failed)); 455 456 /* Socket Extensions for SCTP 457 * 5.3.1.4 SCTP_SEND_FAILED 458 * 459 * ssf_type: 460 * It should be SCTP_SEND_FAILED. 461 */ 462 ssf->ssf_type = SCTP_SEND_FAILED; 463 464 /* Socket Extensions for SCTP 465 * 5.3.1.4 SCTP_SEND_FAILED 466 * 467 * ssf_flags: 16 bits (unsigned integer) 468 * The flag value will take one of the following values 469 * 470 * SCTP_DATA_UNSENT - Indicates that the data was never put on 471 * the wire. 472 * 473 * SCTP_DATA_SENT - Indicates that the data was put on the wire. 474 * Note that this does not necessarily mean that the 475 * data was (or was not) successfully delivered. 476 */ 477 ssf->ssf_flags = flags; 478 479 /* Socket Extensions for SCTP 480 * 5.3.1.4 SCTP_SEND_FAILED 481 * 482 * ssf_length: sizeof (__u32) 483 * This field is the total length of the notification data, including 484 * the notification header. 485 */ 486 ssf->ssf_length = sizeof(struct sctp_send_failed) + len; 487 skb_trim(skb, ssf->ssf_length); 488 489 /* Socket Extensions for SCTP 490 * 5.3.1.4 SCTP_SEND_FAILED 491 * 492 * ssf_error: 16 bits (unsigned integer) 493 * This value represents the reason why the send failed, and if set, 494 * will be a SCTP protocol error code as defined in [SCTP] section 495 * 3.3.10. 496 */ 497 ssf->ssf_error = error; 498 499 /* Socket Extensions for SCTP 500 * 5.3.1.4 SCTP_SEND_FAILED 501 * 502 * ssf_info: sizeof (struct sctp_sndrcvinfo) 503 * The original send information associated with the undelivered 504 * message. 505 */ 506 memcpy(&ssf->ssf_info, &chunk->sinfo, sizeof(struct sctp_sndrcvinfo)); 507 508 /* Per TSVWG discussion with Randy. Allow the application to 509 * reassemble a fragmented message. 510 */ 511 ssf->ssf_info.sinfo_flags = chunk->chunk_hdr->flags; 512 513 /* Socket Extensions for SCTP 514 * 5.3.1.4 SCTP_SEND_FAILED 515 * 516 * ssf_assoc_id: sizeof (sctp_assoc_t) 517 * The association id field, sf_assoc_id, holds the identifier for the 518 * association. All notifications for a given association have the 519 * same association identifier. For TCP style socket, this field is 520 * ignored. 521 */ 522 sctp_ulpevent_set_owner(event, asoc); 523 ssf->ssf_assoc_id = sctp_assoc2id(asoc); 524 return event; 525 526 fail: 527 return NULL; 528 } 529 530 struct sctp_ulpevent *sctp_ulpevent_make_send_failed_event( 531 const struct sctp_association *asoc, struct sctp_chunk *chunk, 532 __u16 flags, __u32 error, gfp_t gfp) 533 { 534 struct sctp_send_failed_event *ssf; 535 struct sctp_ulpevent *event; 536 struct sk_buff *skb; 537 int len; 538 539 skb = skb_copy_expand(chunk->skb, sizeof(*ssf), 0, gfp); 540 if (!skb) 541 return NULL; 542 543 len = ntohs(chunk->chunk_hdr->length); 544 len -= sctp_datachk_len(&asoc->stream); 545 546 skb_pull(skb, sctp_datachk_len(&asoc->stream)); 547 event = sctp_skb2event(skb); 548 sctp_ulpevent_init(event, MSG_NOTIFICATION, skb->truesize); 549 550 ssf = skb_push(skb, sizeof(*ssf)); 551 ssf->ssf_type = SCTP_SEND_FAILED_EVENT; 552 ssf->ssf_flags = flags; 553 ssf->ssf_length = sizeof(*ssf) + len; 554 skb_trim(skb, ssf->ssf_length); 555 ssf->ssf_error = error; 556 557 ssf->ssfe_info.snd_sid = chunk->sinfo.sinfo_stream; 558 ssf->ssfe_info.snd_ppid = chunk->sinfo.sinfo_ppid; 559 ssf->ssfe_info.snd_context = chunk->sinfo.sinfo_context; 560 ssf->ssfe_info.snd_assoc_id = chunk->sinfo.sinfo_assoc_id; 561 ssf->ssfe_info.snd_flags = chunk->chunk_hdr->flags; 562 563 sctp_ulpevent_set_owner(event, asoc); 564 ssf->ssf_assoc_id = sctp_assoc2id(asoc); 565 566 return event; 567 } 568 569 /* Create and initialize a SCTP_SHUTDOWN_EVENT notification. 570 * 571 * Socket Extensions for SCTP - draft-01 572 * 5.3.1.5 SCTP_SHUTDOWN_EVENT 573 */ 574 struct sctp_ulpevent *sctp_ulpevent_make_shutdown_event( 575 const struct sctp_association *asoc, 576 __u16 flags, gfp_t gfp) 577 { 578 struct sctp_ulpevent *event; 579 struct sctp_shutdown_event *sse; 580 struct sk_buff *skb; 581 582 event = sctp_ulpevent_new(sizeof(struct sctp_shutdown_event), 583 MSG_NOTIFICATION, gfp); 584 if (!event) 585 goto fail; 586 587 skb = sctp_event2skb(event); 588 sse = skb_put(skb, sizeof(struct sctp_shutdown_event)); 589 590 /* Socket Extensions for SCTP 591 * 5.3.1.5 SCTP_SHUTDOWN_EVENT 592 * 593 * sse_type 594 * It should be SCTP_SHUTDOWN_EVENT 595 */ 596 sse->sse_type = SCTP_SHUTDOWN_EVENT; 597 598 /* Socket Extensions for SCTP 599 * 5.3.1.5 SCTP_SHUTDOWN_EVENT 600 * 601 * sse_flags: 16 bits (unsigned integer) 602 * Currently unused. 603 */ 604 sse->sse_flags = 0; 605 606 /* Socket Extensions for SCTP 607 * 5.3.1.5 SCTP_SHUTDOWN_EVENT 608 * 609 * sse_length: sizeof (__u32) 610 * This field is the total length of the notification data, including 611 * the notification header. 612 */ 613 sse->sse_length = sizeof(struct sctp_shutdown_event); 614 615 /* Socket Extensions for SCTP 616 * 5.3.1.5 SCTP_SHUTDOWN_EVENT 617 * 618 * sse_assoc_id: sizeof (sctp_assoc_t) 619 * The association id field, holds the identifier for the association. 620 * All notifications for a given association have the same association 621 * identifier. For TCP style socket, this field is ignored. 622 */ 623 sctp_ulpevent_set_owner(event, asoc); 624 sse->sse_assoc_id = sctp_assoc2id(asoc); 625 626 return event; 627 628 fail: 629 return NULL; 630 } 631 632 /* Create and initialize a SCTP_ADAPTATION_INDICATION notification. 633 * 634 * Socket Extensions for SCTP 635 * 5.3.1.6 SCTP_ADAPTATION_INDICATION 636 */ 637 struct sctp_ulpevent *sctp_ulpevent_make_adaptation_indication( 638 const struct sctp_association *asoc, gfp_t gfp) 639 { 640 struct sctp_ulpevent *event; 641 struct sctp_adaptation_event *sai; 642 struct sk_buff *skb; 643 644 event = sctp_ulpevent_new(sizeof(struct sctp_adaptation_event), 645 MSG_NOTIFICATION, gfp); 646 if (!event) 647 goto fail; 648 649 skb = sctp_event2skb(event); 650 sai = skb_put(skb, sizeof(struct sctp_adaptation_event)); 651 652 sai->sai_type = SCTP_ADAPTATION_INDICATION; 653 sai->sai_flags = 0; 654 sai->sai_length = sizeof(struct sctp_adaptation_event); 655 sai->sai_adaptation_ind = asoc->peer.adaptation_ind; 656 sctp_ulpevent_set_owner(event, asoc); 657 sai->sai_assoc_id = sctp_assoc2id(asoc); 658 659 return event; 660 661 fail: 662 return NULL; 663 } 664 665 /* A message has been received. Package this message as a notification 666 * to pass it to the upper layers. Go ahead and calculate the sndrcvinfo 667 * even if filtered out later. 668 * 669 * Socket Extensions for SCTP 670 * 5.2.2 SCTP Header Information Structure (SCTP_SNDRCV) 671 */ 672 struct sctp_ulpevent *sctp_ulpevent_make_rcvmsg(struct sctp_association *asoc, 673 struct sctp_chunk *chunk, 674 gfp_t gfp) 675 { 676 struct sctp_ulpevent *event = NULL; 677 struct sk_buff *skb = chunk->skb; 678 struct sock *sk = asoc->base.sk; 679 size_t padding, datalen; 680 int rx_count; 681 682 /* 683 * check to see if we need to make space for this 684 * new skb, expand the rcvbuffer if needed, or drop 685 * the frame 686 */ 687 if (asoc->ep->rcvbuf_policy) 688 rx_count = atomic_read(&asoc->rmem_alloc); 689 else 690 rx_count = atomic_read(&sk->sk_rmem_alloc); 691 692 datalen = ntohs(chunk->chunk_hdr->length); 693 694 if (rx_count >= sk->sk_rcvbuf || !sk_rmem_schedule(sk, skb, datalen)) 695 goto fail; 696 697 /* Clone the original skb, sharing the data. */ 698 skb = skb_clone(chunk->skb, gfp); 699 if (!skb) 700 goto fail; 701 702 /* Now that all memory allocations for this chunk succeeded, we 703 * can mark it as received so the tsn_map is updated correctly. 704 */ 705 if (sctp_tsnmap_mark(&asoc->peer.tsn_map, 706 ntohl(chunk->subh.data_hdr->tsn), 707 chunk->transport)) 708 goto fail_mark; 709 710 /* First calculate the padding, so we don't inadvertently 711 * pass up the wrong length to the user. 712 * 713 * RFC 2960 - Section 3.2 Chunk Field Descriptions 714 * 715 * The total length of a chunk(including Type, Length and Value fields) 716 * MUST be a multiple of 4 bytes. If the length of the chunk is not a 717 * multiple of 4 bytes, the sender MUST pad the chunk with all zero 718 * bytes and this padding is not included in the chunk length field. 719 * The sender should never pad with more than 3 bytes. The receiver 720 * MUST ignore the padding bytes. 721 */ 722 padding = SCTP_PAD4(datalen) - datalen; 723 724 /* Fixup cloned skb with just this chunks data. */ 725 skb_trim(skb, chunk->chunk_end - padding - skb->data); 726 727 /* Embed the event fields inside the cloned skb. */ 728 event = sctp_skb2event(skb); 729 730 /* Initialize event with flags 0 and correct length 731 * Since this is a clone of the original skb, only account for 732 * the data of this chunk as other chunks will be accounted separately. 733 */ 734 sctp_ulpevent_init(event, 0, skb->len + sizeof(struct sk_buff)); 735 736 /* And hold the chunk as we need it for getting the IP headers 737 * later in recvmsg 738 */ 739 sctp_chunk_hold(chunk); 740 event->chunk = chunk; 741 742 sctp_ulpevent_receive_data(event, asoc); 743 744 event->stream = ntohs(chunk->subh.data_hdr->stream); 745 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) { 746 event->flags |= SCTP_UNORDERED; 747 event->cumtsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map); 748 } 749 event->tsn = ntohl(chunk->subh.data_hdr->tsn); 750 event->msg_flags |= chunk->chunk_hdr->flags; 751 752 return event; 753 754 fail_mark: 755 kfree_skb(skb); 756 fail: 757 return NULL; 758 } 759 760 /* Create a partial delivery related event. 761 * 762 * 5.3.1.7 SCTP_PARTIAL_DELIVERY_EVENT 763 * 764 * When a receiver is engaged in a partial delivery of a 765 * message this notification will be used to indicate 766 * various events. 767 */ 768 struct sctp_ulpevent *sctp_ulpevent_make_pdapi( 769 const struct sctp_association *asoc, 770 __u32 indication, __u32 sid, __u32 seq, 771 __u32 flags, gfp_t gfp) 772 { 773 struct sctp_ulpevent *event; 774 struct sctp_pdapi_event *pd; 775 struct sk_buff *skb; 776 777 event = sctp_ulpevent_new(sizeof(struct sctp_pdapi_event), 778 MSG_NOTIFICATION, gfp); 779 if (!event) 780 goto fail; 781 782 skb = sctp_event2skb(event); 783 pd = skb_put(skb, sizeof(struct sctp_pdapi_event)); 784 785 /* pdapi_type 786 * It should be SCTP_PARTIAL_DELIVERY_EVENT 787 * 788 * pdapi_flags: 16 bits (unsigned integer) 789 * Currently unused. 790 */ 791 pd->pdapi_type = SCTP_PARTIAL_DELIVERY_EVENT; 792 pd->pdapi_flags = flags; 793 pd->pdapi_stream = sid; 794 pd->pdapi_seq = seq; 795 796 /* pdapi_length: 32 bits (unsigned integer) 797 * 798 * This field is the total length of the notification data, including 799 * the notification header. It will generally be sizeof (struct 800 * sctp_pdapi_event). 801 */ 802 pd->pdapi_length = sizeof(struct sctp_pdapi_event); 803 804 /* pdapi_indication: 32 bits (unsigned integer) 805 * 806 * This field holds the indication being sent to the application. 807 */ 808 pd->pdapi_indication = indication; 809 810 /* pdapi_assoc_id: sizeof (sctp_assoc_t) 811 * 812 * The association id field, holds the identifier for the association. 813 */ 814 sctp_ulpevent_set_owner(event, asoc); 815 pd->pdapi_assoc_id = sctp_assoc2id(asoc); 816 817 return event; 818 fail: 819 return NULL; 820 } 821 822 struct sctp_ulpevent *sctp_ulpevent_make_authkey( 823 const struct sctp_association *asoc, __u16 key_id, 824 __u32 indication, gfp_t gfp) 825 { 826 struct sctp_ulpevent *event; 827 struct sctp_authkey_event *ak; 828 struct sk_buff *skb; 829 830 event = sctp_ulpevent_new(sizeof(struct sctp_authkey_event), 831 MSG_NOTIFICATION, gfp); 832 if (!event) 833 goto fail; 834 835 skb = sctp_event2skb(event); 836 ak = skb_put(skb, sizeof(struct sctp_authkey_event)); 837 838 ak->auth_type = SCTP_AUTHENTICATION_EVENT; 839 ak->auth_flags = 0; 840 ak->auth_length = sizeof(struct sctp_authkey_event); 841 842 ak->auth_keynumber = key_id; 843 ak->auth_altkeynumber = 0; 844 ak->auth_indication = indication; 845 846 /* 847 * The association id field, holds the identifier for the association. 848 */ 849 sctp_ulpevent_set_owner(event, asoc); 850 ak->auth_assoc_id = sctp_assoc2id(asoc); 851 852 return event; 853 fail: 854 return NULL; 855 } 856 857 /* 858 * Socket Extensions for SCTP 859 * 6.3.10. SCTP_SENDER_DRY_EVENT 860 */ 861 struct sctp_ulpevent *sctp_ulpevent_make_sender_dry_event( 862 const struct sctp_association *asoc, gfp_t gfp) 863 { 864 struct sctp_ulpevent *event; 865 struct sctp_sender_dry_event *sdry; 866 struct sk_buff *skb; 867 868 event = sctp_ulpevent_new(sizeof(struct sctp_sender_dry_event), 869 MSG_NOTIFICATION, gfp); 870 if (!event) 871 return NULL; 872 873 skb = sctp_event2skb(event); 874 sdry = skb_put(skb, sizeof(struct sctp_sender_dry_event)); 875 876 sdry->sender_dry_type = SCTP_SENDER_DRY_EVENT; 877 sdry->sender_dry_flags = 0; 878 sdry->sender_dry_length = sizeof(struct sctp_sender_dry_event); 879 sctp_ulpevent_set_owner(event, asoc); 880 sdry->sender_dry_assoc_id = sctp_assoc2id(asoc); 881 882 return event; 883 } 884 885 struct sctp_ulpevent *sctp_ulpevent_make_stream_reset_event( 886 const struct sctp_association *asoc, __u16 flags, __u16 stream_num, 887 __be16 *stream_list, gfp_t gfp) 888 { 889 struct sctp_stream_reset_event *sreset; 890 struct sctp_ulpevent *event; 891 struct sk_buff *skb; 892 int length, i; 893 894 length = sizeof(struct sctp_stream_reset_event) + 2 * stream_num; 895 event = sctp_ulpevent_new(length, MSG_NOTIFICATION, gfp); 896 if (!event) 897 return NULL; 898 899 skb = sctp_event2skb(event); 900 sreset = skb_put(skb, length); 901 902 sreset->strreset_type = SCTP_STREAM_RESET_EVENT; 903 sreset->strreset_flags = flags; 904 sreset->strreset_length = length; 905 sctp_ulpevent_set_owner(event, asoc); 906 sreset->strreset_assoc_id = sctp_assoc2id(asoc); 907 908 for (i = 0; i < stream_num; i++) 909 sreset->strreset_stream_list[i] = ntohs(stream_list[i]); 910 911 return event; 912 } 913 914 struct sctp_ulpevent *sctp_ulpevent_make_assoc_reset_event( 915 const struct sctp_association *asoc, __u16 flags, __u32 local_tsn, 916 __u32 remote_tsn, gfp_t gfp) 917 { 918 struct sctp_assoc_reset_event *areset; 919 struct sctp_ulpevent *event; 920 struct sk_buff *skb; 921 922 event = sctp_ulpevent_new(sizeof(struct sctp_assoc_reset_event), 923 MSG_NOTIFICATION, gfp); 924 if (!event) 925 return NULL; 926 927 skb = sctp_event2skb(event); 928 areset = skb_put(skb, sizeof(struct sctp_assoc_reset_event)); 929 930 areset->assocreset_type = SCTP_ASSOC_RESET_EVENT; 931 areset->assocreset_flags = flags; 932 areset->assocreset_length = sizeof(struct sctp_assoc_reset_event); 933 sctp_ulpevent_set_owner(event, asoc); 934 areset->assocreset_assoc_id = sctp_assoc2id(asoc); 935 areset->assocreset_local_tsn = local_tsn; 936 areset->assocreset_remote_tsn = remote_tsn; 937 938 return event; 939 } 940 941 struct sctp_ulpevent *sctp_ulpevent_make_stream_change_event( 942 const struct sctp_association *asoc, __u16 flags, 943 __u32 strchange_instrms, __u32 strchange_outstrms, gfp_t gfp) 944 { 945 struct sctp_stream_change_event *schange; 946 struct sctp_ulpevent *event; 947 struct sk_buff *skb; 948 949 event = sctp_ulpevent_new(sizeof(struct sctp_stream_change_event), 950 MSG_NOTIFICATION, gfp); 951 if (!event) 952 return NULL; 953 954 skb = sctp_event2skb(event); 955 schange = skb_put(skb, sizeof(struct sctp_stream_change_event)); 956 957 schange->strchange_type = SCTP_STREAM_CHANGE_EVENT; 958 schange->strchange_flags = flags; 959 schange->strchange_length = sizeof(struct sctp_stream_change_event); 960 sctp_ulpevent_set_owner(event, asoc); 961 schange->strchange_assoc_id = sctp_assoc2id(asoc); 962 schange->strchange_instrms = strchange_instrms; 963 schange->strchange_outstrms = strchange_outstrms; 964 965 return event; 966 } 967 968 /* Return the notification type, assuming this is a notification 969 * event. 970 */ 971 __u16 sctp_ulpevent_get_notification_type(const struct sctp_ulpevent *event) 972 { 973 union sctp_notification *notification; 974 struct sk_buff *skb; 975 976 skb = sctp_event2skb(event); 977 notification = (union sctp_notification *) skb->data; 978 return notification->sn_header.sn_type; 979 } 980 981 /* RFC6458, Section 5.3.2. SCTP Header Information Structure 982 * (SCTP_SNDRCV, DEPRECATED) 983 */ 984 void sctp_ulpevent_read_sndrcvinfo(const struct sctp_ulpevent *event, 985 struct msghdr *msghdr) 986 { 987 struct sctp_sndrcvinfo sinfo; 988 989 if (sctp_ulpevent_is_notification(event)) 990 return; 991 992 memset(&sinfo, 0, sizeof(sinfo)); 993 sinfo.sinfo_stream = event->stream; 994 sinfo.sinfo_ssn = event->ssn; 995 sinfo.sinfo_ppid = event->ppid; 996 sinfo.sinfo_flags = event->flags; 997 sinfo.sinfo_tsn = event->tsn; 998 sinfo.sinfo_cumtsn = event->cumtsn; 999 sinfo.sinfo_assoc_id = sctp_assoc2id(event->asoc); 1000 /* Context value that is set via SCTP_CONTEXT socket option. */ 1001 sinfo.sinfo_context = event->asoc->default_rcv_context; 1002 /* These fields are not used while receiving. */ 1003 sinfo.sinfo_timetolive = 0; 1004 1005 put_cmsg(msghdr, IPPROTO_SCTP, SCTP_SNDRCV, 1006 sizeof(sinfo), &sinfo); 1007 } 1008 1009 /* RFC6458, Section 5.3.5 SCTP Receive Information Structure 1010 * (SCTP_SNDRCV) 1011 */ 1012 void sctp_ulpevent_read_rcvinfo(const struct sctp_ulpevent *event, 1013 struct msghdr *msghdr) 1014 { 1015 struct sctp_rcvinfo rinfo; 1016 1017 if (sctp_ulpevent_is_notification(event)) 1018 return; 1019 1020 memset(&rinfo, 0, sizeof(struct sctp_rcvinfo)); 1021 rinfo.rcv_sid = event->stream; 1022 rinfo.rcv_ssn = event->ssn; 1023 rinfo.rcv_ppid = event->ppid; 1024 rinfo.rcv_flags = event->flags; 1025 rinfo.rcv_tsn = event->tsn; 1026 rinfo.rcv_cumtsn = event->cumtsn; 1027 rinfo.rcv_assoc_id = sctp_assoc2id(event->asoc); 1028 rinfo.rcv_context = event->asoc->default_rcv_context; 1029 1030 put_cmsg(msghdr, IPPROTO_SCTP, SCTP_RCVINFO, 1031 sizeof(rinfo), &rinfo); 1032 } 1033 1034 /* RFC6458, Section 5.3.6. SCTP Next Receive Information Structure 1035 * (SCTP_NXTINFO) 1036 */ 1037 static void __sctp_ulpevent_read_nxtinfo(const struct sctp_ulpevent *event, 1038 struct msghdr *msghdr, 1039 const struct sk_buff *skb) 1040 { 1041 struct sctp_nxtinfo nxtinfo; 1042 1043 memset(&nxtinfo, 0, sizeof(nxtinfo)); 1044 nxtinfo.nxt_sid = event->stream; 1045 nxtinfo.nxt_ppid = event->ppid; 1046 nxtinfo.nxt_flags = event->flags; 1047 if (sctp_ulpevent_is_notification(event)) 1048 nxtinfo.nxt_flags |= SCTP_NOTIFICATION; 1049 nxtinfo.nxt_length = skb->len; 1050 nxtinfo.nxt_assoc_id = sctp_assoc2id(event->asoc); 1051 1052 put_cmsg(msghdr, IPPROTO_SCTP, SCTP_NXTINFO, 1053 sizeof(nxtinfo), &nxtinfo); 1054 } 1055 1056 void sctp_ulpevent_read_nxtinfo(const struct sctp_ulpevent *event, 1057 struct msghdr *msghdr, 1058 struct sock *sk) 1059 { 1060 struct sk_buff *skb; 1061 int err; 1062 1063 skb = sctp_skb_recv_datagram(sk, MSG_PEEK, 1, &err); 1064 if (skb != NULL) { 1065 __sctp_ulpevent_read_nxtinfo(sctp_skb2event(skb), 1066 msghdr, skb); 1067 /* Just release refcount here. */ 1068 kfree_skb(skb); 1069 } 1070 } 1071 1072 /* Do accounting for bytes received and hold a reference to the association 1073 * for each skb. 1074 */ 1075 static void sctp_ulpevent_receive_data(struct sctp_ulpevent *event, 1076 struct sctp_association *asoc) 1077 { 1078 struct sk_buff *skb, *frag; 1079 1080 skb = sctp_event2skb(event); 1081 /* Set the owner and charge rwnd for bytes received. */ 1082 sctp_ulpevent_set_owner(event, asoc); 1083 sctp_assoc_rwnd_decrease(asoc, skb_headlen(skb)); 1084 1085 if (!skb->data_len) 1086 return; 1087 1088 /* Note: Not clearing the entire event struct as this is just a 1089 * fragment of the real event. However, we still need to do rwnd 1090 * accounting. 1091 * In general, the skb passed from IP can have only 1 level of 1092 * fragments. But we allow multiple levels of fragments. 1093 */ 1094 skb_walk_frags(skb, frag) 1095 sctp_ulpevent_receive_data(sctp_skb2event(frag), asoc); 1096 } 1097 1098 /* Do accounting for bytes just read by user and release the references to 1099 * the association. 1100 */ 1101 static void sctp_ulpevent_release_data(struct sctp_ulpevent *event) 1102 { 1103 struct sk_buff *skb, *frag; 1104 unsigned int len; 1105 1106 /* Current stack structures assume that the rcv buffer is 1107 * per socket. For UDP style sockets this is not true as 1108 * multiple associations may be on a single UDP-style socket. 1109 * Use the local private area of the skb to track the owning 1110 * association. 1111 */ 1112 1113 skb = sctp_event2skb(event); 1114 len = skb->len; 1115 1116 if (!skb->data_len) 1117 goto done; 1118 1119 /* Don't forget the fragments. */ 1120 skb_walk_frags(skb, frag) { 1121 /* NOTE: skb_shinfos are recursive. Although IP returns 1122 * skb's with only 1 level of fragments, SCTP reassembly can 1123 * increase the levels. 1124 */ 1125 sctp_ulpevent_release_frag_data(sctp_skb2event(frag)); 1126 } 1127 1128 done: 1129 sctp_assoc_rwnd_increase(event->asoc, len); 1130 sctp_chunk_put(event->chunk); 1131 sctp_ulpevent_release_owner(event); 1132 } 1133 1134 static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event) 1135 { 1136 struct sk_buff *skb, *frag; 1137 1138 skb = sctp_event2skb(event); 1139 1140 if (!skb->data_len) 1141 goto done; 1142 1143 /* Don't forget the fragments. */ 1144 skb_walk_frags(skb, frag) { 1145 /* NOTE: skb_shinfos are recursive. Although IP returns 1146 * skb's with only 1 level of fragments, SCTP reassembly can 1147 * increase the levels. 1148 */ 1149 sctp_ulpevent_release_frag_data(sctp_skb2event(frag)); 1150 } 1151 1152 done: 1153 sctp_chunk_put(event->chunk); 1154 sctp_ulpevent_release_owner(event); 1155 } 1156 1157 /* Free a ulpevent that has an owner. It includes releasing the reference 1158 * to the owner, updating the rwnd in case of a DATA event and freeing the 1159 * skb. 1160 */ 1161 void sctp_ulpevent_free(struct sctp_ulpevent *event) 1162 { 1163 if (sctp_ulpevent_is_notification(event)) 1164 sctp_ulpevent_release_owner(event); 1165 else 1166 sctp_ulpevent_release_data(event); 1167 1168 kfree_skb(sctp_event2skb(event)); 1169 } 1170 1171 /* Purge the skb lists holding ulpevents. */ 1172 unsigned int sctp_queue_purge_ulpevents(struct sk_buff_head *list) 1173 { 1174 struct sk_buff *skb; 1175 unsigned int data_unread = 0; 1176 1177 while ((skb = skb_dequeue(list)) != NULL) { 1178 struct sctp_ulpevent *event = sctp_skb2event(skb); 1179 1180 if (!sctp_ulpevent_is_notification(event)) 1181 data_unread += skb->len; 1182 1183 sctp_ulpevent_free(event); 1184 } 1185 1186 return data_unread; 1187 } 1188