xfrm4: strip ECN and IP Precedence bits in policy lookup
[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         struct sctp_fwdtsn_skip *skip;
3639         __u16 len;
3640         __u32 tsn;
3641
3642         if (!sctp_vtag_verify(chunk, asoc)) {
3643                 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG,
3644                                 SCTP_NULL());
3645                 return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
3646         }
3647
3648         /* Make sure that the FORWARD_TSN chunk has valid length.  */
3649         if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_fwdtsn_chunk)))
3650                 return sctp_sf_violation_chunklen(ep, asoc, type, arg,
3651                                                   commands);
3652
3653         fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data;
3654         chunk->subh.fwdtsn_hdr = fwdtsn_hdr;
3655         len = ntohs(chunk->chunk_hdr->length);
3656         len -= sizeof(struct sctp_chunkhdr);
3657         skb_pull(chunk->skb, len);
3658
3659         tsn = ntohl(fwdtsn_hdr->new_cum_tsn);
3660         SCTP_DEBUG_PRINTK("%s: TSN 0x%x.\n", __func__, tsn);
3661
3662         /* The TSN is too high--silently discard the chunk and count on it
3663          * getting retransmitted later.
3664          */
3665         if (sctp_tsnmap_check(&asoc->peer.tsn_map, tsn) < 0)
3666                 goto discard_noforce;
3667
3668         /* Silently discard the chunk if stream-id is not valid */
3669         sctp_walk_fwdtsn(skip, chunk) {
3670                 if (ntohs(skip->stream) >= asoc->c.sinit_max_instreams)
3671                         goto discard_noforce;
3672         }
3673
3674         sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_FWDTSN, SCTP_U32(tsn));
3675         if (len > sizeof(struct sctp_fwdtsn_hdr))
3676                 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_FWDTSN,
3677                                 SCTP_CHUNK(chunk));
3678
3679         /* Count this as receiving DATA. */
3680         if (asoc->autoclose) {
3681                 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART,
3682                                 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE));
3683         }
3684
3685         /* FIXME: For now send a SACK, but DATA processing may
3686          * send another.
3687          */
3688         sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_NOFORCE());
3689
3690         return SCTP_DISPOSITION_CONSUME;
3691
3692 discard_noforce:
3693         return SCTP_DISPOSITION_DISCARD;
3694 }
3695
3696 sctp_disposition_t sctp_sf_eat_fwd_tsn_fast(
3697         const struct sctp_endpoint *ep,
3698         const struct sctp_association *asoc,
3699         const sctp_subtype_t type,
3700         void *arg,
3701         sctp_cmd_seq_t *commands)
3702 {
3703         struct sctp_chunk *chunk = arg;
3704         struct sctp_fwdtsn_hdr *fwdtsn_hdr;
3705         struct sctp_fwdtsn_skip *skip;
3706         __u16 len;
3707         __u32 tsn;
3708
3709         if (!sctp_vtag_verify(chunk, asoc)) {
3710                 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG,
3711                                 SCTP_NULL());
3712                 return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
3713         }
3714
3715         /* Make sure that the FORWARD_TSN chunk has a valid length.  */
3716         if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_fwdtsn_chunk)))
3717                 return sctp_sf_violation_chunklen(ep, asoc, type, arg,
3718                                                   commands);
3719
3720         fwdtsn_hdr = (struct sctp_fwdtsn_hdr *)chunk->skb->data;
3721         chunk->subh.fwdtsn_hdr = fwdtsn_hdr;
3722         len = ntohs(chunk->chunk_hdr->length);
3723         len -= sizeof(struct sctp_chunkhdr);
3724         skb_pull(chunk->skb, len);
3725
3726         tsn = ntohl(fwdtsn_hdr->new_cum_tsn);
3727         SCTP_DEBUG_PRINTK("%s: TSN 0x%x.\n", __func__, tsn);
3728
3729         /* The TSN is too high--silently discard the chunk and count on it
3730          * getting retransmitted later.
3731          */
3732         if (sctp_tsnmap_check(&asoc->peer.tsn_map, tsn) < 0)
3733                 goto gen_shutdown;
3734
3735         /* Silently discard the chunk if stream-id is not valid */
3736         sctp_walk_fwdtsn(skip, chunk) {
3737                 if (ntohs(skip->stream) >= asoc->c.sinit_max_instreams)
3738                         goto gen_shutdown;
3739         }
3740
3741         sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_FWDTSN, SCTP_U32(tsn));
3742         if (len > sizeof(struct sctp_fwdtsn_hdr))
3743                 sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_FWDTSN,
3744                                 SCTP_CHUNK(chunk));
3745
3746         /* Go a head and force a SACK, since we are shutting down. */
3747 gen_shutdown:
3748         /* Implementor's Guide.
3749          *
3750          * While in SHUTDOWN-SENT state, the SHUTDOWN sender MUST immediately
3751          * respond to each received packet containing one or more DATA chunk(s)
3752          * with a SACK, a SHUTDOWN chunk, and restart the T2-shutdown timer
3753          */
3754         sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SHUTDOWN, SCTP_NULL());
3755         sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE());
3756         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART,
3757                         SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN));
3758
3759         return SCTP_DISPOSITION_CONSUME;
3760 }
3761
3762 /*
3763  * SCTP-AUTH Section 6.3 Receving authenticated chukns
3764  *
3765  *    The receiver MUST use the HMAC algorithm indicated in the HMAC
3766  *    Identifier field.  If this algorithm was not specified by the
3767  *    receiver in the HMAC-ALGO parameter in the INIT or INIT-ACK chunk
3768  *    during association setup, the AUTH chunk and all chunks after it MUST
3769  *    be discarded and an ERROR chunk SHOULD be sent with the error cause
3770  *    defined in Section 4.1.
3771  *
3772  *    If an endpoint with no shared key receives a Shared Key Identifier
3773  *    other than 0, it MUST silently discard all authenticated chunks.  If
3774  *    the endpoint has at least one endpoint pair shared key for the peer,
3775  *    it MUST use the key specified by the Shared Key Identifier if a
3776  *    key has been configured for that Shared Key Identifier.  If no
3777  *    endpoint pair shared key has been configured for that Shared Key
3778  *    Identifier, all authenticated chunks MUST be silently discarded.
3779  *
3780  * Verification Tag:  8.5 Verification Tag [Normal verification]
3781  *
3782  * The return value is the disposition of the chunk.
3783  */
3784 static sctp_ierror_t sctp_sf_authenticate(const struct sctp_endpoint *ep,
3785                                     const struct sctp_association *asoc,
3786                                     const sctp_subtype_t type,
3787                                     struct sctp_chunk *chunk)
3788 {
3789         struct sctp_authhdr *auth_hdr;
3790         struct sctp_hmac *hmac;
3791         unsigned int sig_len;
3792         __u16 key_id;
3793         __u8 *save_digest;
3794         __u8 *digest;
3795
3796         /* Pull in the auth header, so we can do some more verification */
3797         auth_hdr = (struct sctp_authhdr *)chunk->skb->data;
3798         chunk->subh.auth_hdr = auth_hdr;
3799         skb_pull(chunk->skb, sizeof(struct sctp_authhdr));
3800
3801         /* Make sure that we suport the HMAC algorithm from the auth
3802          * chunk.
3803          */
3804         if (!sctp_auth_asoc_verify_hmac_id(asoc, auth_hdr->hmac_id))
3805                 return SCTP_IERROR_AUTH_BAD_HMAC;
3806
3807         /* Make sure that the provided shared key identifier has been
3808          * configured
3809          */
3810         key_id = ntohs(auth_hdr->shkey_id);
3811         if (key_id != asoc->active_key_id && !sctp_auth_get_shkey(asoc, key_id))
3812                 return SCTP_IERROR_AUTH_BAD_KEYID;
3813
3814
3815         /* Make sure that the length of the signature matches what
3816          * we expect.
3817          */
3818         sig_len = ntohs(chunk->chunk_hdr->length) - sizeof(sctp_auth_chunk_t);
3819         hmac = sctp_auth_get_hmac(ntohs(auth_hdr->hmac_id));
3820         if (sig_len != hmac->hmac_len)
3821                 return SCTP_IERROR_PROTO_VIOLATION;
3822
3823         /* Now that we've done validation checks, we can compute and
3824          * verify the hmac.  The steps involved are:
3825          *  1. Save the digest from the chunk.
3826          *  2. Zero out the digest in the chunk.
3827          *  3. Compute the new digest
3828          *  4. Compare saved and new digests.
3829          */
3830         digest = auth_hdr->hmac;
3831         skb_pull(chunk->skb, sig_len);
3832
3833         save_digest = kmemdup(digest, sig_len, GFP_ATOMIC);
3834         if (!save_digest)
3835                 goto nomem;
3836
3837         memset(digest, 0, sig_len);
3838
3839         sctp_auth_calculate_hmac(asoc, chunk->skb,
3840                                 (struct sctp_auth_chunk *)chunk->chunk_hdr,
3841                                 GFP_ATOMIC);
3842
3843         /* Discard the packet if the digests do not match */
3844         if (memcmp(save_digest, digest, sig_len)) {
3845                 kfree(save_digest);
3846                 return SCTP_IERROR_BAD_SIG;
3847         }
3848
3849         kfree(save_digest);
3850         chunk->auth = 1;
3851
3852         return SCTP_IERROR_NO_ERROR;
3853 nomem:
3854         return SCTP_IERROR_NOMEM;
3855 }
3856
3857 sctp_disposition_t sctp_sf_eat_auth(const struct sctp_endpoint *ep,
3858                                     const struct sctp_association *asoc,
3859                                     const sctp_subtype_t type,
3860                                     void *arg,
3861                                     sctp_cmd_seq_t *commands)
3862 {
3863         struct sctp_authhdr *auth_hdr;
3864         struct sctp_chunk *chunk = arg;
3865         struct sctp_chunk *err_chunk;
3866         sctp_ierror_t error;
3867
3868         /* Make sure that the peer has AUTH capable */
3869         if (!asoc->peer.auth_capable)
3870                 return sctp_sf_unk_chunk(ep, asoc, type, arg, commands);
3871
3872         if (!sctp_vtag_verify(chunk, asoc)) {
3873                 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_BAD_TAG,
3874                                 SCTP_NULL());
3875                 return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
3876         }
3877
3878         /* Make sure that the AUTH chunk has valid length.  */
3879         if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_auth_chunk)))
3880                 return sctp_sf_violation_chunklen(ep, asoc, type, arg,
3881                                                   commands);
3882
3883         auth_hdr = (struct sctp_authhdr *)chunk->skb->data;
3884         error = sctp_sf_authenticate(ep, asoc, type, chunk);
3885         switch (error) {
3886                 case SCTP_IERROR_AUTH_BAD_HMAC:
3887                         /* Generate the ERROR chunk and discard the rest
3888                          * of the packet
3889                          */
3890                         err_chunk = sctp_make_op_error(asoc, chunk,
3891                                                         SCTP_ERROR_UNSUP_HMAC,
3892                                                         &auth_hdr->hmac_id,
3893                                                         sizeof(__u16));
3894                         if (err_chunk) {
3895                                 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
3896                                                 SCTP_CHUNK(err_chunk));
3897                         }
3898                         /* Fall Through */
3899                 case SCTP_IERROR_AUTH_BAD_KEYID:
3900                 case SCTP_IERROR_BAD_SIG:
3901                         return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
3902                         break;
3903                 case SCTP_IERROR_PROTO_VIOLATION:
3904                         return sctp_sf_violation_chunklen(ep, asoc, type, arg,
3905                                                           commands);
3906                         break;
3907                 case SCTP_IERROR_NOMEM:
3908                         return SCTP_DISPOSITION_NOMEM;
3909                 default:
3910                         break;
3911         }
3912
3913         if (asoc->active_key_id != ntohs(auth_hdr->shkey_id)) {
3914                 struct sctp_ulpevent *ev;
3915
3916                 ev = sctp_ulpevent_make_authkey(asoc, ntohs(auth_hdr->shkey_id),
3917                                     SCTP_AUTH_NEWKEY, GFP_ATOMIC);
3918
3919                 if (!ev)
3920                         return -ENOMEM;
3921
3922                 sctp_add_cmd_sf(commands, SCTP_CMD_EVENT_ULP,
3923                                 SCTP_ULPEVENT(ev));
3924         }
3925
3926         return SCTP_DISPOSITION_CONSUME;
3927 }
3928
3929 /*
3930  * Process an unknown chunk.
3931  *
3932  * Section: 3.2. Also, 2.1 in the implementor's guide.
3933  *
3934  * Chunk Types are encoded such that the highest-order two bits specify
3935  * the action that must be taken if the processing endpoint does not
3936  * recognize the Chunk Type.
3937  *
3938  * 00 - Stop processing this SCTP packet and discard it, do not process
3939  *      any further chunks within it.
3940  *
3941  * 01 - Stop processing this SCTP packet and discard it, do not process
3942  *      any further chunks within it, and report the unrecognized
3943  *      chunk in an 'Unrecognized Chunk Type'.
3944  *
3945  * 10 - Skip this chunk and continue processing.
3946  *
3947  * 11 - Skip this chunk and continue processing, but report in an ERROR
3948  *      Chunk using the 'Unrecognized Chunk Type' cause of error.
3949  *
3950  * The return value is the disposition of the chunk.
3951  */
3952 sctp_disposition_t sctp_sf_unk_chunk(const struct sctp_endpoint *ep,
3953                                      const struct sctp_association *asoc,
3954                                      const sctp_subtype_t type,
3955                                      void *arg,
3956                                      sctp_cmd_seq_t *commands)
3957 {
3958         struct sctp_chunk *unk_chunk = arg;
3959         struct sctp_chunk *err_chunk;
3960         sctp_chunkhdr_t *hdr;
3961
3962         SCTP_DEBUG_PRINTK("Processing the unknown chunk id %d.\n", type.chunk);
3963
3964         if (!sctp_vtag_verify(unk_chunk, asoc))
3965                 return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
3966
3967         /* Make sure that the chunk has a valid length.
3968          * Since we don't know the chunk type, we use a general
3969          * chunkhdr structure to make a comparison.
3970          */
3971         if (!sctp_chunk_length_valid(unk_chunk, sizeof(sctp_chunkhdr_t)))
3972                 return sctp_sf_violation_chunklen(ep, asoc, type, arg,
3973                                                   commands);
3974
3975         switch (type.chunk & SCTP_CID_ACTION_MASK) {
3976         case SCTP_CID_ACTION_DISCARD:
3977                 /* Discard the packet.  */
3978                 return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
3979                 break;
3980         case SCTP_CID_ACTION_DISCARD_ERR:
3981                 /* Generate an ERROR chunk as response. */
3982                 hdr = unk_chunk->chunk_hdr;
3983                 err_chunk = sctp_make_op_error(asoc, unk_chunk,
3984                                                SCTP_ERROR_UNKNOWN_CHUNK, hdr,
3985                                                WORD_ROUND(ntohs(hdr->length)));
3986                 if (err_chunk) {
3987                         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
3988                                         SCTP_CHUNK(err_chunk));
3989                 }
3990
3991                 /* Discard the packet.  */
3992                 sctp_sf_pdiscard(ep, asoc, type, arg, commands);
3993                 return SCTP_DISPOSITION_CONSUME;
3994                 break;
3995         case SCTP_CID_ACTION_SKIP:
3996                 /* Skip the chunk.  */
3997                 return SCTP_DISPOSITION_DISCARD;
3998                 break;
3999         case SCTP_CID_ACTION_SKIP_ERR:
4000                 /* Generate an ERROR chunk as response. */
4001                 hdr = unk_chunk->chunk_hdr;
4002                 err_chunk = sctp_make_op_error(asoc, unk_chunk,
4003                                                SCTP_ERROR_UNKNOWN_CHUNK, hdr,
4004                                                WORD_ROUND(ntohs(hdr->length)));
4005                 if (err_chunk) {
4006                         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
4007                                         SCTP_CHUNK(err_chunk));
4008                 }
4009                 /* Skip the chunk.  */
4010                 return SCTP_DISPOSITION_CONSUME;
4011                 break;
4012         default:
4013                 break;
4014         }
4015
4016         return SCTP_DISPOSITION_DISCARD;
4017 }
4018
4019 /*
4020  * Discard the chunk.
4021  *
4022  * Section: 0.2, 5.2.3, 5.2.5, 5.2.6, 6.0, 8.4.6, 8.5.1c, 9.2
4023  * [Too numerous to mention...]
4024  * Verification Tag: No verification needed.
4025  * Inputs
4026  * (endpoint, asoc, chunk)
4027  *
4028  * Outputs
4029  * (asoc, reply_msg, msg_up, timers, counters)
4030  *
4031  * The return value is the disposition of the chunk.
4032  */
4033 sctp_disposition_t sctp_sf_discard_chunk(const struct sctp_endpoint *ep,
4034                                          const struct sctp_association *asoc,
4035                                          const sctp_subtype_t type,
4036                                          void *arg,
4037                                          sctp_cmd_seq_t *commands)
4038 {
4039         struct sctp_chunk *chunk = arg;
4040
4041         /* Make sure that the chunk has a valid length.
4042          * Since we don't know the chunk type, we use a general
4043          * chunkhdr structure to make a comparison.
4044          */
4045         if (!sctp_chunk_length_valid(chunk, sizeof(sctp_chunkhdr_t)))
4046                 return sctp_sf_violation_chunklen(ep, asoc, type, arg,
4047                                                   commands);
4048
4049         SCTP_DEBUG_PRINTK("Chunk %d is discarded\n", type.chunk);
4050         return SCTP_DISPOSITION_DISCARD;
4051 }
4052
4053 /*
4054  * Discard the whole packet.
4055  *
4056  * Section: 8.4 2)
4057  *
4058  * 2) If the OOTB packet contains an ABORT chunk, the receiver MUST
4059  *    silently discard the OOTB packet and take no further action.
4060  *
4061  * Verification Tag: No verification necessary
4062  *
4063  * Inputs
4064  * (endpoint, asoc, chunk)
4065  *
4066  * Outputs
4067  * (asoc, reply_msg, msg_up, timers, counters)
4068  *
4069  * The return value is the disposition of the chunk.
4070  */
4071 sctp_disposition_t sctp_sf_pdiscard(const struct sctp_endpoint *ep,
4072                                     const struct sctp_association *asoc,
4073                                     const sctp_subtype_t type,
4074                                     void *arg,
4075                                     sctp_cmd_seq_t *commands)
4076 {
4077         SCTP_INC_STATS(SCTP_MIB_IN_PKT_DISCARDS);
4078         sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET, SCTP_NULL());
4079
4080         return SCTP_DISPOSITION_CONSUME;
4081 }
4082
4083
4084 /*
4085  * The other end is violating protocol.
4086  *
4087  * Section: Not specified
4088  * Verification Tag: Not specified
4089  * Inputs
4090  * (endpoint, asoc, chunk)
4091  *
4092  * Outputs
4093  * (asoc, reply_msg, msg_up, timers, counters)
4094  *
4095  * We simply tag the chunk as a violation.  The state machine will log
4096  * the violation and continue.
4097  */
4098 sctp_disposition_t sctp_sf_violation(const struct sctp_endpoint *ep,
4099                                      const struct sctp_association *asoc,
4100                                      const sctp_subtype_t type,
4101                                      void *arg,
4102                                      sctp_cmd_seq_t *commands)
4103 {
4104         struct sctp_chunk *chunk = arg;
4105
4106         /* Make sure that the chunk has a valid length. */
4107         if (!sctp_chunk_length_valid(chunk, sizeof(sctp_chunkhdr_t)))
4108                 return sctp_sf_violation_chunklen(ep, asoc, type, arg,
4109                                                   commands);
4110
4111         return SCTP_DISPOSITION_VIOLATION;
4112 }
4113
4114 /*
4115  * Common function to handle a protocol violation.
4116  */
4117 static sctp_disposition_t sctp_sf_abort_violation(
4118                                      const struct sctp_endpoint *ep,
4119                                      const struct sctp_association *asoc,
4120                                      void *arg,
4121                                      sctp_cmd_seq_t *commands,
4122                                      const __u8 *payload,
4123                                      const size_t paylen)
4124 {
4125         struct sctp_packet *packet = NULL;
4126         struct sctp_chunk *chunk =  arg;
4127         struct sctp_chunk *abort = NULL;
4128
4129         /* SCTP-AUTH, Section 6.3:
4130          *    It should be noted that if the receiver wants to tear
4131          *    down an association in an authenticated way only, the
4132          *    handling of malformed packets should not result in
4133          *    tearing down the association.
4134          *
4135          * This means that if we only want to abort associations
4136          * in an authenticated way (i.e AUTH+ABORT), then we
4137          * can't destroy this association just becuase the packet
4138          * was malformed.
4139          */
4140         if (sctp_auth_recv_cid(SCTP_CID_ABORT, asoc))
4141                 goto discard;
4142
4143         /* Make the abort chunk. */
4144         abort = sctp_make_abort_violation(asoc, chunk, payload, paylen);
4145         if (!abort)
4146                 goto nomem;
4147
4148         if (asoc) {
4149                 /* Treat INIT-ACK as a special case during COOKIE-WAIT. */
4150                 if (chunk->chunk_hdr->type == SCTP_CID_INIT_ACK &&
4151                     !asoc->peer.i.init_tag) {
4152                         sctp_initack_chunk_t *initack;
4153
4154                         initack = (sctp_initack_chunk_t *)chunk->chunk_hdr;
4155                         if (!sctp_chunk_length_valid(chunk,
4156                                                      sizeof(sctp_initack_chunk_t)))
4157                                 abort->chunk_hdr->flags |= SCTP_CHUNK_FLAG_T;
4158                         else {
4159                                 unsigned int inittag;
4160
4161                                 inittag = ntohl(initack->init_hdr.init_tag);
4162                                 sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_INITTAG,
4163                                                 SCTP_U32(inittag));
4164                         }
4165                 }
4166
4167                 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort));
4168                 SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS);
4169
4170                 if (asoc->state <= SCTP_STATE_COOKIE_ECHOED) {
4171                         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
4172                                         SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT));
4173                         sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
4174                                         SCTP_ERROR(ECONNREFUSED));
4175                         sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
4176                                         SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION));
4177                 } else {
4178                         sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
4179                                         SCTP_ERROR(ECONNABORTED));
4180                         sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
4181                                         SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION));
4182                         SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
4183                 }
4184         } else {
4185                 packet = sctp_ootb_pkt_new(asoc, chunk);
4186
4187                 if (!packet)
4188                         goto nomem_pkt;
4189
4190                 if (sctp_test_T_bit(abort))
4191                         packet->vtag = ntohl(chunk->sctp_hdr->vtag);
4192
4193                 abort->skb->sk = ep->base.sk;
4194
4195                 sctp_packet_append_chunk(packet, abort);
4196
4197                 sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT,
4198                         SCTP_PACKET(packet));
4199
4200                 SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS);
4201         }
4202
4203 discard:
4204         sctp_sf_pdiscard(ep, asoc, SCTP_ST_CHUNK(0), arg, commands);
4205
4206         SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
4207
4208         return SCTP_DISPOSITION_ABORT;
4209
4210 nomem_pkt:
4211         sctp_chunk_free(abort);
4212 nomem:
4213         return SCTP_DISPOSITION_NOMEM;
4214 }
4215
4216 /*
4217  * Handle a protocol violation when the chunk length is invalid.
4218  * "Invalid" length is identified as smaller then the minimal length a
4219  * given chunk can be.  For example, a SACK chunk has invalid length
4220  * if it's length is set to be smaller then the size of sctp_sack_chunk_t.
4221  *
4222  * We inform the other end by sending an ABORT with a Protocol Violation
4223  * error code.
4224  *
4225  * Section: Not specified
4226  * Verification Tag:  Nothing to do
4227  * Inputs
4228  * (endpoint, asoc, chunk)
4229  *
4230  * Outputs
4231  * (reply_msg, msg_up, counters)
4232  *
4233  * Generate an  ABORT chunk and terminate the association.
4234  */
4235 static sctp_disposition_t sctp_sf_violation_chunklen(
4236                                      const struct sctp_endpoint *ep,
4237                                      const struct sctp_association *asoc,
4238                                      const sctp_subtype_t type,
4239                                      void *arg,
4240                                      sctp_cmd_seq_t *commands)
4241 {
4242         static const char err_str[]="The following chunk had invalid length:";
4243
4244         return sctp_sf_abort_violation(ep, asoc, arg, commands, err_str,
4245                                         sizeof(err_str));
4246 }
4247
4248 /*
4249  * Handle a protocol violation when the parameter length is invalid.
4250  * "Invalid" length is identified as smaller then the minimal length a
4251  * given parameter can be.
4252  */
4253 static sctp_disposition_t sctp_sf_violation_paramlen(
4254                                      const struct sctp_endpoint *ep,
4255                                      const struct sctp_association *asoc,
4256                                      const sctp_subtype_t type,
4257                                      void *arg, void *ext,
4258                                      sctp_cmd_seq_t *commands)
4259 {
4260         struct sctp_chunk *chunk =  arg;
4261         struct sctp_paramhdr *param = ext;
4262         struct sctp_chunk *abort = NULL;
4263
4264         if (sctp_auth_recv_cid(SCTP_CID_ABORT, asoc))
4265                 goto discard;
4266
4267         /* Make the abort chunk. */
4268         abort = sctp_make_violation_paramlen(asoc, chunk, param);
4269         if (!abort)
4270                 goto nomem;
4271
4272         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort));
4273         SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS);
4274
4275         sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
4276                         SCTP_ERROR(ECONNABORTED));
4277         sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
4278                         SCTP_PERR(SCTP_ERROR_PROTO_VIOLATION));
4279         SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
4280
4281 discard:
4282         sctp_sf_pdiscard(ep, asoc, SCTP_ST_CHUNK(0), arg, commands);
4283
4284         SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
4285
4286         return SCTP_DISPOSITION_ABORT;
4287 nomem:
4288         return SCTP_DISPOSITION_NOMEM;
4289 }
4290
4291 /* Handle a protocol violation when the peer trying to advance the
4292  * cumulative tsn ack to a point beyond the max tsn currently sent.
4293  *
4294  * We inform the other end by sending an ABORT with a Protocol Violation
4295  * error code.
4296  */
4297 static sctp_disposition_t sctp_sf_violation_ctsn(
4298                                      const struct sctp_endpoint *ep,
4299                                      const struct sctp_association *asoc,
4300                                      const sctp_subtype_t type,
4301                                      void *arg,
4302                                      sctp_cmd_seq_t *commands)
4303 {
4304         static const char err_str[]="The cumulative tsn ack beyond the max tsn currently sent:";
4305
4306         return sctp_sf_abort_violation(ep, asoc, arg, commands, err_str,
4307                                         sizeof(err_str));
4308 }
4309
4310 /* Handle protocol violation of an invalid chunk bundling.  For example,
4311  * when we have an association and we recieve bundled INIT-ACK, or
4312  * SHUDOWN-COMPLETE, our peer is clearly violationg the "MUST NOT bundle"
4313  * statement from the specs.  Additinally, there might be an attacker
4314  * on the path and we may not want to continue this communication.
4315  */
4316 static sctp_disposition_t sctp_sf_violation_chunk(
4317                                      const struct sctp_endpoint *ep,
4318                                      const struct sctp_association *asoc,
4319                                      const sctp_subtype_t type,
4320                                      void *arg,
4321                                      sctp_cmd_seq_t *commands)
4322 {
4323         static const char err_str[]="The following chunk violates protocol:";
4324
4325         if (!asoc)
4326                 return sctp_sf_violation(ep, asoc, type, arg, commands);
4327
4328         return sctp_sf_abort_violation(ep, asoc, arg, commands, err_str,
4329                                         sizeof(err_str));
4330 }
4331 /***************************************************************************
4332  * These are the state functions for handling primitive (Section 10) events.
4333  ***************************************************************************/
4334 /*
4335  * sctp_sf_do_prm_asoc
4336  *
4337  * Section: 10.1 ULP-to-SCTP
4338  * B) Associate
4339  *
4340  * Format: ASSOCIATE(local SCTP instance name, destination transport addr,
4341  * outbound stream count)
4342  * -> association id [,destination transport addr list] [,outbound stream
4343  * count]
4344  *
4345  * This primitive allows the upper layer to initiate an association to a
4346  * specific peer endpoint.
4347  *
4348  * The peer endpoint shall be specified by one of the transport addresses
4349  * which defines the endpoint (see Section 1.4).  If the local SCTP
4350  * instance has not been initialized, the ASSOCIATE is considered an
4351  * error.
4352  * [This is not relevant for the kernel implementation since we do all
4353  * initialization at boot time.  It we hadn't initialized we wouldn't
4354  * get anywhere near this code.]
4355  *
4356  * An association id, which is a local handle to the SCTP association,
4357  * will be returned on successful establishment of the association. If
4358  * SCTP is not able to open an SCTP association with the peer endpoint,
4359  * an error is returned.
4360  * [In the kernel implementation, the struct sctp_association needs to
4361  * be created BEFORE causing this primitive to run.]
4362  *
4363  * Other association parameters may be returned, including the
4364  * complete destination transport addresses of the peer as well as the
4365  * outbound stream count of the local endpoint. One of the transport
4366  * address from the returned destination addresses will be selected by
4367  * the local endpoint as default primary path for sending SCTP packets
4368  * to this peer.  The returned "destination transport addr list" can
4369  * be used by the ULP to change the default primary path or to force
4370  * sending a packet to a specific transport address.  [All of this
4371  * stuff happens when the INIT ACK arrives.  This is a NON-BLOCKING
4372  * function.]
4373  *
4374  * Mandatory attributes:
4375  *
4376  * o local SCTP instance name - obtained from the INITIALIZE operation.
4377  *   [This is the argument asoc.]
4378  * o destination transport addr - specified as one of the transport
4379  * addresses of the peer endpoint with which the association is to be
4380  * established.
4381  *  [This is asoc->peer.active_path.]
4382  * o outbound stream count - the number of outbound streams the ULP
4383  * would like to open towards this peer endpoint.
4384  * [BUG: This is not currently implemented.]
4385  * Optional attributes:
4386  *
4387  * None.
4388  *
4389  * The return value is a disposition.
4390  */
4391 sctp_disposition_t sctp_sf_do_prm_asoc(const struct sctp_endpoint *ep,
4392                                        const struct sctp_association *asoc,
4393                                        const sctp_subtype_t type,
4394                                        void *arg,
4395                                        sctp_cmd_seq_t *commands)
4396 {
4397         struct sctp_chunk *repl;
4398         struct sctp_association* my_asoc;
4399
4400         /* The comment below says that we enter COOKIE-WAIT AFTER
4401          * sending the INIT, but that doesn't actually work in our
4402          * implementation...
4403          */
4404         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
4405                         SCTP_STATE(SCTP_STATE_COOKIE_WAIT));
4406
4407         /* RFC 2960 5.1 Normal Establishment of an Association
4408          *
4409          * A) "A" first sends an INIT chunk to "Z".  In the INIT, "A"
4410          * must provide its Verification Tag (Tag_A) in the Initiate
4411          * Tag field.  Tag_A SHOULD be a random number in the range of
4412          * 1 to 4294967295 (see 5.3.1 for Tag value selection). ...
4413          */
4414
4415         repl = sctp_make_init(asoc, &asoc->base.bind_addr, GFP_ATOMIC, 0);
4416         if (!repl)
4417                 goto nomem;
4418
4419         /* Cast away the const modifier, as we want to just
4420          * rerun it through as a sideffect.
4421          */
4422         my_asoc = (struct sctp_association *)asoc;
4423         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_ASOC, SCTP_ASOC(my_asoc));
4424
4425         /* Choose transport for INIT. */
4426         sctp_add_cmd_sf(commands, SCTP_CMD_INIT_CHOOSE_TRANSPORT,
4427                         SCTP_CHUNK(repl));
4428
4429         /* After sending the INIT, "A" starts the T1-init timer and
4430          * enters the COOKIE-WAIT state.
4431          */
4432         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START,
4433                         SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT));
4434         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
4435         return SCTP_DISPOSITION_CONSUME;
4436
4437 nomem:
4438         return SCTP_DISPOSITION_NOMEM;
4439 }
4440
4441 /*
4442  * Process the SEND primitive.
4443  *
4444  * Section: 10.1 ULP-to-SCTP
4445  * E) Send
4446  *
4447  * Format: SEND(association id, buffer address, byte count [,context]
4448  *         [,stream id] [,life time] [,destination transport address]
4449  *         [,unorder flag] [,no-bundle flag] [,payload protocol-id] )
4450  * -> result
4451  *
4452  * This is the main method to send user data via SCTP.
4453  *
4454  * Mandatory attributes:
4455  *
4456  *  o association id - local handle to the SCTP association
4457  *
4458  *  o buffer address - the location where the user message to be
4459  *    transmitted is stored;
4460  *
4461  *  o byte count - The size of the user data in number of bytes;
4462  *
4463  * Optional attributes:
4464  *
4465  *  o context - an optional 32 bit integer that will be carried in the
4466  *    sending failure notification to the ULP if the transportation of
4467  *    this User Message fails.
4468  *
4469  *  o stream id - to indicate which stream to send the data on. If not
4470  *    specified, stream 0 will be used.
4471  *
4472  *  o life time - specifies the life time of the user data. The user data
4473  *    will not be sent by SCTP after the life time expires. This
4474  *    parameter can be used to avoid efforts to transmit stale
4475  *    user messages. SCTP notifies the ULP if the data cannot be
4476  *    initiated to transport (i.e. sent to the destination via SCTP's
4477  *    send primitive) within the life time variable. However, the
4478  *    user data will be transmitted if SCTP has attempted to transmit a
4479  *    chunk before the life time expired.
4480  *
4481  *  o destination transport address - specified as one of the destination
4482  *    transport addresses of the peer endpoint to which this packet
4483  *    should be sent. Whenever possible, SCTP should use this destination
4484  *    transport address for sending the packets, instead of the current
4485  *    primary path.
4486  *
4487  *  o unorder flag - this flag, if present, indicates that the user
4488  *    would like the data delivered in an unordered fashion to the peer
4489  *    (i.e., the U flag is set to 1 on all DATA chunks carrying this
4490  *    message).
4491  *
4492  *  o no-bundle flag - instructs SCTP not to bundle this user data with
4493  *    other outbound DATA chunks. SCTP MAY still bundle even when
4494  *    this flag is present, when faced with network congestion.
4495  *
4496  *  o payload protocol-id - A 32 bit unsigned integer that is to be
4497  *    passed to the peer indicating the type of payload protocol data
4498  *    being transmitted. This value is passed as opaque data by SCTP.
4499  *
4500  * The return value is the disposition.
4501  */
4502 sctp_disposition_t sctp_sf_do_prm_send(const struct sctp_endpoint *ep,
4503                                        const struct sctp_association *asoc,
4504                                        const sctp_subtype_t type,
4505                                        void *arg,
4506                                        sctp_cmd_seq_t *commands)
4507 {
4508         struct sctp_chunk *chunk = arg;
4509
4510         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk));
4511         return SCTP_DISPOSITION_CONSUME;
4512 }
4513
4514 /*
4515  * Process the SHUTDOWN primitive.
4516  *
4517  * Section: 10.1:
4518  * C) Shutdown
4519  *
4520  * Format: SHUTDOWN(association id)
4521  * -> result
4522  *
4523  * Gracefully closes an association. Any locally queued user data
4524  * will be delivered to the peer. The association will be terminated only
4525  * after the peer acknowledges all the SCTP packets sent.  A success code
4526  * will be returned on successful termination of the association. If
4527  * attempting to terminate the association results in a failure, an error
4528  * code shall be returned.
4529  *
4530  * Mandatory attributes:
4531  *
4532  *  o association id - local handle to the SCTP association
4533  *
4534  * Optional attributes:
4535  *
4536  * None.
4537  *
4538  * The return value is the disposition.
4539  */
4540 sctp_disposition_t sctp_sf_do_9_2_prm_shutdown(
4541         const struct sctp_endpoint *ep,
4542         const struct sctp_association *asoc,
4543         const sctp_subtype_t type,
4544         void *arg,
4545         sctp_cmd_seq_t *commands)
4546 {
4547         int disposition;
4548
4549         /* From 9.2 Shutdown of an Association
4550          * Upon receipt of the SHUTDOWN primitive from its upper
4551          * layer, the endpoint enters SHUTDOWN-PENDING state and
4552          * remains there until all outstanding data has been
4553          * acknowledged by its peer. The endpoint accepts no new data
4554          * from its upper layer, but retransmits data to the far end
4555          * if necessary to fill gaps.
4556          */
4557         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
4558                         SCTP_STATE(SCTP_STATE_SHUTDOWN_PENDING));
4559
4560         /* sctpimpguide-05 Section 2.12.2
4561          * The sender of the SHUTDOWN MAY also start an overall guard timer
4562          * 'T5-shutdown-guard' to bound the overall time for shutdown sequence.
4563          */
4564         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START,
4565                         SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD));
4566
4567         disposition = SCTP_DISPOSITION_CONSUME;
4568         if (sctp_outq_is_empty(&asoc->outqueue)) {
4569                 disposition = sctp_sf_do_9_2_start_shutdown(ep, asoc, type,
4570                                                             arg, commands);
4571         }
4572         return disposition;
4573 }
4574
4575 /*
4576  * Process the ABORT primitive.
4577  *
4578  * Section: 10.1:
4579  * C) Abort
4580  *
4581  * Format: Abort(association id [, cause code])
4582  * -> result
4583  *
4584  * Ungracefully closes an association. Any locally queued user data
4585  * will be discarded and an ABORT chunk is sent to the peer.  A success code
4586  * will be returned on successful abortion of the association. If
4587  * attempting to abort the association results in a failure, an error
4588  * code shall be returned.
4589  *
4590  * Mandatory attributes:
4591  *
4592  *  o association id - local handle to the SCTP association
4593  *
4594  * Optional attributes:
4595  *
4596  *  o cause code - reason of the abort to be passed to the peer
4597  *
4598  * None.
4599  *
4600  * The return value is the disposition.
4601  */
4602 sctp_disposition_t sctp_sf_do_9_1_prm_abort(
4603         const struct sctp_endpoint *ep,
4604         const struct sctp_association *asoc,
4605         const sctp_subtype_t type,
4606         void *arg,
4607         sctp_cmd_seq_t *commands)
4608 {
4609         /* From 9.1 Abort of an Association
4610          * Upon receipt of the ABORT primitive from its upper
4611          * layer, the endpoint enters CLOSED state and
4612          * discard all outstanding data has been
4613          * acknowledged by its peer. The endpoint accepts no new data
4614          * from its upper layer, but retransmits data to the far end
4615          * if necessary to fill gaps.
4616          */
4617         struct sctp_chunk *abort = arg;
4618         sctp_disposition_t retval;
4619
4620         retval = SCTP_DISPOSITION_CONSUME;
4621
4622         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort));
4623
4624         /* Even if we can't send the ABORT due to low memory delete the
4625          * TCB.  This is a departure from our typical NOMEM handling.
4626          */
4627
4628         sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
4629                         SCTP_ERROR(ECONNABORTED));
4630         /* Delete the established association. */
4631         sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
4632                         SCTP_PERR(SCTP_ERROR_USER_ABORT));
4633
4634         SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
4635         SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
4636
4637         return retval;
4638 }
4639
4640 /* We tried an illegal operation on an association which is closed.  */
4641 sctp_disposition_t sctp_sf_error_closed(const struct sctp_endpoint *ep,
4642                                         const struct sctp_association *asoc,
4643                                         const sctp_subtype_t type,
4644                                         void *arg,
4645                                         sctp_cmd_seq_t *commands)
4646 {
4647         sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_ERROR, SCTP_ERROR(-EINVAL));
4648         return SCTP_DISPOSITION_CONSUME;
4649 }
4650
4651 /* We tried an illegal operation on an association which is shutting
4652  * down.
4653  */
4654 sctp_disposition_t sctp_sf_error_shutdown(const struct sctp_endpoint *ep,
4655                                           const struct sctp_association *asoc,
4656                                           const sctp_subtype_t type,
4657                                           void *arg,
4658                                           sctp_cmd_seq_t *commands)
4659 {
4660         sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_ERROR,
4661                         SCTP_ERROR(-ESHUTDOWN));
4662         return SCTP_DISPOSITION_CONSUME;
4663 }
4664
4665 /*
4666  * sctp_cookie_wait_prm_shutdown
4667  *
4668  * Section: 4 Note: 2
4669  * Verification Tag:
4670  * Inputs
4671  * (endpoint, asoc)
4672  *
4673  * The RFC does not explicitly address this issue, but is the route through the
4674  * state table when someone issues a shutdown while in COOKIE_WAIT state.
4675  *
4676  * Outputs
4677  * (timers)
4678  */
4679 sctp_disposition_t sctp_sf_cookie_wait_prm_shutdown(
4680         const struct sctp_endpoint *ep,
4681         const struct sctp_association *asoc,
4682         const sctp_subtype_t type,
4683         void *arg,
4684         sctp_cmd_seq_t *commands)
4685 {
4686         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
4687                         SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT));
4688
4689         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
4690                         SCTP_STATE(SCTP_STATE_CLOSED));
4691
4692         SCTP_INC_STATS(SCTP_MIB_SHUTDOWNS);
4693
4694         sctp_add_cmd_sf(commands, SCTP_CMD_DELETE_TCB, SCTP_NULL());
4695
4696         return SCTP_DISPOSITION_DELETE_TCB;
4697 }
4698
4699 /*
4700  * sctp_cookie_echoed_prm_shutdown
4701  *
4702  * Section: 4 Note: 2
4703  * Verification Tag:
4704  * Inputs
4705  * (endpoint, asoc)
4706  *
4707  * The RFC does not explcitly address this issue, but is the route through the
4708  * state table when someone issues a shutdown while in COOKIE_ECHOED state.
4709  *
4710  * Outputs
4711  * (timers)
4712  */
4713 sctp_disposition_t sctp_sf_cookie_echoed_prm_shutdown(
4714         const struct sctp_endpoint *ep,
4715         const struct sctp_association *asoc,
4716         const sctp_subtype_t type,
4717         void *arg, sctp_cmd_seq_t *commands)
4718 {
4719         /* There is a single T1 timer, so we should be able to use
4720          * common function with the COOKIE-WAIT state.
4721          */
4722         return sctp_sf_cookie_wait_prm_shutdown(ep, asoc, type, arg, commands);
4723 }
4724
4725 /*
4726  * sctp_sf_cookie_wait_prm_abort
4727  *
4728  * Section: 4 Note: 2
4729  * Verification Tag:
4730  * Inputs
4731  * (endpoint, asoc)
4732  *
4733  * The RFC does not explicitly address this issue, but is the route through the
4734  * state table when someone issues an abort while in COOKIE_WAIT state.
4735  *
4736  * Outputs
4737  * (timers)
4738  */
4739 sctp_disposition_t sctp_sf_cookie_wait_prm_abort(
4740         const struct sctp_endpoint *ep,
4741         const struct sctp_association *asoc,
4742         const sctp_subtype_t type,
4743         void *arg,
4744         sctp_cmd_seq_t *commands)
4745 {
4746         struct sctp_chunk *abort = arg;
4747         sctp_disposition_t retval;
4748
4749         /* Stop T1-init timer */
4750         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
4751                         SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT));
4752         retval = SCTP_DISPOSITION_CONSUME;
4753
4754         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort));
4755
4756         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
4757                         SCTP_STATE(SCTP_STATE_CLOSED));
4758
4759         SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
4760
4761         /* Even if we can't send the ABORT due to low memory delete the
4762          * TCB.  This is a departure from our typical NOMEM handling.
4763          */
4764
4765         sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
4766                         SCTP_ERROR(ECONNREFUSED));
4767         /* Delete the established association. */
4768         sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
4769                         SCTP_PERR(SCTP_ERROR_USER_ABORT));
4770
4771         return retval;
4772 }
4773
4774 /*
4775  * sctp_sf_cookie_echoed_prm_abort
4776  *
4777  * Section: 4 Note: 3
4778  * Verification Tag:
4779  * Inputs
4780  * (endpoint, asoc)
4781  *
4782  * The RFC does not explcitly address this issue, but is the route through the
4783  * state table when someone issues an abort while in COOKIE_ECHOED state.
4784  *
4785  * Outputs
4786  * (timers)
4787  */
4788 sctp_disposition_t sctp_sf_cookie_echoed_prm_abort(
4789         const struct sctp_endpoint *ep,
4790         const struct sctp_association *asoc,
4791         const sctp_subtype_t type,
4792         void *arg,
4793         sctp_cmd_seq_t *commands)
4794 {
4795         /* There is a single T1 timer, so we should be able to use
4796          * common function with the COOKIE-WAIT state.
4797          */
4798         return sctp_sf_cookie_wait_prm_abort(ep, asoc, type, arg, commands);
4799 }
4800
4801 /*
4802  * sctp_sf_shutdown_pending_prm_abort
4803  *
4804  * Inputs
4805  * (endpoint, asoc)
4806  *
4807  * The RFC does not explicitly address this issue, but is the route through the
4808  * state table when someone issues an abort while in SHUTDOWN-PENDING state.
4809  *
4810  * Outputs
4811  * (timers)
4812  */
4813 sctp_disposition_t sctp_sf_shutdown_pending_prm_abort(
4814         const struct sctp_endpoint *ep,
4815         const struct sctp_association *asoc,
4816         const sctp_subtype_t type,
4817         void *arg,
4818         sctp_cmd_seq_t *commands)
4819 {
4820         /* Stop the T5-shutdown guard timer.  */
4821         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
4822                         SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD));
4823
4824         return sctp_sf_do_9_1_prm_abort(ep, asoc, type, arg, commands);
4825 }
4826
4827 /*
4828  * sctp_sf_shutdown_sent_prm_abort
4829  *
4830  * Inputs
4831  * (endpoint, asoc)
4832  *
4833  * The RFC does not explicitly address this issue, but is the route through the
4834  * state table when someone issues an abort while in SHUTDOWN-SENT state.
4835  *
4836  * Outputs
4837  * (timers)
4838  */
4839 sctp_disposition_t sctp_sf_shutdown_sent_prm_abort(
4840         const struct sctp_endpoint *ep,
4841         const struct sctp_association *asoc,
4842         const sctp_subtype_t type,
4843         void *arg,
4844         sctp_cmd_seq_t *commands)
4845 {
4846         /* Stop the T2-shutdown timer.  */
4847         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
4848                         SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN));
4849
4850         /* Stop the T5-shutdown guard timer.  */
4851         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
4852                         SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD));
4853
4854         return sctp_sf_do_9_1_prm_abort(ep, asoc, type, arg, commands);
4855 }
4856
4857 /*
4858  * sctp_sf_cookie_echoed_prm_abort
4859  *
4860  * Inputs
4861  * (endpoint, asoc)
4862  *
4863  * The RFC does not explcitly address this issue, but is the route through the
4864  * state table when someone issues an abort while in COOKIE_ECHOED state.
4865  *
4866  * Outputs
4867  * (timers)
4868  */
4869 sctp_disposition_t sctp_sf_shutdown_ack_sent_prm_abort(
4870         const struct sctp_endpoint *ep,
4871         const struct sctp_association *asoc,
4872         const sctp_subtype_t type,
4873         void *arg,
4874         sctp_cmd_seq_t *commands)
4875 {
4876         /* The same T2 timer, so we should be able to use
4877          * common function with the SHUTDOWN-SENT state.
4878          */
4879         return sctp_sf_shutdown_sent_prm_abort(ep, asoc, type, arg, commands);
4880 }
4881
4882 /*
4883  * Process the REQUESTHEARTBEAT primitive
4884  *
4885  * 10.1 ULP-to-SCTP
4886  * J) Request Heartbeat
4887  *
4888  * Format: REQUESTHEARTBEAT(association id, destination transport address)
4889  *
4890  * -> result
4891  *
4892  * Instructs the local endpoint to perform a HeartBeat on the specified
4893  * destination transport address of the given association. The returned
4894  * result should indicate whether the transmission of the HEARTBEAT
4895  * chunk to the destination address is successful.
4896  *
4897  * Mandatory attributes:
4898  *
4899  * o association id - local handle to the SCTP association
4900  *
4901  * o destination transport address - the transport address of the
4902  *   association on which a heartbeat should be issued.
4903  */
4904 sctp_disposition_t sctp_sf_do_prm_requestheartbeat(
4905                                         const struct sctp_endpoint *ep,
4906                                         const struct sctp_association *asoc,
4907                                         const sctp_subtype_t type,
4908                                         void *arg,
4909                                         sctp_cmd_seq_t *commands)
4910 {
4911         if (SCTP_DISPOSITION_NOMEM == sctp_sf_heartbeat(ep, asoc, type,
4912                                       (struct sctp_transport *)arg, commands))
4913                 return SCTP_DISPOSITION_NOMEM;
4914
4915         /*
4916          * RFC 2960 (bis), section 8.3
4917          *
4918          *    D) Request an on-demand HEARTBEAT on a specific destination
4919          *    transport address of a given association.
4920          *
4921          *    The endpoint should increment the respective error  counter of
4922          *    the destination transport address each time a HEARTBEAT is sent
4923          *    to that address and not acknowledged within one RTO.
4924          *
4925          */
4926         sctp_add_cmd_sf(commands, SCTP_CMD_TRANSPORT_RESET,
4927                         SCTP_TRANSPORT(arg));
4928         return SCTP_DISPOSITION_CONSUME;
4929 }
4930
4931 /*
4932  * ADDIP Section 4.1 ASCONF Chunk Procedures
4933  * When an endpoint has an ASCONF signaled change to be sent to the
4934  * remote endpoint it should do A1 to A9
4935  */
4936 sctp_disposition_t sctp_sf_do_prm_asconf(const struct sctp_endpoint *ep,
4937                                         const struct sctp_association *asoc,
4938                                         const sctp_subtype_t type,
4939                                         void *arg,
4940                                         sctp_cmd_seq_t *commands)
4941 {
4942         struct sctp_chunk *chunk = arg;
4943
4944         sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk));
4945         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START,
4946                         SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO));
4947         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(chunk));
4948         return SCTP_DISPOSITION_CONSUME;
4949 }
4950
4951 /*
4952  * Ignore the primitive event
4953  *
4954  * The return value is the disposition of the primitive.
4955  */
4956 sctp_disposition_t sctp_sf_ignore_primitive(
4957         const struct sctp_endpoint *ep,
4958         const struct sctp_association *asoc,
4959         const sctp_subtype_t type,
4960         void *arg,
4961         sctp_cmd_seq_t *commands)
4962 {
4963         SCTP_DEBUG_PRINTK("Primitive type %d is ignored.\n", type.primitive);
4964         return SCTP_DISPOSITION_DISCARD;
4965 }
4966
4967 /***************************************************************************
4968  * These are the state functions for the OTHER events.
4969  ***************************************************************************/
4970
4971 /*
4972  * Start the shutdown negotiation.
4973  *
4974  * From Section 9.2:
4975  * Once all its outstanding data has been acknowledged, the endpoint
4976  * shall send a SHUTDOWN chunk to its peer including in the Cumulative
4977  * TSN Ack field the last sequential TSN it has received from the peer.
4978  * It shall then start the T2-shutdown timer and enter the SHUTDOWN-SENT
4979  * state. If the timer expires, the endpoint must re-send the SHUTDOWN
4980  * with the updated last sequential TSN received from its peer.
4981  *
4982  * The return value is the disposition.
4983  */
4984 sctp_disposition_t sctp_sf_do_9_2_start_shutdown(
4985         const struct sctp_endpoint *ep,
4986         const struct sctp_association *asoc,
4987         const sctp_subtype_t type,
4988         void *arg,
4989         sctp_cmd_seq_t *commands)
4990 {
4991         struct sctp_chunk *reply;
4992
4993         /* Once all its outstanding data has been acknowledged, the
4994          * endpoint shall send a SHUTDOWN chunk to its peer including
4995          * in the Cumulative TSN Ack field the last sequential TSN it
4996          * has received from the peer.
4997          */
4998         reply = sctp_make_shutdown(asoc, NULL);
4999         if (!reply)
5000                 goto nomem;
5001
5002         /* Set the transport for the SHUTDOWN chunk and the timeout for the
5003          * T2-shutdown timer.
5004          */
5005         sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T2, SCTP_CHUNK(reply));
5006
5007         /* It shall then start the T2-shutdown timer */
5008         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START,
5009                         SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN));
5010
5011         if (asoc->autoclose)
5012                 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
5013                                 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE));
5014
5015         /* and enter the SHUTDOWN-SENT state.  */
5016         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
5017                         SCTP_STATE(SCTP_STATE_SHUTDOWN_SENT));
5018
5019         /* sctp-implguide 2.10 Issues with Heartbeating and failover
5020          *
5021          * HEARTBEAT ... is discontinued after sending either SHUTDOWN
5022          * or SHUTDOWN-ACK.
5023          */
5024         sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_STOP, SCTP_NULL());
5025
5026         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply));
5027
5028         return SCTP_DISPOSITION_CONSUME;
5029
5030 nomem:
5031         return SCTP_DISPOSITION_NOMEM;
5032 }
5033
5034 /*
5035  * Generate a SHUTDOWN ACK now that everything is SACK'd.
5036  *
5037  * From Section 9.2:
5038  *
5039  * If it has no more outstanding DATA chunks, the SHUTDOWN receiver
5040  * shall send a SHUTDOWN ACK and start a T2-shutdown timer of its own,
5041  * entering the SHUTDOWN-ACK-SENT state. If the timer expires, the
5042  * endpoint must re-send the SHUTDOWN ACK.
5043  *
5044  * The return value is the disposition.
5045  */
5046 sctp_disposition_t sctp_sf_do_9_2_shutdown_ack(
5047         const struct sctp_endpoint *ep,
5048         const struct sctp_association *asoc,
5049         const sctp_subtype_t type,
5050         void *arg,
5051         sctp_cmd_seq_t *commands)
5052 {
5053         struct sctp_chunk *chunk = (struct sctp_chunk *) arg;
5054         struct sctp_chunk *reply;
5055
5056         /* There are 2 ways of getting here:
5057          *    1) called in response to a SHUTDOWN chunk
5058          *    2) called when SCTP_EVENT_NO_PENDING_TSN event is issued.
5059          *
5060          * For the case (2), the arg parameter is set to NULL.  We need
5061          * to check that we have a chunk before accessing it's fields.
5062          */
5063         if (chunk) {
5064                 if (!sctp_vtag_verify(chunk, asoc))
5065                         return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
5066
5067                 /* Make sure that the SHUTDOWN chunk has a valid length. */
5068                 if (!sctp_chunk_length_valid(chunk, sizeof(struct sctp_shutdown_chunk_t)))
5069                         return sctp_sf_violation_chunklen(ep, asoc, type, arg,
5070                                                           commands);
5071         }
5072
5073         /* If it has no more outstanding DATA chunks, the SHUTDOWN receiver
5074          * shall send a SHUTDOWN ACK ...
5075          */
5076         reply = sctp_make_shutdown_ack(asoc, chunk);
5077         if (!reply)
5078                 goto nomem;
5079
5080         /* Set the transport for the SHUTDOWN ACK chunk and the timeout for
5081          * the T2-shutdown timer.
5082          */
5083         sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T2, SCTP_CHUNK(reply));
5084
5085         /* and start/restart a T2-shutdown timer of its own, */
5086         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART,
5087                         SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN));
5088
5089         if (asoc->autoclose)
5090                 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
5091                                 SCTP_TO(SCTP_EVENT_TIMEOUT_AUTOCLOSE));
5092
5093         /* Enter the SHUTDOWN-ACK-SENT state.  */
5094         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
5095                         SCTP_STATE(SCTP_STATE_SHUTDOWN_ACK_SENT));
5096
5097         /* sctp-implguide 2.10 Issues with Heartbeating and failover
5098          *
5099          * HEARTBEAT ... is discontinued after sending either SHUTDOWN
5100          * or SHUTDOWN-ACK.
5101          */
5102         sctp_add_cmd_sf(commands, SCTP_CMD_HB_TIMERS_STOP, SCTP_NULL());
5103
5104         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply));
5105
5106         return SCTP_DISPOSITION_CONSUME;
5107
5108 nomem:
5109         return SCTP_DISPOSITION_NOMEM;
5110 }
5111
5112 /*
5113  * Ignore the event defined as other
5114  *
5115  * The return value is the disposition of the event.
5116  */
5117 sctp_disposition_t sctp_sf_ignore_other(const struct sctp_endpoint *ep,
5118                                         const struct sctp_association *asoc,
5119                                         const sctp_subtype_t type,
5120                                         void *arg,
5121                                         sctp_cmd_seq_t *commands)
5122 {
5123         SCTP_DEBUG_PRINTK("The event other type %d is ignored\n", type.other);
5124         return SCTP_DISPOSITION_DISCARD;
5125 }
5126
5127 /************************************************************
5128  * These are the state functions for handling timeout events.
5129  ************************************************************/
5130
5131 /*
5132  * RTX Timeout
5133  *
5134  * Section: 6.3.3 Handle T3-rtx Expiration
5135  *
5136  * Whenever the retransmission timer T3-rtx expires for a destination
5137  * address, do the following:
5138  * [See below]
5139  *
5140  * The return value is the disposition of the chunk.
5141  */
5142 sctp_disposition_t sctp_sf_do_6_3_3_rtx(const struct sctp_endpoint *ep,
5143                                         const struct sctp_association *asoc,
5144                                         const sctp_subtype_t type,
5145                                         void *arg,
5146                                         sctp_cmd_seq_t *commands)
5147 {
5148         struct sctp_transport *transport = arg;
5149
5150         SCTP_INC_STATS(SCTP_MIB_T3_RTX_EXPIREDS);
5151
5152         if (asoc->overall_error_count >= asoc->max_retrans) {
5153                 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5154                                 SCTP_ERROR(ETIMEDOUT));
5155                 /* CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */
5156                 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
5157                                 SCTP_PERR(SCTP_ERROR_NO_ERROR));
5158                 SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
5159                 SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
5160                 return SCTP_DISPOSITION_DELETE_TCB;
5161         }
5162
5163         /* E1) For the destination address for which the timer
5164          * expires, adjust its ssthresh with rules defined in Section
5165          * 7.2.3 and set the cwnd <- MTU.
5166          */
5167
5168         /* E2) For the destination address for which the timer
5169          * expires, set RTO <- RTO * 2 ("back off the timer").  The
5170          * maximum value discussed in rule C7 above (RTO.max) may be
5171          * used to provide an upper bound to this doubling operation.
5172          */
5173
5174         /* E3) Determine how many of the earliest (i.e., lowest TSN)
5175          * outstanding DATA chunks for the address for which the
5176          * T3-rtx has expired will fit into a single packet, subject
5177          * to the MTU constraint for the path corresponding to the
5178          * destination transport address to which the retransmission
5179          * is being sent (this may be different from the address for
5180          * which the timer expires [see Section 6.4]).  Call this
5181          * value K. Bundle and retransmit those K DATA chunks in a
5182          * single packet to the destination endpoint.
5183          *
5184          * Note: Any DATA chunks that were sent to the address for
5185          * which the T3-rtx timer expired but did not fit in one MTU
5186          * (rule E3 above), should be marked for retransmission and
5187          * sent as soon as cwnd allows (normally when a SACK arrives).
5188          */
5189
5190         /* Do some failure management (Section 8.2). */
5191         sctp_add_cmd_sf(commands, SCTP_CMD_STRIKE, SCTP_TRANSPORT(transport));
5192
5193         /* NB: Rules E4 and F1 are implicit in R1.  */
5194         sctp_add_cmd_sf(commands, SCTP_CMD_RETRAN, SCTP_TRANSPORT(transport));
5195
5196         return SCTP_DISPOSITION_CONSUME;
5197 }
5198
5199 /*
5200  * Generate delayed SACK on timeout
5201  *
5202  * Section: 6.2  Acknowledgement on Reception of DATA Chunks
5203  *
5204  * The guidelines on delayed acknowledgement algorithm specified in
5205  * Section 4.2 of [RFC2581] SHOULD be followed.  Specifically, an
5206  * acknowledgement SHOULD be generated for at least every second packet
5207  * (not every second DATA chunk) received, and SHOULD be generated
5208  * within 200 ms of the arrival of any unacknowledged DATA chunk.  In
5209  * some situations it may be beneficial for an SCTP transmitter to be
5210  * more conservative than the algorithms detailed in this document
5211  * allow. However, an SCTP transmitter MUST NOT be more aggressive than
5212  * the following algorithms allow.
5213  */
5214 sctp_disposition_t sctp_sf_do_6_2_sack(const struct sctp_endpoint *ep,
5215                                        const struct sctp_association *asoc,
5216                                        const sctp_subtype_t type,
5217                                        void *arg,
5218                                        sctp_cmd_seq_t *commands)
5219 {
5220         SCTP_INC_STATS(SCTP_MIB_DELAY_SACK_EXPIREDS);
5221         sctp_add_cmd_sf(commands, SCTP_CMD_GEN_SACK, SCTP_FORCE());
5222         return SCTP_DISPOSITION_CONSUME;
5223 }
5224
5225 /*
5226  * sctp_sf_t1_init_timer_expire
5227  *
5228  * Section: 4 Note: 2
5229  * Verification Tag:
5230  * Inputs
5231  * (endpoint, asoc)
5232  *
5233  *  RFC 2960 Section 4 Notes
5234  *  2) If the T1-init timer expires, the endpoint MUST retransmit INIT
5235  *     and re-start the T1-init timer without changing state.  This MUST
5236  *     be repeated up to 'Max.Init.Retransmits' times.  After that, the
5237  *     endpoint MUST abort the initialization process and report the
5238  *     error to SCTP user.
5239  *
5240  * Outputs
5241  * (timers, events)
5242  *
5243  */
5244 sctp_disposition_t sctp_sf_t1_init_timer_expire(const struct sctp_endpoint *ep,
5245                                            const struct sctp_association *asoc,
5246                                            const sctp_subtype_t type,
5247                                            void *arg,
5248                                            sctp_cmd_seq_t *commands)
5249 {
5250         struct sctp_chunk *repl = NULL;
5251         struct sctp_bind_addr *bp;
5252         int attempts = asoc->init_err_counter + 1;
5253
5254         SCTP_DEBUG_PRINTK("Timer T1 expired (INIT).\n");
5255         SCTP_INC_STATS(SCTP_MIB_T1_INIT_EXPIREDS);
5256
5257         if (attempts <= asoc->max_init_attempts) {
5258                 bp = (struct sctp_bind_addr *) &asoc->base.bind_addr;
5259                 repl = sctp_make_init(asoc, bp, GFP_ATOMIC, 0);
5260                 if (!repl)
5261                         return SCTP_DISPOSITION_NOMEM;
5262
5263                 /* Choose transport for INIT. */
5264                 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_CHOOSE_TRANSPORT,
5265                                 SCTP_CHUNK(repl));
5266
5267                 /* Issue a sideeffect to do the needed accounting. */
5268                 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_RESTART,
5269                                 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_INIT));
5270
5271                 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
5272         } else {
5273                 SCTP_DEBUG_PRINTK("Giving up on INIT, attempts: %d"
5274                                   " max_init_attempts: %d\n",
5275                                   attempts, asoc->max_init_attempts);
5276                 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5277                                 SCTP_ERROR(ETIMEDOUT));
5278                 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
5279                                 SCTP_PERR(SCTP_ERROR_NO_ERROR));
5280                 return SCTP_DISPOSITION_DELETE_TCB;
5281         }
5282
5283         return SCTP_DISPOSITION_CONSUME;
5284 }
5285
5286 /*
5287  * sctp_sf_t1_cookie_timer_expire
5288  *
5289  * Section: 4 Note: 2
5290  * Verification Tag:
5291  * Inputs
5292  * (endpoint, asoc)
5293  *
5294  *  RFC 2960 Section 4 Notes
5295  *  3) If the T1-cookie timer expires, the endpoint MUST retransmit
5296  *     COOKIE ECHO and re-start the T1-cookie timer without changing
5297  *     state.  This MUST be repeated up to 'Max.Init.Retransmits' times.
5298  *     After that, the endpoint MUST abort the initialization process and
5299  *     report the error to SCTP user.
5300  *
5301  * Outputs
5302  * (timers, events)
5303  *
5304  */
5305 sctp_disposition_t sctp_sf_t1_cookie_timer_expire(const struct sctp_endpoint *ep,
5306                                            const struct sctp_association *asoc,
5307                                            const sctp_subtype_t type,
5308                                            void *arg,
5309                                            sctp_cmd_seq_t *commands)
5310 {
5311         struct sctp_chunk *repl = NULL;
5312         int attempts = asoc->init_err_counter + 1;
5313
5314         SCTP_DEBUG_PRINTK("Timer T1 expired (COOKIE-ECHO).\n");
5315         SCTP_INC_STATS(SCTP_MIB_T1_COOKIE_EXPIREDS);
5316
5317         if (attempts <= asoc->max_init_attempts) {
5318                 repl = sctp_make_cookie_echo(asoc, NULL);
5319                 if (!repl)
5320                         return SCTP_DISPOSITION_NOMEM;
5321
5322                 /* Issue a sideeffect to do the needed accounting. */
5323                 sctp_add_cmd_sf(commands, SCTP_CMD_COOKIEECHO_RESTART,
5324                                 SCTP_TO(SCTP_EVENT_TIMEOUT_T1_COOKIE));
5325
5326                 sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(repl));
5327         } else {
5328                 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5329                                 SCTP_ERROR(ETIMEDOUT));
5330                 sctp_add_cmd_sf(commands, SCTP_CMD_INIT_FAILED,
5331                                 SCTP_PERR(SCTP_ERROR_NO_ERROR));
5332                 return SCTP_DISPOSITION_DELETE_TCB;
5333         }
5334
5335         return SCTP_DISPOSITION_CONSUME;
5336 }
5337
5338 /* RFC2960 9.2 If the timer expires, the endpoint must re-send the SHUTDOWN
5339  * with the updated last sequential TSN received from its peer.
5340  *
5341  * An endpoint should limit the number of retransmissions of the
5342  * SHUTDOWN chunk to the protocol parameter 'Association.Max.Retrans'.
5343  * If this threshold is exceeded the endpoint should destroy the TCB and
5344  * MUST report the peer endpoint unreachable to the upper layer (and
5345  * thus the association enters the CLOSED state).  The reception of any
5346  * packet from its peer (i.e. as the peer sends all of its queued DATA
5347  * chunks) should clear the endpoint's retransmission count and restart
5348  * the T2-Shutdown timer,  giving its peer ample opportunity to transmit
5349  * all of its queued DATA chunks that have not yet been sent.
5350  */
5351 sctp_disposition_t sctp_sf_t2_timer_expire(const struct sctp_endpoint *ep,
5352                                            const struct sctp_association *asoc,
5353                                            const sctp_subtype_t type,
5354                                            void *arg,
5355                                            sctp_cmd_seq_t *commands)
5356 {
5357         struct sctp_chunk *reply = NULL;
5358
5359         SCTP_DEBUG_PRINTK("Timer T2 expired.\n");
5360         SCTP_INC_STATS(SCTP_MIB_T2_SHUTDOWN_EXPIREDS);
5361
5362         ((struct sctp_association *)asoc)->shutdown_retries++;
5363
5364         if (asoc->overall_error_count >= asoc->max_retrans) {
5365                 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5366                                 SCTP_ERROR(ETIMEDOUT));
5367                 /* Note:  CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */
5368                 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
5369                                 SCTP_PERR(SCTP_ERROR_NO_ERROR));
5370                 SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
5371                 SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
5372                 return SCTP_DISPOSITION_DELETE_TCB;
5373         }
5374
5375         switch (asoc->state) {
5376         case SCTP_STATE_SHUTDOWN_SENT:
5377                 reply = sctp_make_shutdown(asoc, NULL);
5378                 break;
5379
5380         case SCTP_STATE_SHUTDOWN_ACK_SENT:
5381                 reply = sctp_make_shutdown_ack(asoc, NULL);
5382                 break;
5383
5384         default:
5385                 BUG();
5386                 break;
5387         }
5388
5389         if (!reply)
5390                 goto nomem;
5391
5392         /* Do some failure management (Section 8.2). */
5393         sctp_add_cmd_sf(commands, SCTP_CMD_STRIKE,
5394                         SCTP_TRANSPORT(asoc->shutdown_last_sent_to));
5395
5396         /* Set the transport for the SHUTDOWN/ACK chunk and the timeout for
5397          * the T2-shutdown timer.
5398          */
5399         sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T2, SCTP_CHUNK(reply));
5400
5401         /* Restart the T2-shutdown timer.  */
5402         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART,
5403                         SCTP_TO(SCTP_EVENT_TIMEOUT_T2_SHUTDOWN));
5404         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply));
5405         return SCTP_DISPOSITION_CONSUME;
5406
5407 nomem:
5408         return SCTP_DISPOSITION_NOMEM;
5409 }
5410
5411 /*
5412  * ADDIP Section 4.1 ASCONF CHunk Procedures
5413  * If the T4 RTO timer expires the endpoint should do B1 to B5
5414  */
5415 sctp_disposition_t sctp_sf_t4_timer_expire(
5416         const struct sctp_endpoint *ep,
5417         const struct sctp_association *asoc,
5418         const sctp_subtype_t type,
5419         void *arg,
5420         sctp_cmd_seq_t *commands)
5421 {
5422         struct sctp_chunk *chunk = asoc->addip_last_asconf;
5423         struct sctp_transport *transport = chunk->transport;
5424
5425         SCTP_INC_STATS(SCTP_MIB_T4_RTO_EXPIREDS);
5426
5427         /* ADDIP 4.1 B1) Increment the error counters and perform path failure
5428          * detection on the appropriate destination address as defined in
5429          * RFC2960 [5] section 8.1 and 8.2.
5430          */
5431         sctp_add_cmd_sf(commands, SCTP_CMD_STRIKE, SCTP_TRANSPORT(transport));
5432
5433         /* Reconfig T4 timer and transport. */
5434         sctp_add_cmd_sf(commands, SCTP_CMD_SETUP_T4, SCTP_CHUNK(chunk));
5435
5436         /* ADDIP 4.1 B2) Increment the association error counters and perform
5437          * endpoint failure detection on the association as defined in
5438          * RFC2960 [5] section 8.1 and 8.2.
5439          * association error counter is incremented in SCTP_CMD_STRIKE.
5440          */
5441         if (asoc->overall_error_count >= asoc->max_retrans) {
5442                 sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_STOP,
5443                                 SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO));
5444                 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5445                                 SCTP_ERROR(ETIMEDOUT));
5446                 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
5447                                 SCTP_PERR(SCTP_ERROR_NO_ERROR));
5448                 SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
5449                 SCTP_INC_STATS(SCTP_MIB_CURRESTAB);
5450                 return SCTP_DISPOSITION_ABORT;
5451         }
5452
5453         /* ADDIP 4.1 B3) Back-off the destination address RTO value to which
5454          * the ASCONF chunk was sent by doubling the RTO timer value.
5455          * This is done in SCTP_CMD_STRIKE.
5456          */
5457
5458         /* ADDIP 4.1 B4) Re-transmit the ASCONF Chunk last sent and if possible
5459          * choose an alternate destination address (please refer to RFC2960
5460          * [5] section 6.4.1). An endpoint MUST NOT add new parameters to this
5461          * chunk, it MUST be the same (including its serial number) as the last
5462          * ASCONF sent.
5463          */
5464         sctp_chunk_hold(asoc->addip_last_asconf);
5465         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
5466                         SCTP_CHUNK(asoc->addip_last_asconf));
5467
5468         /* ADDIP 4.1 B5) Restart the T-4 RTO timer. Note that if a different
5469          * destination is selected, then the RTO used will be that of the new
5470          * destination address.
5471          */
5472         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_RESTART,
5473                         SCTP_TO(SCTP_EVENT_TIMEOUT_T4_RTO));
5474
5475         return SCTP_DISPOSITION_CONSUME;
5476 }
5477
5478 /* sctpimpguide-05 Section 2.12.2
5479  * The sender of the SHUTDOWN MAY also start an overall guard timer
5480  * 'T5-shutdown-guard' to bound the overall time for shutdown sequence.
5481  * At the expiration of this timer the sender SHOULD abort the association
5482  * by sending an ABORT chunk.
5483  */
5484 sctp_disposition_t sctp_sf_t5_timer_expire(const struct sctp_endpoint *ep,
5485                                            const struct sctp_association *asoc,
5486                                            const sctp_subtype_t type,
5487                                            void *arg,
5488                                            sctp_cmd_seq_t *commands)
5489 {
5490         struct sctp_chunk *reply = NULL;
5491
5492         SCTP_DEBUG_PRINTK("Timer T5 expired.\n");
5493         SCTP_INC_STATS(SCTP_MIB_T5_SHUTDOWN_GUARD_EXPIREDS);
5494
5495         reply = sctp_make_abort(asoc, NULL, 0);
5496         if (!reply)
5497                 goto nomem;
5498
5499         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(reply));
5500         sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5501                         SCTP_ERROR(ETIMEDOUT));
5502         sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
5503                         SCTP_PERR(SCTP_ERROR_NO_ERROR));
5504
5505         return SCTP_DISPOSITION_DELETE_TCB;
5506 nomem:
5507         return SCTP_DISPOSITION_NOMEM;
5508 }
5509
5510 /* Handle expiration of AUTOCLOSE timer.  When the autoclose timer expires,
5511  * the association is automatically closed by starting the shutdown process.
5512  * The work that needs to be done is same as when SHUTDOWN is initiated by
5513  * the user.  So this routine looks same as sctp_sf_do_9_2_prm_shutdown().
5514  */
5515 sctp_disposition_t sctp_sf_autoclose_timer_expire(
5516         const struct sctp_endpoint *ep,
5517         const struct sctp_association *asoc,
5518         const sctp_subtype_t type,
5519         void *arg,
5520         sctp_cmd_seq_t *commands)
5521 {
5522         int disposition;
5523
5524         SCTP_INC_STATS(SCTP_MIB_AUTOCLOSE_EXPIREDS);
5525
5526         /* From 9.2 Shutdown of an Association
5527          * Upon receipt of the SHUTDOWN primitive from its upper
5528          * layer, the endpoint enters SHUTDOWN-PENDING state and
5529          * remains there until all outstanding data has been
5530          * acknowledged by its peer. The endpoint accepts no new data
5531          * from its upper layer, but retransmits data to the far end
5532          * if necessary to fill gaps.
5533          */
5534         sctp_add_cmd_sf(commands, SCTP_CMD_NEW_STATE,
5535                         SCTP_STATE(SCTP_STATE_SHUTDOWN_PENDING));
5536
5537         /* sctpimpguide-05 Section 2.12.2
5538          * The sender of the SHUTDOWN MAY also start an overall guard timer
5539          * 'T5-shutdown-guard' to bound the overall time for shutdown sequence.
5540          */
5541         sctp_add_cmd_sf(commands, SCTP_CMD_TIMER_START,
5542                         SCTP_TO(SCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD));
5543         disposition = SCTP_DISPOSITION_CONSUME;
5544         if (sctp_outq_is_empty(&asoc->outqueue)) {
5545                 disposition = sctp_sf_do_9_2_start_shutdown(ep, asoc, type,
5546                                                             arg, commands);
5547         }
5548         return disposition;
5549 }
5550
5551 /*****************************************************************************
5552  * These are sa state functions which could apply to all types of events.
5553  ****************************************************************************/
5554
5555 /*
5556  * This table entry is not implemented.
5557  *
5558  * Inputs
5559  * (endpoint, asoc, chunk)
5560  *
5561  * The return value is the disposition of the chunk.
5562  */
5563 sctp_disposition_t sctp_sf_not_impl(const struct sctp_endpoint *ep,
5564                                     const struct sctp_association *asoc,
5565                                     const sctp_subtype_t type,
5566                                     void *arg,
5567                                     sctp_cmd_seq_t *commands)
5568 {
5569         return SCTP_DISPOSITION_NOT_IMPL;
5570 }
5571
5572 /*
5573  * This table entry represents a bug.
5574  *
5575  * Inputs
5576  * (endpoint, asoc, chunk)
5577  *
5578  * The return value is the disposition of the chunk.
5579  */
5580 sctp_disposition_t sctp_sf_bug(const struct sctp_endpoint *ep,
5581                                const struct sctp_association *asoc,
5582                                const sctp_subtype_t type,
5583                                void *arg,
5584                                sctp_cmd_seq_t *commands)
5585 {
5586         return SCTP_DISPOSITION_BUG;
5587 }
5588
5589 /*
5590  * This table entry represents the firing of a timer in the wrong state.
5591  * Since timer deletion cannot be guaranteed a timer 'may' end up firing
5592  * when the association is in the wrong state.   This event should
5593  * be ignored, so as to prevent any rearming of the timer.
5594  *
5595  * Inputs
5596  * (endpoint, asoc, chunk)
5597  *
5598  * The return value is the disposition of the chunk.
5599  */
5600 sctp_disposition_t sctp_sf_timer_ignore(const struct sctp_endpoint *ep,
5601                                         const struct sctp_association *asoc,
5602                                         const sctp_subtype_t type,
5603                                         void *arg,
5604                                         sctp_cmd_seq_t *commands)
5605 {
5606         SCTP_DEBUG_PRINTK("Timer %d ignored.\n", type.chunk);
5607         return SCTP_DISPOSITION_CONSUME;
5608 }
5609
5610 /********************************************************************
5611  * 2nd Level Abstractions
5612  ********************************************************************/
5613
5614 /* Pull the SACK chunk based on the SACK header. */
5615 static struct sctp_sackhdr *sctp_sm_pull_sack(struct sctp_chunk *chunk)
5616 {
5617         struct sctp_sackhdr *sack;
5618         unsigned int len;
5619         __u16 num_blocks;
5620         __u16 num_dup_tsns;
5621
5622         /* Protect ourselves from reading too far into
5623          * the skb from a bogus sender.
5624          */
5625         sack = (struct sctp_sackhdr *) chunk->skb->data;
5626
5627         num_blocks = ntohs(sack->num_gap_ack_blocks);
5628         num_dup_tsns = ntohs(sack->num_dup_tsns);
5629         len = sizeof(struct sctp_sackhdr);
5630         len += (num_blocks + num_dup_tsns) * sizeof(__u32);
5631         if (len > chunk->skb->len)
5632                 return NULL;
5633
5634         skb_pull(chunk->skb, len);
5635
5636         return sack;
5637 }
5638
5639 /* Create an ABORT packet to be sent as a response, with the specified
5640  * error causes.
5641  */
5642 static struct sctp_packet *sctp_abort_pkt_new(const struct sctp_endpoint *ep,
5643                                   const struct sctp_association *asoc,
5644                                   struct sctp_chunk *chunk,
5645                                   const void *payload,
5646                                   size_t paylen)
5647 {
5648         struct sctp_packet *packet;
5649         struct sctp_chunk *abort;
5650
5651         packet = sctp_ootb_pkt_new(asoc, chunk);
5652
5653         if (packet) {
5654                 /* Make an ABORT.
5655                  * The T bit will be set if the asoc is NULL.
5656                  */
5657                 abort = sctp_make_abort(asoc, chunk, paylen);
5658                 if (!abort) {
5659                         sctp_ootb_pkt_free(packet);
5660                         return NULL;
5661                 }
5662
5663                 /* Reflect vtag if T-Bit is set */
5664                 if (sctp_test_T_bit(abort))
5665                         packet->vtag = ntohl(chunk->sctp_hdr->vtag);
5666
5667                 /* Add specified error causes, i.e., payload, to the
5668                  * end of the chunk.
5669                  */
5670                 sctp_addto_chunk(abort, paylen, payload);
5671
5672                 /* Set the skb to the belonging sock for accounting.  */
5673                 abort->skb->sk = ep->base.sk;
5674
5675                 sctp_packet_append_chunk(packet, abort);
5676
5677         }
5678
5679         return packet;
5680 }
5681
5682 /* Allocate a packet for responding in the OOTB conditions.  */
5683 static struct sctp_packet *sctp_ootb_pkt_new(const struct sctp_association *asoc,
5684                                              const struct sctp_chunk *chunk)
5685 {
5686         struct sctp_packet *packet;
5687         struct sctp_transport *transport;
5688         __u16 sport;
5689         __u16 dport;
5690         __u32 vtag;
5691
5692         /* Get the source and destination port from the inbound packet.  */
5693         sport = ntohs(chunk->sctp_hdr->dest);
5694         dport = ntohs(chunk->sctp_hdr->source);
5695
5696         /* The V-tag is going to be the same as the inbound packet if no
5697          * association exists, otherwise, use the peer's vtag.
5698          */
5699         if (asoc) {
5700                 /* Special case the INIT-ACK as there is no peer's vtag
5701                  * yet.
5702                  */
5703                 switch(chunk->chunk_hdr->type) {
5704                 case SCTP_CID_INIT_ACK:
5705                 {
5706                         sctp_initack_chunk_t *initack;
5707
5708                         initack = (sctp_initack_chunk_t *)chunk->chunk_hdr;
5709                         vtag = ntohl(initack->init_hdr.init_tag);
5710                         break;
5711                 }
5712                 default:
5713                         vtag = asoc->peer.i.init_tag;
5714                         break;
5715                 }
5716         } else {
5717                 /* Special case the INIT and stale COOKIE_ECHO as there is no
5718                  * vtag yet.
5719                  */
5720                 switch(chunk->chunk_hdr->type) {
5721                 case SCTP_CID_INIT:
5722                 {
5723                         sctp_init_chunk_t *init;
5724
5725                         init = (sctp_init_chunk_t *)chunk->chunk_hdr;
5726                         vtag = ntohl(init->init_hdr.init_tag);
5727                         break;
5728                 }
5729                 default:
5730                         vtag = ntohl(chunk->sctp_hdr->vtag);
5731                         break;
5732                 }
5733         }
5734
5735         /* Make a transport for the bucket, Eliza... */
5736         transport = sctp_transport_new(sctp_source(chunk), GFP_ATOMIC);
5737         if (!transport)
5738                 goto nomem;
5739
5740         /* Cache a route for the transport with the chunk's destination as
5741          * the source address.
5742          */
5743         sctp_transport_route(transport, (union sctp_addr *)&chunk->dest,
5744                              sctp_sk(sctp_get_ctl_sock()));
5745
5746         packet = sctp_packet_init(&transport->packet, transport, sport, dport);
5747         packet = sctp_packet_config(packet, vtag, 0);
5748
5749         return packet;
5750
5751 nomem:
5752         return NULL;
5753 }
5754
5755 /* Free the packet allocated earlier for responding in the OOTB condition.  */
5756 void sctp_ootb_pkt_free(struct sctp_packet *packet)
5757 {
5758         sctp_transport_free(packet->transport);
5759 }
5760
5761 /* Send a stale cookie error when a invalid COOKIE ECHO chunk is found  */
5762 static void sctp_send_stale_cookie_err(const struct sctp_endpoint *ep,
5763                                        const struct sctp_association *asoc,
5764                                        const struct sctp_chunk *chunk,
5765                                        sctp_cmd_seq_t *commands,
5766                                        struct sctp_chunk *err_chunk)
5767 {
5768         struct sctp_packet *packet;
5769
5770         if (err_chunk) {
5771                 packet = sctp_ootb_pkt_new(asoc, chunk);
5772                 if (packet) {
5773                         struct sctp_signed_cookie *cookie;
5774
5775                         /* Override the OOTB vtag from the cookie. */
5776                         cookie = chunk->subh.cookie_hdr;
5777                         packet->vtag = cookie->c.peer_vtag;
5778
5779                         /* Set the skb to the belonging sock for accounting. */
5780                         err_chunk->skb->sk = ep->base.sk;
5781                         sctp_packet_append_chunk(packet, err_chunk);
5782                         sctp_add_cmd_sf(commands, SCTP_CMD_SEND_PKT,
5783                                         SCTP_PACKET(packet));
5784                         SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS);
5785                 } else
5786                         sctp_chunk_free (err_chunk);
5787         }
5788 }
5789
5790
5791 /* Process a data chunk */
5792 static int sctp_eat_data(const struct sctp_association *asoc,
5793                          struct sctp_chunk *chunk,
5794                          sctp_cmd_seq_t *commands)
5795 {
5796         sctp_datahdr_t *data_hdr;
5797         struct sctp_chunk *err;
5798         size_t datalen;
5799         sctp_verb_t deliver;
5800         int tmp;
5801         __u32 tsn;
5802         struct sctp_tsnmap *map = (struct sctp_tsnmap *)&asoc->peer.tsn_map;
5803         struct sock *sk = asoc->base.sk;
5804
5805         data_hdr = chunk->subh.data_hdr = (sctp_datahdr_t *)chunk->skb->data;
5806         skb_pull(chunk->skb, sizeof(sctp_datahdr_t));
5807
5808         tsn = ntohl(data_hdr->tsn);
5809         SCTP_DEBUG_PRINTK("eat_data: TSN 0x%x.\n", tsn);
5810
5811         /* ASSERT:  Now skb->data is really the user data.  */
5812
5813         /* Process ECN based congestion.
5814          *
5815          * Since the chunk structure is reused for all chunks within
5816          * a packet, we use ecn_ce_done to track if we've already
5817          * done CE processing for this packet.
5818          *
5819          * We need to do ECN processing even if we plan to discard the
5820          * chunk later.
5821          */
5822
5823         if (!chunk->ecn_ce_done) {
5824                 struct sctp_af *af;
5825                 chunk->ecn_ce_done = 1;
5826
5827                 af = sctp_get_af_specific(
5828                         ipver2af(ip_hdr(chunk->skb)->version));
5829
5830                 if (af && af->is_ce(chunk->skb) && asoc->peer.ecn_capable) {
5831                         /* Do real work as sideffect. */
5832                         sctp_add_cmd_sf(commands, SCTP_CMD_ECN_CE,
5833                                         SCTP_U32(tsn));
5834                 }
5835         }
5836
5837         tmp = sctp_tsnmap_check(&asoc->peer.tsn_map, tsn);
5838         if (tmp < 0) {
5839                 /* The TSN is too high--silently discard the chunk and
5840                  * count on it getting retransmitted later.
5841                  */
5842                 return SCTP_IERROR_HIGH_TSN;
5843         } else if (tmp > 0) {
5844                 /* This is a duplicate.  Record it.  */
5845                 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_DUP, SCTP_U32(tsn));
5846                 return SCTP_IERROR_DUP_TSN;
5847         }
5848
5849         /* This is a new TSN.  */
5850
5851         /* Discard if there is no room in the receive window.
5852          * Actually, allow a little bit of overflow (up to a MTU).
5853          */
5854         datalen = ntohs(chunk->chunk_hdr->length);
5855         datalen -= sizeof(sctp_data_chunk_t);
5856
5857         deliver = SCTP_CMD_CHUNK_ULP;
5858
5859         /* Think about partial delivery. */
5860         if ((datalen >= asoc->rwnd) && (!asoc->ulpq.pd_mode)) {
5861
5862                 /* Even if we don't accept this chunk there is
5863                  * memory pressure.
5864                  */
5865                 sctp_add_cmd_sf(commands, SCTP_CMD_PART_DELIVER, SCTP_NULL());
5866         }
5867
5868         /* Spill over rwnd a little bit.  Note: While allowed, this spill over
5869          * seems a bit troublesome in that frag_point varies based on
5870          * PMTU.  In cases, such as loopback, this might be a rather
5871          * large spill over.
5872          */
5873         if ((!chunk->data_accepted) && (!asoc->rwnd || asoc->rwnd_over ||
5874             (datalen > asoc->rwnd + asoc->frag_point))) {
5875
5876                 /* If this is the next TSN, consider reneging to make
5877                  * room.   Note: Playing nice with a confused sender.  A
5878                  * malicious sender can still eat up all our buffer
5879                  * space and in the future we may want to detect and
5880                  * do more drastic reneging.
5881                  */
5882                 if (sctp_tsnmap_has_gap(map) &&
5883                     (sctp_tsnmap_get_ctsn(map) + 1) == tsn) {
5884                         SCTP_DEBUG_PRINTK("Reneging for tsn:%u\n", tsn);
5885                         deliver = SCTP_CMD_RENEGE;
5886                 } else {
5887                         SCTP_DEBUG_PRINTK("Discard tsn: %u len: %Zd, "
5888                                           "rwnd: %d\n", tsn, datalen,
5889                                           asoc->rwnd);
5890                         return SCTP_IERROR_IGNORE_TSN;
5891                 }
5892         }
5893
5894         /*
5895          * Also try to renege to limit our memory usage in the event that
5896          * we are under memory pressure
5897          * If we can't renege, don't worry about it, the sk_rmem_schedule
5898          * in sctp_ulpevent_make_rcvmsg will drop the frame if we grow our
5899          * memory usage too much
5900          */
5901         if (*sk->sk_prot_creator->memory_pressure) {
5902                 if (sctp_tsnmap_has_gap(map) &&
5903                    (sctp_tsnmap_get_ctsn(map) + 1) == tsn) {
5904                         SCTP_DEBUG_PRINTK("Under Pressure! Reneging for tsn:%u\n", tsn);
5905                         deliver = SCTP_CMD_RENEGE;
5906                  }
5907         }
5908
5909         /*
5910          * Section 3.3.10.9 No User Data (9)
5911          *
5912          * Cause of error
5913          * ---------------
5914          * No User Data:  This error cause is returned to the originator of a
5915          * DATA chunk if a received DATA chunk has no user data.
5916          */
5917         if (unlikely(0 == datalen)) {
5918                 err = sctp_make_abort_no_data(asoc, chunk, tsn);
5919                 if (err) {
5920                         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
5921                                         SCTP_CHUNK(err));
5922                 }
5923                 /* We are going to ABORT, so we might as well stop
5924                  * processing the rest of the chunks in the packet.
5925                  */
5926                 sctp_add_cmd_sf(commands, SCTP_CMD_DISCARD_PACKET,SCTP_NULL());
5927                 sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
5928                                 SCTP_ERROR(ECONNABORTED));
5929                 sctp_add_cmd_sf(commands, SCTP_CMD_ASSOC_FAILED,
5930                                 SCTP_PERR(SCTP_ERROR_NO_DATA));
5931                 SCTP_INC_STATS(SCTP_MIB_ABORTEDS);
5932                 SCTP_DEC_STATS(SCTP_MIB_CURRESTAB);
5933                 return SCTP_IERROR_NO_DATA;
5934         }
5935
5936         chunk->data_accepted = 1;
5937
5938         /* Note: Some chunks may get overcounted (if we drop) or overcounted
5939          * if we renege and the chunk arrives again.
5940          */
5941         if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED)
5942                 SCTP_INC_STATS(SCTP_MIB_INUNORDERCHUNKS);
5943         else
5944                 SCTP_INC_STATS(SCTP_MIB_INORDERCHUNKS);
5945
5946         /* RFC 2960 6.5 Stream Identifier and Stream Sequence Number
5947          *
5948          * If an endpoint receive a DATA chunk with an invalid stream
5949          * identifier, it shall acknowledge the reception of the DATA chunk
5950          * following the normal procedure, immediately send an ERROR chunk
5951          * with cause set to "Invalid Stream Identifier" (See Section 3.3.10)
5952          * and discard the DATA chunk.
5953          */
5954         if (ntohs(data_hdr->stream) >= asoc->c.sinit_max_instreams) {
5955                 /* Mark tsn as received even though we drop it */
5956                 sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_TSN, SCTP_U32(tsn));
5957
5958                 err = sctp_make_op_error(asoc, chunk, SCTP_ERROR_INV_STRM,
5959                                          &data_hdr->stream,
5960                                          sizeof(data_hdr->stream));
5961                 if (err)
5962                         sctp_add_cmd_sf(commands, SCTP_CMD_REPLY,
5963                                         SCTP_CHUNK(err));
5964                 return SCTP_IERROR_BAD_STREAM;
5965         }
5966
5967         /* Send the data up to the user.  Note:  Schedule  the
5968          * SCTP_CMD_CHUNK_ULP cmd before the SCTP_CMD_GEN_SACK, as the SACK
5969          * chunk needs the updated rwnd.
5970          */
5971         sctp_add_cmd_sf(commands, deliver, SCTP_CHUNK(chunk));
5972
5973         return SCTP_IERROR_NO_ERROR;
5974 }