* [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload
@ 2020-01-19 7:49 Yang Xu
2020-01-19 7:49 ` [LTP] [PATCH 2/2] syscalls/add_key01: remove duplicated case Yang Xu
2020-01-21 15:13 ` [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Cyril Hrubis
0 siblings, 2 replies; 10+ messages in thread
From: Yang Xu @ 2020-01-19 7:49 UTC (permalink / raw)
To: ltp
Seeing add_key manpages, the lenth of payload for "user"/"logon"
is 32767, this value is up tp 1M for "big_key". For "keyring" type
, this value is zero.
Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
---
runtest/syscalls | 1 +
testcases/kernel/syscalls/add_key/.gitignore | 1 +
testcases/kernel/syscalls/add_key/add_key05.c | 99 +++++++++++++++++++
3 files changed, 101 insertions(+)
create mode 100644 testcases/kernel/syscalls/add_key/add_key05.c
diff --git a/runtest/syscalls b/runtest/syscalls
index f58fefe17..830dfc8b7 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -18,6 +18,7 @@ add_key01 add_key01
add_key02 add_key02
add_key03 add_key03
add_key04 add_key04
+add_key05 add_key05
adjtimex01 adjtimex01
adjtimex02 adjtimex02
diff --git a/testcases/kernel/syscalls/add_key/.gitignore b/testcases/kernel/syscalls/add_key/.gitignore
index b9a04214d..f57dc2228 100644
--- a/testcases/kernel/syscalls/add_key/.gitignore
+++ b/testcases/kernel/syscalls/add_key/.gitignore
@@ -2,3 +2,4 @@
/add_key02
/add_key03
/add_key04
+/add_key05
diff --git a/testcases/kernel/syscalls/add_key/add_key05.c b/testcases/kernel/syscalls/add_key/add_key05.c
new file mode 100644
index 000000000..a6d4c1a02
--- /dev/null
+++ b/testcases/kernel/syscalls/add_key/add_key05.c
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2020 FUJITSU LIMITED. All rights reserved.
+ * Author: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
+ *
+ * This case test various key type can support how many long
+ * bytes payload.
+ * keyring: 0 bytes
+ * user/logon: 32767 bytes
+ * big_key: 1M -1byte
+ */
+
+#include <errno.h>
+#include "tst_test.h"
+#include "lapi/keyctl.h"
+
+struct tcase {
+ const char *type;
+ const char *desc;
+ size_t plen;
+ int pass_flag;
+ char *message;
+} tcases[] = {
+ {"keyring", "abc", 0, 1,
+ "The key type is keyrings and plen is 0"},
+
+ {"keyring", "bcd", 1, 0,
+ "the key type is keyrings and plen is 1"},
+
+ {"user", "cde", 32767, 1,
+ "The key type is user and plen is 32767"},
+
+ {"user", "def", 32768, 0,
+ "The key type is user and plen is 32768"},
+
+ {"logon", "ef:g", 32767, 1,
+ "The key type is logon and plen is 32767"},
+
+ {"logon", "fg:h", 32768, 0,
+ "The key type is logon and plen is 32768"},
+
+ {"big_key", "ghi", (1 << 20) - 1, 1,
+ "The key type is big_key and plen is 1048575"},
+
+ {"big_key", "hij", 1 << 20, 0,
+ "The key type is big_key and plen is 1048576"},
+};
+
+static char *buf;
+static unsigned int logon_nsup, big_key_nsup;
+
+static void verify_add_key(unsigned int n)
+{
+ struct tcase *tc = &tcases[n];
+
+ tst_res(TINFO, "%s", tc->message);
+
+ if (!strcmp(tc->type, "logon") && logon_nsup) {
+ tst_res(TINFO,
+ "current system doesn't support logon key type, skip it");
+ return;
+ }
+ if (!strcmp(tc->type, "big_key") && big_key_nsup) {
+ tst_res(TINFO,
+ "current system doesn't support big_key key type, skip it");
+ return;
+ }
+
+ TEST(add_key(tc->type, tc->desc, buf, tc->plen, KEY_SPEC_THREAD_KEYRING));
+ if (TST_RET == -1) {
+ if (TST_ERR == EINVAL)
+ tst_res(tc->pass_flag ? TFAIL : TPASS, "add_key call failed as expected");
+ else
+ tst_res(TFAIL | TTERRNO, "add_key call failed expected EINVAL but got");
+ return;
+ }
+ tst_res(tc->pass_flag ? TPASS : TFAIL, "add_key call succeeded");
+}
+
+static void setup(void)
+{
+ TEST(add_key("logon", "test:sup_logon", buf, 64, KEY_SPEC_THREAD_KEYRING));
+ if (TST_RET == -1)
+ logon_nsup = 1;
+
+ TEST(add_key("big_key", "sup_big_key", buf, 64, KEY_SPEC_THREAD_KEYRING));
+ if (TST_RET == -1)
+ big_key_nsup = 1;
+}
+
+static struct tst_test test = {
+ .setup = setup,
+ .tcnt = ARRAY_SIZE(tcases),
+ .test = verify_add_key,
+ .bufs = (struct tst_buffers []) {
+ {&buf, .size = 1 << 20},
+ {}
+ }
+};
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH 2/2] syscalls/add_key01: remove duplicated case
2020-01-19 7:49 [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Yang Xu
@ 2020-01-19 7:49 ` Yang Xu
2020-01-21 14:50 ` Cyril Hrubis
2020-01-21 15:13 ` [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Cyril Hrubis
1 sibling, 1 reply; 10+ messages in thread
From: Yang Xu @ 2020-01-19 7:49 UTC (permalink / raw)
To: ltp
Since add_key05.c has covered this test point, remove it.
Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
---
runtest/syscalls | 1 -
testcases/kernel/syscalls/add_key/.gitignore | 1 -
testcases/kernel/syscalls/add_key/add_key01.c | 26 -------------------
3 files changed, 28 deletions(-)
delete mode 100644 testcases/kernel/syscalls/add_key/add_key01.c
diff --git a/runtest/syscalls b/runtest/syscalls
index 830dfc8b7..04db95cf5 100644
--- a/runtest/syscalls
+++ b/runtest/syscalls
@@ -14,7 +14,6 @@ access04 access04
acct01 acct01
acct02 acct02
-add_key01 add_key01
add_key02 add_key02
add_key03 add_key03
add_key04 add_key04
diff --git a/testcases/kernel/syscalls/add_key/.gitignore b/testcases/kernel/syscalls/add_key/.gitignore
index f57dc2228..49acda06b 100644
--- a/testcases/kernel/syscalls/add_key/.gitignore
+++ b/testcases/kernel/syscalls/add_key/.gitignore
@@ -1,4 +1,3 @@
-/add_key01
/add_key02
/add_key03
/add_key04
diff --git a/testcases/kernel/syscalls/add_key/add_key01.c b/testcases/kernel/syscalls/add_key/add_key01.c
deleted file mode 100644
index 4fe97dac6..000000000
--- a/testcases/kernel/syscalls/add_key/add_key01.c
+++ /dev/null
@@ -1,26 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (c) Crackerjack Project., 2007
- * Porting from Crackerjack to LTP is done by
- * Manas Kumar Nayak maknayak@in.ibm.com>
- *
- * Basic test for the add_key() syscall.
- */
-
-#include <errno.h>
-
-#include "tst_test.h"
-#include "lapi/keyctl.h"
-
-static void verify_add_key(void)
-{
- TEST(add_key("keyring", "wjkey", NULL, 0, KEY_SPEC_THREAD_KEYRING));
- if (TST_RET == -1)
- tst_res(TFAIL | TTERRNO, "add_key call failed");
- else
- tst_res(TPASS, "add_key call succeeded");
-}
-
-static struct tst_test test = {
- .test_all = verify_add_key,
-};
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH 2/2] syscalls/add_key01: remove duplicated case
2020-01-19 7:49 ` [LTP] [PATCH 2/2] syscalls/add_key01: remove duplicated case Yang Xu
@ 2020-01-21 14:50 ` Cyril Hrubis
0 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2020-01-21 14:50 UTC (permalink / raw)
To: ltp
Hi!
Can't we just change the test instead of creating add_key05 then
removing add_key01?
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload
2020-01-19 7:49 [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Yang Xu
2020-01-19 7:49 ` [LTP] [PATCH 2/2] syscalls/add_key01: remove duplicated case Yang Xu
@ 2020-01-21 15:13 ` Cyril Hrubis
2020-01-22 1:51 ` Yang Xu
2020-01-22 5:26 ` [LTP] [PATCH v2] syscalls/add_key01: test " Yang Xu
1 sibling, 2 replies; 10+ messages in thread
From: Cyril Hrubis @ 2020-01-21 15:13 UTC (permalink / raw)
To: ltp
Hi!
> Seeing add_key manpages, the lenth of payload for "user"/"logon"
> is 32767, this value is up tp 1M for "big_key". For "keyring" type
> , this value is zero.
>
> Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
> ---
> runtest/syscalls | 1 +
> testcases/kernel/syscalls/add_key/.gitignore | 1 +
> testcases/kernel/syscalls/add_key/add_key05.c | 99 +++++++++++++++++++
> 3 files changed, 101 insertions(+)
> create mode 100644 testcases/kernel/syscalls/add_key/add_key05.c
>
> diff --git a/runtest/syscalls b/runtest/syscalls
> index f58fefe17..830dfc8b7 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -18,6 +18,7 @@ add_key01 add_key01
> add_key02 add_key02
> add_key03 add_key03
> add_key04 add_key04
> +add_key05 add_key05
>
> adjtimex01 adjtimex01
> adjtimex02 adjtimex02
> diff --git a/testcases/kernel/syscalls/add_key/.gitignore b/testcases/kernel/syscalls/add_key/.gitignore
> index b9a04214d..f57dc2228 100644
> --- a/testcases/kernel/syscalls/add_key/.gitignore
> +++ b/testcases/kernel/syscalls/add_key/.gitignore
> @@ -2,3 +2,4 @@
> /add_key02
> /add_key03
> /add_key04
> +/add_key05
> diff --git a/testcases/kernel/syscalls/add_key/add_key05.c b/testcases/kernel/syscalls/add_key/add_key05.c
> new file mode 100644
> index 000000000..a6d4c1a02
> --- /dev/null
> +++ b/testcases/kernel/syscalls/add_key/add_key05.c
> @@ -0,0 +1,99 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2020 FUJITSU LIMITED. All rights reserved.
> + * Author: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
> + *
> + * This case test various key type can support how many long
> + * bytes payload.
> + * keyring: 0 bytes
> + * user/logon: 32767 bytes
> + * big_key: 1M -1byte
> + */
> +
> +#include <errno.h>
> +#include "tst_test.h"
> +#include "lapi/keyctl.h"
> +
> +struct tcase {
> + const char *type;
> + const char *desc;
> + size_t plen;
> + int pass_flag;
> + char *message;
> +} tcases[] = {
> + {"keyring", "abc", 0, 1,
> + "The key type is keyrings and plen is 0"},
> +
> + {"keyring", "bcd", 1, 0,
> + "the key type is keyrings and plen is 1"},
> +
> + {"user", "cde", 32767, 1,
> + "The key type is user and plen is 32767"},
> +
> + {"user", "def", 32768, 0,
> + "The key type is user and plen is 32768"},
> +
> + {"logon", "ef:g", 32767, 1,
> + "The key type is logon and plen is 32767"},
> +
> + {"logon", "fg:h", 32768, 0,
> + "The key type is logon and plen is 32768"},
> +
> + {"big_key", "ghi", (1 << 20) - 1, 1,
> + "The key type is big_key and plen is 1048575"},
> +
> + {"big_key", "hij", 1 << 20, 0,
> + "The key type is big_key and plen is 1048576"},
> +};
> +
> +static char *buf;
> +static unsigned int logon_nsup, big_key_nsup;
> +
> +static void verify_add_key(unsigned int n)
> +{
> + struct tcase *tc = &tcases[n];
> +
> + tst_res(TINFO, "%s", tc->message);
> +
> + if (!strcmp(tc->type, "logon") && logon_nsup) {
> + tst_res(TINFO,
> + "current system doesn't support logon key type, skip it");
This should be TCONF and the message could be much
shorther and to the point, something as:
tst_res(TCONF, "skipping unsupported logon key");
> + return;
> + }
> +
> + if (!strcmp(tc->type, "big_key") && big_key_nsup) {
> + tst_res(TINFO,
> + "current system doesn't support big_key key type, skip it");
Here as well.
> + return;
> + }
> +
> + TEST(add_key(tc->type, tc->desc, buf, tc->plen, KEY_SPEC_THREAD_KEYRING));
> + if (TST_RET == -1) {
> + if (TST_ERR == EINVAL)
> + tst_res(tc->pass_flag ? TFAIL : TPASS, "add_key call failed as expected");
> + else
> + tst_res(TFAIL | TTERRNO, "add_key call failed expected EINVAL but got");
This is a bit confusing, we may get the messages even in a case that the
key is supposed to be successfully created, right?
I guess that message "TFAIL: add_key call failed as expected" is not
right.
Can we separate the negative a positive messages so that they are less
confusing?
> + return;
> + }
> + tst_res(tc->pass_flag ? TPASS : TFAIL, "add_key call succeeded");
> +}
> +
> +static void setup(void)
> +{
> + TEST(add_key("logon", "test:sup_logon", buf, 64, KEY_SPEC_THREAD_KEYRING));
> + if (TST_RET == -1)
> + logon_nsup = 1;
> +
> + TEST(add_key("big_key", "sup_big_key", buf, 64, KEY_SPEC_THREAD_KEYRING));
> + if (TST_RET == -1)
> + big_key_nsup = 1;
> +}
> +
> +static struct tst_test test = {
> + .setup = setup,
> + .tcnt = ARRAY_SIZE(tcases),
> + .test = verify_add_key,
> + .bufs = (struct tst_buffers []) {
> + {&buf, .size = 1 << 20},
We actually need different buffer for each different plen size, because
the sole purpose of the buffer is to map a unaccessible page right after
the end of the buffer to catch off-by-one accesses.
> + {}
> + }
> +};
> --
> 2.18.0
>
>
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload
2020-01-21 15:13 ` [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Cyril Hrubis
@ 2020-01-22 1:51 ` Yang Xu
2020-01-22 5:26 ` [LTP] [PATCH v2] syscalls/add_key01: test " Yang Xu
1 sibling, 0 replies; 10+ messages in thread
From: Yang Xu @ 2020-01-22 1:51 UTC (permalink / raw)
To: ltp
Hi
> Hi!
>> Seeing add_key manpages, the lenth of payload for "user"/"logon"
>> is 32767, this value is up tp 1M for "big_key". For "keyring" type
>> , this value is zero.
>>
>> Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
>> ---
>> runtest/syscalls | 1 +
>> testcases/kernel/syscalls/add_key/.gitignore | 1 +
>> testcases/kernel/syscalls/add_key/add_key05.c | 99 +++++++++++++++++++
>> 3 files changed, 101 insertions(+)
>> create mode 100644 testcases/kernel/syscalls/add_key/add_key05.c
>>
>> diff --git a/runtest/syscalls b/runtest/syscalls
>> index f58fefe17..830dfc8b7 100644
>> --- a/runtest/syscalls
>> +++ b/runtest/syscalls
>> @@ -18,6 +18,7 @@ add_key01 add_key01
>> add_key02 add_key02
>> add_key03 add_key03
>> add_key04 add_key04
>> +add_key05 add_key05
>>
>> adjtimex01 adjtimex01
>> adjtimex02 adjtimex02
>> diff --git a/testcases/kernel/syscalls/add_key/.gitignore b/testcases/kernel/syscalls/add_key/.gitignore
>> index b9a04214d..f57dc2228 100644
>> --- a/testcases/kernel/syscalls/add_key/.gitignore
>> +++ b/testcases/kernel/syscalls/add_key/.gitignore
>> @@ -2,3 +2,4 @@
>> /add_key02
>> /add_key03
>> /add_key04
>> +/add_key05
>> diff --git a/testcases/kernel/syscalls/add_key/add_key05.c b/testcases/kernel/syscalls/add_key/add_key05.c
>> new file mode 100644
>> index 000000000..a6d4c1a02
>> --- /dev/null
>> +++ b/testcases/kernel/syscalls/add_key/add_key05.c
>> @@ -0,0 +1,99 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> +/*
>> + * Copyright (c) 2020 FUJITSU LIMITED. All rights reserved.
>> + * Author: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
>> + *
>> + * This case test various key type can support how many long
>> + * bytes payload.
>> + * keyring: 0 bytes
>> + * user/logon: 32767 bytes
>> + * big_key: 1M -1byte
>> + */
>> +
>> +#include <errno.h>
>> +#include "tst_test.h"
>> +#include "lapi/keyctl.h"
>> +
>> +struct tcase {
>> + const char *type;
>> + const char *desc;
>> + size_t plen;
>> + int pass_flag;
>> + char *message;
>> +} tcases[] = {
>> + {"keyring", "abc", 0, 1,
>> + "The key type is keyrings and plen is 0"},
>> +
>> + {"keyring", "bcd", 1, 0,
>> + "the key type is keyrings and plen is 1"},
>> +
>> + {"user", "cde", 32767, 1,
>> + "The key type is user and plen is 32767"},
>> +
>> + {"user", "def", 32768, 0,
>> + "The key type is user and plen is 32768"},
>> +
>> + {"logon", "ef:g", 32767, 1,
>> + "The key type is logon and plen is 32767"},
>> +
>> + {"logon", "fg:h", 32768, 0,
>> + "The key type is logon and plen is 32768"},
>> +
>> + {"big_key", "ghi", (1 << 20) - 1, 1,
>> + "The key type is big_key and plen is 1048575"},
>> +
>> + {"big_key", "hij", 1 << 20, 0,
>> + "The key type is big_key and plen is 1048576"},
>> +};
>> +
>> +static char *buf;
>> +static unsigned int logon_nsup, big_key_nsup;
>> +
>> +static void verify_add_key(unsigned int n)
>> +{
>> + struct tcase *tc = &tcases[n];
>> +
>> + tst_res(TINFO, "%s", tc->message);
>> +
>> + if (!strcmp(tc->type, "logon") && logon_nsup) {
>> + tst_res(TINFO,
>> + "current system doesn't support logon key type, skip it");
> This should be TCONF and the message could be much
> shorther and to the point, something as:
>
> tst_res(TCONF, "skipping unsupported logon key");
OK.
>> + return;
>> + }
>> +
>> + if (!strcmp(tc->type, "big_key") && big_key_nsup) {
>> + tst_res(TINFO,
>> + "current system doesn't support big_key key type, skip it");
>
> Here as well.
OK.
>
>> + return;
>> + }
>> +
>> + TEST(add_key(tc->type, tc->desc, buf, tc->plen, KEY_SPEC_THREAD_KEYRING));
>> + if (TST_RET == -1) {
>> + if (TST_ERR == EINVAL)
>> + tst_res(tc->pass_flag ? TFAIL : TPASS, "add_key call failed as expected");
>> + else
>> + tst_res(TFAIL | TTERRNO, "add_key call failed expected EINVAL but got");
>
> This is a bit confusing, we may get the messages even in a case that the
> key is supposed to be successfully created, right?
>
> I guess that message "TFAIL: add_key call failed as expected" is not
> right.
>
> Can we separate the negative a positive messages so that they are less
> confusing?
Of course. I will separate them.
>
>> + return;
>> + }
>> + tst_res(tc->pass_flag ? TPASS : TFAIL, "add_key call succeeded");
>> +}
>> +
>> +static void setup(void)
>> +{
>> + TEST(add_key("logon", "test:sup_logon", buf, 64, KEY_SPEC_THREAD_KEYRING));
>> + if (TST_RET == -1)
>> + logon_nsup = 1;
>> +
>> + TEST(add_key("big_key", "sup_big_key", buf, 64, KEY_SPEC_THREAD_KEYRING));
>> + if (TST_RET == -1)
>> + big_key_nsup = 1;
>> +}
>> +
>> +static struct tst_test test = {
>> + .setup = setup,
>> + .tcnt = ARRAY_SIZE(tcases),
>> + .test = verify_add_key,
>> + .bufs = (struct tst_buffers []) {
>> + {&buf, .size = 1 << 20},
>
> We actually need different buffer for each different plen size, because
> the sole purpose of the buffer is to map a unaccessible page right after
> the end of the buffer to catch off-by-one accesses.
Agree. I will use different buffers. Also, I will modify add_key01.c
code as you advised instead of creating a new add_key05.>
>> + {}
>> + }
>> +};
>> --
>> 2.18.0
>>
>>
>>
>>
>> --
>> Mailing list info: https://lists.linux.it/listinfo/ltp
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/add_key01: test the length of payload
2020-01-21 15:13 ` [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Cyril Hrubis
2020-01-22 1:51 ` Yang Xu
@ 2020-01-22 5:26 ` Yang Xu
2020-01-23 11:13 ` Cyril Hrubis
2020-01-23 13:06 ` Cyril Hrubis
1 sibling, 2 replies; 10+ messages in thread
From: Yang Xu @ 2020-01-22 5:26 UTC (permalink / raw)
To: ltp
Seeing add_key manpages, the length of payload for "user"/"logon"
is 32767, this value is up tp 1M for "big_key". For "keyring" type
, this value is zero.
---------
v1->v2:
1. use different buffers for different length
2. split pass and fail message, make code less confusing
---------
Signed-off-by: Yang Xu <xuyang2018.jy@cn.fujitsu.com>
---
testcases/kernel/syscalls/add_key/add_key01.c | 110 ++++++++++++++++--
1 file changed, 102 insertions(+), 8 deletions(-)
diff --git a/testcases/kernel/syscalls/add_key/add_key01.c b/testcases/kernel/syscalls/add_key/add_key01.c
index 4fe97dac6..9830d48dc 100644
--- a/testcases/kernel/syscalls/add_key/add_key01.c
+++ b/testcases/kernel/syscalls/add_key/add_key01.c
@@ -4,23 +4,117 @@
* Porting from Crackerjack to LTP is done by
* Manas Kumar Nayak maknayak@in.ibm.com>
*
- * Basic test for the add_key() syscall.
+ * This case test various key type can support how many long
+ * bytes payload.
+ * keyring: 0 bytes
+ * user/logon: 32767 bytes
+ * big_key: 1M -1byte
*/
#include <errno.h>
-
#include "tst_test.h"
#include "lapi/keyctl.h"
-static void verify_add_key(void)
+static char *keyring_buf, *keyring_buf1;
+static char *user_buf, *user_buf1;
+static char *logon_buf, *logon_buf1;
+static char *big_key_buf, *big_key_buf1;
+static unsigned int logon_nsup, big_key_nsup;
+
+struct tcase {
+ const char *type;
+ const char *desc;
+ char **buf;
+ size_t plen;
+ int pass_flag;
+ char *message;
+} tcases[] = {
+ {"keyring", "abc", &keyring_buf, 0, 1,
+ "The key type is keyrings and plen is 0"},
+
+ {"keyring", "bcd", &keyring_buf, 1, 0,
+ "the key type is keyrings and plen is 1"},
+
+ {"user", "cde", &user_buf, 32767, 1,
+ "The key type is user and plen is 32767"},
+
+ {"user", "def", &user_buf1, 32768, 0,
+ "The key type is user and plen is 32768"},
+
+ {"logon", "ef:g", &logon_buf, 32767, 1,
+ "The key type is logon and plen is 32767"},
+
+ {"logon", "fg:h", &logon_buf1, 32768, 0,
+ "The key type is logon and plen is 32768"},
+
+ {"big_key", "ghi", &big_key_buf, (1 << 20) - 1, 1,
+ "The key type is big_key and plen is 1048575"},
+
+ {"big_key", "hij", &big_key_buf1, 1 << 20, 0,
+ "The key type is big_key and plen is 1048576"},
+};
+
+static void verify_add_key(unsigned int n)
{
- TEST(add_key("keyring", "wjkey", NULL, 0, KEY_SPEC_THREAD_KEYRING));
+ struct tcase *tc = &tcases[n];
+
+ tst_res(TINFO, "%s", tc->message);
+
+ if (!strcmp(tc->type, "logon") && logon_nsup) {
+ tst_res(TCONF, "skipping unsupported logon key");
+ return;
+ }
+ if (!strcmp(tc->type, "big_key") && big_key_nsup) {
+ tst_res(TCONF, "skipping unsupported big_key key");
+ return;
+ }
+
+ TEST(add_key(tc->type, tc->desc, *tc->buf, tc->plen, KEY_SPEC_THREAD_KEYRING));
+ if (tc->pass_flag) {
+ if (TST_RET == -1)
+ tst_res(TFAIL | TTERRNO, "add_key call failed unexpectedly");
+ else
+ tst_res(TPASS, "add_key call succeeded as expected");
+ } else {
+ if (TST_RET == -1) {
+ if (TST_ERR == EINVAL)
+ tst_res(TPASS | TTERRNO, "add_key call failed as expected");
+ else
+ tst_res(TFAIL | TTERRNO, "add_key call failed expected EINVAL but got");
+ } else
+ tst_res(TFAIL, "add_key call succeeded unexpectedly");
+ }
+}
+
+static void setup(void)
+{
+ char *logon_sup_buf, *big_key_sup_buf;
+
+ logon_sup_buf = tst_alloc(64);
+ big_key_sup_buf = tst_alloc(64);
+
+ TEST(add_key("logon", "test:sup_logon", logon_sup_buf, 64, KEY_SPEC_THREAD_KEYRING));
+ if (TST_RET == -1)
+ logon_nsup = 1;
+
+ TEST(add_key("big_key", "sup_big_key", big_key_sup_buf, 64, KEY_SPEC_THREAD_KEYRING));
if (TST_RET == -1)
- tst_res(TFAIL | TTERRNO, "add_key call failed");
- else
- tst_res(TPASS, "add_key call succeeded");
+ big_key_nsup = 1;
}
static struct tst_test test = {
- .test_all = verify_add_key,
+ .setup = setup,
+ .tcnt = ARRAY_SIZE(tcases),
+ .test = verify_add_key,
+ .bufs = (struct tst_buffers []) {
+ {&keyring_buf, .size = 1},
+ {&keyring_buf1, .size = 1},
+ {&user_buf, .size = 32767},
+ {&user_buf1, .size = 32768},
+ {&logon_buf, .size = 32767},
+ {&logon_buf1, .size = 32768},
+ {&big_key_buf, .size = (1 << 20) - 1},
+ {&big_key_buf1, .size = 1 << 20},
+ {}
+ }
};
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/add_key01: test the length of payload
2020-01-22 5:26 ` [LTP] [PATCH v2] syscalls/add_key01: test " Yang Xu
@ 2020-01-23 11:13 ` Cyril Hrubis
2020-01-23 12:44 ` Yang Xu
2020-01-23 13:06 ` Cyril Hrubis
1 sibling, 1 reply; 10+ messages in thread
From: Cyril Hrubis @ 2020-01-23 11:13 UTC (permalink / raw)
To: ltp
Hi!
> Seeing add_key manpages, the length of payload for "user"/"logon"
> is 32767, this value is up tp 1M for "big_key". For "keyring" type
> , this value is zero.
This version is nearly good, there are a few minor things I can fix up
before applying.
However the test fails for me unless I run it as root. Looks like any
key that is bigger than certain threshold fails with EDQUOT for me. Have
you tried to run the test as an unpriviledged user?
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/add_key01: test the length of payload
2020-01-23 11:13 ` Cyril Hrubis
@ 2020-01-23 12:44 ` Yang Xu
2020-01-23 12:56 ` Cyril Hrubis
0 siblings, 1 reply; 10+ messages in thread
From: Yang Xu @ 2020-01-23 12:44 UTC (permalink / raw)
To: ltp
> Hi!
>> Seeing add_key manpages, the length of payload for "user"/"logon"
>> is 32767, this value is up tp 1M for "big_key". For "keyring" type
>> , this value is zero.
>
> This version is nearly good, there are a few minor things I can fix up
> before applying.
>
> However the test fails for me unless I run it as root. Looks like any
> key that is bigger than certain threshold fails with EDQUOT for me. Have
> you tried to run the test as an unpriviledged user?
Hi Cyril
I don't run this test under an unpriviledged user. Seeing keyrings
manpages, it said "
/proc/sys/kernel/keys/maxbytes (since Linux 2.6.26)
This is the maximum number of bytes of data that a nonroot user can
hold in the payloads of the keys owned by theuser.
The default value in this file is 20,000.
I perfer to add .needs_root in this flag and check this in a new case.
What do you think about it?
Best Regards
Yang Xu
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/add_key01: test the length of payload
2020-01-23 12:44 ` Yang Xu
@ 2020-01-23 12:56 ` Cyril Hrubis
0 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2020-01-23 12:56 UTC (permalink / raw)
To: ltp
Hi!
> I don't run this test under an unpriviledged user. Seeing keyrings
> manpages, it said "
> /proc/sys/kernel/keys/maxbytes (since Linux 2.6.26)
> This is the maximum number of bytes of data that a nonroot user can
> hold in the payloads of the keys owned by theuser.
> The default value in this file is 20,000.
Hmm, that means that we should write a test for this limit as well.
> I perfer to add .needs_root in this flag and check this in a new case.
> What do you think about it?
Sounds good, I was thinking the same. So I will fix this and a few minor
things as well and push this patch.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/add_key01: test the length of payload
2020-01-22 5:26 ` [LTP] [PATCH v2] syscalls/add_key01: test " Yang Xu
2020-01-23 11:13 ` Cyril Hrubis
@ 2020-01-23 13:06 ` Cyril Hrubis
1 sibling, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2020-01-23 13:06 UTC (permalink / raw)
To: ltp
Hi!
I've removed the save buffers from the test setup, since I do not think
that we should use them for the syscall availability check, added the
.needs_root flag and pushed. Thanks.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2020-01-23 13:06 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-19 7:49 [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Yang Xu
2020-01-19 7:49 ` [LTP] [PATCH 2/2] syscalls/add_key01: remove duplicated case Yang Xu
2020-01-21 14:50 ` Cyril Hrubis
2020-01-21 15:13 ` [LTP] [PATCH 1/2] syscalls/add_key05: add new test for the length of payload Cyril Hrubis
2020-01-22 1:51 ` Yang Xu
2020-01-22 5:26 ` [LTP] [PATCH v2] syscalls/add_key01: test " Yang Xu
2020-01-23 11:13 ` Cyril Hrubis
2020-01-23 12:44 ` Yang Xu
2020-01-23 12:56 ` Cyril Hrubis
2020-01-23 13:06 ` Cyril Hrubis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.