Skip to content

Commit

Permalink
tls: rx: device: add input CoW helper
Browse files Browse the repository at this point in the history
Wrap the remaining skb_cow_data() into a helper, so it's easier
to replace down the lane. The new version will change the skb
so make sure relevant pointers get reloaded after the call.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Jakub Kicinski committed Jul 26, 2022
1 parent 3f92a64 commit 8b3c59a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 10 deletions.
1 change: 1 addition & 0 deletions net/tls/tls.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ int tls_sw_fallback_init(struct sock *sk,
struct tls_offload_context_tx *offload_ctx,
struct tls_crypto_info *crypto_info);

int tls_strp_msg_cow(struct tls_sw_context_rx *ctx);
struct sk_buff *tls_strp_msg_detach(struct tls_sw_context_rx *ctx);
int tls_strp_msg_hold(struct sock *sk, struct sk_buff *skb,
struct sk_buff_head *dst);
Expand Down
19 changes: 9 additions & 10 deletions net/tls/tls_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -894,27 +894,26 @@ static void tls_device_core_ctrl_rx_resync(struct tls_context *tls_ctx,
static int
tls_device_reencrypt(struct sock *sk, struct tls_sw_context_rx *sw_ctx)
{
int err = 0, offset, copy, nsg, data_len, pos;
struct sk_buff *skb, *skb_iter, *unused;
int err, offset, copy, data_len, pos;
struct sk_buff *skb, *skb_iter;
struct scatterlist sg[1];
struct strp_msg *rxm;
char *orig_buf, *buf;

skb = tls_strp_msg(sw_ctx);
rxm = strp_msg(skb);
offset = rxm->offset;

rxm = strp_msg(tls_strp_msg(sw_ctx));
orig_buf = kmalloc(rxm->full_len + TLS_HEADER_SIZE +
TLS_CIPHER_AES_GCM_128_IV_SIZE, sk->sk_allocation);
if (!orig_buf)
return -ENOMEM;
buf = orig_buf;

nsg = skb_cow_data(skb, 0, &unused);
if (unlikely(nsg < 0)) {
err = nsg;
err = tls_strp_msg_cow(sw_ctx);
if (unlikely(err))
goto free_buf;
}

skb = tls_strp_msg(sw_ctx);
rxm = strp_msg(skb);
offset = rxm->offset;

sg_init_table(sg, 1);
sg_set_buf(&sg[0], buf,
Expand Down
11 changes: 11 additions & 0 deletions net/tls/tls_strp.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,17 @@ struct sk_buff *tls_strp_msg_detach(struct tls_sw_context_rx *ctx)
return skb;
}

int tls_strp_msg_cow(struct tls_sw_context_rx *ctx)
{
struct sk_buff *unused;
int nsg;

nsg = skb_cow_data(ctx->recv_pkt, 0, &unused);
if (nsg < 0)
return nsg;
return 0;
}

int tls_strp_msg_hold(struct sock *sk, struct sk_buff *skb,
struct sk_buff_head *dst)
{
Expand Down

0 comments on commit 8b3c59a

Please sign in to comment.