asn1_test: Test module for libtasn1
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 commit 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> Tested-by: Stefan Berger <stefanb@linux.ibm.com>
This commit is contained in:
parent
504058e82a
commit
99cda67889
@ -1257,6 +1257,12 @@ script = {
|
|||||||
common = tests/luks2_test.in;
|
common = tests/luks2_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase = native;
|
||||||
|
name = asn1_test;
|
||||||
|
common = tests/asn1_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase = native;
|
testcase = native;
|
||||||
name = example_unit_test;
|
name = example_unit_test;
|
||||||
|
|||||||
16
autogen.sh
16
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/lib/*.[ch] grub-core/lib/libtasn1-grub/lib
|
||||||
cp grub-core/lib/libtasn1/libtasn1.h grub-core/lib/libtasn1-grub/
|
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 \
|
for patch in \
|
||||||
0001-libtasn1-disable-code-not-needed-in-grub.patch \
|
0001-libtasn1-disable-code-not-needed-in-grub.patch \
|
||||||
0002-libtasn1-replace-strcat-with-strcpy-in-_asn1_str_cat.patch \
|
0002-libtasn1-replace-strcat-with-strcpy-in-_asn1_str_cat.patch \
|
||||||
0003-libtasn1-replace-strcat-with-_asn1_str_cat.patch \
|
0003-libtasn1-replace-strcat-with-_asn1_str_cat.patch \
|
||||||
0004-libtasn1-adjust-the-header-paths-in-libtasn1.h.patch \
|
0004-libtasn1-adjust-the-header-paths-in-libtasn1.h.patch \
|
||||||
0005-libtasn1-Use-grub_divmod64-for-division.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
|
patch -p1 -i grub-core/lib/libtasn1-patches/$patch
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@ -2621,3 +2621,18 @@ module = {
|
|||||||
/* -Wno-type-limits comes from configure.ac of libtasn1 */
|
/* -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';
|
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/';
|
||||||
|
};
|
||||||
|
|||||||
50
grub-core/tests/asn1/asn1_test.c
Normal file
50
grub-core/tests/asn1/asn1_test.c
Normal file
@ -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);
|
||||||
45
grub-core/tests/asn1/asn1_test.h
Normal file
45
grub-core/tests/asn1/asn1_test.h
Normal file
@ -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
|
||||||
@ -79,6 +79,7 @@ grub_functional_all_tests (grub_extcmd_context_t ctxt __attribute__ ((unused)),
|
|||||||
grub_dl_load ("cmp_test");
|
grub_dl_load ("cmp_test");
|
||||||
grub_dl_load ("mul_test");
|
grub_dl_load ("mul_test");
|
||||||
grub_dl_load ("shift_test");
|
grub_dl_load ("shift_test");
|
||||||
|
grub_dl_load ("asn1_test");
|
||||||
|
|
||||||
FOR_LIST_ELEMENTS (test, grub_test_list)
|
FOR_LIST_ELEMENTS (test, grub_test_list)
|
||||||
ok = !grub_test_run (test) && ok;
|
ok = !grub_test_run (test) && ok;
|
||||||
|
|||||||
11
tests/asn1_test.in
Normal file
11
tests/asn1_test.in
Normal file
@ -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
|
||||||
Loading…
x
Reference in New Issue
Block a user