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,
97 static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk);
149 struct sctp_chunk *chunk);
172 static inline bool sctp_chunk_length_valid(struct sctp_chunk *chunk, in sctp_chunk_length_valid() argument
175 __u16 chunk_length = ntohs(chunk->chunk_hdr->length); in sctp_chunk_length_valid()
178 if (unlikely(chunk->pdiscard)) in sctp_chunk_length_valid()
187 static inline bool sctp_err_chunk_valid(struct sctp_chunk *chunk) in sctp_err_chunk_valid() argument
191 sctp_walk_errors(err, chunk->chunk_hdr); in sctp_err_chunk_valid()
193 return (void *)err == (void *)chunk->chunk_end; in sctp_err_chunk_valid()
237 struct sctp_chunk *chunk = arg; in sctp_sf_do_4_C() local
240 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_do_4_C()
248 if (!chunk->singleton) in sctp_sf_do_4_C()
252 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_4_C()
323 struct sctp_chunk *chunk = arg, *repl, *err_chunk; in sctp_sf_do_5_1B_init() local
338 if (!chunk->singleton) in sctp_sf_do_5_1B_init()
346 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) in sctp_sf_do_5_1B_init()
360 if (chunk->sctp_hdr->vtag != 0) in sctp_sf_do_5_1B_init()
374 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, in sctp_sf_do_5_1B_init()
375 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, in sctp_sf_do_5_1B_init()
404 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; in sctp_sf_do_5_1B_init()
407 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); in sctp_sf_do_5_1B_init()
409 new_asoc = sctp_make_temp_asoc(ep, chunk, GFP_ATOMIC); in sctp_sf_do_5_1B_init()
414 if (security_sctp_assoc_request(new_asoc, chunk->skb)) { in sctp_sf_do_5_1B_init()
420 sctp_scope(sctp_source(chunk)), in sctp_sf_do_5_1B_init()
425 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), in sctp_sf_do_5_1B_init()
426 (struct sctp_init_chunk *)chunk->chunk_hdr, in sctp_sf_do_5_1B_init()
440 repl = sctp_make_init_ack(new_asoc, chunk, GFP_ATOMIC, len); in sctp_sf_do_5_1B_init()
524 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_1C_ack() local
528 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_1C_ack()
535 if (!chunk->singleton) in sctp_sf_do_5_1C_ack()
539 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_initack_chunk))) in sctp_sf_do_5_1C_ack()
543 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; in sctp_sf_do_5_1C_ack()
547 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, in sctp_sf_do_5_1C_ack()
548 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, in sctp_sf_do_5_1C_ack()
591 asoc, chunk->transport); in sctp_sf_do_5_1C_ack()
597 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); in sctp_sf_do_5_1C_ack()
599 initchunk = (struct sctp_init_chunk *)chunk->chunk_hdr; in sctp_sf_do_5_1C_ack()
635 static bool sctp_auth_chunk_verify(struct net *net, struct sctp_chunk *chunk, in sctp_auth_chunk_verify() argument
640 if (!chunk->auth_chunk) in sctp_auth_chunk_verify()
655 auth.skb = chunk->auth_chunk; in sctp_auth_chunk_verify()
656 auth.asoc = chunk->asoc; in sctp_auth_chunk_verify()
657 auth.sctp_hdr = chunk->sctp_hdr; in sctp_auth_chunk_verify()
659 skb_push(chunk->auth_chunk, in sctp_auth_chunk_verify()
661 skb_pull(chunk->auth_chunk, sizeof(struct sctp_chunkhdr)); in sctp_auth_chunk_verify()
662 auth.transport = chunk->transport; in sctp_auth_chunk_verify()
708 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_1D_ce() local
714 if (asoc && !sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_1D_ce()
730 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_5_1D_ce()
746 chunk->subh.cookie_hdr = in sctp_sf_do_5_1D_ce()
747 (struct sctp_signed_cookie *)chunk->skb->data; in sctp_sf_do_5_1D_ce()
748 if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) - in sctp_sf_do_5_1D_ce()
756 new_asoc = sctp_unpack_cookie(ep, asoc, chunk, GFP_ATOMIC, &error, in sctp_sf_do_5_1D_ce()
774 sctp_send_stale_cookie_err(net, ep, asoc, chunk, commands, in sctp_sf_do_5_1D_ce()
784 if (security_sctp_assoc_request(new_asoc, chunk->head_skb ?: chunk->skb)) { in sctp_sf_do_5_1D_ce()
797 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; in sctp_sf_do_5_1D_ce()
799 if (!sctp_process_init(new_asoc, chunk, in sctp_sf_do_5_1D_ce()
800 &chunk->subh.cookie_hdr->c.peer_addr, in sctp_sf_do_5_1D_ce()
812 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) { in sctp_sf_do_5_1D_ce()
817 repl = sctp_make_cookie_ack(new_asoc, chunk); in sctp_sf_do_5_1D_ce()
927 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_1E_ca() local
930 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_1E_ca()
935 chunk->head_skb ?: chunk->skb)) in sctp_sf_do_5_1E_ca()
941 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_5_1E_ca()
1171 struct sctp_chunk *chunk = arg; in sctp_sf_beat_8_3() local
1175 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_beat_8_3()
1179 if (!sctp_chunk_length_valid(chunk, in sctp_sf_beat_8_3()
1188 chunk->subh.hb_hdr = (struct sctp_heartbeathdr *)chunk->skb->data; in sctp_sf_beat_8_3()
1189 param_hdr = (struct sctp_paramhdr *)chunk->subh.hb_hdr; in sctp_sf_beat_8_3()
1190 paylen = ntohs(chunk->chunk_hdr->length) - sizeof(struct sctp_chunkhdr); in sctp_sf_beat_8_3()
1196 if (!pskb_pull(chunk->skb, paylen)) in sctp_sf_beat_8_3()
1199 reply = sctp_make_heartbeat_ack(asoc, chunk, param_hdr, paylen); in sctp_sf_beat_8_3()
1246 struct sctp_chunk *chunk = arg; in sctp_sf_backbeat_8_3() local
1251 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_backbeat_8_3()
1255 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr) + in sctp_sf_backbeat_8_3()
1260 hbinfo = (struct sctp_sender_hb_info *)chunk->skb->data; in sctp_sf_backbeat_8_3()
1519 struct sctp_chunk *chunk = arg, *repl, *err_chunk; in sctp_sf_do_unexpected_init() local
1535 if (!chunk->singleton) in sctp_sf_do_unexpected_init()
1539 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) in sctp_sf_do_unexpected_init()
1545 if (chunk->sctp_hdr->vtag != 0) in sctp_sf_do_unexpected_init()
1548 if (SCTP_INPUT_CB(chunk->skb)->encap_port != chunk->transport->encap_port) in sctp_sf_do_unexpected_init()
1552 chunk->subh.init_hdr = (struct sctp_inithdr *)chunk->skb->data; in sctp_sf_do_unexpected_init()
1555 chunk->param_hdr.v = skb_pull(chunk->skb, sizeof(struct sctp_inithdr)); in sctp_sf_do_unexpected_init()
1559 if (!sctp_verify_init(net, ep, asoc, chunk->chunk_hdr->type, in sctp_sf_do_unexpected_init()
1560 (struct sctp_init_chunk *)chunk->chunk_hdr, chunk, in sctp_sf_do_unexpected_init()
1594 new_asoc = sctp_make_temp_asoc(ep, chunk, GFP_ATOMIC); in sctp_sf_do_unexpected_init()
1599 if (security_sctp_assoc_request(new_asoc, chunk->skb)) { in sctp_sf_do_unexpected_init()
1605 sctp_scope(sctp_source(chunk)), GFP_ATOMIC) < 0) in sctp_sf_do_unexpected_init()
1612 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), in sctp_sf_do_unexpected_init()
1613 (struct sctp_init_chunk *)chunk->chunk_hdr, in sctp_sf_do_unexpected_init()
1623 if (!sctp_sf_check_restart_addrs(new_asoc, asoc, chunk, in sctp_sf_do_unexpected_init()
1643 repl = sctp_make_init_ack(new_asoc, chunk, GFP_ATOMIC, len); in sctp_sf_do_unexpected_init()
1859 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_a() argument
1872 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; in sctp_sf_do_dupcook_a()
1874 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init, in sctp_sf_do_dupcook_a()
1881 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) in sctp_sf_do_dupcook_a()
1888 if (!sctp_sf_check_restart_addrs(new_asoc, asoc, chunk, commands)) in sctp_sf_do_dupcook_a()
1899 SCTP_ST_CHUNK(chunk->chunk_hdr->type), in sctp_sf_do_dupcook_a()
1900 chunk, commands); in sctp_sf_do_dupcook_a()
1904 err = sctp_make_op_error(asoc, chunk, in sctp_sf_do_dupcook_a()
1933 repl = sctp_make_cookie_ack(asoc, chunk); in sctp_sf_do_dupcook_a()
1983 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_b() argument
1993 peer_init = &chunk->subh.cookie_hdr->c.peer_init[0]; in sctp_sf_do_dupcook_b()
1994 if (!sctp_process_init(new_asoc, chunk, sctp_source(chunk), peer_init, in sctp_sf_do_dupcook_b()
2001 if (!sctp_auth_chunk_verify(net, chunk, new_asoc)) in sctp_sf_do_dupcook_b()
2014 repl = sctp_make_cookie_ack(asoc, chunk); in sctp_sf_do_dupcook_b()
2067 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_c() argument
2090 struct sctp_chunk *chunk, in sctp_sf_do_dupcook_d() argument
2104 if (!sctp_auth_chunk_verify(net, chunk, asoc)) in sctp_sf_do_dupcook_d()
2154 repl = sctp_make_cookie_ack(asoc, chunk); in sctp_sf_do_dupcook_d()
2207 struct sctp_chunk *chunk = arg; in sctp_sf_do_5_2_4_dupcook() local
2218 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) { in sctp_sf_do_5_2_4_dupcook()
2219 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_5_2_4_dupcook()
2227 chunk->subh.cookie_hdr = (struct sctp_signed_cookie *)chunk->skb->data; in sctp_sf_do_5_2_4_dupcook()
2228 if (!pskb_pull(chunk->skb, ntohs(chunk->chunk_hdr->length) - in sctp_sf_do_5_2_4_dupcook()
2237 new_asoc = sctp_unpack_cookie(ep, asoc, chunk, GFP_ATOMIC, &error, in sctp_sf_do_5_2_4_dupcook()
2255 sctp_send_stale_cookie_err(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2265 if (security_sctp_assoc_request(new_asoc, chunk->head_skb ?: chunk->skb)) { in sctp_sf_do_5_2_4_dupcook()
2280 retval = sctp_sf_do_dupcook_a(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2285 retval = sctp_sf_do_dupcook_b(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2290 retval = sctp_sf_do_dupcook_c(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2295 retval = sctp_sf_do_dupcook_d(net, ep, asoc, chunk, commands, in sctp_sf_do_5_2_4_dupcook()
2333 struct sctp_chunk *chunk = arg; in sctp_sf_shutdown_pending_abort() local
2335 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_shutdown_pending_abort()
2348 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_shutdown_pending_abort()
2357 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) in sctp_sf_shutdown_pending_abort()
2360 if (!sctp_err_chunk_valid(chunk)) in sctp_sf_shutdown_pending_abort()
2379 struct sctp_chunk *chunk = arg; in sctp_sf_shutdown_sent_abort() local
2381 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_shutdown_sent_abort()
2394 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_shutdown_sent_abort()
2403 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) in sctp_sf_shutdown_sent_abort()
2406 if (!sctp_err_chunk_valid(chunk)) in sctp_sf_shutdown_sent_abort()
2461 struct sctp_chunk *chunk = arg; in sctp_sf_cookie_echoed_err() local
2464 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_cookie_echoed_err()
2470 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_operr_chunk))) in sctp_sf_cookie_echoed_err()
2479 sctp_walk_errors(err, chunk->chunk_hdr) { in sctp_sf_cookie_echoed_err()
2527 struct sctp_chunk *chunk = arg, *reply; in sctp_sf_do_5_2_6_stale() local
2541 err = (struct sctp_errhdr *)(chunk->skb->data); in sctp_sf_do_5_2_6_stale()
2649 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_1_abort() local
2651 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_do_9_1_abort()
2664 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_do_9_1_abort()
2673 sctp_bind_addr_state(&asoc->base.bind_addr, &chunk->dest)) in sctp_sf_do_9_1_abort()
2676 if (!sctp_err_chunk_valid(chunk)) in sctp_sf_do_9_1_abort()
2691 struct sctp_chunk *chunk = arg; in __sctp_sf_do_9_1_abort() local
2695 len = ntohs(chunk->chunk_hdr->length); in __sctp_sf_do_9_1_abort()
2697 error = ((struct sctp_errhdr *)chunk->skb->data)->cause; in __sctp_sf_do_9_1_abort()
2722 struct sctp_chunk *chunk = arg; in sctp_sf_cookie_wait_abort() local
2725 if (!sctp_vtag_verify_either(chunk, asoc)) in sctp_sf_cookie_wait_abort()
2738 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_abort_chunk))) in sctp_sf_cookie_wait_abort()
2742 len = ntohs(chunk->chunk_hdr->length); in sctp_sf_cookie_wait_abort()
2744 error = ((struct sctp_errhdr *)chunk->skb->data)->cause; in sctp_sf_cookie_wait_abort()
2747 chunk->transport); in sctp_sf_cookie_wait_abort()
2852 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_shutdown() local
2857 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_shutdown()
2861 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_shutdown_chunk))) in sctp_sf_do_9_2_shutdown()
2866 sdh = (struct sctp_shutdownhdr *)chunk->skb->data; in sctp_sf_do_9_2_shutdown()
2867 skb_pull(chunk->skb, sizeof(*sdh)); in sctp_sf_do_9_2_shutdown()
2868 chunk->subh.shutdown_hdr = sdh; in sctp_sf_do_9_2_shutdown()
2919 SCTP_BE32(chunk->subh.shutdown_hdr->cum_tsn_ack)); in sctp_sf_do_9_2_shutdown()
2941 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_shut_ctsn() local
2945 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_shut_ctsn()
2949 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_shutdown_chunk))) in sctp_sf_do_9_2_shut_ctsn()
2953 sdh = (struct sctp_shutdownhdr *)chunk->skb->data; in sctp_sf_do_9_2_shut_ctsn()
2993 struct sctp_chunk *chunk = arg; in __sctp_sf_do_9_2_reshutack() local
2997 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in __sctp_sf_do_9_2_reshutack()
3005 reply = sctp_make_shutdown_ack(asoc, chunk); in __sctp_sf_do_9_2_reshutack()
3031 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_reshutack() local
3033 if (!chunk->singleton) in sctp_sf_do_9_2_reshutack()
3036 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_init_chunk))) in sctp_sf_do_9_2_reshutack()
3039 if (chunk->sctp_hdr->vtag != 0) in sctp_sf_do_9_2_reshutack()
3077 struct sctp_chunk *chunk = arg; in sctp_sf_do_ecn_cwr() local
3081 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_ecn_cwr()
3084 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_ecne_chunk))) in sctp_sf_do_ecn_cwr()
3088 cwr = (struct sctp_cwrhdr *)chunk->skb->data; in sctp_sf_do_ecn_cwr()
3089 skb_pull(chunk->skb, sizeof(*cwr)); in sctp_sf_do_ecn_cwr()
3132 struct sctp_chunk *chunk = arg; in sctp_sf_do_ecne() local
3135 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_ecne()
3138 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_ecne_chunk))) in sctp_sf_do_ecne()
3142 ecne = (struct sctp_ecnehdr *)chunk->skb->data; in sctp_sf_do_ecne()
3143 skb_pull(chunk->skb, sizeof(*ecne)); in sctp_sf_do_ecne()
3190 struct sctp_chunk *chunk = arg; in sctp_sf_eat_data_6_2() local
3193 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_data_6_2()
3199 if (!sctp_chunk_length_valid(chunk, sctp_datachk_len(&asoc->stream))) in sctp_sf_eat_data_6_2()
3203 error = sctp_eat_data(asoc, chunk, commands); in sctp_sf_eat_data_6_2()
3218 return sctp_sf_abort_violation(net, ep, asoc, chunk, commands, in sctp_sf_eat_data_6_2()
3219 (u8 *)chunk->subh.data_hdr, in sctp_sf_eat_data_6_2()
3225 if (chunk->chunk_hdr->flags & SCTP_DATA_SACK_IMM) in sctp_sf_eat_data_6_2()
3255 if (chunk->end_of_packet) in sctp_sf_eat_data_6_2()
3275 if (chunk->end_of_packet) in sctp_sf_eat_data_6_2()
3280 if (chunk->end_of_packet) in sctp_sf_eat_data_6_2()
3310 struct sctp_chunk *chunk = arg; in sctp_sf_eat_data_fast_4_4() local
3313 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_data_fast_4_4()
3319 if (!sctp_chunk_length_valid(chunk, sctp_datachk_len(&asoc->stream))) in sctp_sf_eat_data_fast_4_4()
3323 error = sctp_eat_data(asoc, chunk, commands); in sctp_sf_eat_data_fast_4_4()
3334 return sctp_sf_abort_violation(net, ep, asoc, chunk, commands, in sctp_sf_eat_data_fast_4_4()
3335 (u8 *)chunk->subh.data_hdr, in sctp_sf_eat_data_fast_4_4()
3349 if (chunk->end_of_packet) { in sctp_sf_eat_data_fast_4_4()
3401 struct sctp_chunk *chunk = arg; in sctp_sf_eat_sack_6_2() local
3405 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_eat_sack_6_2()
3409 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_sack_chunk))) in sctp_sf_eat_sack_6_2()
3414 sackh = sctp_sm_pull_sack(chunk); in sctp_sf_eat_sack_6_2()
3418 chunk->subh.sack_hdr = sackh; in sctp_sf_eat_sack_6_2()
3428 trace_sctp_probe(ep, asoc, chunk); in sctp_sf_eat_sack_6_2()
3444 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_SACK, SCTP_CHUNK(chunk)); in sctp_sf_eat_sack_6_2()
3479 struct sctp_chunk *chunk = arg; in sctp_sf_tabort_8_4_8() local
3482 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_sf_tabort_8_4_8()
3489 abort = sctp_make_abort(asoc, chunk, 0); in sctp_sf_tabort_8_4_8()
3497 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_sf_tabort_8_4_8()
3526 struct sctp_chunk *chunk = arg; in sctp_sf_new_encap_port() local
3529 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_sf_new_encap_port()
3533 abort = sctp_make_new_encap_port(asoc, chunk); in sctp_sf_new_encap_port()
3567 struct sctp_chunk *chunk = arg; in sctp_sf_operr_notify() local
3570 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_operr_notify()
3574 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_operr_chunk))) in sctp_sf_operr_notify()
3577 sctp_walk_errors(err, chunk->chunk_hdr); in sctp_sf_operr_notify()
3578 if ((void *)err != (void *)chunk->chunk_end) in sctp_sf_operr_notify()
3583 SCTP_CHUNK(chunk)); in sctp_sf_operr_notify()
3605 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_final() local
3609 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_final()
3613 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_9_2_final()
3627 reply = sctp_make_shutdown_complete(asoc, chunk); in sctp_sf_do_9_2_final()
3687 struct sctp_chunk *chunk = arg; in sctp_sf_ootb() local
3688 struct sk_buff *skb = chunk->skb; in sctp_sf_ootb()
3697 if (asoc && !sctp_vtag_verify(chunk, asoc)) in sctp_sf_ootb()
3700 ch = (struct sctp_chunkhdr *)chunk->chunk_hdr; in sctp_sf_ootb()
3785 struct sctp_chunk *chunk = arg; in sctp_sf_shut_8_4_5() local
3788 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_sf_shut_8_4_5()
3795 shut = sctp_make_shutdown_complete(asoc, chunk); in sctp_sf_shut_8_4_5()
3803 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_sf_shut_8_4_5()
3840 struct sctp_chunk *chunk = arg; in sctp_sf_do_8_5_1_E_sa() local
3842 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_8_5_1_E_sa()
3846 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_do_8_5_1_E_sa()
3870 struct sctp_chunk *chunk = arg; in sctp_sf_do_asconf() local
3874 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_do_asconf()
3881 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_addip_chunk))) in sctp_sf_do_asconf()
3892 (!net->sctp.addip_noauth && !chunk->auth)) in sctp_sf_do_asconf()
3895 hdr = (struct sctp_addiphdr *)chunk->skb->data; in sctp_sf_do_asconf()
3899 if (!sctp_verify_asconf(asoc, chunk, true, &err_param)) in sctp_sf_do_asconf()
3911 if (!chunk->has_asconf) in sctp_sf_do_asconf()
3923 asoc, chunk); in sctp_sf_do_asconf()
3964 asconf_ack->dest = chunk->source; in sctp_sf_do_asconf()
4125 struct sctp_chunk *chunk = arg; in sctp_sf_do_reconf() local
4129 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_do_reconf()
4136 if (!sctp_chunk_length_valid(chunk, sizeof(*hdr))) in sctp_sf_do_reconf()
4140 if (!sctp_verify_reconf(asoc, chunk, &err_param)) in sctp_sf_do_reconf()
4144 hdr = (struct sctp_reconf_chunk *)chunk->chunk_hdr; in sctp_sf_do_reconf()
4202 struct sctp_chunk *chunk = arg; in sctp_sf_eat_fwd_tsn() local
4206 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_fwd_tsn()
4216 if (!sctp_chunk_length_valid(chunk, sctp_ftsnchk_len(&asoc->stream))) in sctp_sf_eat_fwd_tsn()
4220 fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data; in sctp_sf_eat_fwd_tsn()
4221 chunk->subh.fwdtsn_hdr = fwdtsn_hdr; in sctp_sf_eat_fwd_tsn()
4222 len = ntohs(chunk->chunk_hdr->length); in sctp_sf_eat_fwd_tsn()
4224 skb_pull(chunk->skb, len); in sctp_sf_eat_fwd_tsn()
4235 if (!asoc->stream.si->validate_ftsn(chunk)) in sctp_sf_eat_fwd_tsn()
4241 SCTP_CHUNK(chunk)); in sctp_sf_eat_fwd_tsn()
4269 struct sctp_chunk *chunk = arg; in sctp_sf_eat_fwd_tsn_fast() local
4273 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_fwd_tsn_fast()
4283 if (!sctp_chunk_length_valid(chunk, sctp_ftsnchk_len(&asoc->stream))) in sctp_sf_eat_fwd_tsn_fast()
4287 fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data; in sctp_sf_eat_fwd_tsn_fast()
4288 chunk->subh.fwdtsn_hdr = fwdtsn_hdr; in sctp_sf_eat_fwd_tsn_fast()
4289 len = ntohs(chunk->chunk_hdr->length); in sctp_sf_eat_fwd_tsn_fast()
4291 skb_pull(chunk->skb, len); in sctp_sf_eat_fwd_tsn_fast()
4302 if (!asoc->stream.si->validate_ftsn(chunk)) in sctp_sf_eat_fwd_tsn_fast()
4308 SCTP_CHUNK(chunk)); in sctp_sf_eat_fwd_tsn_fast()
4350 struct sctp_chunk *chunk) in sctp_sf_authenticate() argument
4360 auth_hdr = (struct sctp_authhdr *)chunk->skb->data; in sctp_sf_authenticate()
4361 chunk->subh.auth_hdr = auth_hdr; in sctp_sf_authenticate()
4362 skb_pull(chunk->skb, sizeof(*auth_hdr)); in sctp_sf_authenticate()
4383 sig_len = ntohs(chunk->chunk_hdr->length) - in sctp_sf_authenticate()
4397 skb_pull(chunk->skb, sig_len); in sctp_sf_authenticate()
4405 sctp_auth_calculate_hmac(asoc, chunk->skb, in sctp_sf_authenticate()
4406 (struct sctp_auth_chunk *)chunk->chunk_hdr, in sctp_sf_authenticate()
4416 chunk->auth = 1; in sctp_sf_authenticate()
4429 struct sctp_chunk *chunk = arg; in sctp_sf_eat_auth() local
4438 if (!sctp_vtag_verify(chunk, asoc)) { in sctp_sf_eat_auth()
4445 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_auth_chunk))) in sctp_sf_eat_auth()
4449 auth_hdr = (struct sctp_authhdr *)chunk->skb->data; in sctp_sf_eat_auth()
4450 error = sctp_sf_authenticate(asoc, chunk); in sctp_sf_eat_auth()
4456 err_chunk = sctp_make_op_error(asoc, chunk, in sctp_sf_eat_auth()
4530 pr_debug("%s: processing unknown chunk id:%d\n", __func__, type.chunk); in sctp_sf_unk_chunk()
4543 switch (type.chunk & SCTP_CID_ACTION_MASK) { in sctp_sf_unk_chunk()
4606 struct sctp_chunk *chunk = arg; in sctp_sf_discard_chunk() local
4608 if (asoc && !sctp_vtag_verify(chunk, asoc)) in sctp_sf_discard_chunk()
4615 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_discard_chunk()
4619 pr_debug("%s: chunk:%d is discarded\n", __func__, type.chunk); in sctp_sf_discard_chunk()
4676 struct sctp_chunk *chunk = arg; in sctp_sf_violation() local
4678 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_violation()
4682 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_chunkhdr))) in sctp_sf_violation()
4702 struct sctp_chunk *chunk = arg; in sctp_sf_abort_violation() local
4720 abort = sctp_make_abort_violation(asoc, chunk, payload, paylen); in sctp_sf_abort_violation()
4726 if (chunk->chunk_hdr->type == SCTP_CID_INIT_ACK && in sctp_sf_abort_violation()
4730 initack = (struct sctp_initack_chunk *)chunk->chunk_hdr; in sctp_sf_abort_violation()
4731 if (!sctp_chunk_length_valid(chunk, sizeof(*initack))) in sctp_sf_abort_violation()
4760 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_sf_abort_violation()
4766 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_sf_abort_violation()
4839 struct sctp_chunk *chunk = arg; in sctp_sf_violation_paramlen() local
4845 abort = sctp_make_violation_paramlen(asoc, chunk, param); in sctp_sf_violation_paramlen()
5524 struct sctp_chunk *chunk = arg; in sctp_sf_do_prm_asconf() local
5526 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk)); in sctp_sf_do_prm_asconf()
5529 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk)); in sctp_sf_do_prm_asconf()
5541 struct sctp_chunk *chunk = arg; in sctp_sf_do_prm_reconf() local
5543 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk)); in sctp_sf_do_prm_reconf()
5686 struct sctp_chunk *chunk = arg; in sctp_sf_do_9_2_shutdown_ack() local
5696 if (chunk) { in sctp_sf_do_9_2_shutdown_ack()
5697 if (!sctp_vtag_verify(chunk, asoc)) in sctp_sf_do_9_2_shutdown_ack()
5703 chunk, sizeof(struct sctp_shutdown_chunk))) in sctp_sf_do_9_2_shutdown_ack()
5711 reply = sctp_make_shutdown_ack(asoc, chunk); in sctp_sf_do_9_2_shutdown_ack()
6094 struct sctp_chunk *chunk = asoc->addip_last_asconf; in sctp_sf_t4_timer_expire() local
6095 struct sctp_transport *transport = chunk->transport; in sctp_sf_t4_timer_expire()
6108 sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk)); in sctp_sf_t4_timer_expire()
6283 pr_debug("%s: timer %d ignored\n", __func__, type.chunk); in sctp_sf_timer_ignore()
6293 static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk) in sctp_sm_pull_sack() argument
6303 sack = (struct sctp_sackhdr *) chunk->skb->data; in sctp_sm_pull_sack()
6309 if (len > chunk->skb->len) in sctp_sm_pull_sack()
6312 skb_pull(chunk->skb, len); in sctp_sm_pull_sack()
6324 struct sctp_chunk *chunk, in sctp_abort_pkt_new() argument
6330 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_abort_pkt_new()
6336 abort = sctp_make_abort(asoc, chunk, paylen); in sctp_abort_pkt_new()
6344 packet->vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_abort_pkt_new()
6365 const struct sctp_chunk *chunk) in sctp_ootb_pkt_new() argument
6373 sport = ntohs(chunk->sctp_hdr->dest); in sctp_ootb_pkt_new()
6374 dport = ntohs(chunk->sctp_hdr->source); in sctp_ootb_pkt_new()
6383 switch (chunk->chunk_hdr->type) { in sctp_ootb_pkt_new()
6389 initack = (struct sctp_initack_chunk *)chunk->chunk_hdr; in sctp_ootb_pkt_new()
6401 switch (chunk->chunk_hdr->type) { in sctp_ootb_pkt_new()
6406 init = (struct sctp_init_chunk *)chunk->chunk_hdr; in sctp_ootb_pkt_new()
6411 vtag = ntohl(chunk->sctp_hdr->vtag); in sctp_ootb_pkt_new()
6417 transport = sctp_transport_new(net, sctp_source(chunk), GFP_ATOMIC); in sctp_ootb_pkt_new()
6421 transport->encap_port = SCTP_INPUT_CB(chunk->skb)->encap_port; in sctp_ootb_pkt_new()
6426 sctp_transport_route(transport, (union sctp_addr *)&chunk->dest, in sctp_ootb_pkt_new()
6449 const struct sctp_chunk *chunk, in sctp_send_stale_cookie_err() argument
6456 packet = sctp_ootb_pkt_new(net, asoc, chunk); in sctp_send_stale_cookie_err()
6461 cookie = chunk->subh.cookie_hdr; in sctp_send_stale_cookie_err()
6478 struct sctp_chunk *chunk, in sctp_eat_data() argument
6491 data_hdr = (struct sctp_datahdr *)chunk->skb->data; in sctp_eat_data()
6492 chunk->subh.data_hdr = data_hdr; in sctp_eat_data()
6493 skb_pull(chunk->skb, sctp_datahdr_len(&asoc->stream)); in sctp_eat_data()
6510 if (asoc->peer.ecn_capable && !chunk->ecn_ce_done) { in sctp_eat_data()
6511 struct sctp_af *af = SCTP_INPUT_CB(chunk->skb)->af; in sctp_eat_data()
6512 chunk->ecn_ce_done = 1; in sctp_eat_data()
6514 if (af->is_ce(sctp_gso_headskb(chunk->skb))) { in sctp_eat_data()
6526 if (chunk->asoc) in sctp_eat_data()
6527 chunk->asoc->stats.outofseqtsns++; in sctp_eat_data()
6540 datalen = ntohs(chunk->chunk_hdr->length); in sctp_eat_data()
6559 if ((!chunk->data_accepted) && (!asoc->rwnd || asoc->rwnd_over || in sctp_eat_data()
6605 err = sctp_make_abort_no_data(asoc, chunk, tsn); in sctp_eat_data()
6623 chunk->data_accepted = 1; in sctp_eat_data()
6628 if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) { in sctp_eat_data()
6630 if (chunk->asoc) in sctp_eat_data()
6631 chunk->asoc->stats.iuodchunks++; in sctp_eat_data()
6634 if (chunk->asoc) in sctp_eat_data()
6635 chunk->asoc->stats.iodchunks++; in sctp_eat_data()
6650 err = sctp_make_op_error(asoc, chunk, SCTP_ERROR_INV_STRM, in sctp_eat_data()
6667 if (!asoc->stream.si->validate_data(chunk)) in sctp_eat_data()
6674 sctp_add_cmd_sf(commands, deliver, SCTP_CHUNK(chunk)); in sctp_eat_data()