mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
sctp: add sctp_auth_init and sctp_auth_free
This patch is to factor out sctp_auth_init and sctp_auth_free functions, and sctp_auth_init will also be used in the next patch for SCTP_AUTH_SUPPORTED sockopt. Signed-off-by: Xin Long <lucien.xin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
219f9ea4d3
commit
03f961270f
3 changed files with 76 additions and 56 deletions
|
@ -1007,3 +1007,72 @@ int sctp_auth_deact_key_id(struct sctp_endpoint *ep,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sctp_auth_init(struct sctp_endpoint *ep, gfp_t gfp)
|
||||
{
|
||||
int err = -ENOMEM;
|
||||
|
||||
/* Allocate space for HMACS and CHUNKS authentication
|
||||
* variables. There are arrays that we encode directly
|
||||
* into parameters to make the rest of the operations easier.
|
||||
*/
|
||||
if (!ep->auth_hmacs_list) {
|
||||
struct sctp_hmac_algo_param *auth_hmacs;
|
||||
|
||||
auth_hmacs = kzalloc(struct_size(auth_hmacs, hmac_ids,
|
||||
SCTP_AUTH_NUM_HMACS), gfp);
|
||||
if (!auth_hmacs)
|
||||
goto nomem;
|
||||
/* Initialize the HMACS parameter.
|
||||
* SCTP-AUTH: Section 3.3
|
||||
* Every endpoint supporting SCTP chunk authentication MUST
|
||||
* support the HMAC based on the SHA-1 algorithm.
|
||||
*/
|
||||
auth_hmacs->param_hdr.type = SCTP_PARAM_HMAC_ALGO;
|
||||
auth_hmacs->param_hdr.length =
|
||||
htons(sizeof(struct sctp_paramhdr) + 2);
|
||||
auth_hmacs->hmac_ids[0] = htons(SCTP_AUTH_HMAC_ID_SHA1);
|
||||
ep->auth_hmacs_list = auth_hmacs;
|
||||
}
|
||||
|
||||
if (!ep->auth_chunk_list) {
|
||||
struct sctp_chunks_param *auth_chunks;
|
||||
|
||||
auth_chunks = kzalloc(sizeof(*auth_chunks) +
|
||||
SCTP_NUM_CHUNK_TYPES, gfp);
|
||||
if (!auth_chunks)
|
||||
goto nomem;
|
||||
/* Initialize the CHUNKS parameter */
|
||||
auth_chunks->param_hdr.type = SCTP_PARAM_CHUNKS;
|
||||
auth_chunks->param_hdr.length =
|
||||
htons(sizeof(struct sctp_paramhdr));
|
||||
ep->auth_chunk_list = auth_chunks;
|
||||
}
|
||||
|
||||
/* Allocate and initialize transorms arrays for supported
|
||||
* HMACs.
|
||||
*/
|
||||
err = sctp_auth_init_hmacs(ep, gfp);
|
||||
if (err)
|
||||
goto nomem;
|
||||
|
||||
return 0;
|
||||
|
||||
nomem:
|
||||
/* Free all allocations */
|
||||
kfree(ep->auth_hmacs_list);
|
||||
kfree(ep->auth_chunk_list);
|
||||
ep->auth_hmacs_list = NULL;
|
||||
ep->auth_chunk_list = NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
void sctp_auth_free(struct sctp_endpoint *ep)
|
||||
{
|
||||
kfree(ep->auth_hmacs_list);
|
||||
kfree(ep->auth_chunk_list);
|
||||
ep->auth_hmacs_list = NULL;
|
||||
ep->auth_chunk_list = NULL;
|
||||
sctp_auth_destroy_hmacs(ep->auth_hmacs);
|
||||
ep->auth_hmacs = NULL;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue