All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Allow passing module files to modprobe
@ 2023-01-11 15:29 Gustavo Sousa
  2023-01-11 15:29 ` [PATCH 1/2] modprobe: Move insertion block into separate function Gustavo Sousa
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-11 15:29 UTC (permalink / raw)
  To: linux-modules
  Cc: Lucas De Marchi, Gustavo Sverzut Barbieri, Lucas De Marchi,
	Gustavo Sousa

This patch series allows modprobe to be called with a direct path to a
module object. This is specially useful for testing just compiled modules when
they have dependencies, which are loaded with insmod.

Gustavo Sousa (2):
  modprobe: Move insertion block into separate function
  modprobe: Allow passing path to module

 man/modprobe.xml                              |   5 +
 testsuite/populate-modules.sh                 |   1 +
 .../lib/modules/4.4.4/modules.alias           |   1 +
 .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
 .../lib/modules/4.4.4/modules.builtin.bin     |   0
 .../lib/modules/4.4.4/modules.dep             |   1 +
 .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
 .../lib/modules/4.4.4/modules.devname         |   0
 .../lib/modules/4.4.4/modules.softdep         |   1 +
 .../lib/modules/4.4.4/modules.symbols         |   1 +
 .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
 .../module-from-path/proc/modules             |   0
 testsuite/test-modprobe.c                     |  22 ++++
 tools/modprobe.c                              | 111 +++++++++++-------
 14 files changed, 98 insertions(+), 45 deletions(-)
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules

-- 
2.39.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/2] modprobe: Move insertion block into separate function
  2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
@ 2023-01-11 15:29 ` Gustavo Sousa
  2023-01-11 15:29 ` [PATCH 2/2] modprobe: Allow passing path to module Gustavo Sousa
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-11 15:29 UTC (permalink / raw)
  To: linux-modules
  Cc: Lucas De Marchi, Gustavo Sverzut Barbieri, Lucas De Marchi,
	Gustavo Sousa

That same logic will be used for enabling modprobe for paths in the next
patch. As such, prepare for that by extracting that block into its own
function.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 tools/modprobe.c | 77 ++++++++++++++++++++++++++----------------------
 1 file changed, 42 insertions(+), 35 deletions(-)

diff --git a/tools/modprobe.c b/tools/modprobe.c
index 3240c2b72edd..d4012fab39f8 100644
--- a/tools/modprobe.c
+++ b/tools/modprobe.c
@@ -569,15 +569,53 @@ static void print_action(struct kmod_module *m, bool install,
 		printf("insmod %s %s\n", kmod_module_get_path(m), options);
 }
 
+static int insmod_insert(struct kmod_module *mod, int flags,
+				const char *extra_options)
+{
+	int err = 0;
+	void (*show)(struct kmod_module *m, bool install,
+						const char *options) = NULL;
+
+	if (do_show || verbose > DEFAULT_VERBOSE)
+		show = &print_action;
+
+	if (lookup_only)
+		printf("%s\n", kmod_module_get_name(mod));
+	else
+		err = kmod_module_probe_insert_module(mod, flags,
+				extra_options, NULL, NULL, show);
+
+	if (err >= 0)
+		/* ignore flag return values such as a mod being blacklisted */
+		err = 0;
+	else {
+		switch (err) {
+		case -EEXIST:
+			ERR("could not insert '%s': Module already in kernel\n",
+						kmod_module_get_name(mod));
+			break;
+		case -ENOENT:
+			ERR("could not insert '%s': Unknown symbol in module, "
+					"or unknown parameter (see dmesg)\n",
+					kmod_module_get_name(mod));
+			break;
+		default:
+			ERR("could not insert '%s': %s\n",
+					kmod_module_get_name(mod),
+					strerror(-err));
+			break;
+		}
+	}
+
+	return err;
+}
+
 static int insmod(struct kmod_ctx *ctx, const char *alias,
 						const char *extra_options)
 {
 	struct kmod_list *l, *list = NULL;
 	int err, flags = 0;
 
-	void (*show)(struct kmod_module *m, bool install,
-						const char *options) = NULL;
-
 	err = kmod_module_new_from_lookup(ctx, alias, &list);
 
 	if (list == NULL || err < 0) {
@@ -596,8 +634,6 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 		flags |= KMOD_PROBE_IGNORE_LOADED;
 	if (dry_run)
 		flags |= KMOD_PROBE_DRY_RUN;
-	if (do_show || verbose > DEFAULT_VERBOSE)
-		show = &print_action;
 
 	flags |= KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY;
 
@@ -608,36 +644,7 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 
 	kmod_list_foreach(l, list) {
 		struct kmod_module *mod = kmod_module_get_module(l);
-
-		if (lookup_only)
-			printf("%s\n", kmod_module_get_name(mod));
-		else {
-			err = kmod_module_probe_insert_module(mod, flags,
-					extra_options, NULL, NULL, show);
-		}
-
-		if (err >= 0)
-			/* ignore flag return values such as a mod being blacklisted */
-			err = 0;
-		else {
-			switch (err) {
-			case -EEXIST:
-				ERR("could not insert '%s': Module already in kernel\n",
-							kmod_module_get_name(mod));
-				break;
-			case -ENOENT:
-				ERR("could not insert '%s': Unknown symbol in module, "
-						"or unknown parameter (see dmesg)\n",
-						kmod_module_get_name(mod));
-				break;
-			default:
-				ERR("could not insert '%s': %s\n",
-						kmod_module_get_name(mod),
-						strerror(-err));
-				break;
-			}
-		}
-
+		err = insmod_insert(mod, flags, extra_options);
 		kmod_module_unref(mod);
 	}
 
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] modprobe: Allow passing path to module
  2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
  2023-01-11 15:29 ` [PATCH 1/2] modprobe: Move insertion block into separate function Gustavo Sousa
@ 2023-01-11 15:29 ` Gustavo Sousa
  2023-01-12 21:40   ` Lucas De Marchi
  2023-01-11 15:33 ` [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-11 15:29 UTC (permalink / raw)
  To: linux-modules
  Cc: Lucas De Marchi, Gustavo Sverzut Barbieri, Lucas De Marchi,
	Gustavo Sousa

This is useful to kernel module developers for testing a just compiled
module: instead of using insmod, they can load the module from the path
while getting all the benefits of modprobe (e.g. module dependency
resolution).

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 man/modprobe.xml                              |   5 +++
 testsuite/populate-modules.sh                 |   1 +
 .../lib/modules/4.4.4/modules.alias           |   1 +
 .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
 .../lib/modules/4.4.4/modules.builtin.bin     |   0
 .../lib/modules/4.4.4/modules.dep             |   1 +
 .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
 .../lib/modules/4.4.4/modules.devname         |   0
 .../lib/modules/4.4.4/modules.softdep         |   1 +
 .../lib/modules/4.4.4/modules.symbols         |   1 +
 .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
 .../module-from-path/proc/modules             |   0
 testsuite/test-modprobe.c                     |  22 ++++++++++++
 tools/modprobe.c                              |  34 ++++++++++++------
 14 files changed, 56 insertions(+), 10 deletions(-)
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules

diff --git a/man/modprobe.xml b/man/modprobe.xml
index db39c7a18bb7..615466977f6a 100644
--- a/man/modprobe.xml
+++ b/man/modprobe.xml
@@ -115,6 +115,11 @@
       kernel (in addition to any options listed in the configuration
       file).
     </para>
+    <para>
+      When loading modules, <replaceable>modulename</replaceable> can also
+      be a path to the module. If the path is relative, it must
+      explicitly start with "./".
+    </para>
   </refsect1>
 
   <refsect1><title>OPTIONS</title>
diff --git a/testsuite/populate-modules.sh b/testsuite/populate-modules.sh
index 099f02669156..652279eda728 100755
--- a/testsuite/populate-modules.sh
+++ b/testsuite/populate-modules.sh
@@ -56,6 +56,7 @@ map=(
     ["test-modprobe/alias-to-none/lib/modules/4.4.4/kernel/"]="mod-simple.ko"
     ["test-modprobe/module-param-kcmdline/lib/modules/4.4.4/kernel/"]="mod-simple.ko"
     ["test-modprobe/external/lib/modules/external/"]="mod-simple.ko"
+    ["test-modprobe/module-from-path/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"
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
new file mode 100644
index 000000000000..ba76e1815af0
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
@@ -0,0 +1 @@
+# Aliases extracted from modules themselves.
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
new file mode 100644
index 000000000000..e612900c5de7
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
@@ -0,0 +1 @@
+/lib/modules/external/mod-simple.ko:
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin
new file mode 100644
index 0000000000000000000000000000000000000000..556e3c8142d5d85dba5b557474907f9f9dd99dcb
GIT binary patch
literal 73
zcmdnM{w17&iGfjpfx$UHCB8T_w;(5#0SFjDgnmwDl74P}N@-4Nv3_brNorAEVh%_^
S7ot!vJKu^SH}?Po0}lY-ZWUAj

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
new file mode 100644
index 000000000000..5554ccca7f9e
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
@@ -0,0 +1 @@
+# Soft dependencies extracted from modules themselves.
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
new file mode 100644
index 000000000000..618c345f7e93
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
@@ -0,0 +1 @@
+# Aliases for symbols, used by symbol_request().
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules b/testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
index 0255f1aaccb5..3f8a430c09e4 100644
--- a/testsuite/test-modprobe.c
+++ b/testsuite/test-modprobe.c
@@ -422,4 +422,26 @@ DEFINE_TEST(modprobe_external,
 	.modules_loaded = "mod-simple",
 	);
 
+static noreturn int modprobe_module_from_path(const struct test *t)
+{
+	const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
+	const char *const args[] = {
+		progname,
+		"/home/foo/mod-simple.ko",
+		NULL,
+	};
+
+	test_spawn_prog(progname, args);
+	exit(EXIT_FAILURE);
+}
+DEFINE_TEST(modprobe_module_from_path,
+	.description = "check modprobe able to load module given as a direct path",
+	.config = {
+		[TC_UNAME_R] = "4.4.4",
+		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-from-path",
+		[TC_INIT_MODULE_RETCODES] = "",
+	},
+	.modules_loaded = "mod-simple",
+	);
+
 TESTSUITE_MAIN();
diff --git a/tools/modprobe.c b/tools/modprobe.c
index d4012fab39f8..3b7897c1b8e4 100644
--- a/tools/modprobe.c
+++ b/tools/modprobe.c
@@ -614,14 +614,23 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 						const char *extra_options)
 {
 	struct kmod_list *l, *list = NULL;
+	struct kmod_module *mod = NULL;
 	int err, flags = 0;
 
-	err = kmod_module_new_from_lookup(ctx, alias, &list);
-
-	if (list == NULL || err < 0) {
-		LOG("Module %s not found in directory %s\n", alias,
-			ctx ? kmod_get_dirname(ctx) : "(missing)");
-		return -ENOENT;
+	if (strncmp(alias, "/", 1) == 0 || strncmp(alias, "./", 2) == 0) {
+		err = kmod_module_new_from_path(ctx, alias, &mod);
+		if (err < 0) {
+			LOG("Failed to get module from path %s: %s\n", alias,
+				strerror(-err));
+			return -ENOENT;
+		}
+	} else {
+		err = kmod_module_new_from_lookup(ctx, alias, &list);
+		if (list == NULL || err < 0) {
+			LOG("Module %s not found in directory %s\n", alias,
+				ctx ? kmod_get_dirname(ctx) : "(missing)");
+			return -ENOENT;
+		}
 	}
 
 	if (strip_modversion || force)
@@ -642,13 +651,18 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 	if (first_time)
 		flags |= KMOD_PROBE_FAIL_ON_LOADED;
 
-	kmod_list_foreach(l, list) {
-		struct kmod_module *mod = kmod_module_get_module(l);
+	/* If module is loaded from path */
+	if (mod != NULL) {
 		err = insmod_insert(mod, flags, extra_options);
 		kmod_module_unref(mod);
+	} else {
+		kmod_list_foreach(l, list) {
+			mod = kmod_module_get_module(l);
+			err = insmod_insert(mod, flags, extra_options);
+			kmod_module_unref(mod);
+		}
+		kmod_module_unref_list(list);
 	}
-
-	kmod_module_unref_list(list);
 	return err;
 }
 
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/2] Allow passing module files to modprobe
  2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
  2023-01-11 15:29 ` [PATCH 1/2] modprobe: Move insertion block into separate function Gustavo Sousa
  2023-01-11 15:29 ` [PATCH 2/2] modprobe: Allow passing path to module Gustavo Sousa
@ 2023-01-11 15:33 ` Gustavo Sousa
  2023-01-13 21:37 ` [PATCH v2 0/3] " Gustavo Sousa
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-11 15:33 UTC (permalink / raw)
  To: linux-modules; +Cc: Lucas De Marchi, Gustavo Sverzut Barbieri, Lucas De Marchi

On Wed, Jan 11, 2023 at 12:29:34PM -0300, Gustavo Sousa wrote:
> This patch series allows modprobe to be called with a direct path to a
> module object. This is specially useful for testing just compiled modules when
> they have dependencies, which are loaded with insmod.

Oops, s/which are loaded/which are not loaded/

> 
> Gustavo Sousa (2):
>   modprobe: Move insertion block into separate function
>   modprobe: Allow passing path to module
> 
>  man/modprobe.xml                              |   5 +
>  testsuite/populate-modules.sh                 |   1 +
>  .../lib/modules/4.4.4/modules.alias           |   1 +
>  .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
>  .../lib/modules/4.4.4/modules.builtin.bin     |   0
>  .../lib/modules/4.4.4/modules.dep             |   1 +
>  .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
>  .../lib/modules/4.4.4/modules.devname         |   0
>  .../lib/modules/4.4.4/modules.softdep         |   1 +
>  .../lib/modules/4.4.4/modules.symbols         |   1 +
>  .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
>  .../module-from-path/proc/modules             |   0
>  testsuite/test-modprobe.c                     |  22 ++++
>  tools/modprobe.c                              | 111 +++++++++++-------
>  14 files changed, 98 insertions(+), 45 deletions(-)
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin
>  create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules
> 
> -- 
> 2.39.0
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] modprobe: Allow passing path to module
  2023-01-11 15:29 ` [PATCH 2/2] modprobe: Allow passing path to module Gustavo Sousa
@ 2023-01-12 21:40   ` Lucas De Marchi
  0 siblings, 0 replies; 10+ messages in thread
From: Lucas De Marchi @ 2023-01-12 21:40 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: linux-modules, Gustavo Sverzut Barbieri, Lucas De Marchi

On Wed, Jan 11, 2023 at 12:29:36PM -0300, Gustavo Sousa wrote:
>This is useful to kernel module developers for testing a just compiled
>module: instead of using insmod, they can load the module from the path
>while getting all the benefits of modprobe (e.g. module dependency
>resolution).
>
>Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
>---
> man/modprobe.xml                              |   5 +++
> testsuite/populate-modules.sh                 |   1 +
> .../lib/modules/4.4.4/modules.alias           |   1 +
> .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
> .../lib/modules/4.4.4/modules.builtin.bin     |   0
> .../lib/modules/4.4.4/modules.dep             |   1 +
> .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
> .../lib/modules/4.4.4/modules.devname         |   0
> .../lib/modules/4.4.4/modules.softdep         |   1 +
> .../lib/modules/4.4.4/modules.symbols         |   1 +
> .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
> .../module-from-path/proc/modules             |   0
> testsuite/test-modprobe.c                     |  22 ++++++++++++
> tools/modprobe.c                              |  34 ++++++++++++------
> 14 files changed, 56 insertions(+), 10 deletions(-)
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin
> create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules
>
>diff --git a/man/modprobe.xml b/man/modprobe.xml
>index db39c7a18bb7..615466977f6a 100644
>--- a/man/modprobe.xml
>+++ b/man/modprobe.xml
>@@ -115,6 +115,11 @@
>       kernel (in addition to any options listed in the configuration
>       file).
>     </para>
>+    <para>
>+      When loading modules, <replaceable>modulename</replaceable> can also
>+      be a path to the module. If the path is relative, it must
>+      explicitly start with "./".

we may extend this to mention that loading from a random location may fail
when the depmod database is not updated.  The depmod database is usually
updated with kernel (or module) installation - the dependencies there may not be
up-to-date if a random path is used.


>+    </para>
>   </refsect1>
>
>   <refsect1><title>OPTIONS</title>
>diff --git a/testsuite/populate-modules.sh b/testsuite/populate-modules.sh
>index 099f02669156..652279eda728 100755
>--- a/testsuite/populate-modules.sh
>+++ b/testsuite/populate-modules.sh
>@@ -56,6 +56,7 @@ map=(
>     ["test-modprobe/alias-to-none/lib/modules/4.4.4/kernel/"]="mod-simple.ko"
>     ["test-modprobe/module-param-kcmdline/lib/modules/4.4.4/kernel/"]="mod-simple.ko"
>     ["test-modprobe/external/lib/modules/external/"]="mod-simple.ko"
>+    ["test-modprobe/module-from-path/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"
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
>new file mode 100644
>index 000000000000..ba76e1815af0
>--- /dev/null
>+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias
>@@ -0,0 +1 @@
>+# Aliases extracted from modules themselves.
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.alias.bin
>new file mode 100644
>index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
>GIT binary patch
>literal 12
>TcmdnM{w17&iGh)Ufq@4A6;A>Z
>
>literal 0
>HcmV?d00001
>
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.builtin.bin
>new file mode 100644
>index 000000000000..e69de29bb2d1
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
>new file mode 100644
>index 000000000000..e612900c5de7
>--- /dev/null
>+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep
>@@ -0,0 +1 @@
>+/lib/modules/external/mod-simple.ko:
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.dep.bin
>new file mode 100644
>index 0000000000000000000000000000000000000000..556e3c8142d5d85dba5b557474907f9f9dd99dcb
>GIT binary patch
>literal 73
>zcmdnM{w17&iGfjpfx$UHCB8T_w;(5#0SFjDgnmwDl74P}N@-4Nv3_brNorAEVh%_^
>S7ot!vJKu^SH}?Po0}lY-ZWUAj
>
>literal 0
>HcmV?d00001
>
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.devname
>new file mode 100644
>index 000000000000..e69de29bb2d1
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
>new file mode 100644
>index 000000000000..5554ccca7f9e
>--- /dev/null
>+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.softdep
>@@ -0,0 +1 @@
>+# Soft dependencies extracted from modules themselves.
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
>new file mode 100644
>index 000000000000..618c345f7e93
>--- /dev/null
>+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols
>@@ -0,0 +1 @@
>+# Aliases for symbols, used by symbol_request().
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-path/lib/modules/4.4.4/modules.symbols.bin
>new file mode 100644
>index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
>GIT binary patch
>literal 12
>TcmdnM{w17&iGh)Ufq@4A6;A>Z
>
>literal 0
>HcmV?d00001
>
>diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules b/testsuite/rootfs-pristine/test-modprobe/module-from-path/proc/modules
>new file mode 100644
>index 000000000000..e69de29bb2d1
>diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
>index 0255f1aaccb5..3f8a430c09e4 100644
>--- a/testsuite/test-modprobe.c
>+++ b/testsuite/test-modprobe.c
>@@ -422,4 +422,26 @@ DEFINE_TEST(modprobe_external,
> 	.modules_loaded = "mod-simple",
> 	);
>
>+static noreturn int modprobe_module_from_path(const struct test *t)
>+{
>+	const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
>+	const char *const args[] = {
>+		progname,
>+		"/home/foo/mod-simple.ko",
>+		NULL,
>+	};
>+
>+	test_spawn_prog(progname, args);
>+	exit(EXIT_FAILURE);
>+}

missing a test for relative path?

>+DEFINE_TEST(modprobe_module_from_path,
>+	.description = "check modprobe able to load module given as a direct path",
>+	.config = {
>+		[TC_UNAME_R] = "4.4.4",
>+		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-from-path",
>+		[TC_INIT_MODULE_RETCODES] = "",
>+	},
>+	.modules_loaded = "mod-simple",
>+	);
>+
> TESTSUITE_MAIN();
>diff --git a/tools/modprobe.c b/tools/modprobe.c
>index d4012fab39f8..3b7897c1b8e4 100644
>--- a/tools/modprobe.c
>+++ b/tools/modprobe.c
>@@ -614,14 +614,23 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
> 						const char *extra_options)
> {
> 	struct kmod_list *l, *list = NULL;
>+	struct kmod_module *mod = NULL;
> 	int err, flags = 0;
>
>-	err = kmod_module_new_from_lookup(ctx, alias, &list);
>-
>-	if (list == NULL || err < 0) {
>-		LOG("Module %s not found in directory %s\n", alias,
>-			ctx ? kmod_get_dirname(ctx) : "(missing)");
>-		return -ENOENT;
>+	if (strncmp(alias, "/", 1) == 0 || strncmp(alias, "./", 2) == 0) {

an alias may start with / or ./, so in theory there could be
regressions. At least in the kernel we have none:

$ cat /lib/modules/$(uname -r)/modules.alias | grep /
alias devname:net/tun tun
alias dmi:bvnIBM:*:pnIBM3850M2/x3950M2-* ibmaem
alias devname:mapper/control dm_mod
alias dmi:*:svnMICRO-STARINTERNATIONAL*:pnU90/U100:* msi_laptop
alias dmi*:svn*SAMSUNGELECTRONICSCO.,LTD.*:pn*300V3Z/300V4Z/300V5Z*: samsung_laptop
alias dmi*:svn*SAMSUNGELECTRONICSCO.,LTD.*:pn*730U3E/740U3E*: samsung_laptop
alias dmi*:svn*SAMSUNGELECTRONICSCO.,LTD.*:pn*NC210/NC110*:rn*NC210/NC110*: samsung_laptop
alias dmi*:svn*SAMSUNGELECTRONICSCO.,LTD.*:pn*NF110/NF210/NF310*:rn*NF110/NF210/NF310*: samsung_laptop
alias dmi*:svn*SAMSUNGELECTRONICSCO.,LTD.*:pn*N150/N210/N220*:rn*N150/N210/N220*: samsung_laptop
alias dmi*:svn*SAMSUNGELECTRONICSCO.,LTD.*:pn*N145P/N250P/N260P*:rn*N145P/N250P/N260P*: samsung_laptop
alias dmi*:svn*SAMSUNGELECTRONICSCO.,LTD.*:pn*R40/R41*:rn*R40/R41*: samsung_laptop
alias devname:vfio/vfio vfio
alias devname:snd/timer snd_timer
alias devname:snd/seq snd_seq

But it could come from user configuration in /etc. Realistically
speaking I've never seen a "user alias" with /, so I guess we can keep
it like this. If we see regressions, we may try to use a fallback
approach to kmod_module_new_from_lookup() if kmod_module_new_from_path()
fails with ENOENT.

>+		err = kmod_module_new_from_path(ctx, alias, &mod);
>+		if (err < 0) {
>+			LOG("Failed to get module from path %s: %s\n", alias,
>+				strerror(-err));
>+			return -ENOENT;
>+		}
>+	} else {
>+		err = kmod_module_new_from_lookup(ctx, alias, &list);
>+		if (list == NULL || err < 0) {
>+			LOG("Module %s not found in directory %s\n", alias,
>+				ctx ? kmod_get_dirname(ctx) : "(missing)");
>+			return -ENOENT;
>+		}
> 	}
>
> 	if (strip_modversion || force)
>@@ -642,13 +651,18 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
> 	if (first_time)
> 		flags |= KMOD_PROBE_FAIL_ON_LOADED;
>
>-	kmod_list_foreach(l, list) {
>-		struct kmod_module *mod = kmod_module_get_module(l);
>+	/* If module is loaded from path */
>+	if (mod != NULL) {
> 		err = insmod_insert(mod, flags, extra_options);
> 		kmod_module_unref(mod);
>+	} else {
>+		kmod_list_foreach(l, list) {
>+			mod = kmod_module_get_module(l);
>+			err = insmod_insert(mod, flags, extra_options);
>+			kmod_module_unref(mod);
>+		}
>+		kmod_module_unref_list(list);
> 	}
>-
>-	kmod_module_unref_list(list);

feel free to add a Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
with the changes mentioned above.

thanks
Lucas De Marchi

> 	return err;
> }
>
>-- 
>2.39.0
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 0/3] Allow passing module files to modprobe
  2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
                   ` (2 preceding siblings ...)
  2023-01-11 15:33 ` [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
@ 2023-01-13 21:37 ` Gustavo Sousa
  2023-01-14  0:50   ` Lucas De Marchi
  2023-01-13 21:37 ` [PATCH v2 1/3] testsuite: Wrap chdir() Gustavo Sousa
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-13 21:37 UTC (permalink / raw)
  To: linux-modules; +Cc: Lucas De Marchi, Gustavo Sousa

This patch series allows modprobe to be called with a direct path to a
module object.

v2:
  - Add a patch to wrap chdir().
  - Add test for relative path as well. (Lucas)
  - Add note warning about modules with dependencies not matching the
    installed depmod database. (Lucas)

Gustavo Sousa (3):
  testsuite: Wrap chdir()
  modprobe: Move insertion block into separate function
  modprobe: Allow passing path to module

 man/modprobe.xml                              |   7 ++
 testsuite/path.c                              |   1 +
 testsuite/populate-modules.sh                 |   2 +
 .../lib/modules/4.4.4/modules.alias           |   1 +
 .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
 .../lib/modules/4.4.4/modules.builtin.bin     |   0
 .../lib/modules/4.4.4/modules.dep             |   1 +
 .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
 .../lib/modules/4.4.4/modules.devname         |   0
 .../lib/modules/4.4.4/modules.softdep         |   1 +
 .../lib/modules/4.4.4/modules.symbols         |   1 +
 .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
 .../module-from-abspath/proc/modules          |   0
 .../lib/modules/4.4.4/modules.alias           |   1 +
 .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
 .../lib/modules/4.4.4/modules.builtin.bin     |   0
 .../lib/modules/4.4.4/modules.dep             |   1 +
 .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
 .../lib/modules/4.4.4/modules.devname         |   0
 .../lib/modules/4.4.4/modules.softdep         |   1 +
 .../lib/modules/4.4.4/modules.symbols         |   1 +
 .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
 .../module-from-relpath/proc/modules          |   0
 testsuite/test-modprobe.c                     |  50 ++++++++
 tools/modprobe.c                              | 111 +++++++++++-------
 25 files changed, 134 insertions(+), 45 deletions(-)
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/proc/modules
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/proc/modules

-- 
2.39.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2 1/3] testsuite: Wrap chdir()
  2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
                   ` (3 preceding siblings ...)
  2023-01-13 21:37 ` [PATCH v2 0/3] " Gustavo Sousa
@ 2023-01-13 21:37 ` Gustavo Sousa
  2023-01-13 21:37 ` [PATCH v2 2/3] modprobe: Move insertion block into separate function Gustavo Sousa
  2023-01-13 21:37 ` [PATCH v2 3/3] modprobe: Allow passing path to module Gustavo Sousa
  6 siblings, 0 replies; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-13 21:37 UTC (permalink / raw)
  To: linux-modules; +Cc: Lucas De Marchi, Gustavo Sousa

One of the tests in an upcoming patch will need to change into a
specific directory to test loading a module from a relative path.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 testsuite/path.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/testsuite/path.c b/testsuite/path.c
index 964d33eb25a0..c1ae4986b865 100644
--- a/testsuite/path.c
+++ b/testsuite/path.c
@@ -185,6 +185,7 @@ TS_EXPORT int prefix ## stat ## suffix (int ver,	    \
 }
 
 WRAP_1ARG(DIR*, NULL, opendir);
+WRAP_1ARG(int, -1, chdir);
 
 WRAP_2ARGS(FILE*, NULL, fopen, const char*);
 WRAP_2ARGS(FILE*, NULL, fopen64, const char*);
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 2/3] modprobe: Move insertion block into separate function
  2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
                   ` (4 preceding siblings ...)
  2023-01-13 21:37 ` [PATCH v2 1/3] testsuite: Wrap chdir() Gustavo Sousa
@ 2023-01-13 21:37 ` Gustavo Sousa
  2023-01-13 21:37 ` [PATCH v2 3/3] modprobe: Allow passing path to module Gustavo Sousa
  6 siblings, 0 replies; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-13 21:37 UTC (permalink / raw)
  To: linux-modules; +Cc: Lucas De Marchi, Gustavo Sousa

That same logic will be used for enabling modprobe for paths in the next
patch. As such, prepare for that by extracting that block into its own
function.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
 tools/modprobe.c | 77 ++++++++++++++++++++++++++----------------------
 1 file changed, 42 insertions(+), 35 deletions(-)

diff --git a/tools/modprobe.c b/tools/modprobe.c
index 3240c2b72edd..d4012fab39f8 100644
--- a/tools/modprobe.c
+++ b/tools/modprobe.c
@@ -569,15 +569,53 @@ static void print_action(struct kmod_module *m, bool install,
 		printf("insmod %s %s\n", kmod_module_get_path(m), options);
 }
 
+static int insmod_insert(struct kmod_module *mod, int flags,
+				const char *extra_options)
+{
+	int err = 0;
+	void (*show)(struct kmod_module *m, bool install,
+						const char *options) = NULL;
+
+	if (do_show || verbose > DEFAULT_VERBOSE)
+		show = &print_action;
+
+	if (lookup_only)
+		printf("%s\n", kmod_module_get_name(mod));
+	else
+		err = kmod_module_probe_insert_module(mod, flags,
+				extra_options, NULL, NULL, show);
+
+	if (err >= 0)
+		/* ignore flag return values such as a mod being blacklisted */
+		err = 0;
+	else {
+		switch (err) {
+		case -EEXIST:
+			ERR("could not insert '%s': Module already in kernel\n",
+						kmod_module_get_name(mod));
+			break;
+		case -ENOENT:
+			ERR("could not insert '%s': Unknown symbol in module, "
+					"or unknown parameter (see dmesg)\n",
+					kmod_module_get_name(mod));
+			break;
+		default:
+			ERR("could not insert '%s': %s\n",
+					kmod_module_get_name(mod),
+					strerror(-err));
+			break;
+		}
+	}
+
+	return err;
+}
+
 static int insmod(struct kmod_ctx *ctx, const char *alias,
 						const char *extra_options)
 {
 	struct kmod_list *l, *list = NULL;
 	int err, flags = 0;
 
-	void (*show)(struct kmod_module *m, bool install,
-						const char *options) = NULL;
-
 	err = kmod_module_new_from_lookup(ctx, alias, &list);
 
 	if (list == NULL || err < 0) {
@@ -596,8 +634,6 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 		flags |= KMOD_PROBE_IGNORE_LOADED;
 	if (dry_run)
 		flags |= KMOD_PROBE_DRY_RUN;
-	if (do_show || verbose > DEFAULT_VERBOSE)
-		show = &print_action;
 
 	flags |= KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY;
 
@@ -608,36 +644,7 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 
 	kmod_list_foreach(l, list) {
 		struct kmod_module *mod = kmod_module_get_module(l);
-
-		if (lookup_only)
-			printf("%s\n", kmod_module_get_name(mod));
-		else {
-			err = kmod_module_probe_insert_module(mod, flags,
-					extra_options, NULL, NULL, show);
-		}
-
-		if (err >= 0)
-			/* ignore flag return values such as a mod being blacklisted */
-			err = 0;
-		else {
-			switch (err) {
-			case -EEXIST:
-				ERR("could not insert '%s': Module already in kernel\n",
-							kmod_module_get_name(mod));
-				break;
-			case -ENOENT:
-				ERR("could not insert '%s': Unknown symbol in module, "
-						"or unknown parameter (see dmesg)\n",
-						kmod_module_get_name(mod));
-				break;
-			default:
-				ERR("could not insert '%s': %s\n",
-						kmod_module_get_name(mod),
-						strerror(-err));
-				break;
-			}
-		}
-
+		err = insmod_insert(mod, flags, extra_options);
 		kmod_module_unref(mod);
 	}
 
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v2 3/3] modprobe: Allow passing path to module
  2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
                   ` (5 preceding siblings ...)
  2023-01-13 21:37 ` [PATCH v2 2/3] modprobe: Move insertion block into separate function Gustavo Sousa
@ 2023-01-13 21:37 ` Gustavo Sousa
  6 siblings, 0 replies; 10+ messages in thread
From: Gustavo Sousa @ 2023-01-13 21:37 UTC (permalink / raw)
  To: linux-modules; +Cc: Lucas De Marchi, Gustavo Sousa

This is useful to kernel module developers for testing a just compiled
module: instead of using insmod, they can load the module from the path
while getting all the benefits of modprobe (e.g. module dependency
resolution).

v2:
  - Add test for relative path as well. (Lucas)
  - Add note warning about modules with dependencies not matching the
    installed depmod database. (Lucas)

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
---
 man/modprobe.xml                              |   7 +++
 testsuite/populate-modules.sh                 |   2 +
 .../lib/modules/4.4.4/modules.alias           |   1 +
 .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
 .../lib/modules/4.4.4/modules.builtin.bin     |   0
 .../lib/modules/4.4.4/modules.dep             |   1 +
 .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
 .../lib/modules/4.4.4/modules.devname         |   0
 .../lib/modules/4.4.4/modules.softdep         |   1 +
 .../lib/modules/4.4.4/modules.symbols         |   1 +
 .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
 .../module-from-abspath/proc/modules          |   0
 .../lib/modules/4.4.4/modules.alias           |   1 +
 .../lib/modules/4.4.4/modules.alias.bin       | Bin 0 -> 12 bytes
 .../lib/modules/4.4.4/modules.builtin.bin     |   0
 .../lib/modules/4.4.4/modules.dep             |   1 +
 .../lib/modules/4.4.4/modules.dep.bin         | Bin 0 -> 73 bytes
 .../lib/modules/4.4.4/modules.devname         |   0
 .../lib/modules/4.4.4/modules.softdep         |   1 +
 .../lib/modules/4.4.4/modules.symbols         |   1 +
 .../lib/modules/4.4.4/modules.symbols.bin     | Bin 0 -> 12 bytes
 .../module-from-relpath/proc/modules          |   0
 testsuite/test-modprobe.c                     |  50 ++++++++++++++++++
 tools/modprobe.c                              |  34 ++++++++----
 24 files changed, 91 insertions(+), 10 deletions(-)
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-abspath/proc/modules
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.builtin.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.devname
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.softdep
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols.bin
 create mode 100644 testsuite/rootfs-pristine/test-modprobe/module-from-relpath/proc/modules

diff --git a/man/modprobe.xml b/man/modprobe.xml
index db39c7a18bb7..91f9e27997cd 100644
--- a/man/modprobe.xml
+++ b/man/modprobe.xml
@@ -115,6 +115,13 @@
       kernel (in addition to any options listed in the configuration
       file).
     </para>
+    <para>
+      When loading modules, <replaceable>modulename</replaceable> can also
+      be a path to the module. If the path is relative, it must
+      explicitly start with "./". Note that this may fail when using a
+      path to a module with dependencies not matching the installed depmod
+      database.
+    </para>
   </refsect1>
 
   <refsect1><title>OPTIONS</title>
diff --git a/testsuite/populate-modules.sh b/testsuite/populate-modules.sh
index 099f02669156..aa6d5c28fb0f 100755
--- a/testsuite/populate-modules.sh
+++ b/testsuite/populate-modules.sh
@@ -56,6 +56,8 @@ map=(
     ["test-modprobe/alias-to-none/lib/modules/4.4.4/kernel/"]="mod-simple.ko"
     ["test-modprobe/module-param-kcmdline/lib/modules/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"
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias
new file mode 100644
index 000000000000..ba76e1815af0
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias
@@ -0,0 +1 @@
+# Aliases extracted from modules themselves.
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.alias.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.builtin.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.builtin.bin
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep
new file mode 100644
index 000000000000..e612900c5de7
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep
@@ -0,0 +1 @@
+/lib/modules/external/mod-simple.ko:
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.dep.bin
new file mode 100644
index 0000000000000000000000000000000000000000..556e3c8142d5d85dba5b557474907f9f9dd99dcb
GIT binary patch
literal 73
zcmdnM{w17&iGfjpfx$UHCB8T_w;(5#0SFjDgnmwDl74P}N@-4Nv3_brNorAEVh%_^
S7ot!vJKu^SH}?Po0}lY-ZWUAj

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.devname b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.devname
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.softdep b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.softdep
new file mode 100644
index 000000000000..5554ccca7f9e
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.softdep
@@ -0,0 +1 @@
+# Soft dependencies extracted from modules themselves.
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols
new file mode 100644
index 000000000000..618c345f7e93
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols
@@ -0,0 +1 @@
+# Aliases for symbols, used by symbol_request().
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/lib/modules/4.4.4/modules.symbols.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/proc/modules b/testsuite/rootfs-pristine/test-modprobe/module-from-abspath/proc/modules
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias
new file mode 100644
index 000000000000..ba76e1815af0
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias
@@ -0,0 +1 @@
+# Aliases extracted from modules themselves.
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.alias.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.builtin.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.builtin.bin
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep
new file mode 100644
index 000000000000..e612900c5de7
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep
@@ -0,0 +1 @@
+/lib/modules/external/mod-simple.ko:
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.dep.bin
new file mode 100644
index 0000000000000000000000000000000000000000..556e3c8142d5d85dba5b557474907f9f9dd99dcb
GIT binary patch
literal 73
zcmdnM{w17&iGfjpfx$UHCB8T_w;(5#0SFjDgnmwDl74P}N@-4Nv3_brNorAEVh%_^
S7ot!vJKu^SH}?Po0}lY-ZWUAj

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.devname b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.devname
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.softdep b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.softdep
new file mode 100644
index 000000000000..5554ccca7f9e
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.softdep
@@ -0,0 +1 @@
+# Soft dependencies extracted from modules themselves.
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols
new file mode 100644
index 000000000000..618c345f7e93
--- /dev/null
+++ b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols
@@ -0,0 +1 @@
+# Aliases for symbols, used by symbol_request().
diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols.bin b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/lib/modules/4.4.4/modules.symbols.bin
new file mode 100644
index 0000000000000000000000000000000000000000..7075435f6268c4d815aec093d61e26647666ba76
GIT binary patch
literal 12
TcmdnM{w17&iGh)Ufq@4A6;A>Z

literal 0
HcmV?d00001

diff --git a/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/proc/modules b/testsuite/rootfs-pristine/test-modprobe/module-from-relpath/proc/modules
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/testsuite/test-modprobe.c b/testsuite/test-modprobe.c
index 0255f1aaccb5..3ddb976d920a 100644
--- a/testsuite/test-modprobe.c
+++ b/testsuite/test-modprobe.c
@@ -422,4 +422,54 @@ DEFINE_TEST(modprobe_external,
 	.modules_loaded = "mod-simple",
 	);
 
+static noreturn int modprobe_module_from_abspath(const struct test *t)
+{
+	const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
+	const char *const args[] = {
+		progname,
+		"/home/foo/mod-simple.ko",
+		NULL,
+	};
+
+	test_spawn_prog(progname, args);
+	exit(EXIT_FAILURE);
+}
+DEFINE_TEST(modprobe_module_from_abspath,
+	.description = "check modprobe able to load module given as an absolute path",
+	.config = {
+		[TC_UNAME_R] = "4.4.4",
+		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-from-abspath",
+		[TC_INIT_MODULE_RETCODES] = "",
+	},
+	.modules_loaded = "mod-simple",
+	);
+
+static noreturn int modprobe_module_from_relpath(const struct test *t)
+{
+	const char *progname = ABS_TOP_BUILDDIR "/tools/modprobe";
+	const char *const args[] = {
+		progname,
+		"./mod-simple.ko",
+		NULL,
+	};
+
+	if (chdir("/home/foo") != 0) {
+		perror("failed to change into /home/foo");
+		exit(EXIT_FAILURE);
+	}
+
+	test_spawn_prog(progname, args);
+	exit(EXIT_FAILURE);
+}
+DEFINE_TEST(modprobe_module_from_relpath,
+	.description = "check modprobe able to load module given as a relative path",
+	.config = {
+		[TC_UNAME_R] = "4.4.4",
+		[TC_ROOTFS] = TESTSUITE_ROOTFS "test-modprobe/module-from-relpath",
+		[TC_INIT_MODULE_RETCODES] = "",
+	},
+	.need_spawn = true,
+	.modules_loaded = "mod-simple",
+	);
+
 TESTSUITE_MAIN();
diff --git a/tools/modprobe.c b/tools/modprobe.c
index d4012fab39f8..3b7897c1b8e4 100644
--- a/tools/modprobe.c
+++ b/tools/modprobe.c
@@ -614,14 +614,23 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 						const char *extra_options)
 {
 	struct kmod_list *l, *list = NULL;
+	struct kmod_module *mod = NULL;
 	int err, flags = 0;
 
-	err = kmod_module_new_from_lookup(ctx, alias, &list);
-
-	if (list == NULL || err < 0) {
-		LOG("Module %s not found in directory %s\n", alias,
-			ctx ? kmod_get_dirname(ctx) : "(missing)");
-		return -ENOENT;
+	if (strncmp(alias, "/", 1) == 0 || strncmp(alias, "./", 2) == 0) {
+		err = kmod_module_new_from_path(ctx, alias, &mod);
+		if (err < 0) {
+			LOG("Failed to get module from path %s: %s\n", alias,
+				strerror(-err));
+			return -ENOENT;
+		}
+	} else {
+		err = kmod_module_new_from_lookup(ctx, alias, &list);
+		if (list == NULL || err < 0) {
+			LOG("Module %s not found in directory %s\n", alias,
+				ctx ? kmod_get_dirname(ctx) : "(missing)");
+			return -ENOENT;
+		}
 	}
 
 	if (strip_modversion || force)
@@ -642,13 +651,18 @@ static int insmod(struct kmod_ctx *ctx, const char *alias,
 	if (first_time)
 		flags |= KMOD_PROBE_FAIL_ON_LOADED;
 
-	kmod_list_foreach(l, list) {
-		struct kmod_module *mod = kmod_module_get_module(l);
+	/* If module is loaded from path */
+	if (mod != NULL) {
 		err = insmod_insert(mod, flags, extra_options);
 		kmod_module_unref(mod);
+	} else {
+		kmod_list_foreach(l, list) {
+			mod = kmod_module_get_module(l);
+			err = insmod_insert(mod, flags, extra_options);
+			kmod_module_unref(mod);
+		}
+		kmod_module_unref_list(list);
 	}
-
-	kmod_module_unref_list(list);
 	return err;
 }
 
-- 
2.39.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2 0/3] Allow passing module files to modprobe
  2023-01-13 21:37 ` [PATCH v2 0/3] " Gustavo Sousa
@ 2023-01-14  0:50   ` Lucas De Marchi
  0 siblings, 0 replies; 10+ messages in thread
From: Lucas De Marchi @ 2023-01-14  0:50 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: linux-modules

On Fri, Jan 13, 2023 at 06:37:42PM -0300, Gustavo Sousa wrote:
>This patch series allows modprobe to be called with a direct path to a
>module object.
>
>v2:
>  - Add a patch to wrap chdir().
>  - Add test for relative path as well. (Lucas)
>  - Add note warning about modules with dependencies not matching the
>    installed depmod database. (Lucas)

All patches applied, thanks

Lucas De Marchi

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-01-14  0:50 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-11 15:29 [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
2023-01-11 15:29 ` [PATCH 1/2] modprobe: Move insertion block into separate function Gustavo Sousa
2023-01-11 15:29 ` [PATCH 2/2] modprobe: Allow passing path to module Gustavo Sousa
2023-01-12 21:40   ` Lucas De Marchi
2023-01-11 15:33 ` [PATCH 0/2] Allow passing module files to modprobe Gustavo Sousa
2023-01-13 21:37 ` [PATCH v2 0/3] " Gustavo Sousa
2023-01-14  0:50   ` Lucas De Marchi
2023-01-13 21:37 ` [PATCH v2 1/3] testsuite: Wrap chdir() Gustavo Sousa
2023-01-13 21:37 ` [PATCH v2 2/3] modprobe: Move insertion block into separate function Gustavo Sousa
2023-01-13 21:37 ` [PATCH v2 3/3] modprobe: Allow passing path to module Gustavo Sousa

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.