Lines Matching refs:chunk

54 					struct sctp_chunk *chunk,
57 struct sctp_chunk *chunk,
62 const struct sctp_chunk *chunk);
66 const struct sctp_chunk *chunk,
90 static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk);
142 struct sctp_chunk *chunk);
165 static inline bool sctp_chunk_length_valid(struct sctp_chunk *chunk, in sctp_chunk_length_valid() argument
168 __u16 chunk_length = ntohs(chunk->chunk_hdr->length); in sctp_chunk_length_valid()
171 if (unlikely(chunk->pdiscard)) in sctp_chunk_length_valid()
180 static inline bool sctp_err_chunk_valid(struct sctp_chunk *chunk) in sctp_err_chunk_valid() argument
184 sctp_walk_errors(err, chunk->chunk_hdr); in sctp_err_chunk_valid()
186 return (void *)err == (void *)chunk->chunk_end; in sctp_err_chunk_valid()
230 struct sctp_chunk *chunk = arg; in sctp_sf_do_4_C() local
233 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_do_4_C()
241 if (!chunk->singleton) in sctp_sf_do_4_C()
245 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_4_C()
316 struct sctp_chunk *chunk = arg, *repl, *err_chunk; in sctp_sf_do_5_1B_init() local
324 chunk->skb)) in sctp_sf_do_5_1B_init()
336 if (!chunk->singleton) in sctp_sf_do_5_1B_init()
344 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) in sctp_sf_do_5_1B_init()
358 if (chunk->sctp_hdr->vtag != 0) in sctp_sf_do_5_1B_init()
372 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, in sctp_sf_do_5_1B_init()
373 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, in sctp_sf_do_5_1B_init()
402 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; in sctp_sf_do_5_1B_init()
405 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); in sctp_sf_do_5_1B_init()
407 new_asoc = sctp_make_temp_asoc(ep, chunk, GFP_ATOMIC); in sctp_sf_do_5_1B_init()
412 sctp_scope(sctp_source(chunk)), in sctp_sf_do_5_1B_init()
417 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), in sctp_sf_do_5_1B_init()
418 (struct sctp_init_chunk *)chunk->chunk_hdr, in sctp_sf_do_5_1B_init()
432 repl = sctp_make_init_ack(new_asoc, chunk, GFP_ATOMIC, len); in sctp_sf_do_5_1B_init()
516 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_1C_ack() local
520 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_1C_ack()
527 if (!chunk->singleton) in sctp_sf_do_5_1C_ack()
531 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_initack_chunk))) in sctp_sf_do_5_1C_ack()
535 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; in sctp_sf_do_5_1C_ack()
539 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, in sctp_sf_do_5_1C_ack()
540 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, in sctp_sf_do_5_1C_ack()
583 asoc, chunk->transport); in sctp_sf_do_5_1C_ack()
589 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); in sctp_sf_do_5_1C_ack()
591 initchunk = (struct sctp_init_chunk *)chunk->chunk_hdr; in sctp_sf_do_5_1C_ack()
627 static bool sctp_auth_chunk_verify(struct net *net, struct sctp_chunk *chunk, in sctp_auth_chunk_verify() argument
632 if (!chunk->auth_chunk) in sctp_auth_chunk_verify()
647 auth.skb = chunk->auth_chunk; in sctp_auth_chunk_verify()
648 auth.asoc = chunk->asoc; in sctp_auth_chunk_verify()
649 auth.sctp_hdr = chunk->sctp_hdr; in sctp_auth_chunk_verify()
651 skb_push(chunk->auth_chunk, in sctp_auth_chunk_verify()
653 skb_pull(chunk->auth_chunk, sizeof(struct sctp_chunkhdr)); in sctp_auth_chunk_verify()
654 auth.transport = chunk->transport; in sctp_auth_chunk_verify()
700 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_1D_ce() local
706 if (asoc && !sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_1D_ce()
722 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_5_1D_ce()
738 chunk->subh.cookie_hdr = in sctp_sf_do_5_1D_ce()
739 (struct sctp_signed_cookie *)chunk->skb->data; in sctp_sf_do_5_1D_ce()
740 if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) - in sctp_sf_do_5_1D_ce()
748 new_asoc = sctp_unpack_cookie(ep, asoc, chunk, GFP_ATOMIC, &error, in sctp_sf_do_5_1D_ce()
766 sctp_send_stale_cookie_err(net, ep, asoc, chunk, commands, in sctp_sf_do_5_1D_ce()
785 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; in sctp_sf_do_5_1D_ce()
787 if (!sctp_process_init(new_asoc, chunk, in sctp_sf_do_5_1D_ce()
788 &chunk->subh.cookie_hdr->c.peer_addr, in sctp_sf_do_5_1D_ce()
800 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) { in sctp_sf_do_5_1D_ce()
805 repl = sctp_make_cookie_ack(new_asoc, chunk); in sctp_sf_do_5_1D_ce()
915 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_1E_ca() local
918 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_1E_ca()
924 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_5_1E_ca()
937 security_inet_conn_established(ep->base.sk, chunk->skb); in sctp_sf_do_5_1E_ca()
1132 struct sctp_chunk *chunk = arg; in sctp_sf_beat_8_3() local
1136 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_beat_8_3()
1140 if (!sctp_chunk_length_valid(chunk, in sctp_sf_beat_8_3()
1149 chunk->subh.hb_hdr = (struct sctp_heartbeathdr *)chunk->skb->data; in sctp_sf_beat_8_3()
1150 param_hdr = (struct sctp_paramhdr *)chunk->subh.hb_hdr; in sctp_sf_beat_8_3()
1151 paylen = ntohs(chunk->chunk_hdr->length) - sizeof(struct sctp_chunkhdr); in sctp_sf_beat_8_3()
1157 if (!pskb_pull(chunk->skb, paylen)) in sctp_sf_beat_8_3()
1160 reply = sctp_make_heartbeat_ack(asoc, chunk, param_hdr, paylen); in sctp_sf_beat_8_3()
1207 struct sctp_chunk *chunk = arg; in sctp_sf_backbeat_8_3() local
1212 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_backbeat_8_3()
1216 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr) + in sctp_sf_backbeat_8_3()
1221 hbinfo = (struct sctp_sender_hb_info *)chunk->skb->data; in sctp_sf_backbeat_8_3()
1469 struct sctp_chunk *chunk = arg, *repl, *err_chunk; in sctp_sf_do_unexpected_init() local
1478 chunk->skb)) in sctp_sf_do_unexpected_init()
1490 if (!chunk->singleton) in sctp_sf_do_unexpected_init()
1494 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) in sctp_sf_do_unexpected_init()
1500 if (chunk->sctp_hdr->vtag != 0) in sctp_sf_do_unexpected_init()
1504 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; in sctp_sf_do_unexpected_init()
1507 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); in sctp_sf_do_unexpected_init()
1511 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, in sctp_sf_do_unexpected_init()
1512 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, in sctp_sf_do_unexpected_init()
1546 new_asoc = sctp_make_temp_asoc(ep, chunk, GFP_ATOMIC); in sctp_sf_do_unexpected_init()
1551 sctp_scope(sctp_source(chunk)), GFP_ATOMIC) < 0) in sctp_sf_do_unexpected_init()
1558 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), in sctp_sf_do_unexpected_init()
1559 (struct sctp_init_chunk *)chunk->chunk_hdr, in sctp_sf_do_unexpected_init()
1569 if (!sctp_sf_check_restart_addrs(new_asoc, asoc, chunk, in sctp_sf_do_unexpected_init()
1589 repl = sctp_make_init_ack(new_asoc, chunk, GFP_ATOMIC, len); in sctp_sf_do_unexpected_init()
1781 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_a() argument
1794 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; in sctp_sf_do_dupcook_a()
1796 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init, in sctp_sf_do_dupcook_a()
1803 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) in sctp_sf_do_dupcook_a()
1810 if (!sctp_sf_check_restart_addrs(new_asoc, asoc, chunk, commands)) in sctp_sf_do_dupcook_a()
1821 SCTP_ST_CHUNK(chunk->chunk_hdr->type), in sctp_sf_do_dupcook_a()
1822 chunk, commands); in sctp_sf_do_dupcook_a()
1826 err = sctp_make_op_error(asoc, chunk, in sctp_sf_do_dupcook_a()
1868 repl = sctp_make_cookie_ack(asoc, chunk); in sctp_sf_do_dupcook_a()
1918 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_b() argument
1928 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; in sctp_sf_do_dupcook_b()
1929 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init, in sctp_sf_do_dupcook_b()
1936 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) in sctp_sf_do_dupcook_b()
1947 repl = sctp_make_cookie_ack(new_asoc, chunk); in sctp_sf_do_dupcook_b()
2000 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_c() argument
2023 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_d() argument
2037 if (!sctp_auth_chunk_verify(net, chunk, asoc)) in sctp_sf_do_dupcook_d()
2087 repl = sctp_make_cookie_ack(asoc, chunk); in sctp_sf_do_dupcook_d()
2140 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_2_4_dupcook() local
2151 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) { in sctp_sf_do_5_2_4_dupcook()
2152 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_2_4_dupcook()
2160 chunk->subh.cookie_hdr = (struct sctp_signed_cookie *)chunk->skb->data; in sctp_sf_do_5_2_4_dupcook()
2161 if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) - in sctp_sf_do_5_2_4_dupcook()
2170 new_asoc = sctp_unpack_cookie(ep, asoc, chunk, GFP_ATOMIC, &error, in sctp_sf_do_5_2_4_dupcook()
2188 sctp_send_stale_cookie_err(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2199 chunk->skb)) { in sctp_sf_do_5_2_4_dupcook()
2214 retval = sctp_sf_do_dupcook_a(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2219 retval = sctp_sf_do_dupcook_b(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2224 retval = sctp_sf_do_dupcook_c(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2229 retval = sctp_sf_do_dupcook_d(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2267 struct sctp_chunk *chunk = arg; in sctp_sf_shutdown_pending_abort() local
2269 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_shutdown_pending_abort()
2282 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_shutdown_pending_abort()
2291 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) in sctp_sf_shutdown_pending_abort()
2294 if (!sctp_err_chunk_valid(chunk)) in sctp_sf_shutdown_pending_abort()
2313 struct sctp_chunk *chunk = arg; in sctp_sf_shutdown_sent_abort() local
2315 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_shutdown_sent_abort()
2328 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_shutdown_sent_abort()
2337 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) in sctp_sf_shutdown_sent_abort()
2340 if (!sctp_err_chunk_valid(chunk)) in sctp_sf_shutdown_sent_abort()
2395 struct sctp_chunk *chunk = arg; in sctp_sf_cookie_echoed_err() local
2398 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_cookie_echoed_err()
2404 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_operr_chunk))) in sctp_sf_cookie_echoed_err()
2413 sctp_walk_errors(err, chunk->chunk_hdr) { in sctp_sf_cookie_echoed_err()
2461 struct sctp_chunk *chunk = arg, *reply; in sctp_sf_do_5_2_6_stale() local
2475 err = (struct sctp_errhdr *)(chunk->skb->data); in sctp_sf_do_5_2_6_stale()
2583 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_1_abort() local
2585 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_do_9_1_abort()
2598 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_do_9_1_abort()
2607 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) in sctp_sf_do_9_1_abort()
2610 if (!sctp_err_chunk_valid(chunk)) in sctp_sf_do_9_1_abort()
2625 struct sctp_chunk *chunk = arg; in __sctp_sf_do_9_1_abort() local
2629 len = ntohs(chunk->chunk_hdr->length); in __sctp_sf_do_9_1_abort()
2631 error = ((struct sctp_errhdr *)chunk->skb->data)->cause; in __sctp_sf_do_9_1_abort()
2656 struct sctp_chunk *chunk = arg; in sctp_sf_cookie_wait_abort() local
2659 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_cookie_wait_abort()
2672 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_cookie_wait_abort()
2676 len = ntohs(chunk->chunk_hdr->length); in sctp_sf_cookie_wait_abort()
2678 error = ((struct sctp_errhdr *)chunk->skb->data)->cause; in sctp_sf_cookie_wait_abort()
2681 chunk->transport); in sctp_sf_cookie_wait_abort()
2786 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_shutdown() local
2791 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_shutdown()
2795 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_shutdown_chunk))) in sctp_sf_do_9_2_shutdown()
2800 sdh = (struct sctp_shutdownhdr *)chunk->skb->data; in sctp_sf_do_9_2_shutdown()
2801 skb_pull(chunk->skb, sizeof(*sdh)); in sctp_sf_do_9_2_shutdown()
2802 chunk->subh.shutdown_hdr = sdh; in sctp_sf_do_9_2_shutdown()
2853 SCTP_BE32(chunk->subh.shutdown_hdr->cum_tsn_ack)); in sctp_sf_do_9_2_shutdown()
2875 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_shut_ctsn() local
2879 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_shut_ctsn()
2883 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_shutdown_chunk))) in sctp_sf_do_9_2_shut_ctsn()
2887 sdh = (struct sctp_shutdownhdr *)chunk->skb->data; in sctp_sf_do_9_2_shut_ctsn()
2927 struct sctp_chunk *chunk = arg; in __sctp_sf_do_9_2_reshutack() local
2931 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in __sctp_sf_do_9_2_reshutack()
2939 reply = sctp_make_shutdown_ack(asoc, chunk); in __sctp_sf_do_9_2_reshutack()
2965 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_reshutack() local
2967 if (!chunk->singleton) in sctp_sf_do_9_2_reshutack()
2970 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) in sctp_sf_do_9_2_reshutack()
2973 if (chunk->sctp_hdr->vtag != 0) in sctp_sf_do_9_2_reshutack()
3011 struct sctp_chunk *chunk = arg; in sctp_sf_do_ecn_cwr() local
3015 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_ecn_cwr()
3018 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_ecne_chunk))) in sctp_sf_do_ecn_cwr()
3022 cwr = (struct sctp_cwrhdr *)chunk->skb->data; in sctp_sf_do_ecn_cwr()
3023 skb_pull(chunk->skb, sizeof(*cwr)); in sctp_sf_do_ecn_cwr()
3066 struct sctp_chunk *chunk = arg; in sctp_sf_do_ecne() local
3069 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_ecne()
3072 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_ecne_chunk))) in sctp_sf_do_ecne()
3076 ecne = (struct sctp_ecnehdr *)chunk->skb->data; in sctp_sf_do_ecne()
3077 skb_pull(chunk->skb, sizeof(*ecne)); in sctp_sf_do_ecne()
3124 struct sctp_chunk *chunk = arg; in sctp_sf_eat_data_6_2() local
3127 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_data_6_2()
3133 if (!sctp_chunk_length_valid(chunk, sctp_datachk_len(&asoc->stream))) in sctp_sf_eat_data_6_2()
3137 error = sctp_eat_data(asoc, chunk, commands); in sctp_sf_eat_data_6_2()
3152 return sctp_sf_abort_violation(net, ep, asoc, chunk, commands, in sctp_sf_eat_data_6_2()
3153 (u8 *)chunk->subh.data_hdr, in sctp_sf_eat_data_6_2()
3159 if (chunk->chunk_hdr->flags & SCTP_DATA_SACK_IMM) in sctp_sf_eat_data_6_2()
3189 if (chunk->end_of_packet) in sctp_sf_eat_data_6_2()
3209 if (chunk->end_of_packet) in sctp_sf_eat_data_6_2()
3214 if (chunk->end_of_packet) in sctp_sf_eat_data_6_2()
3244 struct sctp_chunk *chunk = arg; in sctp_sf_eat_data_fast_4_4() local
3247 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_data_fast_4_4()
3253 if (!sctp_chunk_length_valid(chunk, sctp_datachk_len(&asoc->stream))) in sctp_sf_eat_data_fast_4_4()
3257 error = sctp_eat_data(asoc, chunk, commands); in sctp_sf_eat_data_fast_4_4()
3268 return sctp_sf_abort_violation(net, ep, asoc, chunk, commands, in sctp_sf_eat_data_fast_4_4()
3269 (u8 *)chunk->subh.data_hdr, in sctp_sf_eat_data_fast_4_4()
3283 if (chunk->end_of_packet) { in sctp_sf_eat_data_fast_4_4()
3335 struct sctp_chunk *chunk = arg; in sctp_sf_eat_sack_6_2() local
3339 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_eat_sack_6_2()
3343 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_sack_chunk))) in sctp_sf_eat_sack_6_2()
3348 sackh = sctp_sm_pull_sack(chunk); in sctp_sf_eat_sack_6_2()
3352 chunk->subh.sack_hdr = sackh; in sctp_sf_eat_sack_6_2()
3362 trace_sctp_probe(ep, asoc, chunk); in sctp_sf_eat_sack_6_2()
3378 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_SACK, SCTP_CHUNK(chunk)); in sctp_sf_eat_sack_6_2()
3413 struct sctp_chunk *chunk = arg; in sctp_sf_tabort_8_4_8() local
3416 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_sf_tabort_8_4_8()
3423 abort = sctp_make_abort(asoc, chunk, 0); in sctp_sf_tabort_8_4_8()
3431 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_sf_tabort_8_4_8()
3462 struct sctp_chunk *chunk = arg; in sctp_sf_operr_notify() local
3465 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_operr_notify()
3469 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_operr_chunk))) in sctp_sf_operr_notify()
3472 sctp_walk_errors(err, chunk->chunk_hdr); in sctp_sf_operr_notify()
3473 if ((void *)err != (void *)chunk->chunk_end) in sctp_sf_operr_notify()
3478 SCTP_CHUNK(chunk)); in sctp_sf_operr_notify()
3500 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_final() local
3504 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_final()
3508 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_9_2_final()
3522 reply = sctp_make_shutdown_complete(asoc, chunk); in sctp_sf_do_9_2_final()
3582 struct sctp_chunk *chunk = arg; in sctp_sf_ootb() local
3583 struct sk_buff *skb = chunk->skb; in sctp_sf_ootb()
3592 if (asoc && !sctp_vtag_verify(chunk, asoc)) in sctp_sf_ootb()
3595 ch = (struct sctp_chunkhdr *)chunk->chunk_hdr; in sctp_sf_ootb()
3680 struct sctp_chunk *chunk = arg; in sctp_sf_shut_8_4_5() local
3683 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_sf_shut_8_4_5()
3690 shut = sctp_make_shutdown_complete(asoc, chunk); in sctp_sf_shut_8_4_5()
3698 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_sf_shut_8_4_5()
3735 struct sctp_chunk *chunk = arg; in sctp_sf_do_8_5_1_E_sa() local
3737 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_8_5_1_E_sa()
3741 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_8_5_1_E_sa()
3765 struct sctp_chunk *chunk = arg; in sctp_sf_do_asconf() local
3769 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_do_asconf()
3776 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_addip_chunk))) in sctp_sf_do_asconf()
3787 (!net->sctp.addip_noauth && !chunk->auth)) in sctp_sf_do_asconf()
3790 hdr = (struct sctp_addiphdr *)chunk->skb->data; in sctp_sf_do_asconf()
3794 if (!sctp_verify_asconf(asoc, chunk, true, &err_param)) in sctp_sf_do_asconf()
3806 if (!chunk->has_asconf) in sctp_sf_do_asconf()
3818 asoc, chunk); in sctp_sf_do_asconf()
3859 asconf_ack->dest = chunk->source; in sctp_sf_do_asconf()
4020 struct sctp_chunk *chunk = arg; in sctp_sf_do_reconf() local
4024 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_do_reconf()
4031 if (!sctp_chunk_length_valid(chunk, sizeof(*hdr))) in sctp_sf_do_reconf()
4035 if (!sctp_verify_reconf(asoc, chunk, &err_param)) in sctp_sf_do_reconf()
4039 hdr = (struct sctp_reconf_chunk *)chunk->chunk_hdr; in sctp_sf_do_reconf()
4097 struct sctp_chunk *chunk = arg; in sctp_sf_eat_fwd_tsn() local
4101 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_fwd_tsn()
4111 if (!sctp_chunk_length_valid(chunk, sctp_ftsnchk_len(&asoc->stream))) in sctp_sf_eat_fwd_tsn()
4115 fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data; in sctp_sf_eat_fwd_tsn()
4116 chunk->subh.fwdtsn_hdr = fwdtsn_hdr; in sctp_sf_eat_fwd_tsn()
4117 len = ntohs(chunk->chunk_hdr->length); in sctp_sf_eat_fwd_tsn()
4119 skb_pull(chunk->skb, len); in sctp_sf_eat_fwd_tsn()
4130 if (!asoc->stream.si->validate_ftsn(chunk)) in sctp_sf_eat_fwd_tsn()
4136 SCTP_CHUNK(chunk)); in sctp_sf_eat_fwd_tsn()
4164 struct sctp_chunk *chunk = arg; in sctp_sf_eat_fwd_tsn_fast() local
4168 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_fwd_tsn_fast()
4178 if (!sctp_chunk_length_valid(chunk, sctp_ftsnchk_len(&asoc->stream))) in sctp_sf_eat_fwd_tsn_fast()
4182 fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data; in sctp_sf_eat_fwd_tsn_fast()
4183 chunk->subh.fwdtsn_hdr = fwdtsn_hdr; in sctp_sf_eat_fwd_tsn_fast()
4184 len = ntohs(chunk->chunk_hdr->length); in sctp_sf_eat_fwd_tsn_fast()
4186 skb_pull(chunk->skb, len); in sctp_sf_eat_fwd_tsn_fast()
4197 if (!asoc->stream.si->validate_ftsn(chunk)) in sctp_sf_eat_fwd_tsn_fast()
4203 SCTP_CHUNK(chunk)); in sctp_sf_eat_fwd_tsn_fast()
4245 struct sctp_chunk *chunk) in sctp_sf_authenticate() argument
4255 auth_hdr = (struct sctp_authhdr *)chunk->skb->data; in sctp_sf_authenticate()
4256 chunk->subh.auth_hdr = auth_hdr; in sctp_sf_authenticate()
4257 skb_pull(chunk->skb, sizeof(*auth_hdr)); in sctp_sf_authenticate()
4278 sig_len = ntohs(chunk->chunk_hdr->length) - in sctp_sf_authenticate()
4292 skb_pull(chunk->skb, sig_len); in sctp_sf_authenticate()
4300 sctp_auth_calculate_hmac(asoc, chunk->skb, in sctp_sf_authenticate()
4301 (struct sctp_auth_chunk *)chunk->chunk_hdr, in sctp_sf_authenticate()
4311 chunk->auth = 1; in sctp_sf_authenticate()
4324 struct sctp_chunk *chunk = arg; in sctp_sf_eat_auth() local
4333 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_auth()
4340 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_auth_chunk))) in sctp_sf_eat_auth()
4344 auth_hdr = (struct sctp_authhdr *)chunk->skb->data; in sctp_sf_eat_auth()
4345 error = sctp_sf_authenticate(asoc, chunk); in sctp_sf_eat_auth()
4351 err_chunk = sctp_make_op_error(asoc, chunk, in sctp_sf_eat_auth()
4425 pr_debug("%s: processing unknown chunk id:%d\n", __func__, type.chunk); in sctp_sf_unk_chunk()
4438 switch (type.chunk & SCTP_CID_ACTION_MASK) { in sctp_sf_unk_chunk()
4501 struct sctp_chunk *chunk = arg; in sctp_sf_discard_chunk() local
4503 if (asoc && !sctp_vtag_verify(chunk, asoc)) in sctp_sf_discard_chunk()
4510 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_discard_chunk()
4514 pr_debug("%s: chunk:%d is discarded\n", __func__, type.chunk); in sctp_sf_discard_chunk()
4571 struct sctp_chunk *chunk = arg; in sctp_sf_violation() local
4573 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_violation()
4577 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_violation()
4597 struct sctp_chunk *chunk = arg; in sctp_sf_abort_violation() local
4615 abort = sctp_make_abort_violation(asoc, chunk, payload, paylen); in sctp_sf_abort_violation()
4621 if (chunk->chunk_hdr->type == SCTP_CID_INIT_ACK && in sctp_sf_abort_violation()
4625 initack = (struct sctp_initack_chunk *)chunk->chunk_hdr; in sctp_sf_abort_violation()
4626 if (!sctp_chunk_length_valid(chunk, sizeof(*initack))) in sctp_sf_abort_violation()
4655 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_sf_abort_violation()
4661 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_sf_abort_violation()
4734 struct sctp_chunk *chunk = arg; in sctp_sf_violation_paramlen() local
4740 abort = sctp_make_violation_paramlen(asoc, chunk, param); in sctp_sf_violation_paramlen()
5422 struct sctp_chunk *chunk = arg; in sctp_sf_do_prm_asconf() local
5424 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk)); in sctp_sf_do_prm_asconf()
5427 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk)); in sctp_sf_do_prm_asconf()
5439 struct sctp_chunk *chunk = arg; in sctp_sf_do_prm_reconf() local
5441 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk)); in sctp_sf_do_prm_reconf()
5584 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_shutdown_ack() local
5594 if (chunk) { in sctp_sf_do_9_2_shutdown_ack()
5595 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_shutdown_ack()
5601 chunk, sizeof(struct sctp_shutdown_chunk))) in sctp_sf_do_9_2_shutdown_ack()
5609 reply = sctp_make_shutdown_ack(asoc, chunk); in sctp_sf_do_9_2_shutdown_ack()
5992 struct sctp_chunk *chunk = asoc->addip_last_asconf; in sctp_sf_t4_timer_expire() local
5993 struct sctp_transport *transport = chunk->transport; in sctp_sf_t4_timer_expire()
6006 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk)); in sctp_sf_t4_timer_expire()
6181 pr_debug("%s: timer %d ignored\n", __func__, type.chunk); in sctp_sf_timer_ignore()
6191 static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk) in sctp_sm_pull_sack() argument
6201 sack = (struct sctp_sackhdr *) chunk->skb->data; in sctp_sm_pull_sack()
6207 if (len > chunk->skb->len) in sctp_sm_pull_sack()
6210 skb_pull(chunk->skb, len); in sctp_sm_pull_sack()
6222 struct sctp_chunk *chunk, in sctp_abort_pkt_new() argument
6228 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_abort_pkt_new()
6234 abort = sctp_make_abort(asoc, chunk, paylen); in sctp_abort_pkt_new()
6242 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_abort_pkt_new()
6263 const struct sctp_chunk *chunk) in sctp_ootb_pkt_new() argument
6271 sport = ntohs(chunk->sctp_hdr->dest); in sctp_ootb_pkt_new()
6272 dport = ntohs(chunk->sctp_hdr->source); in sctp_ootb_pkt_new()
6281 switch (chunk->chunk_hdr->type) { in sctp_ootb_pkt_new()
6287 initack = (struct sctp_initack_chunk *)chunk->chunk_hdr; in sctp_ootb_pkt_new()
6299 switch (chunk->chunk_hdr->type) { in sctp_ootb_pkt_new()
6304 init = (struct sctp_init_chunk *)chunk->chunk_hdr; in sctp_ootb_pkt_new()
6309 vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_ootb_pkt_new()
6315 transport = sctp_transport_new(net, sctp_source(chunk), GFP_ATOMIC); in sctp_ootb_pkt_new()
6322 sctp_transport_route(transport, (union sctp_addr *)&chunk->dest, in sctp_ootb_pkt_new()
6345 const struct sctp_chunk *chunk, in sctp_send_stale_cookie_err() argument
6352 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_send_stale_cookie_err()
6357 cookie = chunk->subh.cookie_hdr; in sctp_send_stale_cookie_err()
6374 struct sctp_chunk *chunk, in sctp_eat_data() argument
6387 data_hdr = (struct sctp_datahdr *)chunk->skb->data; in sctp_eat_data()
6388 chunk->subh.data_hdr = data_hdr; in sctp_eat_data()
6389 skb_pull(chunk->skb, sctp_datahdr_len(&asoc->stream)); in sctp_eat_data()
6406 if (asoc->peer.ecn_capable && !chunk->ecn_ce_done) { in sctp_eat_data()
6407 struct sctp_af *af = SCTP_INPUT_CB(chunk->skb)->af; in sctp_eat_data()
6408 chunk->ecn_ce_done = 1; in sctp_eat_data()
6410 if (af->is_ce(sctp_gso_headskb(chunk->skb))) { in sctp_eat_data()
6422 if (chunk->asoc) in sctp_eat_data()
6423 chunk->asoc->stats.outofseqtsns++; in sctp_eat_data()
6436 datalen = ntohs(chunk->chunk_hdr->length); in sctp_eat_data()
6455 if ((!chunk->data_accepted) && (!asoc->rwnd || asoc->rwnd_over || in sctp_eat_data()
6503 err = sctp_make_abort_no_data(asoc, chunk, tsn); in sctp_eat_data()
6521 chunk->data_accepted = 1; in sctp_eat_data()
6526 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) { in sctp_eat_data()
6528 if (chunk->asoc) in sctp_eat_data()
6529 chunk->asoc->stats.iuodchunks++; in sctp_eat_data()
6532 if (chunk->asoc) in sctp_eat_data()
6533 chunk->asoc->stats.iodchunks++; in sctp_eat_data()
6548 err = sctp_make_op_error(asoc, chunk, SCTP_ERROR_INV_STRM, in sctp_eat_data()
6565 if (!asoc->stream.si->validate_data(chunk)) in sctp_eat_data()
6572 sctp_add_cmd_sf(commands, deliver, SCTP_CHUNK(chunk)); in sctp_eat_data()