grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v18 10/25] asn1_test: test module for libtasn1


From: Gary Lin
Subject: [PATCH v18 10/25] asn1_test: test module for libtasn1
Date: Fri, 28 Jun 2024 16:18:53 +0800

From: Daniel Axtens <dja@axtens.net>

Import tests from libtasn1 that don't use functionality we don't
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>
---
 Makefile.util.def                     |  6 ++++
 autogen.sh                            | 10 +++++-
 grub-core/Makefile.core.def           | 15 ++++++++
 grub-core/tests/asn1/asn1_test.c      | 49 +++++++++++++++++++++++++++
 grub-core/tests/asn1/asn1_test.h      | 44 ++++++++++++++++++++++++
 grub-core/tests/lib/functional_test.c |  1 +
 tests/asn1_test.in                    | 11 ++++++
 7 files changed, 135 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 3cccd76c0..e464bac5e 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -60,12 +60,20 @@ 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-use-bound-checked-_asn1_str_cat.patch \
        0003-libtasn1-adjust-the-header-paths-in-libtasn1.h.patch \
        0004-libtasn1-Use-grub_divmod64-for-division.patch \
-       0005-libtasn1-fix-the-potential-buffer-overrun.patch ; do
+       0005-libtasn1-fix-the-potential-buffer-overrun.patch \
+       0006-asn1_test-changes-for-grub-compatibility.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 01a05c9b3..fd6dfa515 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..2a2cd02d1
--- /dev/null
+++ b/grub-core/tests/asn1/asn1_test.c
@@ -0,0 +1,49 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2020 IBM Corporation
+ *
+ *  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..499e1cfc4
--- /dev/null
+++ b/grub-core/tests/asn1/asn1_test.h
@@ -0,0 +1,44 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2020 IBM Corporation
+ *
+ *  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>
+
+int test_CVE_2018_1000654 (void);
+
+int test_object_id_encoding (void);
+
+int test_object_id_decoding (void);
+
+int test_octet_string (void);
+
+int test_overflow (void);
+
+int test_reproducers (void);
+
+int test_simple (void);
+
+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.35.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]