summary refs log tree commit diff
diff options
context:
space:
mode:
authorChris Marusich <cmmarusich@gmail.com>2021-03-11 23:19:30 -0800
committerChris Marusich <cmmarusich@gmail.com>2021-03-15 21:22:43 -0700
commit341dfe7eda4972af0a027357015ea595314438b0 (patch)
treeb7dd45eab4f06e2b96bf1380bab1d0a6b618da93
parent8ec0ca8faff62f19426f22aeb1bd59a8950ca05a (diff)
downloadguix-341dfe7eda4972af0a027357015ea595314438b0.tar.gz
syscalls: mounts: Fix a matching bug.
On some systems, the columns in /proc/self/mountinfo look like this:

23 28 0:21 / /proc rw,nosuid,nodev,noexec,relatime shared:11 - proc proc rw

Before this change, the mounts procedure was written with the assumption that
the type and source could always be found in columns 8 and 9, respectively.
However, the proc(5) man page explains that there can be zero or more optional
fields starting at column 7 (e.g., "shared:11" above), so this assumption is
false in some situations.

* guix/build/syscalls.scm (mounts): Update the match pattern to use ellipsis
to match zero or more optional fields followed by a single hyphen.  Remove the
trailing ellipsis, since multiple ellipses are not allowed in the same level.
The proc(5) man page indicates that there are no additional columns, so it is
probably OK to match an exact number of columns at the end like this.
-rw-r--r--guix/build/syscalls.scm3
1 files changed, 2 insertions, 1 deletions
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 6ed11a0d69..4379768f5e 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -636,8 +636,9 @@ current process."
           (if (eof-object? line)
               (reverse result)
               (match (string-tokenize line)
+                ;; See the proc(5) man page for a description of the columns.
                 ((id parent-id major:minor root mount-point
-                     options _ type source _ ...)
+                     options _ ... "-" type source _)
                  (let ((devno (string->device-number major:minor)))
                    (loop (cons (%mount (octal-decode source)
                                        (octal-decode mount-point)