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