You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.4 KiB
56 lines
1.4 KiB
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Copyright 2019 Google LLC
|
|
*/
|
|
|
|
/*
|
|
* Regression test for commit 8f9c46934848 ("crypto: authenc - fix parsing key
|
|
* with misaligned rta_len"). Based on the reproducer from the commit message.
|
|
*/
|
|
|
|
#include <errno.h>
|
|
|
|
#include "tst_test.h"
|
|
#include "tst_af_alg.h"
|
|
#include "lapi/socket.h"
|
|
|
|
/*
|
|
* include after <sys/socket.h> (via tst_test.h), to work around dependency bug
|
|
* in old kernel headers (https://www.spinics.net/lists/netdev/msg171764.html)
|
|
*/
|
|
#include <linux/rtnetlink.h>
|
|
|
|
static void run(void)
|
|
{
|
|
struct {
|
|
struct rtattr attr;
|
|
uint32_t enckeylen;
|
|
char keys[1];
|
|
} __attribute__((packed)) key = {
|
|
.attr.rta_len = sizeof(key),
|
|
.attr.rta_type = 1 /* CRYPTO_AUTHENC_KEYA_PARAM */,
|
|
};
|
|
int algfd;
|
|
|
|
algfd = tst_alg_setup("aead", "authenc(hmac(sha256),cbc(aes))",
|
|
NULL, 0);
|
|
tst_res(TINFO,
|
|
"Setting malformed authenc key. May crash buggy kernels.");
|
|
TEST(setsockopt(algfd, SOL_ALG, ALG_SET_KEY, &key, sizeof(key)));
|
|
if (TST_RET == 0)
|
|
tst_res(TFAIL, "setting malformed key unexpectedly succeeded");
|
|
else if (TST_ERR != EINVAL)
|
|
tst_res(TFAIL | TTERRNO,
|
|
"setting malformed key failed with unexpected error");
|
|
else
|
|
tst_res(TPASS, "didn't crash, and got EINVAL as expected");
|
|
}
|
|
|
|
static struct tst_test test = {
|
|
.test_all = run,
|
|
.tags = (const struct tst_tag[]) {
|
|
{"linux-git", "8f9c46934848"},
|
|
{}
|
|
}
|
|
};
|