diff options
author | 2022-04-11 12:19:17 -0700 | |
---|---|---|
committer | 2022-04-13 11:45:39 +0100 | |
commit | a4ae58cdb6e8ed6b00428f65515d5948e1b56deb (patch) | |
tree | 72688c7f291ba8b5e0b231f838d9a448081133f7 /net/tls | |
parent | tls: rx: use MAX_IV_SIZE for allocations (diff) | |
download | linux-a4ae58cdb6e8ed6b00428f65515d5948e1b56deb.tar.gz linux-a4ae58cdb6e8ed6b00428f65515d5948e1b56deb.tar.bz2 linux-a4ae58cdb6e8ed6b00428f65515d5948e1b56deb.zip |
tls: rx: only copy IV from the packet for TLS 1.2
TLS 1.3 and ChaChaPoly don't carry IV in the packet.
The code before this change would copy out iv_size
worth of whatever followed the TLS header in the packet
and then for TLS 1.3 | ChaCha overwrite that with
the sequence number. Waste of cycles especially
with TLS 1.2 being close to dead and TLS 1.3 being
the common case.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tls')
-rw-r--r-- | net/tls/tls_sw.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 465d902f5bb9..ddbe05ec5489 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -1482,20 +1482,20 @@ static int decrypt_internal(struct sock *sk, struct sk_buff *skb, } /* Prepare IV */ - err = skb_copy_bits(skb, rxm->offset + TLS_HEADER_SIZE, - iv + iv_offset + prot->salt_size, - prot->iv_size); - if (err < 0) { - kfree(mem); - return err; - } if (prot->version == TLS_1_3_VERSION || - prot->cipher_type == TLS_CIPHER_CHACHA20_POLY1305) + prot->cipher_type == TLS_CIPHER_CHACHA20_POLY1305) { memcpy(iv + iv_offset, tls_ctx->rx.iv, prot->iv_size + prot->salt_size); - else + } else { + err = skb_copy_bits(skb, rxm->offset + TLS_HEADER_SIZE, + iv + iv_offset + prot->salt_size, + prot->iv_size); + if (err < 0) { + kfree(mem); + return err; + } memcpy(iv + iv_offset, tls_ctx->rx.iv, prot->salt_size); - + } xor_iv_with_seq(prot, iv + iv_offset, tls_ctx->rx.rec_seq); /* Prepare AAD */ |