[PATCH v4 9/9] [RFC] metaparse: Check {min, max}_kver validity
Petr Vorel <[email protected]> Wed, 5 Aug 2026 17:14:51 +0200
| Newsgroups | gmane.linux.ltp |
|---|---|
| Message-ID | <[email protected]> |
Check .max_kver and .min_kver validity. Exit generation with error when: * .max_kver or .min_kver is invalid * .min_kver > .max_kver Suggested-by: Li Wang <[email protected]> Signed-off-by: Petr Vorel <[email protected]> --- New in v4. lib/tst_test.c | 2 ++ metadata/Makefile | 6 ++++-- metadata/metaparse.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/tst_test.c b/lib/tst_test.c index 0d3714c709..11d233dcbd 100644 --- a/lib/tst_test.c +++ b/lib/tst_test.c @@ -1496,6 +1496,8 @@ static void do_setup(int argc, char *argv[]) if (tst_test->max_kver) check_max_kver(tst_test->max_kver, 1); + // TODO: Add runtime check tst_test->max_kver >= tst_test->min_kver. + if (tst_test->skip_in_lockdown && tst_lockdown_enabled() > 0) tst_brk(TCONF, "Kernel is locked down, skipping test"); diff --git a/metadata/Makefile b/metadata/Makefile index af194bcc94..9ee2441669 100644 --- a/metadata/Makefile +++ b/metadata/Makefile @@ -3,13 +3,15 @@ top_srcdir ?= .. -include $(top_srcdir)/include/mk/env_pre.mk -include $(top_srcdir)/include/mk/functions.mk +include $(top_srcdir)/include/mk/testcases.mk MAKE_TARGETS := ltp.json HOST_MAKE_TARGETS := metaparse metaparse-sh INSTALL_DIR = metadata +metaparse: HOST_CFLAGS += -I$(abs_srcdir)/../include -L$(abs_builddir)/../lib +metaparse: HOST_LDLIBS += -lltp + .PHONY: ltp.json ltp.json: metaparse metaparse-sh diff --git a/metadata/metaparse.c b/metadata/metaparse.c index cb141c3831..07a452a5a1 100644 --- a/metadata/metaparse.c +++ b/metadata/metaparse.c @@ -6,6 +6,7 @@ #define _GNU_SOURCE +#include <assert.h> #include <search.h> #include <stdio.h> #include <string.h> @@ -15,6 +16,7 @@ #include <errno.h> #include "data_storage.h" +#include "tst_kvercmp.h" #define INCLUDE_PATH_MAX 5 #define GROUPS_TAG "@groups" @@ -1372,6 +1374,37 @@ int main(int argc, char *argv[]) } } + /* Check max_kver >= min_kver */ + struct data_node *max_kver = data_node_hash_get(res, "max_kver"); + struct data_node *min_kver = data_node_hash_get(res, "min_kver"); + int a1, a2, a3, b1, b2, b3; + + if (min_kver) { + assert(min_kver->type == DATA_STRING); + if (tst_parse_kver(min_kver->string.val, &b1, &b2, &b3)) { + fprintf(stderr, "%s: wrong min_kver: '%s'\n", + argv[optind], min_kver->string.val); + return 1; + } + } + + if (max_kver) { + assert(max_kver->type == DATA_STRING); + if (tst_parse_kver(max_kver->string.val, &a1, &a2, &a3)) { + fprintf(stderr, "%s: wrong max_kver: '%s'\n", + argv[optind], max_kver->string.val); + return 1; + } + } + + if (min_kver && max_kver) { + if (tst_kver_cmp(a1, a2, a3, b1, b2, b3) < 0) { + fprintf(stderr, "%s: min_kver (%s) > max_kver (%s)\n", + argv[optind], min_kver->string.val, max_kver->string.val); + return 1; + } + } + /* Normalize types */ check_normalize_types(res, "", tst_test_typemap); -- 2.55.0 -- Mailing list info: https://lists.linux.it/listinfo/ltp