diff options
Diffstat (limited to 'net/sctp/auth.c')
| -rw-r--r-- | net/sctp/auth.c | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/net/sctp/auth.c b/net/sctp/auth.c index fb7976aee61c..4f15b7d730e1 100644 --- a/net/sctp/auth.c +++ b/net/sctp/auth.c @@ -381,13 +381,14 @@ nomem:  } -/* Public interface to creat the association shared key. +/* Public interface to create the association shared key.   * See code above for the algorithm.   */  int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp)  {  	struct sctp_auth_bytes	*secret;  	struct sctp_shared_key *ep_key; +	struct sctp_chunk *chunk;  	/* If we don't support AUTH, or peer is not capable  	 * we don't need to do anything. @@ -410,6 +411,14 @@ int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp)  	sctp_auth_key_put(asoc->asoc_shared_key);  	asoc->asoc_shared_key = secret; +	/* Update send queue in case any chunk already in there now +	 * needs authenticating +	 */ +	list_for_each_entry(chunk, &asoc->outqueue.out_chunk_list, list) { +		if (sctp_auth_send_cid(chunk->chunk_hdr->type, asoc)) +			chunk->auth = 1; +	} +  	return 0;  } | 
