Message ID | 20240521081552.2162-1-maxj.fnst@fujitsu.com |
---|---|
State | New |
Headers | show |
Series | request_key: Add negative tests for request_key | expand |
Hi Ma, Eric, all, > Add negative tests for request_key(), when errno is EFAULT or EPERM LGTM, thanks! Reviewed-by: Petr Vorel <pvorel@suse.cz> We also somehow test EACCES (request_key04.c). Looking into man page, there are other interesting errno to test I suppose (EDQUOT, EKEYEXPIRED, EKEYREJECTED, ...) @Eric, other devs, would you have time to have a quick look on the test? Kind regards, Petr > Signed-off-by: Ma Xinjian <maxj.fnst@fujitsu.com> > --- > runtest/syscalls | 1 + > .../kernel/syscalls/request_key/.gitignore | 1 + > .../syscalls/request_key/request_key06.c | 52 +++++++++++++++++++ > 3 files changed, 54 insertions(+) > create mode 100644 testcases/kernel/syscalls/request_key/request_key06.c > diff --git a/runtest/syscalls b/runtest/syscalls > index 3a28123a5..c04359fcd 100644 > --- a/runtest/syscalls > +++ b/runtest/syscalls > @@ -1187,6 +1187,7 @@ request_key02 request_key02 > request_key03 request_key03 > request_key04 request_key04 > request_key05 request_key05 > +request_key06 request_key06 > rmdir01 rmdir01 > rmdir02 rmdir02 > diff --git a/testcases/kernel/syscalls/request_key/.gitignore b/testcases/kernel/syscalls/request_key/.gitignore > index e8dc1c570..6dcf613c7 100644 > --- a/testcases/kernel/syscalls/request_key/.gitignore > +++ b/testcases/kernel/syscalls/request_key/.gitignore > @@ -3,3 +3,4 @@ > /request_key03 > /request_key04 > /request_key05 > +/request_key06 > diff --git a/testcases/kernel/syscalls/request_key/request_key06.c b/testcases/kernel/syscalls/request_key/request_key06.c > new file mode 100644 > index 000000000..bd872867b > --- /dev/null > +++ b/testcases/kernel/syscalls/request_key/request_key06.c > @@ -0,0 +1,52 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Copyright (c) 2024 FUJITSU LIMITED. All Rights Reserved. > + * Author: Ma Xinjian <maxj.fnst@fujitsu.com> > + */ > + > +/*\ > + * [Description] > + * > + * Verify that request_key(2) fails with > + * > + * - EFAULT when type points outside the process's accessible address space > + * - EFAULT when description points outside the process's accessible address space > + * - EFAULT when callout_info points outside the process's accessible address space > + * - EPERM when type argument started with a period '.' > + */ > + > +#include "tst_test.h" > +#include "lapi/keyctl.h" > + > +static struct test_case_t { > + char *type; > + char *description; > + char *callout_info; > + key_serial_t dest_keyring; > + int expected_errno; > + char *desc; > +} tcases[] = { > + {(char *)(-1), "description", NULL, KEY_SPEC_PROCESS_KEYRING, EFAULT, > + "type points outside the process's accessible address space"}, > + {"type", (char *)(-1), NULL, KEY_SPEC_PROCESS_KEYRING, EFAULT, > + "description points outside the process's accessible address space"}, > + {"type", "description", (char *)(-1), KEY_SPEC_PROCESS_KEYRING, EFAULT, > + "callout_info points outside the process's accessible address space"}, > + {".type", "description", NULL, KEY_SPEC_PROCESS_KEYRING, EPERM, > + "type argument started with a period '.'"}, > +}; > + > +static void verify_request_key(unsigned int i) > +{ > + struct test_case_t *tc = &tcases[i]; > + > + TST_EXP_FAIL2(request_key(tc->type, tc->description, tc->callout_info, > + tc->dest_keyring), > + tc->expected_errno, > + "%s", tc->desc); > +} > + > +static struct tst_test test = { > + .tcnt = ARRAY_SIZE(tcases), > + .test = verify_request_key, > +};
diff --git a/runtest/syscalls b/runtest/syscalls index 3a28123a5..c04359fcd 100644 --- a/runtest/syscalls +++ b/runtest/syscalls @@ -1187,6 +1187,7 @@ request_key02 request_key02 request_key03 request_key03 request_key04 request_key04 request_key05 request_key05 +request_key06 request_key06 rmdir01 rmdir01 rmdir02 rmdir02 diff --git a/testcases/kernel/syscalls/request_key/.gitignore b/testcases/kernel/syscalls/request_key/.gitignore index e8dc1c570..6dcf613c7 100644 --- a/testcases/kernel/syscalls/request_key/.gitignore +++ b/testcases/kernel/syscalls/request_key/.gitignore @@ -3,3 +3,4 @@ /request_key03 /request_key04 /request_key05 +/request_key06 diff --git a/testcases/kernel/syscalls/request_key/request_key06.c b/testcases/kernel/syscalls/request_key/request_key06.c new file mode 100644 index 000000000..bd872867b --- /dev/null +++ b/testcases/kernel/syscalls/request_key/request_key06.c @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (c) 2024 FUJITSU LIMITED. All Rights Reserved. + * Author: Ma Xinjian <maxj.fnst@fujitsu.com> + */ + +/*\ + * [Description] + * + * Verify that request_key(2) fails with + * + * - EFAULT when type points outside the process's accessible address space + * - EFAULT when description points outside the process's accessible address space + * - EFAULT when callout_info points outside the process's accessible address space + * - EPERM when type argument started with a period '.' + */ + +#include "tst_test.h" +#include "lapi/keyctl.h" + +static struct test_case_t { + char *type; + char *description; + char *callout_info; + key_serial_t dest_keyring; + int expected_errno; + char *desc; +} tcases[] = { + {(char *)(-1), "description", NULL, KEY_SPEC_PROCESS_KEYRING, EFAULT, + "type points outside the process's accessible address space"}, + {"type", (char *)(-1), NULL, KEY_SPEC_PROCESS_KEYRING, EFAULT, + "description points outside the process's accessible address space"}, + {"type", "description", (char *)(-1), KEY_SPEC_PROCESS_KEYRING, EFAULT, + "callout_info points outside the process's accessible address space"}, + {".type", "description", NULL, KEY_SPEC_PROCESS_KEYRING, EPERM, + "type argument started with a period '.'"}, +}; + +static void verify_request_key(unsigned int i) +{ + struct test_case_t *tc = &tcases[i]; + + TST_EXP_FAIL2(request_key(tc->type, tc->description, tc->callout_info, + tc->dest_keyring), + tc->expected_errno, + "%s", tc->desc); +} + +static struct tst_test test = { + .tcnt = ARRAY_SIZE(tcases), + .test = verify_request_key, +};
Add negative tests for request_key(), when errno is EFAULT or EPERM Signed-off-by: Ma Xinjian <maxj.fnst@fujitsu.com> --- runtest/syscalls | 1 + .../kernel/syscalls/request_key/.gitignore | 1 + .../syscalls/request_key/request_key06.c | 52 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 testcases/kernel/syscalls/request_key/request_key06.c