On Fri, Jun 28, 2024 at 04:18:53PM +0800, Gary Lin via Grub-devel wrote: > From: Daniel Axtens <d...@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
Would not be it easier if you say: Import tests from libtasn1 that use functionality we import? > 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 <phco...@gmail.com> > Signed-off-by: Daniel Axtens <d...@axtens.net> > Signed-off-by: Gary Lin <g...@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); Please prefix all these declarations with "extern". If you do that you can add my RB. Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel