public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH 0/4] Add .skip_in_secureboot flag
@ 2023-07-20 15:02 Petr Vorel
  2023-07-20 15:02 ` [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration Petr Vorel
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Petr Vorel @ 2023-07-20 15:02 UTC (permalink / raw)
  To: ltp

Petr Vorel (4):
  tst_lockdown: Check other lockdown configuration
  lib: Add .skip_in_secureboot flag
  {delete,finit,init}_module0[1-3]: Skip on SecureBoot
  doc/c-api: Document .skip_in_* flags

 doc/c-test-api.txt                              |  6 ++++++
 doc/test-writing-guidelines.txt                 |  1 +
 include/tst_test.h                              |  4 ++++
 lib/tst_lockdown.c                              | 11 +++++++----
 lib/tst_test.c                                  |  3 +++
 .../syscalls/delete_module/delete_module01.c    |  2 ++
 .../syscalls/delete_module/delete_module03.c    |  2 ++
 .../syscalls/finit_module/finit_module01.c      |  2 ++
 .../syscalls/finit_module/finit_module02.c      | 17 +++++++++++++----
 .../kernel/syscalls/init_module/init_module01.c |  2 ++
 .../kernel/syscalls/init_module/init_module02.c | 16 ++++++++++++----
 11 files changed, 54 insertions(+), 12 deletions(-)

-- 
2.40.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration
  2023-07-20 15:02 [LTP] [PATCH 0/4] Add .skip_in_secureboot flag Petr Vorel
@ 2023-07-20 15:02 ` Petr Vorel
  2023-07-20 15:16   ` Martin Doucha
  2023-07-20 15:02 ` [LTP] [PATCH 2/4] lib: Add .skip_in_secureboot flag Petr Vorel
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Petr Vorel @ 2023-07-20 15:02 UTC (permalink / raw)
  To: ltp

Originally we checked only CONFIG_EFI_SECURE_BOOT_LOCK_DOWN=y
(non-mainline patch from 2017 [1]. Various distros (older releases) use
other newer non-mainline patch [2] (originally from Fedora 32), which with
CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT=y forces lockdown, when in secure boot.

[1] https://lore.kernel.org/lkml/149141204578.30815.1929675368430800975.stgit@warthog.procyon.org.uk/
[2] https://lore.kernel.org/lkml/150842483945.7923.12778302394414653081.stgit@warthog.procyon.org.uk/

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 lib/tst_lockdown.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/lib/tst_lockdown.c b/lib/tst_lockdown.c
index 26a57b6a1..f91bc919d 100644
--- a/lib/tst_lockdown.c
+++ b/lib/tst_lockdown.c
@@ -47,18 +47,21 @@ int tst_lockdown_enabled(void)
 {
 	char line[BUFSIZ];
 	FILE *file;
+	char flag;
 
 	if (access(PATH_LOCKDOWN, F_OK) != 0) {
-		char flag;
-
+		/* SecureBoot enabled could mean integrity lockdown (non-mainline version) */
 		flag = tst_kconfig_get("CONFIG_EFI_SECURE_BOOT_LOCK_DOWN");
-
-		/* SecureBoot enabled could mean integrity lockdown */
 		if (flag == 'y' && tst_secureboot_enabled() > 0)
 			return 1;
 
 		tst_res(TINFO, "Unable to determine system lockdown state");
 		return 0;
+	} else {
+		/* SecureBoot forces lockdown (non-mainline version) */
+		flag = tst_kconfig_get("CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT");
+		if (flag == 'y' && tst_secureboot_enabled() > 0)
+			return 1;
 	}
 
 	file = SAFE_FOPEN(PATH_LOCKDOWN, "r");
-- 
2.40.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [LTP] [PATCH 2/4] lib: Add .skip_in_secureboot flag
  2023-07-20 15:02 [LTP] [PATCH 0/4] Add .skip_in_secureboot flag Petr Vorel
  2023-07-20 15:02 ` [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration Petr Vorel
@ 2023-07-20 15:02 ` Petr Vorel
  2023-07-20 15:18   ` Martin Doucha
  2023-07-20 15:02 ` [LTP] [PATCH 3/4] {delete, finit, init}_module0[1-3]: Skip on SecureBoot Petr Vorel
  2023-07-20 15:02 ` [LTP] [PATCH 4/4] doc/c-api: Document .skip_in_* flags Petr Vorel
  3 siblings, 1 reply; 11+ messages in thread
From: Petr Vorel @ 2023-07-20 15:02 UTC (permalink / raw)
  To: ltp

This will be used in module related tests.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 doc/test-writing-guidelines.txt | 1 +
 include/tst_test.h              | 4 ++++
 lib/tst_test.c                  | 3 +++
 3 files changed, 8 insertions(+)

diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt
index b83a6fdb6..6d1a69165 100644
--- a/doc/test-writing-guidelines.txt
+++ b/doc/test-writing-guidelines.txt
@@ -393,6 +393,7 @@ https://github.com/linux-test-project/ltp/wiki/Shell-Test-API[Shell Test API].
 | '.skip_filesystems' | 'TST_SKIP_FILESYSTEMS'
 | '.skip_in_compat' | –
 | '.skip_in_lockdown' | –
+| '.skip_in_secureboot' | –
 | '.supported_archs' | not applicable
 | '.tags' | –
 | '.taint_check' | –
diff --git a/include/tst_test.h b/include/tst_test.h
index 22acfba59..0ac492a80 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -177,6 +177,7 @@ struct tst_test {
 	int child_needs_reinit:1;
 	int needs_devfs:1;
 	int restore_wallclock:1;
+
 	/*
 	 * If set the test function will be executed for all available
 	 * filesystems and the current filesystem type would be set in the
@@ -186,8 +187,11 @@ struct tst_test {
 	 * to the test function.
 	 */
 	int all_filesystems:1;
+
 	int skip_in_lockdown:1;
+	int skip_in_secureboot:1;
 	int skip_in_compat:1;
+
 	/*
 	 * If set, the hugetlbfs will be mounted at .mntpoint.
 	 */
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 04da456c6..8f7223b0e 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -1160,6 +1160,9 @@ static void do_setup(int argc, char *argv[])
 	if (tst_test->skip_in_lockdown && tst_lockdown_enabled())
 		tst_brk(TCONF, "Kernel is locked down, skipping test");
 
+	if (tst_test->skip_in_secureboot && tst_secureboot_enabled())
+		tst_brk(TCONF, "SecureBoot enabled, skipping test");
+
 	if (tst_test->skip_in_compat && TST_ABI != tst_kernel_bits())
 		tst_brk(TCONF, "Not supported in 32-bit compat mode");
 
-- 
2.40.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [LTP] [PATCH 3/4] {delete, finit, init}_module0[1-3]: Skip on SecureBoot
  2023-07-20 15:02 [LTP] [PATCH 0/4] Add .skip_in_secureboot flag Petr Vorel
  2023-07-20 15:02 ` [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration Petr Vorel
  2023-07-20 15:02 ` [LTP] [PATCH 2/4] lib: Add .skip_in_secureboot flag Petr Vorel
@ 2023-07-20 15:02 ` Petr Vorel
  2023-07-20 15:26   ` Martin Doucha
  2023-07-20 15:02 ` [LTP] [PATCH 4/4] doc/c-api: Document .skip_in_* flags Petr Vorel
  3 siblings, 1 reply; 11+ messages in thread
From: Petr Vorel @ 2023-07-20 15:02 UTC (permalink / raw)
  To: ltp

Enabled SecureBoot requires signed modules (regardless lockdown state).

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 .../syscalls/delete_module/delete_module01.c    |  2 ++
 .../syscalls/delete_module/delete_module03.c    |  2 ++
 .../syscalls/finit_module/finit_module01.c      |  2 ++
 .../syscalls/finit_module/finit_module02.c      | 17 +++++++++++++----
 .../kernel/syscalls/init_module/init_module01.c |  2 ++
 .../kernel/syscalls/init_module/init_module02.c | 16 ++++++++++++----
 6 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/testcases/kernel/syscalls/delete_module/delete_module01.c b/testcases/kernel/syscalls/delete_module/delete_module01.c
index 6ecd2cad1..08597cfd6 100644
--- a/testcases/kernel/syscalls/delete_module/delete_module01.c
+++ b/testcases/kernel/syscalls/delete_module/delete_module01.c
@@ -52,6 +52,8 @@ static struct tst_test test = {
 	.needs_root = 1,
 	/* lockdown requires signed modules */
 	.skip_in_lockdown = 1,
+	/* SecureBoot requires signed modules */
+	.skip_in_secureboot = 1,
 	.cleanup = cleanup,
 	.test_all = do_delete_module,
 };
diff --git a/testcases/kernel/syscalls/delete_module/delete_module03.c b/testcases/kernel/syscalls/delete_module/delete_module03.c
index 863d36188..a4b5108f0 100644
--- a/testcases/kernel/syscalls/delete_module/delete_module03.c
+++ b/testcases/kernel/syscalls/delete_module/delete_module03.c
@@ -74,6 +74,8 @@ static struct tst_test test = {
 	.needs_root = 1,
 	/* lockdown requires signed modules */
 	.skip_in_lockdown = 1,
+	/* SecureBoot requires signed modules */
+	.skip_in_secureboot = 1,
 	.setup = setup,
 	.cleanup = cleanup,
 	.test_all = do_delete_module,
diff --git a/testcases/kernel/syscalls/finit_module/finit_module01.c b/testcases/kernel/syscalls/finit_module/finit_module01.c
index f960b2e40..660b567f5 100644
--- a/testcases/kernel/syscalls/finit_module/finit_module01.c
+++ b/testcases/kernel/syscalls/finit_module/finit_module01.c
@@ -51,4 +51,6 @@ static struct tst_test test = {
 	.needs_root = 1,
 	/* lockdown requires signed modules */
 	.skip_in_lockdown = 1,
+	/* SecureBoot requires signed modules */
+	.skip_in_secureboot = 1,
 };
diff --git a/testcases/kernel/syscalls/finit_module/finit_module02.c b/testcases/kernel/syscalls/finit_module/finit_module02.c
index a7434de7d..4f5962829 100644
--- a/testcases/kernel/syscalls/finit_module/finit_module02.c
+++ b/testcases/kernel/syscalls/finit_module/finit_module02.c
@@ -25,7 +25,7 @@
 static char *mod_path;
 
 static int fd, fd_zero, fd_invalid = -1, fd_dir;
-static int kernel_lockdown;
+static int kernel_lockdown, secure_boot;
 
 static struct tst_cap cap_req = TST_CAP(TST_CAP_REQ, CAP_SYS_MODULE);
 static struct tst_cap cap_drop = TST_CAP(TST_CAP_DROP, CAP_SYS_MODULE);
@@ -84,6 +84,8 @@ static void setup(void)
 	tst_module_exists(MODULE_NAME, &mod_path);
 
 	kernel_lockdown = tst_lockdown_enabled();
+	secure_boot = tst_secureboot_enabled();
+
 	SAFE_MKDIR(TEST_DIR, 0700);
 	fd_dir = SAFE_OPEN(TEST_DIR, O_DIRECTORY);
 
@@ -102,9 +104,16 @@ static void run(unsigned int n)
 {
 	struct tcase *tc = &tcases[n];
 
-	if (tc->skip_in_lockdown && kernel_lockdown) {
-		tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
-		return;
+	if (tc->skip_in_lockdown) {
+		if (secure_boot) {
+			tst_res(TCONF, "SecureBoot enabled, skipping %s", tc->name);
+			return;
+		}
+
+		if (kernel_lockdown) {
+			tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
+			return;
+		}
 	}
 
 	fd = SAFE_OPEN(mod_path, tc->open_flags);
diff --git a/testcases/kernel/syscalls/init_module/init_module01.c b/testcases/kernel/syscalls/init_module/init_module01.c
index 79e567cd6..80b2b77cc 100644
--- a/testcases/kernel/syscalls/init_module/init_module01.c
+++ b/testcases/kernel/syscalls/init_module/init_module01.c
@@ -55,4 +55,6 @@ static struct tst_test test = {
 	.needs_root = 1,
 	/* lockdown requires signed modules */
 	.skip_in_lockdown = 1,
+	/* SecureBoot requires signed modules */
+	.skip_in_secureboot = 1,
 };
diff --git a/testcases/kernel/syscalls/init_module/init_module02.c b/testcases/kernel/syscalls/init_module/init_module02.c
index ad6569a06..4acbfbcd1 100644
--- a/testcases/kernel/syscalls/init_module/init_module02.c
+++ b/testcases/kernel/syscalls/init_module/init_module02.c
@@ -22,7 +22,7 @@
 #define MODULE_NAME	"init_module.ko"
 
 static unsigned long size, zero_size;
-static int kernel_lockdown;
+static int kernel_lockdown, secure_boot;
 static void *buf, *faulty_buf, *null_buf;
 
 static struct tst_cap cap_req = TST_CAP(TST_CAP_REQ, CAP_SYS_MODULE);
@@ -54,6 +54,7 @@ static void setup(void)
 	tst_module_exists(MODULE_NAME, NULL);
 
 	kernel_lockdown = tst_lockdown_enabled();
+	secure_boot = tst_secureboot_enabled();
 	fd = SAFE_OPEN(MODULE_NAME, O_RDONLY|O_CLOEXEC);
 	SAFE_FSTAT(fd, &sb);
 	size = sb.st_size;
@@ -67,9 +68,16 @@ static void run(unsigned int n)
 {
 	struct tcase *tc = &tcases[n];
 
-	if (tc->skip_in_lockdown && kernel_lockdown) {
-		tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
-		return;
+	if (tc->skip_in_lockdown) {
+		if (secure_boot) {
+			tst_res(TCONF, "SecureBoot enabled, skipping %s", tc->name);
+			return;
+		}
+
+		if (kernel_lockdown) {
+			tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
+			return;
+		}
 	}
 
 	if (tc->cap)
-- 
2.40.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [LTP] [PATCH 4/4] doc/c-api: Document .skip_in_* flags
  2023-07-20 15:02 [LTP] [PATCH 0/4] Add .skip_in_secureboot flag Petr Vorel
                   ` (2 preceding siblings ...)
  2023-07-20 15:02 ` [LTP] [PATCH 3/4] {delete, finit, init}_module0[1-3]: Skip on SecureBoot Petr Vorel
@ 2023-07-20 15:02 ` Petr Vorel
  2023-07-20 15:27   ` Martin Doucha
  3 siblings, 1 reply; 11+ messages in thread
From: Petr Vorel @ 2023-07-20 15:02 UTC (permalink / raw)
  To: ltp

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
 doc/c-test-api.txt | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/doc/c-test-api.txt b/doc/c-test-api.txt
index 07c069ced..74871e6c8 100644
--- a/doc/c-test-api.txt
+++ b/doc/c-test-api.txt
@@ -2412,6 +2412,12 @@ static struct tst_test test = {
 };
 -------------------------------------------------------------------------------
 
+1.41 Skipping test based on system state
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Test can be skipped on various conditions: on enabled SecureBoot
+('.skip_in_secureboot = 1'), lockdown ('.skip_in_lockdown = 1') or in 32-bit
+compat mode ('.skip_in_compat = 1').
+
 2. Common problems
 ------------------
 
-- 
2.40.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration
  2023-07-20 15:02 ` [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration Petr Vorel
@ 2023-07-20 15:16   ` Martin Doucha
  2023-07-21  8:55     ` Petr Vorel
  0 siblings, 1 reply; 11+ messages in thread
From: Martin Doucha @ 2023-07-20 15:16 UTC (permalink / raw)
  To: Petr Vorel, ltp

Hi,

On 20. 07. 23 17:02, Petr Vorel wrote:
> Originally we checked only CONFIG_EFI_SECURE_BOOT_LOCK_DOWN=y
> (non-mainline patch from 2017 [1]. Various distros (older releases) use
> other newer non-mainline patch [2] (originally from Fedora 32), which with
> CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT=y forces lockdown, when in secure boot.
> 
> [1] https://lore.kernel.org/lkml/149141204578.30815.1929675368430800975.stgit@warthog.procyon.org.uk/
> [2] https://lore.kernel.org/lkml/150842483945.7923.12778302394414653081.stgit@warthog.procyon.org.uk/
> 
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
>   lib/tst_lockdown.c | 11 +++++++----
>   1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/tst_lockdown.c b/lib/tst_lockdown.c
> index 26a57b6a1..f91bc919d 100644
> --- a/lib/tst_lockdown.c
> +++ b/lib/tst_lockdown.c
> @@ -47,18 +47,21 @@ int tst_lockdown_enabled(void)
>   {
>   	char line[BUFSIZ];
>   	FILE *file;
> +	char flag;
>   
>   	if (access(PATH_LOCKDOWN, F_OK) != 0) {
> -		char flag;
> -
> +		/* SecureBoot enabled could mean integrity lockdown (non-mainline version) */
>   		flag = tst_kconfig_get("CONFIG_EFI_SECURE_BOOT_LOCK_DOWN");
> -
> -		/* SecureBoot enabled could mean integrity lockdown */
>   		if (flag == 'y' && tst_secureboot_enabled() > 0)
>   			return 1;
>   
>   		tst_res(TINFO, "Unable to determine system lockdown state");
>   		return 0;
> +	} else {

There should be no "else" branch here. The code above should look like this:

int flag;
flag = tst_kconfig_get("CONFIG_EFI_SECURE_BOOT_LOCK_DOWN") == 'y';
flag |= tst_kconfig_get("CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT") == 'y';
if (flag && tst_secureboot_enabled() > 0)
	return 1;

> +		/* SecureBoot forces lockdown (non-mainline version) */
> +		flag = tst_kconfig_get("CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT");
> +		if (flag == 'y' && tst_secureboot_enabled() > 0)
> +			return 1;
>   	}
>   
>   	file = SAFE_FOPEN(PATH_LOCKDOWN, "r");

-- 
Martin Doucha   mdoucha@suse.cz
SW Quality Engineer
SUSE LINUX, s.r.o.
CORSO IIa
Krizikova 148/34
186 00 Prague 8
Czech Republic


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH 2/4] lib: Add .skip_in_secureboot flag
  2023-07-20 15:02 ` [LTP] [PATCH 2/4] lib: Add .skip_in_secureboot flag Petr Vorel
@ 2023-07-20 15:18   ` Martin Doucha
  0 siblings, 0 replies; 11+ messages in thread
From: Martin Doucha @ 2023-07-20 15:18 UTC (permalink / raw)
  To: Petr Vorel, ltp

Hi,
Reviewed-by: Martin Doucha <mdoucha@suse.cz>

On 20. 07. 23 17:02, Petr Vorel wrote:
> This will be used in module related tests.
> 
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
>   doc/test-writing-guidelines.txt | 1 +
>   include/tst_test.h              | 4 ++++
>   lib/tst_test.c                  | 3 +++
>   3 files changed, 8 insertions(+)
> 
> diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt
> index b83a6fdb6..6d1a69165 100644
> --- a/doc/test-writing-guidelines.txt
> +++ b/doc/test-writing-guidelines.txt
> @@ -393,6 +393,7 @@ https://github.com/linux-test-project/ltp/wiki/Shell-Test-API[Shell Test API].
>   | '.skip_filesystems' | 'TST_SKIP_FILESYSTEMS'
>   | '.skip_in_compat' | –
>   | '.skip_in_lockdown' | –
> +| '.skip_in_secureboot' | –
>   | '.supported_archs' | not applicable
>   | '.tags' | –
>   | '.taint_check' | –
> diff --git a/include/tst_test.h b/include/tst_test.h
> index 22acfba59..0ac492a80 100644
> --- a/include/tst_test.h
> +++ b/include/tst_test.h
> @@ -177,6 +177,7 @@ struct tst_test {
>   	int child_needs_reinit:1;
>   	int needs_devfs:1;
>   	int restore_wallclock:1;
> +
>   	/*
>   	 * If set the test function will be executed for all available
>   	 * filesystems and the current filesystem type would be set in the
> @@ -186,8 +187,11 @@ struct tst_test {
>   	 * to the test function.
>   	 */
>   	int all_filesystems:1;
> +
>   	int skip_in_lockdown:1;
> +	int skip_in_secureboot:1;
>   	int skip_in_compat:1;
> +
>   	/*
>   	 * If set, the hugetlbfs will be mounted at .mntpoint.
>   	 */
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index 04da456c6..8f7223b0e 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -1160,6 +1160,9 @@ static void do_setup(int argc, char *argv[])
>   	if (tst_test->skip_in_lockdown && tst_lockdown_enabled())
>   		tst_brk(TCONF, "Kernel is locked down, skipping test");
>   
> +	if (tst_test->skip_in_secureboot && tst_secureboot_enabled())
> +		tst_brk(TCONF, "SecureBoot enabled, skipping test");
> +
>   	if (tst_test->skip_in_compat && TST_ABI != tst_kernel_bits())
>   		tst_brk(TCONF, "Not supported in 32-bit compat mode");
>   

-- 
Martin Doucha   mdoucha@suse.cz
SW Quality Engineer
SUSE LINUX, s.r.o.
CORSO IIa
Krizikova 148/34
186 00 Prague 8
Czech Republic


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH 3/4] {delete, finit, init}_module0[1-3]: Skip on SecureBoot
  2023-07-20 15:02 ` [LTP] [PATCH 3/4] {delete, finit, init}_module0[1-3]: Skip on SecureBoot Petr Vorel
@ 2023-07-20 15:26   ` Martin Doucha
  2023-07-21  8:51     ` Petr Vorel
  0 siblings, 1 reply; 11+ messages in thread
From: Martin Doucha @ 2023-07-20 15:26 UTC (permalink / raw)
  To: Petr Vorel, ltp

Hi,

On 20. 07. 23 17:02, Petr Vorel wrote:
> Enabled SecureBoot requires signed modules (regardless lockdown state).
> 
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
>   .../syscalls/delete_module/delete_module01.c    |  2 ++
>   .../syscalls/delete_module/delete_module03.c    |  2 ++
>   .../syscalls/finit_module/finit_module01.c      |  2 ++
>   .../syscalls/finit_module/finit_module02.c      | 17 +++++++++++++----
>   .../kernel/syscalls/init_module/init_module01.c |  2 ++
>   .../kernel/syscalls/init_module/init_module02.c | 16 ++++++++++++----
>   6 files changed, 33 insertions(+), 8 deletions(-)
> 
> diff --git a/testcases/kernel/syscalls/delete_module/delete_module01.c b/testcases/kernel/syscalls/delete_module/delete_module01.c
> index 6ecd2cad1..08597cfd6 100644
> --- a/testcases/kernel/syscalls/delete_module/delete_module01.c
> +++ b/testcases/kernel/syscalls/delete_module/delete_module01.c
> @@ -52,6 +52,8 @@ static struct tst_test test = {
>   	.needs_root = 1,
>   	/* lockdown requires signed modules */
>   	.skip_in_lockdown = 1,
> +	/* SecureBoot requires signed modules */

Nit: the two comments could be merged into one.

> +	.skip_in_secureboot = 1,
>   	.cleanup = cleanup,
>   	.test_all = do_delete_module,
>   };
> diff --git a/testcases/kernel/syscalls/delete_module/delete_module03.c b/testcases/kernel/syscalls/delete_module/delete_module03.c
> index 863d36188..a4b5108f0 100644
> --- a/testcases/kernel/syscalls/delete_module/delete_module03.c
> +++ b/testcases/kernel/syscalls/delete_module/delete_module03.c
> @@ -74,6 +74,8 @@ static struct tst_test test = {
>   	.needs_root = 1,
>   	/* lockdown requires signed modules */
>   	.skip_in_lockdown = 1,
> +	/* SecureBoot requires signed modules */
> +	.skip_in_secureboot = 1,
>   	.setup = setup,
>   	.cleanup = cleanup,
>   	.test_all = do_delete_module,
> diff --git a/testcases/kernel/syscalls/finit_module/finit_module01.c b/testcases/kernel/syscalls/finit_module/finit_module01.c
> index f960b2e40..660b567f5 100644
> --- a/testcases/kernel/syscalls/finit_module/finit_module01.c
> +++ b/testcases/kernel/syscalls/finit_module/finit_module01.c
> @@ -51,4 +51,6 @@ static struct tst_test test = {
>   	.needs_root = 1,
>   	/* lockdown requires signed modules */
>   	.skip_in_lockdown = 1,
> +	/* SecureBoot requires signed modules */
> +	.skip_in_secureboot = 1,
>   };
> diff --git a/testcases/kernel/syscalls/finit_module/finit_module02.c b/testcases/kernel/syscalls/finit_module/finit_module02.c
> index a7434de7d..4f5962829 100644
> --- a/testcases/kernel/syscalls/finit_module/finit_module02.c
> +++ b/testcases/kernel/syscalls/finit_module/finit_module02.c
> @@ -25,7 +25,7 @@
>   static char *mod_path;
>   
>   static int fd, fd_zero, fd_invalid = -1, fd_dir;
> -static int kernel_lockdown;
> +static int kernel_lockdown, secure_boot;
>   
>   static struct tst_cap cap_req = TST_CAP(TST_CAP_REQ, CAP_SYS_MODULE);
>   static struct tst_cap cap_drop = TST_CAP(TST_CAP_DROP, CAP_SYS_MODULE);
> @@ -84,6 +84,8 @@ static void setup(void)
>   	tst_module_exists(MODULE_NAME, &mod_path);
>   
>   	kernel_lockdown = tst_lockdown_enabled();
> +	secure_boot = tst_secureboot_enabled();
> +
>   	SAFE_MKDIR(TEST_DIR, 0700);
>   	fd_dir = SAFE_OPEN(TEST_DIR, O_DIRECTORY);
>   
> @@ -102,9 +104,16 @@ static void run(unsigned int n)
>   {
>   	struct tcase *tc = &tcases[n];
>   
> -	if (tc->skip_in_lockdown && kernel_lockdown) {
> -		tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
> -		return;
> +	if (tc->skip_in_lockdown) {
> +		if (secure_boot) {
> +			tst_res(TCONF, "SecureBoot enabled, skipping %s", tc->name);
> +			return;
> +		}
> +
> +		if (kernel_lockdown) {
> +			tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
> +			return;
> +		}

It'd be better to just change the original TCONF message to something 
like "Cannot load unsigned modules, skipping %s". Adding a TINFO message 
"Lockdown on/off" to tst_lockdown_enabled() would provide the 
explanation why.

>   	}
>   
>   	fd = SAFE_OPEN(mod_path, tc->open_flags);
> diff --git a/testcases/kernel/syscalls/init_module/init_module01.c b/testcases/kernel/syscalls/init_module/init_module01.c
> index 79e567cd6..80b2b77cc 100644
> --- a/testcases/kernel/syscalls/init_module/init_module01.c
> +++ b/testcases/kernel/syscalls/init_module/init_module01.c
> @@ -55,4 +55,6 @@ static struct tst_test test = {
>   	.needs_root = 1,
>   	/* lockdown requires signed modules */
>   	.skip_in_lockdown = 1,
> +	/* SecureBoot requires signed modules */
> +	.skip_in_secureboot = 1,
>   };
> diff --git a/testcases/kernel/syscalls/init_module/init_module02.c b/testcases/kernel/syscalls/init_module/init_module02.c
> index ad6569a06..4acbfbcd1 100644
> --- a/testcases/kernel/syscalls/init_module/init_module02.c
> +++ b/testcases/kernel/syscalls/init_module/init_module02.c
> @@ -22,7 +22,7 @@
>   #define MODULE_NAME	"init_module.ko"
>   
>   static unsigned long size, zero_size;
> -static int kernel_lockdown;
> +static int kernel_lockdown, secure_boot;
>   static void *buf, *faulty_buf, *null_buf;
>   
>   static struct tst_cap cap_req = TST_CAP(TST_CAP_REQ, CAP_SYS_MODULE);
> @@ -54,6 +54,7 @@ static void setup(void)
>   	tst_module_exists(MODULE_NAME, NULL);
>   
>   	kernel_lockdown = tst_lockdown_enabled();
> +	secure_boot = tst_secureboot_enabled();
>   	fd = SAFE_OPEN(MODULE_NAME, O_RDONLY|O_CLOEXEC);
>   	SAFE_FSTAT(fd, &sb);
>   	size = sb.st_size;
> @@ -67,9 +68,16 @@ static void run(unsigned int n)
>   {
>   	struct tcase *tc = &tcases[n];
>   
> -	if (tc->skip_in_lockdown && kernel_lockdown) {
> -		tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
> -		return;
> +	if (tc->skip_in_lockdown) {
> +		if (secure_boot) {
> +			tst_res(TCONF, "SecureBoot enabled, skipping %s", tc->name);
> +			return;
> +		}
> +
> +		if (kernel_lockdown) {
> +			tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
> +			return;
> +		}

Same here.

>   	}
>   
>   	if (tc->cap)

-- 
Martin Doucha   mdoucha@suse.cz
SW Quality Engineer
SUSE LINUX, s.r.o.
CORSO IIa
Krizikova 148/34
186 00 Prague 8
Czech Republic


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH 4/4] doc/c-api: Document .skip_in_* flags
  2023-07-20 15:02 ` [LTP] [PATCH 4/4] doc/c-api: Document .skip_in_* flags Petr Vorel
@ 2023-07-20 15:27   ` Martin Doucha
  0 siblings, 0 replies; 11+ messages in thread
From: Martin Doucha @ 2023-07-20 15:27 UTC (permalink / raw)
  To: Petr Vorel, ltp

Hi,
Reviewed-by: Martin Doucha <mdoucha@suse.cz>

On 20. 07. 23 17:02, Petr Vorel wrote:
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
>   doc/c-test-api.txt | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/doc/c-test-api.txt b/doc/c-test-api.txt
> index 07c069ced..74871e6c8 100644
> --- a/doc/c-test-api.txt
> +++ b/doc/c-test-api.txt
> @@ -2412,6 +2412,12 @@ static struct tst_test test = {
>   };
>   -------------------------------------------------------------------------------
>   
> +1.41 Skipping test based on system state
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +Test can be skipped on various conditions: on enabled SecureBoot
> +('.skip_in_secureboot = 1'), lockdown ('.skip_in_lockdown = 1') or in 32-bit
> +compat mode ('.skip_in_compat = 1').
> +
>   2. Common problems
>   ------------------
>   

-- 
Martin Doucha   mdoucha@suse.cz
SW Quality Engineer
SUSE LINUX, s.r.o.
CORSO IIa
Krizikova 148/34
186 00 Prague 8
Czech Republic


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH 3/4] {delete, finit, init}_module0[1-3]: Skip on SecureBoot
  2023-07-20 15:26   ` Martin Doucha
@ 2023-07-21  8:51     ` Petr Vorel
  0 siblings, 0 replies; 11+ messages in thread
From: Petr Vorel @ 2023-07-21  8:51 UTC (permalink / raw)
  To: Martin Doucha; +Cc: ltp

Hi Martin,

> > +++ b/testcases/kernel/syscalls/delete_module/delete_module01.c
> > @@ -52,6 +52,8 @@ static struct tst_test test = {
> >   	.needs_root = 1,
> >   	/* lockdown requires signed modules */
> >   	.skip_in_lockdown = 1,
> > +	/* SecureBoot requires signed modules */

> Nit: the two comments could be merged into one.
+1

...
> > @@ -102,9 +104,16 @@ static void run(unsigned int n)
> >   {
> >   	struct tcase *tc = &tcases[n];
> > -	if (tc->skip_in_lockdown && kernel_lockdown) {
> > -		tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
> > -		return;
> > +	if (tc->skip_in_lockdown) {
> > +		if (secure_boot) {
> > +			tst_res(TCONF, "SecureBoot enabled, skipping %s", tc->name);
> > +			return;
> > +		}
> > +
> > +		if (kernel_lockdown) {
> > +			tst_res(TCONF, "Kernel is locked down, skipping %s", tc->name);
> > +			return;
> > +		}

> It'd be better to just change the original TCONF message to something like
> "Cannot load unsigned modules, skipping %s". Adding a TINFO message
> "Lockdown on/off" to tst_lockdown_enabled() would provide the explanation
> why.

+1

Kind regards,
Petr

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration
  2023-07-20 15:16   ` Martin Doucha
@ 2023-07-21  8:55     ` Petr Vorel
  0 siblings, 0 replies; 11+ messages in thread
From: Petr Vorel @ 2023-07-21  8:55 UTC (permalink / raw)
  To: Martin Doucha; +Cc: ltp

Hi Martin,

...
> > +	char flag;
> >   	if (access(PATH_LOCKDOWN, F_OK) != 0) {
> > -		char flag;
> > -
> > +		/* SecureBoot enabled could mean integrity lockdown (non-mainline version) */
> >   		flag = tst_kconfig_get("CONFIG_EFI_SECURE_BOOT_LOCK_DOWN");
> > -
> > -		/* SecureBoot enabled could mean integrity lockdown */
> >   		if (flag == 'y' && tst_secureboot_enabled() > 0)
> >   			return 1;
> >   		tst_res(TINFO, "Unable to determine system lockdown state");
> >   		return 0;
> > +	} else {

> There should be no "else" branch here. The code above should look like this:

> int flag;
> flag = tst_kconfig_get("CONFIG_EFI_SECURE_BOOT_LOCK_DOWN") == 'y';
> flag |= tst_kconfig_get("CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT") == 'y';
> if (flag && tst_secureboot_enabled() > 0)
> 	return 1;

Good point. I don't know why I thought that the other not-yet upstreamed patch
created lockdown file. I'll send v2.

Kind regards,
Petr

> > +		/* SecureBoot forces lockdown (non-mainline version) */
> > +		flag = tst_kconfig_get("CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT");
> > +		if (flag == 'y' && tst_secureboot_enabled() > 0)
> > +			return 1;
> >   	}
> >   	file = SAFE_FOPEN(PATH_LOCKDOWN, "r");

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-07-21  8:55 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-20 15:02 [LTP] [PATCH 0/4] Add .skip_in_secureboot flag Petr Vorel
2023-07-20 15:02 ` [LTP] [PATCH 1/4] tst_lockdown: Check other lockdown configuration Petr Vorel
2023-07-20 15:16   ` Martin Doucha
2023-07-21  8:55     ` Petr Vorel
2023-07-20 15:02 ` [LTP] [PATCH 2/4] lib: Add .skip_in_secureboot flag Petr Vorel
2023-07-20 15:18   ` Martin Doucha
2023-07-20 15:02 ` [LTP] [PATCH 3/4] {delete, finit, init}_module0[1-3]: Skip on SecureBoot Petr Vorel
2023-07-20 15:26   ` Martin Doucha
2023-07-21  8:51     ` Petr Vorel
2023-07-20 15:02 ` [LTP] [PATCH 4/4] doc/c-api: Document .skip_in_* flags Petr Vorel
2023-07-20 15:27   ` Martin Doucha

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox