GNU bug report logs - #68162
[PATCH] initrd: Parse kernel command line and pass module parameters

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: nathan <nathan_mail@HIDDEN>; Keywords: patch; dated Sun, 31 Dec 2023 04:20:02 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 31 Dec 2023 04:19:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Dec 30 23:19:37 2023
Received: from localhost ([127.0.0.1]:45444 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rJnIW-0008MT-Ge
	for submit <at> debbugs.gnu.org; Sat, 30 Dec 2023 23:19:37 -0500
Received: from lists.gnu.org ([2001:470:142::17]:50804)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <nathan_mail@HIDDEN>) id 1rJnIS-0008MD-P7
 for submit <at> debbugs.gnu.org; Sat, 30 Dec 2023 23:19:35 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <nathan_mail@HIDDEN>)
 id 1rJnIM-0006Pw-Ae
 for guix-patches@HIDDEN; Sat, 30 Dec 2023 23:19:26 -0500
Received: from mail.nborghese.com ([207.148.28.48])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <nathan_mail@HIDDEN>)
 id 1rJnIJ-0003Ni-M9
 for guix-patches@HIDDEN; Sat, 30 Dec 2023 23:19:25 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=062122; bh=lpJhD8Cs+aG+X
 7vMPHk5exYrp+PbDHMIxm+720PsnCg=; h=date:subject:to:from;
 d=nborghese.com; b=cQUoDiSUia/lk+fc6Mg8WjmkE3fueyQ+Ixpwx+hFnSwDwFVsj0N
 /imqLj9ayBo0LTQgqoyFU+d8boJG1MY024O7URpNU7m8Xqzqh4cSjCQCBIonevCQVCsLd9
 esBIcp84xFtAKcx/02cD6hF1056VBhpmCgwaZ0HGJoS+TUm0rA=
Received: by nborghese.com (OpenSMTPD) with ESMTPSA id 28837c8c
 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for <guix-patches@HIDDEN>;
 Sun, 31 Dec 2023 04:18:51 +0000 (UTC)
From: nathan <nathan_mail@HIDDEN>
To: guix-patches@HIDDEN
Subject: [PATCH] initrd: Parse kernel command line and pass module parameters
Date: Sat, 30 Dec 2023 23:14:10 -0500
Message-ID: <87edf3qa0v.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
Received-SPF: pass client-ip=207.148.28.48;
 envelope-from=nathan_mail@HIDDEN; helo=mail.nborghese.com
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

--=-=-=
Content-Type: text/plain

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


--=-=-=
Content-Type: text/x-patch; charset=utf-8
Content-Disposition: attachment;
 filename=0001-linux-modules-Allow-parameters-to-be-passed-to-kerne.patch
Content-Transfer-Encoding: quoted-printable

From 626930cbad11e7f5546589fc290b2c95fee97b80 Mon Sep 17 00:00:00 2001
Message-ID: <626930cbad11e7f5546589fc290b2c95fee97b80.1703992381.git.nathan=
_mail@HIDDEN>
From: nathan <nathan_mail@HIDDEN>
Date: Sat, 30 Dec 2023 22:10:26 -0500
Subject: [PATCH 1/3] linux-modules: Allow parameters to be passed to kernel
 modules

* gnu/build/linux-modules.scm (load-linux-module*): New parameter,
  `get-options', for getting kernel module parameters to give to Linux.

Change-Id: I8c4629a1404270fe641fef02a9fbbaeac4360e65
---
 gnu/build/linux-modules.scm | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index 12cb9c4ba6..c4950ea6d2 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -332,12 +332,15 @@ (define* (load-linux-module* file
                              #:key
                              (recursive? #t)
                              (lookup-module dot-ko)
-                             (black-list (module-black-list)))
+                             (black-list (module-black-list))
+                             (get-options (const "")))
   "Load Linux module from FILE, the name of a '.ko[.gz|.xz]' file; return =
true
 on success, false otherwise.  When RECURSIVE? is true, load its dependenci=
es
 first (=C3=A0 la 'modprobe'.)  The actual files containing modules depende=
d on are
 obtained by calling LOOKUP-MODULE with the module name.  Modules whose name
-appears in BLACK-LIST are not loaded."
+appears in BLACK-LIST are not loaded. GET-OPTIONS is a procedure that take=
s a
+normalized module name string input and returns a string containing the co=
mplete
+parameters to pass to the module. See init_module(2) for the parameters fo=
rmat."
   (define (black-listed? module)
     (let ((result (member module black-list)))
       (when result
@@ -350,20 +353,23 @@ (define* (load-linux-module* file
     (let ((dependencies (module-dependencies file)))
       (every (cut load-linux-module* <>
                   #:lookup-module lookup-module
-                  #:black-list black-list)
+                  #:black-list black-list
+                  #:get-options get-options)
              (map lookup-module dependencies))))
=20
   (and (not (black-listed? (file-name->module-name file)))
        (or (not recursive?)
            (load-dependencies file))
-       (let ((fd #f))
+       (let ((fd #f)
+             (options (get-options (file-name->module-name file))))
          (format (current-module-debugging-port)
-                 "loading Linux module from '~a'...~%" file)
+                 "loading Linux module from '~a' with options '~a'...~%" f=
ile
+                 options)
=20
          (catch 'system-error
            (lambda ()
              (set! fd (open-fdes file O_RDONLY))
-             (load-linux-module/fd fd)
+             (load-linux-module/fd fd options)
              (close-fdes fd)
              #t)
            (lambda args

base-commit: f24b14767d362a84e6469682b4fe303b50f4b589
--=20
2.41.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=0002-linux-modules-Parse-kernel-command-line-and-pass-mod.patch

From 903b2d5bcb1fa28121ffd46e70f6503559c0ec95 Mon Sep 17 00:00:00 2001
Message-ID: <903b2d5bcb1fa28121ffd46e70f6503559c0ec95.1703992381.git.nathan_mail@HIDDEN>
In-Reply-To: <626930cbad11e7f5546589fc290b2c95fee97b80.1703992381.git.nathan_mail@HIDDEN>
References: <626930cbad11e7f5546589fc290b2c95fee97b80.1703992381.git.nathan_mail@HIDDEN>
From: nathan <nathan_mail@HIDDEN>
Date: Sat, 30 Dec 2023 22:11:35 -0500
Subject: [PATCH 2/3] linux-modules: Parse kernel command line and pass module
 arguments

* gnu/build/linux-modules.scm
(parse-kernel-cmdline): New procedure.
(load-linux-modules-from-directory): Use parse-kernel-cmdline to parse command
line and supply options to load-linux-module*.

Change-Id: I11a181670d0da5ea08965a80c396358e50bf5048
---
 gnu/build/linux-modules.scm | 98 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 97 insertions(+), 1 deletion(-)

diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index c4950ea6d2..a54616b2d4 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -305,6 +305,93 @@ (define (modules-loaded)
       (((modules . _) ...)
        modules))))
 
+(define (parse-kernel-cmdline base)
+  "Input is the entire kernel command line, which is a space-delimited list of
+modulename.parameter=value parts.  The exact allowed syntax for the string is
+based on the kmod_config_parse_kcmdline function from modprobe.  Output is a
+vhash where the key is the module name as a string and the value is a list of
+strings in the form param=val (maybe with quotes in val).
+`normalize-module-name' is applied to the module names.
+
+Duplicate parameters are not removed.  The hyphen and underscore normalization
+in parameter names is not applied.  Empty module names are allowed."
+  (define (get-quoted start)
+    "It's similar to string-tokenize, but quoting is supported.  Two values
+are returned. First is the chunk of characters, second is the unused remainder
+of the string.  returns (values \"\" \"\") if the input string is just
+whitespace or there's an unterminated quote"
+    ;; strip whitespace at the start
+    (let ((start (substring
+                  start
+                  (or
+                   (string-skip start char-set:whitespace)
+                   (string-length start)))))
+      (let lp ((s start) (quoted? #f))
+        (if quoted?
+            (if (string-null? s)
+                (values "" "")
+                (lp (substring s 1) (not (eqv? (string-ref s 0) #\"))))
+            (if (or (string-null? s) (char-whitespace? (string-ref s 0)))
+                (values
+                 (substring start 0 (- (string-length start) (string-length s)))
+                 s)
+                (lp (substring s 1) (eqv? (string-ref s 0) #\")))))))
+  (let lp ((s base) (table vlist-null))
+    (call-with-values (lambda () (get-quoted s))
+      (lambda (strblock rest)
+        (if (string-null? strblock)
+            table
+            ;; get parameter name. it is mandatory.
+            (let ((dotpos (string-index strblock #\.)))
+              (if dotpos
+                  (let* ((equalpos (string-index strblock #\= dotpos))
+                         ;; modprobe allows a string like:
+                         ;; "modulename.param=val"
+                         ;; and then it converts it to
+                         ;; modulename.param="val"
+                         ;; This is the only case where a quote is
+                         ;; allowed outside of the value part.
+                         (is-bad-quoting (eqv? (string-ref strblock 0) #\"))
+                         (modulename
+                          (substring strblock (if is-bad-quoting 1 0) dotpos))
+                         (parampart
+                          (substring
+                           strblock
+                           (1+ dotpos)
+                           (or equalpos (string-length strblock)))))
+                    ;; whitespace is only allowed in value
+                    ;; no quotes allows in param segment
+                    ;; param cant have dot
+                    ;; module cant have equals
+                    (if (or
+                         (string-any (char-set-union
+                                      char-set:whitespace
+                                      (char-set #\" #\.))
+                                     parampart)
+                         (string-any (char-set-union
+                                      char-set:whitespace
+                                      (char-set #\=))
+                                     modulename))
+                        (lp rest table) ;; ignore and recur
+                        ;; add it to the table
+                        (let ((modulename (normalize-module-name modulename)))
+                          (lp rest
+                              (let ((oldval (vhash-assoc modulename table)))
+                                (vhash-cons
+                                 modulename
+                                 (cons
+                                  (if is-bad-quoting
+                                      (string-append
+                                       (substring strblock
+                                                  (1+ dotpos)
+                                                  (1+ equalpos))
+                                       "\"" (substring strblock (1+ equalpos)))
+                                      (substring strblock (1+ dotpos)))
+                                  (if oldval (cdr oldval) '()))
+                                 (vhash-delete modulename table)))))))
+                  (lp rest table))) ;; ignore and recur
+            )))))
+
 (define (module-black-list)
   "Return the black list of modules that must not be loaded.  This black list
 is specified using 'modprobe.blacklist=MODULE1,MODULE2,...' on the kernel
@@ -387,10 +474,19 @@ (define (load-linux-modules-from-directory modules directory)
 needed."
   (define module-name->file-name
     (module-name-lookup directory))
+  (define options-list
+    (parse-kernel-cmdline
+     (call-with-input-file "/proc/cmdline" get-string-all)))
+  (define (get-options modulename)
+    (let ((pair (vhash-assoc modulename options-list)))
+      (if pair
+          (string-join (cdr pair) " ")
+          "")))
 
   (for-each (lambda (module)
               (load-linux-module* (module-name->file-name module)
-                                  #:lookup-module module-name->file-name))
+                                  #:lookup-module module-name->file-name
+                                  #:get-options get-options))
             modules))
 
 
-- 
2.41.0


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=0003-linux-modules-Rewrite-module-black-list-with-parse-k.patch

From 0cd4f6fb19c96a6be4a0d0851e1cf6dfd7046a27 Mon Sep 17 00:00:00 2001
Message-ID: <0cd4f6fb19c96a6be4a0d0851e1cf6dfd7046a27.1703992381.git.nathan_mail@HIDDEN>
In-Reply-To: <626930cbad11e7f5546589fc290b2c95fee97b80.1703992381.git.nathan_mail@HIDDEN>
References: <626930cbad11e7f5546589fc290b2c95fee97b80.1703992381.git.nathan_mail@HIDDEN>
From: nathan <nathan_mail@HIDDEN>
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


--=-=-=
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=test.scm
Content-Transfer-Encoding: base64
Content-Description: manual testing code

OzsgdGVzdCBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcnNpbmcKCih1c2UtbW9kdWxlcyAoaWNlLTkg
dmxpc3QpKQoodXNlLW1vZHVsZXMgKHJucnMgYmFzZSkgKHNyZmkgc3JmaS0xKSAocm5ycyBzb3J0
aW5nKSkKCjs7IHRlc3Qgbm9ybWFsCjs7IHRlc3QgcXVvdGVkCjs7IHRlc3Qgc3RyYW5nZSBxdW90
ZWQKOzsgdGVzdCBpbnZhbGlkIHF1b3RlIGluIG1vZHVsZSBuYW1lCjs7IHRlc3QgaW52YWxpZCBz
cGFjZSBpbiBwYXJhbWV0ZXIKOzsgdGVzdCBpbnZhbGlkIHNwYWNlIGluIG1vZHVsZSBuYW1lCjs7
IHRlc3QgaW52YWxpZCBkb3QgaW4gcGFyYW1ldGVyIG5hbWUKOzsgdGVzdCBuZXdsaW5lIHN1cHBv
cnQgYW5kIG11bHRpcGxlIHF1b3RlcyBpbiBhIHNpbmdsZSB2YWx1ZQo7OyB0ZXN0IG1pc3Npbmcg
dmFsdWUsIGJ1dCBzdGlsbCB1c2luZyBxdW90ZXMuICh0aGlzIGlzIGludmFsaWQpCjs7IHRlc3Qg
ZW1wdHkgdmFsdWUgKHdpdGggcXV0ZXMpCjs7IHRlc3Qgbm8tdmFsdWUgb3B0aW9uCjs7IHRlc3Qg
bm9ybWFsaXplZCBtb2R1bGUgbmFtZQooZGVmaW5lIGNtZGxpbmUKICAiCm1vZC50ZXN0MT0xCm1v
ZC50ZXN0Mj1cImEgYiBjXCIKXCJtb2QudGVzdDM9YSBiIGNcIgpcImludmFsaWQucFwiPTMKXCJp
bnZhbGlkLmQgZD01XCIKXCJpbnZhbCBpZC5kZT01XCIKXCJpbnZhbGlkLmQuZT01XCIKXCJpbnZh
bD1pZC5kLmU9NVwiClwibW9kMi50ZXN0ND1hYmMKZGVmXCJcImdoaVwiamtsXCJuCm5vcFwicQoK
XCJpbnZhbGlkLnBhcmFtXCIKClwibW9kLnRlc3Q0PVwiCgpnbnUucmVwbAoKem5vcm1hbGl6ZS1t
ZS50ZXN0PTEiCiAgKQoKKGRlZmluZSBwYXJzZS1rZXJuZWwtY21kbGluZSAoQEAgKGdudSBidWls
ZCBsaW51eC1tb2R1bGVzKSBwYXJzZS1rZXJuZWwtY21kbGluZSkpCgooZGVmaW5lIG15YWxpc3Qg
KHZsaXN0LT5saXN0IChwYXJzZS1rZXJuZWwtY21kbGluZSBjbWRsaW5lKSkpCjs7IG5vdGhpbmcg
Zm9yIHRoZSAiaW52YWxpZCIgbW9kdWxlIHNob3VsZCBwYXNzCihhc3NlcnQgKG5vdCAoYW55IChs
YW1iZGEgKGEpIChzdHJpbmctcHJlZml4PyAiaW52IiAoY2FyIGEpKSkgbXlhbGlzdCkpKQoKKGxl
dCAoKHBhcnNlZGFyZ3MKICAgICAgIDs7IHNvcnQgdGhlIGFsaXN0IGVudHJpZXMgYnkgdGhlaXIg
a2V5cwogICAgICAgKGxpc3Qtc29ydAogICAgICAgIChsYW1iZGEgKGEgYikgKHN0cmluZzwgKGNh
ciBhKSAoY2FyIGIpKSkKICAgICAgICA7OyBzb3J0IHRoZSB2YWx1ZXMgb2YgZWFjaCBhbGlzdCBl
bnRyeQogICAgICAgIChtYXAKICAgICAgICAgKGxhbWJkYSAoYikKICAgICAgICAgICAoY29ucyAo
Y2FyIGIpIChsaXN0LXNvcnQgc3RyaW5nPCAoY2RyIGIpKSkpCiAgICAgICAgIG15YWxpc3QpKSkp
CiAgOzsoKEAgKGljZS05IHByZXR0eS1wcmludCkgcHJldHR5LXByaW50KSBwYXJzZWRhcmdzKQog
IChhc3NlcnQKICAgKGVxdWFsPwogICAgcGFyc2VkYXJncwogICAgJygKICAgICAgKCJnbnUiICJy
ZXBsIikKICAgICAgKCJtb2QiICJ0ZXN0MT0xIiAidGVzdDI9XCJhIGIgY1wiIiAidGVzdDM9XCJh
IGIgY1wiIiAidGVzdDQ9XCJcIiIpCiAgICAgICgibW9kMiIKICAgICAgICJ0ZXN0ND1cImFiYwpk
ZWZcIlwiZ2hpXCJqa2xcIm4Kbm9wXCJxIikKICAgICAgKCJ6bm9ybWFsaXplX21lIiAidGVzdD0x
IikKICAgICAgKSkpKQoKOzsgZmFpbCBiZWNhdXNlIHVudGVybWluYXRlZCBxdW90ZQooYXNzZXJ0
IChlcXVhbD8KICAgICAgICAgKHZsaXN0LT5saXN0IChwYXJzZS1rZXJuZWwtY21kbGluZSAiYWFh
LmJiYj1cImNjYyIpKQogICAgICAgICAnKCkpKQoKOzsgdGVzdCBwcm9wZXIgcGFyc2luZyB3aGVu
IGVuZCBvZiBzdHJpbmcgaXMgcmVhY2hlZAooYXNzZXJ0IChlcXVhbD8KICAgICAgICAgKHZsaXN0
LT5saXN0IChwYXJzZS1rZXJuZWwtY21kbGluZSAiYWFhLmJiYj1jY2MiKSkKICAgICAgICAgJygo
ImFhYSIgImJiYj1jY2MiKSkpKQoKKGRpc3BsYXkgInBhc3NlZFxuIikK
--=-=-=--




Acknowledgement sent to nathan <nathan_mail@HIDDEN>:
New bug report received and forwarded. Copy sent to guix-patches@HIDDEN. Full text available.
Report forwarded to guix-patches@HIDDEN:
bug#68162; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sat, 20 Jan 2024 12:30:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.