Skip to content

Commit

Permalink
tls: also use init_prot_info in tls_set_device_offload
Browse files Browse the repository at this point in the history
Most values are shared. Nonce size turns out to be equal to IV size
for all offloadable ciphers.

Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Sabrina Dubroca authored and David S. Miller committed Oct 13, 2023
1 parent a993781 commit 1a074f7
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 14 deletions.
4 changes: 4 additions & 0 deletions net/tls/tls.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ void update_sk_prot(struct sock *sk, struct tls_context *ctx);
int wait_on_pending_writer(struct sock *sk, long *timeo);
void tls_err_abort(struct sock *sk, int err);

int init_prot_info(struct tls_prot_info *prot,
const struct tls_crypto_info *crypto_info,
const struct tls_cipher_desc *cipher_desc,
int mode);
int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx, int tx);
void tls_update_rx_zc_capable(struct tls_context *tls_ctx);
void tls_sw_strparser_arm(struct sock *sk, struct tls_context *ctx);
Expand Down
14 changes: 4 additions & 10 deletions net/tls/tls_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -1076,20 +1076,14 @@ int tls_set_device_offload(struct sock *sk, struct tls_context *ctx)
goto release_netdev;
}

rc = init_prot_info(prot, crypto_info, cipher_desc, TLS_HW);
if (rc)
goto release_netdev;

iv = crypto_info_iv(crypto_info, cipher_desc);
rec_seq = crypto_info_rec_seq(crypto_info, cipher_desc);

prot->version = crypto_info->version;
prot->cipher_type = crypto_info->cipher_type;
prot->prepend_size = TLS_HEADER_SIZE + cipher_desc->iv;
prot->tag_size = cipher_desc->tag;
prot->overhead_size = prot->prepend_size + prot->tag_size;
prot->iv_size = cipher_desc->iv;
prot->salt_size = cipher_desc->salt;

memcpy(ctx->tx.iv + cipher_desc->salt, iv, cipher_desc->iv);

prot->rec_seq_size = cipher_desc->rec_seq;
memcpy(ctx->tx.rec_seq, rec_seq, cipher_desc->rec_seq);

start_marker_record = kmalloc(sizeof(*start_marker_record), GFP_KERNEL);
Expand Down
14 changes: 10 additions & 4 deletions net/tls/tls_sw.c
Original file line number Diff line number Diff line change
Expand Up @@ -2620,9 +2620,10 @@ static struct tls_sw_context_rx *init_ctx_rx(struct tls_context *ctx)
return sw_ctx_rx;
}

static int init_prot_info(struct tls_prot_info *prot,
const struct tls_crypto_info *crypto_info,
const struct tls_cipher_desc *cipher_desc)
int init_prot_info(struct tls_prot_info *prot,
const struct tls_crypto_info *crypto_info,
const struct tls_cipher_desc *cipher_desc,
int mode)
{
u16 nonce_size = cipher_desc->nonce;

Expand All @@ -2635,6 +2636,11 @@ static int init_prot_info(struct tls_prot_info *prot,
prot->tail_size = 0;
}

if (mode == TLS_HW) {
prot->aad_size = 0;
prot->tail_size = 0;
}

/* Sanity-check the sizes for stack allocations. */
if (nonce_size > TLS_MAX_IV_SIZE || prot->aad_size > TLS_MAX_AAD_SIZE)
return -EINVAL;
Expand Down Expand Up @@ -2696,7 +2702,7 @@ int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx, int tx)
goto free_priv;
}

rc = init_prot_info(prot, crypto_info, cipher_desc);
rc = init_prot_info(prot, crypto_info, cipher_desc, TLS_SW);
if (rc)
goto free_priv;

Expand Down

0 comments on commit 1a074f7

Please sign in to comment.