diff mbox series

[bug#68162] initrd: Parse kernel command line and pass module parameters

Message ID 87edf3qa0v.fsf@nborghese.com
State New
Headers show
Series [bug#68162] initrd: Parse kernel command line and pass module parameters | expand

Commit Message

nathan Dec. 31, 2023, 4:14 a.m. UTC
GUIX's initrd code ignores the kernel command line and always passes no parameters to the modules it loads.
This fixes it with command line parsing code that is accurate to what modprobe does.
The user's module options, like somemodule.param=val, are properly passed now.
It also allows the modprobe.blacklist option to optionally be quoted and normalizes the module names given in the blacklist.
modprobe.blacklist="module1,mod-ule2" -> '("module1" "mod_ule2")

I tested passing module options with the command line in a VM and on my real system.
Tested blacklist code in a VM.

I've also attached my code I used to test the commandline parsing function manually.

fix bug#55907
https://lists.gnu.org/archive/html/bug-guix/2022-06/msg00157.html
diff mbox series

Patch

From 0cd4f6fb19c96a6be4a0d0851e1cf6dfd7046a27 Mon Sep 17 00:00:00 2001
Message-ID: <0cd4f6fb19c96a6be4a0d0851e1cf6dfd7046a27.1703992381.git.nathan_mail@nborghese.com>
In-Reply-To: <626930cbad11e7f5546589fc290b2c95fee97b80.1703992381.git.nathan_mail@nborghese.com>
References: <626930cbad11e7f5546589fc290b2c95fee97b80.1703992381.git.nathan_mail@nborghese.com>
From: nathan <nathan_mail@nborghese.com>
Date: Sat, 30 Dec 2023 22:12:19 -0500
Subject: [PATCH 3/3] linux-modules: Rewrite module-black-list with
 parse-kernel-cmdline

* gnu/build/linux-modules.scm
(module-black-list): Use parse-kernel-cmdline. Strip quotes from module names.
Normalize module names so they can be properly compared with strings from
file-name->module-name.

Change-Id: I318006f98844593863246fc89ed1703767794702
---
 gnu/build/linux-modules.scm | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index a54616b2d4..cbce3394e2 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -397,18 +397,25 @@  (define (module-black-list)
 is specified using 'modprobe.blacklist=MODULE1,MODULE2,...' on the kernel
 command line; it is honored by libkmod for users that pass
 'KMOD_PROBE_APPLY_BLACKLIST', which includes 'modprobe --use-blacklist' and
-udev."
-  (define parameter
-    "modprobe.blacklist=")
-
-  (let ((command (call-with-input-file "/proc/cmdline"
-                   get-string-all)))
-    (append-map (lambda (arg)
-                  (if (string-prefix? parameter arg)
-                      (string-tokenize (string-drop arg (string-length parameter))
-                                       %not-comma)
-                      '()))
-                (string-tokenize command))))
+udev.  The names in the returned list are normalized with `normalize-module-name'."
+  (define target-parameter "blacklist=")
+
+  (let* ((cmdline (parse-kernel-cmdline (call-with-input-file "/proc/cmdline"
+                                          get-string-all)))
+         (modprobe-pair (vhash-assoc "modprobe" cmdline)))
+    (if modprobe-pair
+        (map normalize-module-name
+         (append-map
+          (lambda (param)
+            (if (string-prefix? target-parameter param)
+                (string-tokenize
+                 (string-delete
+                  #\"
+                  (string-drop param (string-length target-parameter)))
+                 %not-comma)
+                '()))
+          (cdr modprobe-pair)))
+        '())))
 
 (define (module-loaded? module)
   "Return #t if MODULE is already loaded.  MODULE must be a Linux module name,
-- 
2.41.0