diff --git a/0001-testsuite-repair-read-of-uninitialized-memory.patch b/0001-testsuite-repair-read-of-uninitialized-memory.patch deleted file mode 100644 index e5781e9..0000000 --- a/0001-testsuite-repair-read-of-uninitialized-memory.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 16c086f48c2270ad6412ad7226df53079f825270 Mon Sep 17 00:00:00 2001 -From: Jan Engelhardt -Date: Thu, 30 Jun 2022 18:47:25 +0200 -Subject: [PATCH] testsuite: repair read of uninitialized memory -References: https://github.com/kmod-project/kmod/pull/15 -References: https://github.com/kmod-project/kmod/issues/14 - -Function ``test_backoff_time`` does not initialize ``delta``, and -``get_backoff_delta_msec`` then performs a read from uninitialized -memory with the ``!*delta`` expression. - -Signed-off-by: Jan Engelhardt -Signed-off-by: Lucas De Marchi ---- - testsuite/test-util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/testsuite/test-util.c b/testsuite/test-util.c -index fb8c9ef..5766584 100644 ---- a/testsuite/test-util.c -+++ b/testsuite/test-util.c -@@ -231,7 +231,7 @@ DEFINE_TEST(test_addu64_overflow, - - static int test_backoff_time(const struct test *t) - { -- unsigned long long delta; -+ unsigned long long delta = 0; - - /* Check exponential increments */ - get_backoff_delta_msec(now_msec(), now_msec() + 10, &delta); --- -2.36.1 - diff --git a/0009-libkmod-Implement-filtering-of-unsupported-modules-o.patch b/0009-libkmod-Implement-filtering-of-unsupported-modules-o.patch index 7d73b32..ef7c583 100644 --- a/0009-libkmod-Implement-filtering-of-unsupported-modules-o.patch +++ b/0009-libkmod-Implement-filtering-of-unsupported-modules-o.patch @@ -7,16 +7,16 @@ Subject: [PATCH 3/6] libkmod: Implement filtering of unsupported modules (off References: fate#316971 Patch-mainline: never --- - libkmod/libkmod-config.c | 12 ++++++++++-- - libkmod/libkmod-internal.h | 1 + - libkmod/libkmod-module.c | 31 +++++++++++++++++++++++++++++++ + libkmod/libkmod-config.c | 12 ++++++++++-- + libkmod/libkmod-internal.h | 1 + + libkmod/libkmod-module.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) -diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c -index 1b24536..07d6a9e 100644 ---- a/libkmod/libkmod-config.c -+++ b/libkmod/libkmod-config.c -@@ -651,8 +651,16 @@ static int kmod_config_parse(struct kmod_config *config, int fd, +Index: kmod-31/libkmod/libkmod-config.c +=================================================================== +--- kmod-31.orig/libkmod/libkmod-config.c ++++ kmod-31/libkmod/libkmod-config.c +@@ -708,8 +708,16 @@ static int kmod_config_parse(struct kmod ERR(ctx, "%s: command %s is deprecated and not parsed anymore\n", filename, cmd); } else if (streq(cmd, "allow_unsupported_modules")) { @@ -35,11 +35,11 @@ index 1b24536..07d6a9e 100644 } else { syntax_error: ERR(ctx, "%s line %u: ignoring bad line starting with '%s'\n", -diff --git a/libkmod/libkmod-internal.h b/libkmod/libkmod-internal.h -index a65ddd1..2ad74c7 100644 ---- a/libkmod/libkmod-internal.h -+++ b/libkmod/libkmod-internal.h -@@ -119,6 +119,7 @@ struct kmod_config { +Index: kmod-31/libkmod/libkmod-internal.h +=================================================================== +--- kmod-31.orig/libkmod/libkmod-internal.h ++++ kmod-31/libkmod/libkmod-internal.h +@@ -130,6 +130,7 @@ struct kmod_config { struct kmod_list *softdeps; struct kmod_list *paths; @@ -47,13 +47,13 @@ index a65ddd1..2ad74c7 100644 }; int kmod_config_new(struct kmod_ctx *ctx, struct kmod_config **config, const char * const *config_paths) __attribute__((nonnull(1, 2,3))); -diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c -index bffe715..9a3a35a 100644 ---- a/libkmod/libkmod-module.c -+++ b/libkmod/libkmod-module.c -@@ -798,6 +798,24 @@ KMOD_EXPORT int kmod_module_remove_module(struct kmod_module *mod, - - extern long init_module(const void *mem, unsigned long len, const char *args); +Index: kmod-31/libkmod/libkmod-module.c +=================================================================== +--- kmod-31.orig/libkmod/libkmod-module.c ++++ kmod-31/libkmod/libkmod-module.c +@@ -781,6 +781,24 @@ KMOD_EXPORT const char *kmod_module_get_ + return mod->name; + } +static int check_module_supported(struct kmod_module *mod) +{ @@ -74,17 +74,17 @@ index bffe715..9a3a35a 100644 +} + /** - * kmod_module_insert_module: + * kmod_module_get_path: * @mod: kmod module -@@ -823,6 +841,7 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod, - struct kmod_elf *elf; +@@ -959,6 +977,7 @@ KMOD_EXPORT int kmod_module_insert_modul + int err; const char *path; const char *args = options ? options : ""; + const struct kmod_config *config = kmod_get_config(mod->ctx); if (mod == NULL) return -ENOENT; -@@ -841,6 +860,18 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod, +@@ -977,6 +996,18 @@ KMOD_EXPORT int kmod_module_insert_modul } } @@ -100,9 +100,6 @@ index bffe715..9a3a35a 100644 + } + } + - if (kmod_file_get_direct(mod->file)) { - unsigned int kernel_flags = 0; - --- -2.20.1 - + err = do_finit_module(mod, flags, args); + if (err == -ENOSYS) + err = do_init_module(mod, flags, args); diff --git a/configure-Detect-openssl-sm3-support.patch b/configure-Detect-openssl-sm3-support.patch index 837db56..19b1f60 100644 --- a/configure-Detect-openssl-sm3-support.patch +++ b/configure-Detect-openssl-sm3-support.patch @@ -1,7 +1,7 @@ -From 90446ff0273775ee20762bb892fd3e901c8eb8ac Mon Sep 17 00:00:00 2001 +From 1bb5f3aafc9b4bff638ed3288308289fdec60270 Mon Sep 17 00:00:00 2001 From: Michal Suchanek Date: Mon, 17 Jul 2023 21:23:51 +0200 -Subject: [PATCH] configure: Detect openssl sm3 support +Subject: [PATCH 1/6] configure: Detect openssl sm3 support Older openssl versions do not support sm3. The code has an option to disable the sm3 hash but the lack of openssl support is not detected @@ -9,17 +9,17 @@ automatically. Signed-off-by: Michal Suchanek --- - configure.ac | 6 ++++++ - 1 file changed, 6 insertions(+) + configure.ac | 7 +++++++ + 1 file changed, 7 insertions(+) diff --git a/configure.ac b/configure.ac -index a1e64e190d2f..5a582cb5a2af 100644 +index 82a853289a83..e5bceeaa1722 100644 --- a/configure.ac +++ b/configure.ac -@@ -148,6 +148,13 @@ AS_IF([test "x$with_openssl" != "xno"], [ - PKG_CHECK_MODULES([libcrypto], [libcrypto >= 1.1.0]) +@@ -123,6 +123,13 @@ AC_ARG_WITH([openssl], + AS_IF([test "x$with_openssl" != "xno"], [ + PKG_CHECK_MODULES([libcrypto], [libcrypto >= 1.1.0], [LIBS="$LIBS $libcrypto_LIBS"]) AC_DEFINE([ENABLE_OPENSSL], [1], [Enable openssl for modinfo.]) - module_signatures="PKCS7 $module_signatures" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include + int nid = NID_sm3;]])], [ + AC_MSG_NOTICE([openssl supports sm3]) @@ -31,5 +31,5 @@ index a1e64e190d2f..5a582cb5a2af 100644 AC_MSG_NOTICE([openssl support not requested]) ]) -- -2.41.0 +2.42.0 diff --git a/depmod-Introduce-outdir-option.patch b/depmod-Introduce-outdir-option.patch deleted file mode 100644 index 736d4bd..0000000 --- a/depmod-Introduce-outdir-option.patch +++ /dev/null @@ -1,288 +0,0 @@ -From 7e145ef8bd7a45fef6ee4cf56d7fab9f21d23e72 Mon Sep 17 00:00:00 2001 -From: Emil Velikov -Date: Mon, 6 Feb 2023 13:18:34 +0000 -Subject: [PATCH 5/9] depmod: Introduce outdir option - -This option is equivalent to basedir, with the small difference being -that's where the meta-data files are generated. In other words, this -allows us to have read-only input modules and modules.dep, while still -being able to generate the meta-data files. - -Signed-off-by: Emil Velikov -[ Move files to a different dir so input files (produced by kernel build - system is separate from the files generated by depmod (output) ] -Signed-off-by: Lucas De Marchi ---- - man/depmod.xml | 20 ++++++++++ - .../modules-outdir/correct-modules.alias | 37 +++++++++++++++++++ - .../modules-outdir/correct-modules.dep | 3 ++ - .../lib/modules/4.4.4/modules.builtin | 0 - .../lib/modules/4.4.4/modules.order | 7 ++++ - testsuite/setup-rootfs.sh | 3 ++ - testsuite/test-depmod.c | 36 ++++++++++++++++++ - tools/depmod.c | 25 +++++++++++-- - 8 files changed, 128 insertions(+), 3 deletions(-) - create mode 100644 testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.alias - create mode 100644 testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.dep - create mode 100644 testsuite/rootfs-pristine/test-depmod/modules-outdir/lib/modules/4.4.4/modules.builtin - create mode 100644 testsuite/rootfs-pristine/test-depmod/modules-outdir/lib/modules/4.4.4/modules.order - -diff --git a/man/depmod.xml b/man/depmod.xml -index ea0be27280b2..3b0097184fd7 100644 ---- a/man/depmod.xml -+++ b/man/depmod.xml -@@ -45,6 +45,7 @@ - - depmod - -+ - - - -@@ -151,6 +152,25 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ Set the output directory where depmod will store any generated file. -+ outdir serves as a root to that location, -+ similar to how basedir is used. Also this -+ setting takes precedence and if used together with -+ basedir it will result in the input being -+ that directory, but the output being the one set by -+ outdir. -+ -+ -+ - - - -diff --git a/testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.alias b/testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.alias -new file mode 100644 -index 000000000000..56753291c47e ---- /dev/null -+++ b/testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.alias -@@ -0,0 +1,37 @@ -+# Aliases extracted from modules themselves. -+alias pci:v0000103Cd00003230sv0000103Csd0000323Dbc*sc*i* cciss -+alias pci:v0000103Cd00003230sv0000103Csd00003237bc*sc*i* cciss -+alias pci:v0000103Cd00003238sv0000103Csd00003215bc*sc*i* cciss -+alias pci:v0000103Cd00003238sv0000103Csd00003214bc*sc*i* cciss -+alias pci:v0000103Cd00003238sv0000103Csd00003213bc*sc*i* cciss -+alias pci:v0000103Cd00003238sv0000103Csd00003212bc*sc*i* cciss -+alias pci:v0000103Cd00003238sv0000103Csd00003211bc*sc*i* cciss -+alias pci:v0000103Cd00003230sv0000103Csd00003235bc*sc*i* cciss -+alias pci:v0000103Cd00003230sv0000103Csd00003234bc*sc*i* cciss -+alias pci:v0000103Cd00003230sv0000103Csd00003223bc*sc*i* cciss -+alias pci:v0000103Cd00003220sv0000103Csd00003225bc*sc*i* cciss -+alias pci:v00000E11d00000046sv00000E11sd0000409Dbc*sc*i* cciss -+alias pci:v00000E11d00000046sv00000E11sd0000409Cbc*sc*i* cciss -+alias pci:v00000E11d00000046sv00000E11sd0000409Bbc*sc*i* cciss -+alias pci:v00000E11d00000046sv00000E11sd0000409Abc*sc*i* cciss -+alias pci:v00000E11d00000046sv00000E11sd00004091bc*sc*i* cciss -+alias pci:v00000E11d0000B178sv00000E11sd00004083bc*sc*i* cciss -+alias pci:v00000E11d0000B178sv00000E11sd00004082bc*sc*i* cciss -+alias pci:v00000E11d0000B178sv00000E11sd00004080bc*sc*i* cciss -+alias pci:v00000E11d0000B060sv00000E11sd00004070bc*sc*i* cciss -+alias pci:v0000103Cd*sv*sd*bc01sc04i* hpsa -+alias pci:v0000103Cd0000323Bsv0000103Csd00003356bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Bsv0000103Csd00003355bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Bsv0000103Csd00003354bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Bsv0000103Csd00003353bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Bsv0000103Csd00003352bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Bsv0000103Csd00003351bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Bsv0000103Csd00003350bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd00003233bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd0000324Bbc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd0000324Abc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd00003249bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd00003247bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd00003245bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd00003243bc*sc*i* hpsa -+alias pci:v0000103Cd0000323Asv0000103Csd00003241bc*sc*i* hpsa -diff --git a/testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.dep b/testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.dep -new file mode 100644 -index 000000000000..ec50ac32426a ---- /dev/null -+++ b/testsuite/rootfs-pristine/test-depmod/modules-outdir/correct-modules.dep -@@ -0,0 +1,3 @@ -+kernel/drivers/block/cciss.ko: -+kernel/drivers/scsi/scsi_mod.ko: -+kernel/drivers/scsi/hpsa.ko: kernel/drivers/scsi/scsi_mod.ko -diff --git a/testsuite/rootfs-pristine/test-depmod/modules-outdir/lib/modules/4.4.4/modules.builtin b/testsuite/rootfs-pristine/test-depmod/modules-outdir/lib/modules/4.4.4/modules.builtin -new file mode 100644 -index 000000000000..e69de29bb2d1 -diff --git a/testsuite/rootfs-pristine/test-depmod/modules-outdir/lib/modules/4.4.4/modules.order b/testsuite/rootfs-pristine/test-depmod/modules-outdir/lib/modules/4.4.4/modules.order -new file mode 100644 -index 000000000000..4b643099f661 ---- /dev/null -+++ b/testsuite/rootfs-pristine/test-depmod/modules-outdir/lib/modules/4.4.4/modules.order -@@ -0,0 +1,7 @@ -+#336 -+kernel/drivers/block/cciss.ko -+#2094 -+kernel/drivers/scsi/scsi_mod.ko -+#2137 -+kernel/drivers/scsi/hpsa.ko -+ -diff --git a/testsuite/setup-rootfs.sh b/testsuite/setup-rootfs.sh -index d9cc627f7224..3e814d22d813 100755 ---- a/testsuite/setup-rootfs.sh -+++ b/testsuite/setup-rootfs.sh -@@ -70,6 +70,9 @@ map=( - ["test-depmod/modules-order-compressed/lib/modules/4.4.4/kernel/drivers/block/cciss.ko"]="mod-fake-cciss.ko" - ["test-depmod/modules-order-compressed/lib/modules/4.4.4/kernel/drivers/scsi/hpsa.ko"]="mod-fake-hpsa.ko" - ["test-depmod/modules-order-compressed/lib/modules/4.4.4/kernel/drivers/scsi/scsi_mod.ko"]="mod-fake-scsi-mod.ko" -+ ["test-depmod/modules-outdir/lib/modules/4.4.4/kernel/drivers/block/cciss.ko"]="mod-fake-cciss.ko" -+ ["test-depmod/modules-outdir/lib/modules/4.4.4/kernel/drivers/scsi/hpsa.ko"]="mod-fake-hpsa.ko" -+ ["test-depmod/modules-outdir/lib/modules/4.4.4/kernel/drivers/scsi/scsi_mod.ko"]="mod-fake-scsi-mod.ko" - ["test-modinfo/mod-simple-i386.ko"]="mod-simple-i386.ko" - ["test-modinfo/mod-simple-x86_64.ko"]="mod-simple-x86_64.ko" - ["test-modinfo/mod-simple-sparc64.ko"]="mod-simple-sparc64.ko" -diff --git a/testsuite/test-depmod.c b/testsuite/test-depmod.c -index d7802d7b2e0b..6e3ae562d766 100644 ---- a/testsuite/test-depmod.c -+++ b/testsuite/test-depmod.c -@@ -57,6 +57,42 @@ DEFINE_TEST(depmod_modules_order_for_compressed, - }, - }); - -+#define MODULES_OUTDIR_UNAME "4.4.4" -+#define MODULES_OUTDIR_ROOTFS TESTSUITE_ROOTFS "test-depmod/modules-outdir" -+#define MODULES_OUTDIR_LIB_MODULES_OUTPUT MODULES_OUTDIR_ROOTFS "/outdir/lib/modules/" MODULES_OUTDIR_UNAME -+#define MODULES_OUTDIR_LIB_MODULES_INPUT MODULES_OUTDIR_ROOTFS "/lib/modules/" MODULES_OUTDIR_UNAME -+static noreturn int depmod_modules_outdir(const struct test *t) -+{ -+ const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -+ const char *const args[] = { -+ progname, -+ "--outdir", MODULES_OUTDIR_ROOTFS "/outdir/", -+ NULL, -+ }; -+ -+ test_spawn_prog(progname, args); -+ exit(EXIT_FAILURE); -+} -+ -+DEFINE_TEST(depmod_modules_outdir, -+#if defined(KMOD_SYSCONFDIR_NOT_ETC) -+ .skip = true, -+#endif -+ .description = "check if depmod honours the outdir option", -+ .config = { -+ [TC_UNAME_R] = MODULES_OUTDIR_UNAME, -+ [TC_ROOTFS] = MODULES_OUTDIR_ROOTFS, -+ }, -+ .output = { -+ .files = (const struct keyval[]) { -+ { MODULES_OUTDIR_LIB_MODULES_OUTPUT "/modules.dep", -+ MODULES_OUTDIR_ROOTFS "/correct-modules.dep" }, -+ { MODULES_OUTDIR_LIB_MODULES_OUTPUT "/modules.alias", -+ MODULES_OUTDIR_ROOTFS "/correct-modules.alias" }, -+ { } -+ }, -+ }); -+ - #define SEARCH_ORDER_SIMPLE_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-simple" - static noreturn int depmod_search_order_simple(const struct test *t) - { -diff --git a/tools/depmod.c b/tools/depmod.c -index a9349b20ee9c..2d4cf75fdfee 100644 ---- a/tools/depmod.c -+++ b/tools/depmod.c -@@ -59,11 +59,12 @@ static const char *default_cfg_paths[] = { - NULL - }; - --static const char cmdopts_s[] = "aAb:C:E:F:euqrvnP:wmVh"; -+static const char cmdopts_s[] = "aAb:o:C:E:F:euqrvnP:wmVh"; - static const struct option cmdopts[] = { - { "all", no_argument, 0, 'a' }, - { "quick", no_argument, 0, 'A' }, - { "basedir", required_argument, 0, 'b' }, -+ { "outdir", required_argument, 0, 'o' }, - { "config", required_argument, 0, 'C' }, - { "symvers", required_argument, 0, 'E' }, - { "filesyms", required_argument, 0, 'F' }, -@@ -105,6 +106,7 @@ static void help(void) - "\n" - "The following options are useful for people managing distributions:\n" - "\t-b, --basedir=DIR Use an image of a module tree.\n" -+ "\t-o, --outdir=DIR Output directory for generated files.\n" - "\t-F, --filesyms=FILE Use the file instead of the\n" - "\t current kernel symbols.\n" - "\t-E, --symvers=FILE Use Module.symvers file to check\n" -@@ -468,6 +470,8 @@ struct cfg { - const char *kversion; - char dirname[PATH_MAX]; - size_t dirnamelen; -+ char outdirname[PATH_MAX]; -+ size_t outdirnamelen; - char sym_prefix; - uint8_t check_symvers; - uint8_t print_unknown; -@@ -2577,7 +2581,7 @@ static int depmod_output(struct depmod *depmod, FILE *out) - { "modules.devname", output_devname }, - { } - }; -- const char *dname = depmod->cfg->dirname; -+ const char *dname = depmod->cfg->outdirname; - int dfd, err = 0; - struct timeval tv; - -@@ -2586,6 +2590,11 @@ static int depmod_output(struct depmod *depmod, FILE *out) - if (out != NULL) - dfd = -1; - else { -+ err = mkdir_p(dname, strlen(dname), 0755); -+ if (err < 0) { -+ CRIT("could not create directory %s: %m\n", dname); -+ return err; -+ } - dfd = open(dname, O_RDONLY); - if (dfd < 0) { - err = -errno; -@@ -2899,6 +2908,7 @@ static int do_depmod(int argc, char *argv[]) - FILE *out = NULL; - int err = 0, all = 0, maybe_all = 0, n_config_paths = 0; - _cleanup_free_ char *root = NULL; -+ _cleanup_free_ char *out_root = NULL; - _cleanup_free_ const char **config_paths = NULL; - const char *system_map = NULL; - const char *module_symvers = NULL; -@@ -2928,6 +2938,11 @@ static int do_depmod(int argc, char *argv[]) - free(root); - root = path_make_absolute_cwd(optarg); - break; -+ case 'o': -+ if (out_root) -+ free(out_root); -+ out_root = path_make_absolute_cwd(optarg); -+ break; - case 'C': { - size_t bytes = sizeof(char *) * (n_config_paths + 2); - void *tmp = realloc(config_paths, bytes); -@@ -3010,7 +3025,11 @@ static int do_depmod(int argc, char *argv[]) - - cfg.dirnamelen = snprintf(cfg.dirname, PATH_MAX, - "%s/lib/modules/%s", -- root == NULL ? "" : root, cfg.kversion); -+ root ?: "", cfg.kversion); -+ -+ cfg.outdirnamelen = snprintf(cfg.outdirname, PATH_MAX, -+ "%s/lib/modules/%s", -+ out_root ?: (root ?: ""), cfg.kversion); - - if (optind == argc) - all = 1; --- -2.41.0 - diff --git a/kmod-30.tar.sign b/kmod-30.tar.sign deleted file mode 100644 index ca05a66..0000000 --- a/kmod-30.tar.sign +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEE6rM8lpABPHM5FqyDm6KlpjDL6lMFAmK9v0IACgkQm6KlpjDL -6lNxuRAAhPg6EYA3Y+fYefTDN7sEc4LA64Y8uu7GIHqZzTwislxN+15pU5gSUjDF -igk84+lYEnmgO5uMVdQrilelxzhq4lhxxjwTjSK/nFUzZoCAQDGirWk34FnMcXCi -mHtbqtFy9ZZdZ+ktisI1uGKYkTNIhhQp6iuLdgYugSVgEjXTKIhjZsRu96OzY82a -1qh7i4CZNCqaS2qPjs8FukBwvgG1xEp3mlnZMkjA9j28WJVsJ9dxxkdXB03wfnvf -E1lFX4HDqwLH//vXQvDo4nD6JhXNGn7bSCKWb88doW6KkMCBhPVKql/lo2It2+sj -VbmzCrtn8GR42FmVhJZKMPMLxYsUgRVn08W2y6ThZOBWtK5tFCOHHHhGjh3D16WI -9jVmmvmn9bNNNhrJJncRWUfmYlf4v9CX8yBfzq5a4z7XYloo/XR77WDuB+G0o4jN -vukauZhsVg8LxPIv+q6xfE0WRzOqAjl2qQRdewYJJBDXLFTa8/9QlYy/LMEPZ6u9 -hMnrUNHjUQBVojKLxHlArjZXflSp5DY46+IyhRrFWnPd1wArTvF0IStJn2rm2UuO -F0MfRXwMJwqll7TR9lai+X+7deh+F9YY5XyhXKXTseJYnaO28rzVMk+tBHmZFm5l -1R9gq+TsJZBVLKeb/QpeCdfdkoyDAmnd0PB8aA6IHdwzgx9nBB0= -=SXtI ------END PGP SIGNATURE----- diff --git a/kmod-30.tar.xz b/kmod-30.tar.xz deleted file mode 100644 index 76ff870..0000000 --- a/kmod-30.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f897dd72698dc6ac1ef03255cd0a5734ad932318e4adbaebc7338ef2f5202f9f -size 567484 diff --git a/kmod-31.tar.sign b/kmod-31.tar.sign new file mode 100644 index 0000000..34a9e73 --- /dev/null +++ b/kmod-31.tar.sign @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEE6rM8lpABPHM5FqyDm6KlpjDL6lMFAmUW3PIACgkQm6KlpjDL +6lPmUw/9EoddTKB7wVaTHPHqx4uu00jz8BKUFJsAppmdbAco+2++n8GWzqi6TgIV ++kwCweS7Ac6xivQQKhKlXrzHw4cXD8uwpWEmzW+o2gP9dSKHcr60ozfPMQ0QNEUF +6wOMGZffkbGmGYKBs6F2QriLznEVvbCYTyTE1khtSH9YIPR7EB2QDI4QCGCWGIdQ +VgmzPRnfoXr/Iiyw86w9AKB4WiqVxor97Gcz7Jyy5qM/9Y9OXi10y75mDKwFgHPJ +JN+Zt3IJXpUpc7rasIlvXfuK2W0q1SLkFWLwNUQ1sXX2QeriJYaMbi+eaJ4fvwjs +YN53duGyvajGkOEXvg487Em411ZPdbWmfbtrHQqhMBOMy/6cSx0CuSoztNBPqc9S +vALwusaoGxoh3PNfUZoHUPHvtRhT3s/J27p7EKK5uX63hvJuKj0/+XD6+mHKCgxG +0lFMglRa6AsVvxiudFEwIafLMaTPLOjcLxnu2zQOeDholZZES3wNkY4AQ5KHjvwH +owF102atzMq+2jyDTsBLdazZhfOwmUG+OwDP9tfWUMaCR6uK8KkJQLFQHZvij3T2 +ynO9axS9KhLB48jKBSGffR2dUnvshkfdEcjiIsTOxOk3nOnyIvqJLA4VL4rJnPVu +ZHZgTN21QNZCLAaMT9NND7klBmZ4qvPBPEpa+ugwXMnyWj6kZf4= +=e1C2 +-----END PGP SIGNATURE----- diff --git a/kmod-31.tar.xz b/kmod-31.tar.xz new file mode 100644 index 0000000..5634028 --- /dev/null +++ b/kmod-31.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5a6949043cc72c001b728d8c218609c5a15f3c33d75614b78c79418fcf00d80 +size 570936 diff --git a/kmod-Add-pkgconfig-file-with-kmod-compile-time-confi.patch b/kmod-Add-pkgconfig-file-with-kmod-compile-time-confi.patch index ed2f336..bb2c081 100644 --- a/kmod-Add-pkgconfig-file-with-kmod-compile-time-confi.patch +++ b/kmod-Add-pkgconfig-file-with-kmod-compile-time-confi.patch @@ -1,7 +1,7 @@ -From 2e4eff4f252fe2a4c5bdb81e3ca2639b9b5f04c6 Mon Sep 17 00:00:00 2001 +From 6760cce5b59eeb2ba9b96f43626221df0128a285 Mon Sep 17 00:00:00 2001 From: Michal Suchanek Date: Fri, 30 Jun 2023 16:16:24 +0200 -Subject: [PATCH 3/7] kmod: Add pkgconfig file with kmod compile time +Subject: [PATCH 4/6] kmod: Add pkgconfig file with kmod compile time configuration Show distconfdir (where system configuration files are searched/to be @@ -14,31 +14,27 @@ v2: mention module signature in commit message v3: add sysconfdir v5: add distconfdir, switch to pkgconfig --- - Makefile.am | 6 +++--- + Makefile.am | 2 +- configure.ac | 11 +++++++++++ tools/kmod.pc.in | 9 +++++++++ - 3 files changed, 23 insertions(+), 3 deletions(-) + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tools/kmod.pc.in diff --git a/Makefile.am b/Makefile.am -index a03846d02b9c..18818c811634 100644 +index e6630a36e18c..2a54c25bd631 100644 --- a/Makefile.am +++ b/Makefile.am -@@ -118,9 +118,9 @@ libkmod_libkmod_internal_la_DEPENDENCIES = $(libkmod_libkmod_la_DEPENDENCIES) +@@ -96,7 +96,7 @@ libkmod_libkmod_internal_la_DEPENDENCIES = $(libkmod_libkmod_la_DEPENDENCIES) libkmod_libkmod_internal_la_LIBADD = $(libkmod_libkmod_la_LIBADD) pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libkmod/libkmod.pc --EXTRA_DIST += libkmod/libkmod.pc.in --CLEANFILES += libkmod/libkmod.pc +pkgconfig_DATA = libkmod/libkmod.pc tools/kmod.pc -+EXTRA_DIST += libkmod/libkmod.pc.in tools/kmod.pc.in -+CLEANFILES += libkmod/libkmod.pc tools/kmod.pc bashcompletiondir=@bashcompletiondir@ dist_bashcompletion_DATA = \ diff --git a/configure.ac b/configure.ac -index 18206ccdb607..a6ed8a36ca70 100644 +index fd88d1fbdbf7..7bf8d78ca747 100644 --- a/configure.ac +++ b/configure.ac @@ -21,6 +21,9 @@ LT_INIT([disable-static pic-only]) @@ -51,39 +47,39 @@ index 18206ccdb607..a6ed8a36ca70 100644 ##################################################################### # Program checks and configurations ##################################################################### -@@ -93,6 +96,7 @@ AC_ARG_WITH([zstd], +@@ -94,6 +97,7 @@ AC_ARG_WITH([zstd], AS_IF([test "x$with_zstd" != "xno"], [ - PKG_CHECK_MODULES([libzstd], [libzstd >= 1.4.4]) + PKG_CHECK_MODULES([libzstd], [libzstd >= 1.4.4], [LIBS="$LIBS $libzstd_LIBS"]) AC_DEFINE([ENABLE_ZSTD], [1], [Enable Zstandard for modules.]) + module_compressions="zstd $module_compressions" ], [ AC_MSG_NOTICE([Zstandard support not requested]) ]) -@@ -104,6 +108,7 @@ AC_ARG_WITH([xz], +@@ -105,6 +109,7 @@ AC_ARG_WITH([xz], AS_IF([test "x$with_xz" != "xno"], [ - PKG_CHECK_MODULES([liblzma], [liblzma >= 4.99]) + PKG_CHECK_MODULES([liblzma], [liblzma >= 4.99], [LIBS="$LIBS $liblzma_LIBS"]) AC_DEFINE([ENABLE_XZ], [1], [Enable Xz for modules.]) + module_compressions="xz $module_compressions" ], [ AC_MSG_NOTICE([Xz support not requested]) ]) -@@ -115,6 +120,7 @@ AC_ARG_WITH([zlib], +@@ -116,6 +121,7 @@ AC_ARG_WITH([zlib], AS_IF([test "x$with_zlib" != "xno"], [ - PKG_CHECK_MODULES([zlib], [zlib]) + PKG_CHECK_MODULES([zlib], [zlib], [LIBS="$LIBS $zlib_LIBS"]) AC_DEFINE([ENABLE_ZLIB], [1], [Enable zlib for modules.]) + module_compressions="gzip $module_compressions" ], [ AC_MSG_NOTICE([zlib support not requested]) ]) -@@ -126,6 +132,7 @@ AC_ARG_WITH([openssl], - AS_IF([test "x$with_openssl" != "xno"], [ - PKG_CHECK_MODULES([libcrypto], [libcrypto >= 1.1.0]) - AC_DEFINE([ENABLE_OPENSSL], [1], [Enable openssl for modinfo.]) +@@ -134,6 +140,7 @@ AS_IF([test "x$with_openssl" != "xno"], [ + AC_MSG_NOTICE([openssl sm3 support not detected]) + CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_SM3" + ]) + module_signatures="PKCS7 $module_signatures" ], [ AC_MSG_NOTICE([openssl support not requested]) ]) -@@ -290,11 +297,15 @@ AC_DEFINE_UNQUOTED(KMOD_FEATURES, ["$with_features"], [Features in this build]) +@@ -298,6 +305,9 @@ AC_DEFINE_UNQUOTED(KMOD_FEATURES, ["$with_features"], [Features in this build]) # Generate files from *.in ##################################################################### @@ -93,8 +89,10 @@ index 18206ccdb607..a6ed8a36ca70 100644 AC_CONFIG_FILES([ Makefile man/Makefile - libkmod/docs/Makefile +@@ -305,6 +315,7 @@ AC_CONFIG_FILES([ libkmod/docs/version.xml + libkmod/libkmod.pc + libkmod/python/kmod/version.py + tools/kmod.pc ]) @@ -115,5 +113,5 @@ index 000000000000..2595980a6b35 +Description: Tools to deal with kernel modules +Version: @VERSION@ -- -2.41.0 +2.42.0 diff --git a/kmod-testsuite.spec b/kmod-testsuite.spec index c123cb8..070049f 100644 --- a/kmod-testsuite.spec +++ b/kmod-testsuite.spec @@ -22,7 +22,7 @@ Name: kmod-testsuite %define lname libkmod2 -Version: 30 +Version: 31 Release: 0 Summary: Testsuite of the kmod package License: GPL-2.0-or-later AND LGPL-2.1-or-later @@ -40,17 +40,12 @@ Patch3: 0009-libkmod-Implement-filtering-of-unsupported-modules-o.patch Patch4: 0010-modprobe-Implement-allow-unsupported-modules.patch Patch5: 0011-Do-not-filter-unsupported-modules-when-running-a-van.patch Patch6: 0012-modprobe-print-unsupported-status.patch -Patch7: 0001-testsuite-repair-read-of-uninitialized-memory.patch +Patch7: configure-Detect-openssl-sm3-support.patch Patch8: man-depmod.d-Fix-incorrect-usr-lib-search-path.patch Patch9: usr-lib-modprobe.patch -Patch10: testsuite-Move-setup-rootfs-logic-from-Makefile-to-s.patch -Patch11: depmod-Introduce-outdir-option.patch -Patch12: testsuite-Handle-different-sysconfdir.patch -Patch13: testsuite-depmod-use-defines-for-the-rootfs-lib_modu.patch Patch14: kmod-Add-pkgconfig-file-with-kmod-compile-time-confi.patch Patch15: usr-lib-modules.patch Patch16: no-stylesheet-download.patch -Patch17: configure-Detect-openssl-sm3-support.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: docbook-xsl-stylesheets diff --git a/kmod.changes b/kmod.changes index 71898c8..1ae218c 100644 --- a/kmod.changes +++ b/kmod.changes @@ -1,3 +1,27 @@ +------------------------------------------------------------------- +Tue Oct 17 15:34:57 UTC 2023 - Michal Suchanek + +- Fix tests + * refresh configure-Detect-openssl-sm3-support.patch + * refresh kmod-Add-pkgconfig-file-with-kmod-compile-time-confi.patch + * refresh usr-lib-modules.patch + +------------------------------------------------------------------- +Fri Sep 29 16:38:01 UTC 2023 - Jan Engelhardt + +- Update to release 31 + * Allow passing a path to modprobe so the module is loaded from + anywhere from the filesystem. + * Use in-kernel decompression if available. + * depmod learned a `-o ` option to allow using a separate + output directory. +- Delete depmod-Introduce-outdir-option.patch, + testsuite-Handle-different-sysconfdir.patch, + testsuite-depmod-use-defines-for-the-rootfs-lib_modu.patch, + 0001-testsuite-repair-read-of-uninitialized-memory.patch, + testsuite-Move-setup-rootfs-logic-from-Makefile-to-s.patch + + ------------------------------------------------------------------- Mon Jul 24 12:50:23 UTC 2023 - Michal Suchanek diff --git a/kmod.spec b/kmod.spec index 98923a9..847a2a9 100644 --- a/kmod.spec +++ b/kmod.spec @@ -22,7 +22,7 @@ Name: kmod %define lname libkmod2 -Version: 30 +Version: 31 Release: 0 Summary: Utilities to load modules into the kernel License: GPL-2.0-or-later AND LGPL-2.1-or-later @@ -41,17 +41,12 @@ Patch3: 0009-libkmod-Implement-filtering-of-unsupported-modules-o.patch Patch4: 0010-modprobe-Implement-allow-unsupported-modules.patch Patch5: 0011-Do-not-filter-unsupported-modules-when-running-a-van.patch Patch6: 0012-modprobe-print-unsupported-status.patch -Patch7: 0001-testsuite-repair-read-of-uninitialized-memory.patch +Patch7: configure-Detect-openssl-sm3-support.patch Patch8: man-depmod.d-Fix-incorrect-usr-lib-search-path.patch Patch9: usr-lib-modprobe.patch -Patch10: testsuite-Move-setup-rootfs-logic-from-Makefile-to-s.patch -Patch11: depmod-Introduce-outdir-option.patch -Patch12: testsuite-Handle-different-sysconfdir.patch -Patch13: testsuite-depmod-use-defines-for-the-rootfs-lib_modu.patch Patch14: kmod-Add-pkgconfig-file-with-kmod-compile-time-confi.patch Patch15: usr-lib-modules.patch Patch16: no-stylesheet-download.patch -Patch17: configure-Detect-openssl-sm3-support.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: docbook-xsl-stylesheets diff --git a/testsuite-Handle-different-sysconfdir.patch b/testsuite-Handle-different-sysconfdir.patch deleted file mode 100644 index 478169b..0000000 --- a/testsuite-Handle-different-sysconfdir.patch +++ /dev/null @@ -1,178 +0,0 @@ -From 94fe372a5f6163f5bc8b620e6068ea2f1d99f858 Mon Sep 17 00:00:00 2001 -From: Lucas De Marchi -Date: Thu, 9 Feb 2023 11:19:46 -0800 -Subject: [PATCH 6/9] testsuite: Handle different sysconfdir - -Instead of skipping tests if sysconfdir isn't /etc, just handle it -during the rootfs setup logic. - -Signed-off-by: Lucas De Marchi -Reviewed-by: Emil Velikov ---- - Makefile.am | 6 +----- - configure.ac | 3 --- - testsuite/setup-rootfs.sh | 8 ++++++++ - testsuite/test-blacklist.c | 3 --- - testsuite/test-depmod.c | 15 --------------- - testsuite/test-modprobe.c | 6 ------ - 6 files changed, 9 insertions(+), 32 deletions(-) - -diff --git a/Makefile.am b/Makefile.am -index 32f4b80e9870..246d4f5b138f 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -245,7 +245,7 @@ EXTRA_DIST += testsuite/setup-rootfs.sh - MODULE_PLAYGROUND = testsuite/module-playground - ROOTFS = testsuite/rootfs - ROOTFS_PRISTINE = $(top_srcdir)/testsuite/rootfs-pristine --CREATE_ROOTFS = $(AM_V_GEN) $(top_srcdir)/testsuite/setup-rootfs.sh $(ROOTFS_PRISTINE) $(ROOTFS) $(MODULE_PLAYGROUND) $(top_builddir)/config.h -+CREATE_ROOTFS = $(AM_V_GEN) $(top_srcdir)/testsuite/setup-rootfs.sh $(ROOTFS_PRISTINE) $(ROOTFS) $(MODULE_PLAYGROUND) $(top_builddir)/config.h $(sysconfdir) - - build-module-playground: - $(AM_V_GEN)if test "$(top_srcdir)" != "$(top_builddir)"; then \ -@@ -330,10 +330,6 @@ TESTSUITE_LDADD = \ - testsuite/libtestsuite.la libkmod/libkmod-internal.la \ - shared/libshared.la - --if KMOD_SYSCONFDIR_NOT_ETC --TESTSUITE_CPPFLAGS += -DKMOD_SYSCONFDIR_NOT_ETC --endif -- - check_LTLIBRARIES += testsuite/libtestsuite.la - testsuite_libtestsuite_la_SOURCES = \ - testsuite/testsuite.c testsuite/testsuite.h -diff --git a/configure.ac b/configure.ac -index 6989e9360da2..a74d3baf0a42 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -224,9 +224,6 @@ GTK_DOC_CHECK([1.14],[--flavour no-tmpl-flat]) - ], [ - AM_CONDITIONAL([ENABLE_GTK_DOC], false)]) - --# Some tests are skipped when sysconfdir != /etc. --AM_CONDITIONAL([KMOD_SYSCONFDIR_NOT_ETC], [test "x$sysconfdir" != "x/etc"]) -- - ##################################################################### - # Default CFLAGS and LDFLAGS - ##################################################################### -diff --git a/testsuite/setup-rootfs.sh b/testsuite/setup-rootfs.sh -index 3e814d22d813..8b13a40f2cae 100755 ---- a/testsuite/setup-rootfs.sh -+++ b/testsuite/setup-rootfs.sh -@@ -6,6 +6,7 @@ ROOTFS_PRISTINE=$1 - ROOTFS=$2 - MODULE_PLAYGROUND=$3 - CONFIG_H=$4 -+SYSCONFDIR=$5 - - # create rootfs from rootfs-pristine - -@@ -15,6 +16,13 @@ create_rootfs() { - cp -r "$ROOTFS_PRISTINE" "$ROOTFS" - find "$ROOTFS" -type d -exec chmod +w {} \; - find "$ROOTFS" -type f -name .gitignore -exec rm -f {} \; -+ -+ if [ "$SYSCONFDIR" != "/etc" ]; then -+ find "$ROOTFS" -type d -name etc -printf "%h\n" | while read -r e; do -+ mkdir -p "$(dirname $e/$SYSCONFDIR)" -+ mv $e/{etc,$SYSCONFDIR} -+ done -+ fi - } - - feature_enabled() { -diff --git a/testsuite/test-blacklist.c b/testsuite/test-blacklist.c -index d03eedb60106..969567ddc817 100644 ---- a/testsuite/test-blacklist.c -+++ b/testsuite/test-blacklist.c -@@ -95,9 +95,6 @@ fail_lookup: - } - - DEFINE_TEST(blacklist_1, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if modules are correctly blacklisted", - .config = { - [TC_ROOTFS] = TESTSUITE_ROOTFS "test-blacklist/", -diff --git a/testsuite/test-depmod.c b/testsuite/test-depmod.c -index 6e3ae562d766..42878cb4eb22 100644 ---- a/testsuite/test-depmod.c -+++ b/testsuite/test-depmod.c -@@ -41,9 +41,6 @@ static noreturn int depmod_modules_order_for_compressed(const struct test *t) - } - - DEFINE_TEST(depmod_modules_order_for_compressed, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if depmod let aliases in right order when using compressed modules", - .config = { - [TC_UNAME_R] = MODULES_ORDER_UNAME, -@@ -75,9 +72,6 @@ static noreturn int depmod_modules_outdir(const struct test *t) - } - - DEFINE_TEST(depmod_modules_outdir, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if depmod honours the outdir option", - .config = { - [TC_UNAME_R] = MODULES_OUTDIR_UNAME, -@@ -158,9 +152,6 @@ static noreturn int depmod_detect_loop(const struct test *t) - exit(EXIT_FAILURE); - } - DEFINE_TEST(depmod_detect_loop, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if depmod detects module loops correctly", - .config = { - [TC_UNAME_R] = "4.4.4", -@@ -184,9 +175,6 @@ static noreturn int depmod_search_order_external_first(const struct test *t) - exit(EXIT_FAILURE); - } - DEFINE_TEST(depmod_search_order_external_first, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if depmod honor external keyword with higher priority", - .config = { - [TC_UNAME_R] = "4.4.4", -@@ -239,9 +227,6 @@ static noreturn int depmod_search_order_override(const struct test *t) - exit(EXIT_FAILURE); - } - DEFINE_TEST(depmod_search_order_override, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if depmod honor override keyword", - .config = { - [TC_UNAME_R] = "4.4.4", -diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c -index 0255f1aaccb5..bbdf11443d47 100644 ---- a/testsuite/test-modprobe.c -+++ b/testsuite/test-modprobe.c -@@ -83,9 +83,6 @@ static noreturn int modprobe_show_alias_to_none(const struct test *t) - exit(EXIT_FAILURE); - } - DEFINE_TEST(modprobe_show_alias_to_none, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if modprobe --show-depends doesn't explode with an alias to nothing", - .config = { - [TC_UNAME_R] = "4.4.4", -@@ -175,9 +172,6 @@ static noreturn int modprobe_softdep_loop(const struct test *t) - exit(EXIT_FAILURE); - } - DEFINE_TEST(modprobe_softdep_loop, --#if defined(KMOD_SYSCONFDIR_NOT_ETC) -- .skip = true, --#endif - .description = "check if modprobe breaks softdep loop", - .config = { - [TC_UNAME_R] = "4.4.4", --- -2.41.0 - diff --git a/testsuite-Move-setup-rootfs-logic-from-Makefile-to-s.patch b/testsuite-Move-setup-rootfs-logic-from-Makefile-to-s.patch deleted file mode 100644 index 5154bad..0000000 --- a/testsuite-Move-setup-rootfs-logic-from-Makefile-to-s.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 00c15bc0710c399749421335c2c9372c9afee080 Mon Sep 17 00:00:00 2001 -From: Lucas De Marchi -Date: Thu, 9 Feb 2023 11:19:45 -0800 -Subject: [PATCH 4/9] testsuite: Move setup-rootfs logic from Makefile to - script - -It's easier to implement the logic outside of the Makefile, so rename -the populate-modules.sh script to setup-rootfs.sh and move the -additional logic from the makefile to the script. - -Signed-off-by: Lucas De Marchi -Reviewed-by: Emil Velikov ---- - Makefile.am | 10 ++-------- - .../{populate-modules.sh => setup-rootfs.sh} | 19 +++++++++++++++++-- - 2 files changed, 19 insertions(+), 10 deletions(-) - rename testsuite/{populate-modules.sh => setup-rootfs.sh} (94%) - -diff --git a/Makefile.am b/Makefile.am -index e7313fa8a33e..32f4b80e9870 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -240,18 +240,12 @@ endif - # TESTSUITE - # ------------------------------------------------------------------------------ - --EXTRA_DIST += testsuite/populate-modules.sh -+EXTRA_DIST += testsuite/setup-rootfs.sh - - MODULE_PLAYGROUND = testsuite/module-playground - ROOTFS = testsuite/rootfs - ROOTFS_PRISTINE = $(top_srcdir)/testsuite/rootfs-pristine --CREATE_ROOTFS = $(AM_V_GEN) ( $(RM) -rf $(ROOTFS) && mkdir -p $(dir $(ROOTFS)) && \ -- cp -r $(ROOTFS_PRISTINE) $(ROOTFS) && \ -- find $(ROOTFS) -type d -exec chmod +w {} \; && \ -- find $(ROOTFS) -type f -name .gitignore -exec rm -f {} \; && \ -- $(top_srcdir)/testsuite/populate-modules.sh \ -- $(MODULE_PLAYGROUND) $(ROOTFS) $(top_builddir)/config.h ) && \ -- touch testsuite/stamp-rootfs -+CREATE_ROOTFS = $(AM_V_GEN) $(top_srcdir)/testsuite/setup-rootfs.sh $(ROOTFS_PRISTINE) $(ROOTFS) $(MODULE_PLAYGROUND) $(top_builddir)/config.h - - build-module-playground: - $(AM_V_GEN)if test "$(top_srcdir)" != "$(top_builddir)"; then \ -diff --git a/testsuite/populate-modules.sh b/testsuite/setup-rootfs.sh -similarity index 94% -rename from testsuite/populate-modules.sh -rename to testsuite/setup-rootfs.sh -index 099f02669156..d9cc627f7224 100755 ---- a/testsuite/populate-modules.sh -+++ b/testsuite/setup-rootfs.sh -@@ -2,9 +2,20 @@ - - set -e - --MODULE_PLAYGROUND=$1 -+ROOTFS_PRISTINE=$1 - ROOTFS=$2 --CONFIG_H=$3 -+MODULE_PLAYGROUND=$3 -+CONFIG_H=$4 -+ -+# create rootfs from rootfs-pristine -+ -+create_rootfs() { -+ rm -rf "$ROOTFS" -+ mkdir -p $(dirname "$ROOTFS") -+ cp -r "$ROOTFS_PRISTINE" "$ROOTFS" -+ find "$ROOTFS" -type d -exec chmod +w {} \; -+ find "$ROOTFS" -type f -name .gitignore -exec rm -f {} \; -+} - - feature_enabled() { - local feature=$1 -@@ -94,6 +105,8 @@ attach_pkcs7_array=( - "test-modinfo/mod-simple-pkcs7.ko" - ) - -+create_rootfs -+ - for k in "${!map[@]}"; do - dst=${ROOTFS}/$k - src=${MODULE_PLAYGROUND}/${map[$k]} -@@ -138,3 +151,5 @@ done - for m in "${attach_pkcs7_array[@]}"; do - cat "${MODULE_PLAYGROUND}/dummy.pkcs7" >>"${ROOTFS}/$m" - done -+ -+touch testsuite/stamp-rootfs --- -2.41.0 - diff --git a/testsuite-depmod-use-defines-for-the-rootfs-lib_modu.patch b/testsuite-depmod-use-defines-for-the-rootfs-lib_modu.patch deleted file mode 100644 index 0edaa62..0000000 --- a/testsuite-depmod-use-defines-for-the-rootfs-lib_modu.patch +++ /dev/null @@ -1,193 +0,0 @@ -From 892c2c451397a4f424196bc57e2536651b0549c3 Mon Sep 17 00:00:00 2001 -From: Emil Velikov -Date: Mon, 6 Feb 2023 14:04:49 +0000 -Subject: [PATCH 7/9] testsuite/depmod: use defines for the rootfs/lib_modules - -The uname used across the tests is same, so drop "_ORDER" from the macro -name and use it throughout. Similarly - add respective LIB_MODULES -defines and use them in the tests. - -Signed-off-by: Emil Velikov -Signed-off-by: Lucas De Marchi ---- - testsuite/test-depmod.c | 50 ++++++++++++++++++++++------------------- - 1 file changed, 27 insertions(+), 23 deletions(-) - -diff --git a/testsuite/test-depmod.c b/testsuite/test-depmod.c -index 42878cb4eb22..93606947f18a 100644 ---- a/testsuite/test-depmod.c -+++ b/testsuite/test-depmod.c -@@ -25,9 +25,9 @@ - - #include "testsuite.h" - --#define MODULES_ORDER_UNAME "4.4.4" -+#define MODULES_UNAME "4.4.4" - #define MODULES_ORDER_ROOTFS TESTSUITE_ROOTFS "test-depmod/modules-order-compressed" --#define MODULES_ORDER_LIB_MODULES MODULES_ORDER_ROOTFS "/lib/modules/" MODULES_ORDER_UNAME -+#define MODULES_ORDER_LIB_MODULES MODULES_ORDER_ROOTFS "/lib/modules/" MODULES_UNAME - static noreturn int depmod_modules_order_for_compressed(const struct test *t) - { - const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -@@ -43,7 +43,7 @@ static noreturn int depmod_modules_order_for_compressed(const struct test *t) - DEFINE_TEST(depmod_modules_order_for_compressed, - .description = "check if depmod let aliases in right order when using compressed modules", - .config = { -- [TC_UNAME_R] = MODULES_ORDER_UNAME, -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = MODULES_ORDER_ROOTFS, - }, - .output = { -@@ -54,10 +54,9 @@ DEFINE_TEST(depmod_modules_order_for_compressed, - }, - }); - --#define MODULES_OUTDIR_UNAME "4.4.4" - #define MODULES_OUTDIR_ROOTFS TESTSUITE_ROOTFS "test-depmod/modules-outdir" --#define MODULES_OUTDIR_LIB_MODULES_OUTPUT MODULES_OUTDIR_ROOTFS "/outdir/lib/modules/" MODULES_OUTDIR_UNAME --#define MODULES_OUTDIR_LIB_MODULES_INPUT MODULES_OUTDIR_ROOTFS "/lib/modules/" MODULES_OUTDIR_UNAME -+#define MODULES_OUTDIR_LIB_MODULES_OUTPUT MODULES_OUTDIR_ROOTFS "/outdir/lib/modules/" MODULES_UNAME -+#define MODULES_OUTDIR_LIB_MODULES_INPUT MODULES_OUTDIR_ROOTFS "/lib/modules/" MODULES_UNAME - static noreturn int depmod_modules_outdir(const struct test *t) - { - const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -@@ -74,7 +73,7 @@ static noreturn int depmod_modules_outdir(const struct test *t) - DEFINE_TEST(depmod_modules_outdir, - .description = "check if depmod honours the outdir option", - .config = { -- [TC_UNAME_R] = MODULES_OUTDIR_UNAME, -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = MODULES_OUTDIR_ROOTFS, - }, - .output = { -@@ -88,6 +87,7 @@ DEFINE_TEST(depmod_modules_outdir, - }); - - #define SEARCH_ORDER_SIMPLE_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-simple" -+#define SEARCH_ORDER_SIMPLE_LIB_MODULES SEARCH_ORDER_SIMPLE_ROOTFS "/lib/modules/" MODULES_UNAME - static noreturn int depmod_search_order_simple(const struct test *t) - { - const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -@@ -102,18 +102,19 @@ static noreturn int depmod_search_order_simple(const struct test *t) - DEFINE_TEST(depmod_search_order_simple, - .description = "check if depmod honor search order in config", - .config = { -- [TC_UNAME_R] = "4.4.4", -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = SEARCH_ORDER_SIMPLE_ROOTFS, - }, - .output = { - .files = (const struct keyval[]) { -- { SEARCH_ORDER_SIMPLE_ROOTFS "/lib/modules/4.4.4/correct-modules.dep", -- SEARCH_ORDER_SIMPLE_ROOTFS "/lib/modules/4.4.4/modules.dep" }, -+ { SEARCH_ORDER_SIMPLE_LIB_MODULES "/correct-modules.dep", -+ SEARCH_ORDER_SIMPLE_LIB_MODULES "/modules.dep" }, - { } - }, - }); - - #define SEARCH_ORDER_SAME_PREFIX_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-same-prefix" -+#define SEARCH_ORDER_SAME_PREFIX_LIB_MODULES SEARCH_ORDER_SAME_PREFIX_ROOTFS "/lib/modules/" MODULES_UNAME - static noreturn int depmod_search_order_same_prefix(const struct test *t) - { - const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -@@ -128,13 +129,13 @@ static noreturn int depmod_search_order_same_prefix(const struct test *t) - DEFINE_TEST(depmod_search_order_same_prefix, - .description = "check if depmod honor search order in config with same prefix", - .config = { -- [TC_UNAME_R] = "4.4.4", -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = SEARCH_ORDER_SAME_PREFIX_ROOTFS, - }, - .output = { - .files = (const struct keyval[]) { -- { SEARCH_ORDER_SAME_PREFIX_ROOTFS "/lib/modules/4.4.4/correct-modules.dep", -- SEARCH_ORDER_SAME_PREFIX_ROOTFS "/lib/modules/4.4.4/modules.dep" }, -+ { SEARCH_ORDER_SAME_PREFIX_LIB_MODULES "/correct-modules.dep", -+ SEARCH_ORDER_SAME_PREFIX_LIB_MODULES "/modules.dep" }, - { } - }, - }); -@@ -154,7 +155,7 @@ static noreturn int depmod_detect_loop(const struct test *t) - DEFINE_TEST(depmod_detect_loop, - .description = "check if depmod detects module loops correctly", - .config = { -- [TC_UNAME_R] = "4.4.4", -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = DETECT_LOOP_ROOTFS, - }, - .expected_fail = true, -@@ -163,6 +164,7 @@ DEFINE_TEST(depmod_detect_loop, - }); - - #define SEARCH_ORDER_EXTERNAL_FIRST_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-external-first" -+#define SEARCH_ORDER_EXTERNAL_FIRST_LIB_MODULES SEARCH_ORDER_EXTERNAL_FIRST_ROOTFS "/lib/modules/" MODULES_UNAME - static noreturn int depmod_search_order_external_first(const struct test *t) - { - const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -@@ -177,18 +179,19 @@ static noreturn int depmod_search_order_external_first(const struct test *t) - DEFINE_TEST(depmod_search_order_external_first, - .description = "check if depmod honor external keyword with higher priority", - .config = { -- [TC_UNAME_R] = "4.4.4", -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = SEARCH_ORDER_EXTERNAL_FIRST_ROOTFS, - }, - .output = { - .files = (const struct keyval[]) { -- { SEARCH_ORDER_EXTERNAL_FIRST_ROOTFS "/lib/modules/4.4.4/correct-modules.dep", -- SEARCH_ORDER_EXTERNAL_FIRST_ROOTFS "/lib/modules/4.4.4/modules.dep" }, -+ { SEARCH_ORDER_EXTERNAL_FIRST_LIB_MODULES "/correct-modules.dep", -+ SEARCH_ORDER_EXTERNAL_FIRST_LIB_MODULES "/modules.dep" }, - { } - }, - }); - - #define SEARCH_ORDER_EXTERNAL_LAST_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-external-last" -+#define SEARCH_ORDER_EXTERNAL_LAST_LIB_MODULES SEARCH_ORDER_EXTERNAL_LAST_ROOTFS "/lib/modules/" MODULES_UNAME - static noreturn int depmod_search_order_external_last(const struct test *t) - { - const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -@@ -203,18 +206,19 @@ static noreturn int depmod_search_order_external_last(const struct test *t) - DEFINE_TEST(depmod_search_order_external_last, - .description = "check if depmod honor external keyword with lower priority", - .config = { -- [TC_UNAME_R] = "4.4.4", -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = SEARCH_ORDER_EXTERNAL_LAST_ROOTFS, - }, - .output = { - .files = (const struct keyval[]) { -- { SEARCH_ORDER_EXTERNAL_LAST_ROOTFS "/lib/modules/4.4.4/correct-modules.dep", -- SEARCH_ORDER_EXTERNAL_LAST_ROOTFS "/lib/modules/4.4.4/modules.dep" }, -+ { SEARCH_ORDER_EXTERNAL_LAST_LIB_MODULES "/correct-modules.dep", -+ SEARCH_ORDER_EXTERNAL_LAST_LIB_MODULES "/modules.dep" }, - { } - }, - }); - - #define SEARCH_ORDER_OVERRIDE_ROOTFS TESTSUITE_ROOTFS "test-depmod/search-order-override" -+#define SEARCH_ORDER_OVERRIDE_LIB_MODULES SEARCH_ORDER_OVERRIDE_ROOTFS "/lib/modules/" MODULES_UNAME - static noreturn int depmod_search_order_override(const struct test *t) - { - const char *progname = ABS_TOP_BUILDDIR "/tools/depmod"; -@@ -229,13 +233,13 @@ static noreturn int depmod_search_order_override(const struct test *t) - DEFINE_TEST(depmod_search_order_override, - .description = "check if depmod honor override keyword", - .config = { -- [TC_UNAME_R] = "4.4.4", -+ [TC_UNAME_R] = MODULES_UNAME, - [TC_ROOTFS] = SEARCH_ORDER_OVERRIDE_ROOTFS, - }, - .output = { - .files = (const struct keyval[]) { -- { SEARCH_ORDER_OVERRIDE_ROOTFS "/lib/modules/4.4.4/correct-modules.dep", -- SEARCH_ORDER_OVERRIDE_ROOTFS "/lib/modules/4.4.4/modules.dep" }, -+ { SEARCH_ORDER_OVERRIDE_LIB_MODULES "/correct-modules.dep", -+ SEARCH_ORDER_OVERRIDE_LIB_MODULES "/modules.dep" }, - { } - }, - }); --- -2.41.0 - diff --git a/usr-lib-modules.patch b/usr-lib-modules.patch index d1f798e..c86191e 100644 --- a/usr-lib-modules.patch +++ b/usr-lib-modules.patch @@ -1,11 +1,14 @@ -From d6ca73ea19ef26506686e7cc85044c40f3fb917c Mon Sep 17 00:00:00 2001 +From 4ad85461d27d240efcb4922eb5810a65356a8d6a Mon Sep 17 00:00:00 2001 From: Michal Suchanek Date: Fri, 26 May 2023 10:38:05 +0200 -Subject: [PATCH 4/7] libkmod, depmod, modprobe: Make directory for kernel +Subject: [PATCH 5/6] libkmod, depmod, modprobe: Make directory for kernel modules configurable -modprobe.d is now searched under ${prefix}/lib, add ${module_directory} to -specify the directory where to search for kernel modules. +Now that modprobe.d is searched under ${prefix}/lib, allow a complete +transition to files only under ${prefix} by adding a ${module_directory} +configuration. This specifies the directory where to search for kernel +modules and should match the location where the kernel/distro installs +them. With this distributions that do not want to ship files in /lib can also move kernel modules to /usr while others can keep them in /lib. @@ -13,6 +16,7 @@ move kernel modules to /usr while others can keep them in /lib. Signed-off-by: Michal Suchanek --- v4: Make the whole path configurable +v5: More verbose commit message --- Makefile.am | 3 +- configure.ac | 7 ++ @@ -35,7 +39,7 @@ v4: Make the whole path configurable 18 files changed, 107 insertions(+), 84 deletions(-) diff --git a/Makefile.am b/Makefile.am -index fd4c7a04ec51..1d51a43d68ba 100644 +index 2a54c25bd631..4062d81227df 100644 --- a/Makefile.am +++ b/Makefile.am @@ -20,6 +20,7 @@ AM_CPPFLAGS = \ @@ -46,7 +50,7 @@ index fd4c7a04ec51..1d51a43d68ba 100644 ${zlib_CFLAGS} AM_CFLAGS = $(OUR_CFLAGS) -@@ -247,7 +248,7 @@ EXTRA_DIST += testsuite/setup-rootfs.sh +@@ -220,7 +221,7 @@ EXTRA_DIST += testsuite/setup-rootfs.sh MODULE_PLAYGROUND = testsuite/module-playground ROOTFS = testsuite/rootfs ROOTFS_PRISTINE = $(top_srcdir)/testsuite/rootfs-pristine @@ -56,10 +60,10 @@ index fd4c7a04ec51..1d51a43d68ba 100644 build-module-playground: $(AM_V_GEN)if test "$(top_srcdir)" != "$(top_builddir)"; then \ diff --git a/configure.ac b/configure.ac -index a6ed8a36ca70..602d3d3dbdf1 100644 +index 7bf8d78ca747..d282fef9a08c 100644 --- a/configure.ac +++ b/configure.ac -@@ -90,6 +90,12 @@ AC_ARG_WITH([rootlibdir], +@@ -91,6 +91,12 @@ AC_ARG_WITH([rootlibdir], [], [with_rootlibdir=$libdir]) AC_SUBST([rootlibdir], [$with_rootlibdir]) @@ -72,7 +76,7 @@ index a6ed8a36ca70..602d3d3dbdf1 100644 AC_ARG_WITH([zstd], AS_HELP_STRING([--with-zstd], [handle Zstandard-compressed modules @<:@default=disabled@:>@]), [], [with_zstd=no]) -@@ -316,6 +322,7 @@ AC_MSG_RESULT([ +@@ -326,6 +332,7 @@ AC_MSG_RESULT([ $PACKAGE $VERSION ======= @@ -81,10 +85,10 @@ index a6ed8a36ca70..602d3d3dbdf1 100644 sysconfdir: ${sysconfdir} distconfdir: ${distconfdir} diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c -index bc05a1873edf..876458f7449a 100644 +index 57fac1cb9f7b..4489cbd04bf7 100644 --- a/libkmod/libkmod.c +++ b/libkmod/libkmod.c -@@ -209,7 +209,7 @@ static int log_priority(const char *priority) +@@ -210,7 +210,7 @@ static int log_priority(const char *priority) return 0; } @@ -93,7 +97,7 @@ index bc05a1873edf..876458f7449a 100644 static char *get_kernel_release(const char *dirname) { -@@ -231,7 +231,7 @@ static char *get_kernel_release(const char *dirname) +@@ -266,7 +266,7 @@ static enum kmod_file_compression_type get_kernel_compression(struct kmod_ctx *c /** * kmod_new: * @dirname: what to consider as linux module's directory, if NULL @@ -181,7 +185,7 @@ index 9fe0324a2527..b6c4d6045829 100644 modprobe8 when loading kernel modules. diff --git a/man/modprobe.xml b/man/modprobe.xml -index db39c7a18bb7..7374f37a0f7b 100644 +index 91f9e27997cd..4d1fd59c000b 100644 --- a/man/modprobe.xml +++ b/man/modprobe.xml @@ -78,7 +78,7 @@ @@ -231,7 +235,7 @@ index e6045b0dd932..a7ab09bea2bf 100644 ifeq ($(FAKE_BUILD),) FAKE_BUILD=0 diff --git a/testsuite/setup-rootfs.sh b/testsuite/setup-rootfs.sh -index 8b13a40f2cae..2fc7e592d1b5 100755 +index 4440ddcd6b4d..a780f9381b3c 100755 --- a/testsuite/setup-rootfs.sh +++ b/testsuite/setup-rootfs.sh @@ -16,6 +16,19 @@ create_rootfs() { @@ -254,7 +258,7 @@ index 8b13a40f2cae..2fc7e592d1b5 100755 if [ "$SYSCONFDIR" != "/etc" ]; then find "$ROOTFS" -type d -name etc -printf "%h\n" | while read -r e; do -@@ -32,55 +45,55 @@ feature_enabled() { +@@ -32,57 +45,57 @@ feature_enabled() { declare -A map map=( @@ -338,6 +342,8 @@ index 8b13a40f2cae..2fc7e592d1b5 100755 + ["test-modprobe/alias-to-none$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko" + ["test-modprobe/module-param-kcmdline$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko" ["test-modprobe/external/lib/modules/external/"]="mod-simple.ko" + ["test-modprobe/module-from-abspath/home/foo/"]="mod-simple.ko" + ["test-modprobe/module-from-relpath/home/foo/"]="mod-simple.ko" - ["test-depmod/modules-order-compressed/lib/modules/4.4.4/kernel/drivers/block/cciss.ko"]="mod-fake-cciss.ko" - ["test-depmod/modules-order-compressed/lib/modules/4.4.4/kernel/drivers/scsi/hpsa.ko"]="mod-fake-hpsa.ko" - ["test-depmod/modules-order-compressed/lib/modules/4.4.4/kernel/drivers/scsi/scsi_mod.ko"]="mod-fake-scsi-mod.ko" @@ -353,7 +359,7 @@ index 8b13a40f2cae..2fc7e592d1b5 100755 ["test-modinfo/mod-simple-i386.ko"]="mod-simple-i386.ko" ["test-modinfo/mod-simple-x86_64.ko"]="mod-simple-x86_64.ko" ["test-modinfo/mod-simple-sparc64.ko"]="mod-simple-sparc64.ko" -@@ -88,20 +101,20 @@ map=( +@@ -90,20 +103,20 @@ map=( ["test-modinfo/mod-simple-sha256.ko"]="mod-simple.ko" ["test-modinfo/mod-simple-pkcs7.ko"]="mod-simple.ko" ["test-modinfo/external/lib/modules/external/mod-simple.ko"]="mod-simple.ko" @@ -486,7 +492,7 @@ index 56e73609f204..c77c4bbc04eb 100644 return EXIT_FAILURE; } diff --git a/tools/depmod.c b/tools/depmod.c -index aada5ac57902..5ef490473186 100644 +index 630fef9c8fb0..7f7c4b74d216 100644 --- a/tools/depmod.c +++ b/tools/depmod.c @@ -911,7 +911,7 @@ struct vertex; @@ -547,10 +553,10 @@ index d0aab200af4e..cacc32dc4c40 100644 dirname = dirname_buf; } diff --git a/tools/modprobe.c b/tools/modprobe.c -index 322d5d199372..c7016a58e43f 100644 +index e891028349a8..5306bef250da 100644 --- a/tools/modprobe.c +++ b/tools/modprobe.c -@@ -146,7 +146,7 @@ static void help(void) +@@ -142,7 +142,7 @@ static void help(void) "\t-n, --show Same as --dry-run\n" "\t-C, --config=FILE Use FILE instead of default search paths\n" @@ -559,7 +565,7 @@ index 322d5d199372..c7016a58e43f 100644 "\t-S, --set-version=VERSION Use VERSION instead of `uname -r`\n" "\t-s, --syslog print to syslog, not stderr\n" -@@ -983,7 +983,7 @@ static int do_modprobe(int argc, char **orig_argv) +@@ -999,7 +999,7 @@ static int do_modprobe(int argc, char **orig_argv) kversion = u.release; } snprintf(dirname_buf, sizeof(dirname_buf), @@ -592,5 +598,5 @@ index 8d2356da73f3..5ef3743e967b 100644 ret = EXIT_FAILURE; } -- -2.41.0 +2.42.0