[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v21 17/33] asn1_test: test module for libtasn1
From: |
Gary Lin |
Subject: |
[PATCH v21 17/33] asn1_test: test module for libtasn1 |
Date: |
Mon, 4 Nov 2024 15:31:50 +0800 |
From: Daniel Axtens <dja@axtens.net>
Import tests from libtasn1 that use functionality we import.
This test module is integrated into functional_test so that the
user can run the test in grub shell.
This doesn't test the full decoder but that will be exercised in
test suites for coming patch sets.
Add testcase target in accordance with
5e10be48e5 tests: Add check-native and check-nonnative make targets
Cc: Vladimir Serbinenko <phcoder@gmail.com>
Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Gary Lin <glin@suse.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
Makefile.util.def | 6 ++++
autogen.sh | 16 ++++++++-
grub-core/Makefile.core.def | 15 ++++++++
grub-core/tests/asn1/asn1_test.c | 50 +++++++++++++++++++++++++++
grub-core/tests/asn1/asn1_test.h | 45 ++++++++++++++++++++++++
grub-core/tests/lib/functional_test.c | 1 +
tests/asn1_test.in | 11 ++++++
7 files changed, 143 insertions(+), 1 deletion(-)
create mode 100644 grub-core/tests/asn1/asn1_test.c
create mode 100644 grub-core/tests/asn1/asn1_test.h
create mode 100644 tests/asn1_test.in
diff --git a/Makefile.util.def b/Makefile.util.def
index 0f74a1680..fe70cf9bd 100644
--- a/Makefile.util.def
+++ b/Makefile.util.def
@@ -1257,6 +1257,12 @@ script = {
common = tests/luks2_test.in;
};
+script = {
+ testcase = native;
+ name = asn1_test;
+ common = tests/asn1_test.in;
+};
+
program = {
testcase = native;
name = example_unit_test;
diff --git a/autogen.sh b/autogen.sh
index d08dc9a31..ebd614792 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -60,13 +60,27 @@ mkdir -p grub-core/lib/libtasn1-grub/lib
cp grub-core/lib/libtasn1/lib/*.[ch] grub-core/lib/libtasn1-grub/lib
cp grub-core/lib/libtasn1/libtasn1.h grub-core/lib/libtasn1-grub/
+if [ -d grub-core/tests/asn1/tests ]; then
+ rm -rf grub-core/tests/asn1/tests
+fi
+
+mkdir grub-core/tests/asn1/tests
+cp grub-core/lib/libtasn1/tests/*.[ch] grub-core/tests/asn1/tests
+
for patch in \
0001-libtasn1-disable-code-not-needed-in-grub.patch \
0002-libtasn1-replace-strcat-with-strcpy-in-_asn1_str_cat.patch \
0003-libtasn1-replace-strcat-with-_asn1_str_cat.patch \
0004-libtasn1-adjust-the-header-paths-in-libtasn1.h.patch \
0005-libtasn1-Use-grub_divmod64-for-division.patch \
- 0006-libtasn1-fix-the-potential-buffer-overrun.patch ; do
+ 0006-libtasn1-fix-the-potential-buffer-overrun.patch \
+ 0007-asn1_test-include-asn1_test.h-only.patch \
+ 0008-asn1_test-rename-the-main-functions-to-the-test-name.patch \
+ 0009-asn1_test-return-either-0-or-1-to-reflect-the-result.patch \
+ 0010-asn1_test-remove-verbose-and-the-unnecessary-printf.patch \
+ 0011-asn1_test-print-the-error-messages-with-grub_printf.patch \
+ 0012-asn1_test-use-the-grub-specific-functions-and-types.patch \
+ 0013-asn1_test-enable-the-testcase-only-when-GRUB_LONG_MA.patch ; do
patch -p1 -i grub-core/lib/libtasn1-patches/$patch
done
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index cb4c5800e..a38955e18 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -2621,3 +2621,18 @@ module = {
/* -Wno-type-limits comes from configure.ac of libtasn1 */
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)
-I$(srcdir)/lib/libtasn1-grub -I$(srcdir)/lib/libtasn1-grub/lib
-Wno-type-limits';
};
+
+module = {
+ name = asn1_test;
+ common = tests/asn1/tests/CVE-2018-1000654.c;
+ common = tests/asn1/tests/object-id-decoding.c;
+ common = tests/asn1/tests/object-id-encoding.c;
+ common = tests/asn1/tests/octet-string.c;
+ common = tests/asn1/tests/reproducers.c;
+ common = tests/asn1/tests/Test_overflow.c;
+ common = tests/asn1/tests/Test_simple.c;
+ common = tests/asn1/tests/Test_strings.c;
+ common = tests/asn1/asn1_test.c;
+ cflags = '-Wno-uninitialized';
+ cppflags = '-I$(srcdir)/lib/libtasn1-grub -I$(srcdir)/tests/asn1/';
+};
diff --git a/grub-core/tests/asn1/asn1_test.c b/grub-core/tests/asn1/asn1_test.c
new file mode 100644
index 000000000..69606b004
--- /dev/null
+++ b/grub-core/tests/asn1/asn1_test.c
@@ -0,0 +1,50 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2020 IBM Corporation
+ * Copyright (C) 2024 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/test.h>
+#include <grub/dl.h>
+#include "asn1_test.h"
+
+/*
+ * libtasn1 tests - from which this is derived - are provided under GPL3+.
+ */
+GRUB_MOD_LICENSE ("GPLv3+");
+
+static void
+asn1_test (void)
+{
+ grub_test_assert (test_CVE_2018_1000654 () == 0, "CVE-2018-1000654 test
failed");
+
+ grub_test_assert (test_object_id_encoding () == 0, "ASN.1 object ID encoding
test failed");
+
+ grub_test_assert (test_object_id_decoding () == 0, "ASN.1 object ID decoding
test failed");
+
+ grub_test_assert (test_octet_string () == 0, "ASN.1 octet string test
failed");
+
+ grub_test_assert (test_overflow () == 0, "ASN.1 overflow test failed");
+
+ grub_test_assert (test_reproducers () == 0, "ASN.1 reproducers test failed");
+
+ grub_test_assert (test_simple () == 0, "ASN.1 simple test failed");
+
+ grub_test_assert (test_strings () == 0, "ASN.1 strings test fail" );
+}
+
+/* Register asn1_test method as a functional test. */
+GRUB_FUNCTIONAL_TEST (asn1_test, asn1_test);
diff --git a/grub-core/tests/asn1/asn1_test.h b/grub-core/tests/asn1/asn1_test.h
new file mode 100644
index 000000000..8e83d70f5
--- /dev/null
+++ b/grub-core/tests/asn1/asn1_test.h
@@ -0,0 +1,45 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2020 IBM Corporation
+ * Copyright (C) 2024 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef LIBTASN1_WRAP_TESTS_H
+#define LIBTASN1_WRAP_TESTS_H
+
+#include <libtasn1.h>
+#include <grub/err.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/types.h>
+
+extern int test_CVE_2018_1000654 (void);
+
+extern int test_object_id_encoding (void);
+
+extern int test_object_id_decoding (void);
+
+extern int test_octet_string (void);
+
+extern int test_overflow (void);
+
+extern int test_reproducers (void);
+
+extern int test_simple (void);
+
+extern int test_strings (void);
+
+#endif
diff --git a/grub-core/tests/lib/functional_test.c
b/grub-core/tests/lib/functional_test.c
index 96781fb39..38e981f2c 100644
--- a/grub-core/tests/lib/functional_test.c
+++ b/grub-core/tests/lib/functional_test.c
@@ -79,6 +79,7 @@ grub_functional_all_tests (grub_extcmd_context_t ctxt
__attribute__ ((unused)),
grub_dl_load ("cmp_test");
grub_dl_load ("mul_test");
grub_dl_load ("shift_test");
+ grub_dl_load ("asn1_test");
FOR_LIST_ELEMENTS (test, grub_test_list)
ok = !grub_test_run (test) && ok;
diff --git a/tests/asn1_test.in b/tests/asn1_test.in
new file mode 100644
index 000000000..8f18ee6bb
--- /dev/null
+++ b/tests/asn1_test.in
@@ -0,0 +1,11 @@
+#! @BUILD_SHEBANG@
+set -e
+
+. "@builddir@/grub-core/modinfo.sh"
+
+out=`echo functional_test asn1_test | @builddir@/grub-shell`
+
+if [ "$(echo "$out" | tail -n 1)" != "ALL TESTS PASSED" ]; then
+ echo "ASN.1 test failure: $out"
+ exit 1
+fi
--
2.43.0
- [PATCH v21 09/33] asn1_test: include asn1_test.h only, (continued)
- [PATCH v21 09/33] asn1_test: include asn1_test.h only, Gary Lin, 2024/11/04
- [PATCH v21 07/33] libtasn1: Use grub_divmod64() for division, Gary Lin, 2024/11/04
- [PATCH v21 15/33] asn1_test: enable the testcase only when GRUB_LONG_MAX is larger than GRUB_INT_MAX, Gary Lin, 2024/11/04
- [PATCH v21 16/33] libtasn1: compile into asn1 module, Gary Lin, 2024/11/04
- [PATCH v21 14/33] asn1_test: use the grub-specific functions and types, Gary Lin, 2024/11/04
- [PATCH v21 06/33] libtasn1: adjust the header paths in libtasn1.h, Gary Lin, 2024/11/04
- [PATCH v21 13/33] asn1_test: print the error messages with grub_printf(), Gary Lin, 2024/11/04
- [PATCH v21 11/33] asn1_test: return either 0 or 1 to reflect the results, Gary Lin, 2024/11/04
- [PATCH v21 10/33] asn1_test: rename the main functions to the test names, Gary Lin, 2024/11/04
- [PATCH v21 12/33] asn1_test: remove 'verbose' and the unnecessary printf(), Gary Lin, 2024/11/04
- [PATCH v21 17/33] asn1_test: test module for libtasn1,
Gary Lin <=
- [PATCH v21 20/33] tss2: Add TPM2 buffer handling functions, Gary Lin, 2024/11/04
- [PATCH v21 18/33] libtasn1: Add the documentation, Gary Lin, 2024/11/04
- [PATCH v21 19/33] key_protector: Add key protectors framework, Gary Lin, 2024/11/04
- [PATCH v21 21/33] tss2: Add TPM2 types and Marshal/Unmarshal functions, Gary Lin, 2024/11/04
- [PATCH v21 22/33] tss2: Add TPM2 Software Stack (TSS2) support, Gary Lin, 2024/11/04
- [PATCH v21 23/33] key_protector: Add TPM2 Key Protector, Gary Lin, 2024/11/04