Commit 291c53e4 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

selftests: tls: fix chacha+bidir tests

ChaCha support did not adjust the bidirectional test.
We need to set up KTLS in reverse direction correctly,
otherwise these two cases will fail:

  tls.12_chacha.bidir
  tls.13_chacha.bidir

Fixes: 4f336e88 ("selftests/tls: add CHACHA20-POLY1305 to tls selftests")
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Acked-by: default avatarVadim Fedorenko <vfedorenko@novek.ru>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent baa00119
...@@ -25,6 +25,35 @@ ...@@ -25,6 +25,35 @@
#define TLS_PAYLOAD_MAX_LEN 16384 #define TLS_PAYLOAD_MAX_LEN 16384
#define SOL_TLS 282 #define SOL_TLS 282
struct tls_crypto_info_keys {
union {
struct tls12_crypto_info_aes_gcm_128 aes128;
struct tls12_crypto_info_chacha20_poly1305 chacha20;
};
size_t len;
};
static void tls_crypto_info_init(uint16_t tls_version, uint16_t cipher_type,
struct tls_crypto_info_keys *tls12)
{
memset(tls12, 0, sizeof(*tls12));
switch (cipher_type) {
case TLS_CIPHER_CHACHA20_POLY1305:
tls12->len = sizeof(struct tls12_crypto_info_chacha20_poly1305);
tls12->chacha20.info.version = tls_version;
tls12->chacha20.info.cipher_type = cipher_type;
break;
case TLS_CIPHER_AES_GCM_128:
tls12->len = sizeof(struct tls12_crypto_info_aes_gcm_128);
tls12->aes128.info.version = tls_version;
tls12->aes128.info.cipher_type = cipher_type;
break;
default:
break;
}
}
static void memrnd(void *s, size_t n) static void memrnd(void *s, size_t n)
{ {
int *dword = s; int *dword = s;
...@@ -145,33 +174,16 @@ FIXTURE_VARIANT_ADD(tls, 13_chacha) ...@@ -145,33 +174,16 @@ FIXTURE_VARIANT_ADD(tls, 13_chacha)
FIXTURE_SETUP(tls) FIXTURE_SETUP(tls)
{ {
union { struct tls_crypto_info_keys tls12;
struct tls12_crypto_info_aes_gcm_128 aes128;
struct tls12_crypto_info_chacha20_poly1305 chacha20;
} tls12;
struct sockaddr_in addr; struct sockaddr_in addr;
socklen_t len; socklen_t len;
int sfd, ret; int sfd, ret;
size_t tls12_sz;
self->notls = false; self->notls = false;
len = sizeof(addr); len = sizeof(addr);
memset(&tls12, 0, sizeof(tls12)); tls_crypto_info_init(variant->tls_version, variant->cipher_type,
switch (variant->cipher_type) { &tls12);
case TLS_CIPHER_CHACHA20_POLY1305:
tls12_sz = sizeof(struct tls12_crypto_info_chacha20_poly1305);
tls12.chacha20.info.version = variant->tls_version;
tls12.chacha20.info.cipher_type = variant->cipher_type;
break;
case TLS_CIPHER_AES_GCM_128:
tls12_sz = sizeof(struct tls12_crypto_info_aes_gcm_128);
tls12.aes128.info.version = variant->tls_version;
tls12.aes128.info.cipher_type = variant->cipher_type;
break;
default:
tls12_sz = 0;
}
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_addr.s_addr = htonl(INADDR_ANY);
...@@ -199,7 +211,7 @@ FIXTURE_SETUP(tls) ...@@ -199,7 +211,7 @@ FIXTURE_SETUP(tls)
if (!self->notls) { if (!self->notls) {
ret = setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12, ret = setsockopt(self->fd, SOL_TLS, TLS_TX, &tls12,
tls12_sz); tls12.len);
ASSERT_EQ(ret, 0); ASSERT_EQ(ret, 0);
} }
...@@ -212,7 +224,7 @@ FIXTURE_SETUP(tls) ...@@ -212,7 +224,7 @@ FIXTURE_SETUP(tls)
ASSERT_EQ(ret, 0); ASSERT_EQ(ret, 0);
ret = setsockopt(self->cfd, SOL_TLS, TLS_RX, &tls12, ret = setsockopt(self->cfd, SOL_TLS, TLS_RX, &tls12,
tls12_sz); tls12.len);
ASSERT_EQ(ret, 0); ASSERT_EQ(ret, 0);
} }
...@@ -854,18 +866,17 @@ TEST_F(tls, bidir) ...@@ -854,18 +866,17 @@ TEST_F(tls, bidir)
int ret; int ret;
if (!self->notls) { if (!self->notls) {
struct tls12_crypto_info_aes_gcm_128 tls12; struct tls_crypto_info_keys tls12;
memset(&tls12, 0, sizeof(tls12)); tls_crypto_info_init(variant->tls_version, variant->cipher_type,
tls12.info.version = variant->tls_version; &tls12);
tls12.info.cipher_type = TLS_CIPHER_AES_GCM_128;
ret = setsockopt(self->fd, SOL_TLS, TLS_RX, &tls12, ret = setsockopt(self->fd, SOL_TLS, TLS_RX, &tls12,
sizeof(tls12)); tls12.len);
ASSERT_EQ(ret, 0); ASSERT_EQ(ret, 0);
ret = setsockopt(self->cfd, SOL_TLS, TLS_TX, &tls12, ret = setsockopt(self->cfd, SOL_TLS, TLS_TX, &tls12,
sizeof(tls12)); tls12.len);
ASSERT_EQ(ret, 0); ASSERT_EQ(ret, 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment