[PATCH] net/tls: Fix authentication failure in CCM mode

Subsystems: networking [general], networking [tls], the rest

STALE1711d

4 messages, 3 authors, 2021-12-01 · open the first message on its own page

[PATCH] net/tls: Fix authentication failure in CCM mode

From: Tianjia Zhang <hidden>
Date: 2021-11-29 09:34:27

When the TLS cipher suite uses CCM mode, including AES CCM and
SM4 CCM, the first byte of the B0 block is flags, and the real
IV starts from the second byte. The XOR operation of the IV and
rec_seq should be skip this byte, that is, add the iv_offset.

Fixes: f295b3ae9f59 ("net/tls: Add support of AES128-CCM based ciphers")
Signed-off-by: Tianjia Zhang <redacted>
Cc: Vakul Garg <redacted>
Cc: stable@vger.kernel.org # v5.2+
---
 net/tls/tls_sw.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index d3e7ff90889e..dfe623a4e72f 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -521,7 +521,7 @@ static int tls_do_encryption(struct sock *sk,
 	memcpy(&rec->iv_data[iv_offset], tls_ctx->tx.iv,
 	       prot->iv_size + prot->salt_size);
 
-	xor_iv_with_seq(prot, rec->iv_data, tls_ctx->tx.rec_seq);
+	xor_iv_with_seq(prot, rec->iv_data + iv_offset, tls_ctx->tx.rec_seq);
 
 	sge->offset += prot->prepend_size;
 	sge->length -= prot->prepend_size;
@@ -1499,7 +1499,7 @@ static int decrypt_internal(struct sock *sk, struct sk_buff *skb,
 	else
 		memcpy(iv + iv_offset, tls_ctx->rx.iv, prot->salt_size);
 
-	xor_iv_with_seq(prot, iv, tls_ctx->rx.rec_seq);
+	xor_iv_with_seq(prot, iv + iv_offset, tls_ctx->rx.rec_seq);
 
 	/* Prepare AAD */
 	tls_make_aad(aad, rxm->full_len - prot->overhead_size +
-- 
2.32.0

Re: [PATCH] net/tls: Fix authentication failure in CCM mode

From: patchwork-bot+netdevbpf@kernel.org
Date: 2021-11-29 14:13:06

Hello:

This patch was applied to netdev/net.git (master)
by David S. Miller [off-list ref]:

On Mon, 29 Nov 2021 17:32:12 +0800 you wrote:
When the TLS cipher suite uses CCM mode, including AES CCM and
SM4 CCM, the first byte of the B0 block is flags, and the real
IV starts from the second byte. The XOR operation of the IV and
rec_seq should be skip this byte, that is, add the iv_offset.

Fixes: f295b3ae9f59 ("net/tls: Add support of AES128-CCM based ciphers")
Signed-off-by: Tianjia Zhang <redacted>
Cc: Vakul Garg <redacted>
Cc: stable@vger.kernel.org # v5.2+

[...]
Here is the summary with links:
  - net/tls: Fix authentication failure in CCM mode
    https://git.kernel.org/netdev/net/c/5961060692f8

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html

Re: [PATCH] net/tls: Fix authentication failure in CCM mode

From: Vadim Fedorenko <hidden>
Date: 2021-11-29 22:45:53

On 29.11.2021 09:32, Tianjia Zhang wrote:
When the TLS cipher suite uses CCM mode, including AES CCM and
SM4 CCM, the first byte of the B0 block is flags, and the real
IV starts from the second byte. The XOR operation of the IV and
rec_seq should be skip this byte, that is, add the iv_offset.

Fixes: f295b3ae9f59 ("net/tls: Add support of AES128-CCM based ciphers")
Signed-off-by: Tianjia Zhang <redacted>
Nice catch, thanks!
This is what I was talking about last time.

Tested-by: Vadim Fedorenko <redacted>

Re: [PATCH] net/tls: Fix authentication failure in CCM mode

From: Tianjia Zhang <hidden>
Date: 2021-12-01 09:55:27

Hi Vadim,

On 11/30/21 6:39 AM, Vadim Fedorenko wrote:
On 29.11.2021 09:32, Tianjia Zhang wrote:
quoted
When the TLS cipher suite uses CCM mode, including AES CCM and
SM4 CCM, the first byte of the B0 block is flags, and the real
IV starts from the second byte. The XOR operation of the IV and
rec_seq should be skip this byte, that is, add the iv_offset.

Fixes: f295b3ae9f59 ("net/tls: Add support of AES128-CCM based ciphers")
Signed-off-by: Tianjia Zhang <redacted>
Nice catch, thanks!
This is what I was talking about last time.

Tested-by: Vadim Fedorenko <redacted>
David has applied this patch, the tested tag may not be added, still 
thanks for your test.

Kind regards,
Tianjia
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help