guix_mirror_bot pushed a commit to branch next-master
in repository guix.

commit 2d29190198081ce2d900a359c3917bc4f375092a
Author: Yelninei <[email protected]>
AuthorDate: Sun Dec 28 10:49:40 2025 +0000

    gnu: gnumach: Don't truncate kernel messages.
    
    * gnu/packages/patches/gnumach-kmsg-overflow.patch: New patch
    * gnu/local.mk (dist_path_DATA): Register patch.
    * gnu/packages/hurd.scm (gnumach): Add the patch.
    
    Change-Id: Ibc75e9374426fe4aacbc94c1265d7dbb77386afa
    Signed-off-by: Ludovic Courtès <[email protected]>
---
 gnu/local.mk                                     |  1 +
 gnu/packages/hurd.scm                            |  3 +-
 gnu/packages/patches/gnumach-kmsg-overflow.patch | 59 ++++++++++++++++++++++++
 3 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index cc3312b0bf..208dca9fff 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1501,6 +1501,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/gnome-tweaks-search-paths.patch         \
   %D%/packages/patches/gnulib-bootstrap.patch                  \
   %D%/packages/patches/gnumach-div0.patch                      \
+  %D%/packages/patches/gnumach-kmsg-overflow.patch             \
   %D%/packages/patches/gnumach-version.patch                   \
   %D%/packages/patches/gnupg-default-pinentry.patch            \
   %D%/packages/patches/gnupg-1-build-with-gcc10.patch          \
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 917870e085..5416a5588e 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -278,7 +278,8 @@ Hurd-minimal package which are needed for both glibc and 
GCC.")
               (inherit (package-source gnumach-headers))
               (patches (append (origin-patches
                                 (package-source gnumach-headers))
-                               (search-patches "gnumach-div0.patch")))))
+                               (search-patches "gnumach-div0.patch"
+                                               
"gnumach-kmsg-overflow.patch")))))
     (arguments
      (substitute-keyword-arguments (package-arguments gnumach-headers)
        ((#:configure-flags flags ''())
diff --git a/gnu/packages/patches/gnumach-kmsg-overflow.patch 
b/gnu/packages/patches/gnumach-kmsg-overflow.patch
new file mode 100644
index 0000000000..8a1c2747e4
--- /dev/null
+++ b/gnu/packages/patches/gnumach-kmsg-overflow.patch
@@ -0,0 +1,59 @@
+Upstream Status: 
https://lists.gnu.org/archive/html/bug-hurd/2025-12/msg00043.html
+
+From 2c9868cd8974e75a028349aa1ec9b1417f5d6617 Mon Sep 17 00:00:00 2001
+From: Yelninei <[email protected]>
+Date: Thu, 2 Oct 2025 16:20:00 +0000
+Subject: [PATCH] kmsg: Don't truncate messages when overflowing.
+
+Instead of discarding a character drop the first unread one.
+---
+ device/kmsg.c | 21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+diff --git a/device/kmsg.c b/device/kmsg.c
+index e5b518e6..bb72930d 100644
+--- a/device/kmsg.c
++++ b/device/kmsg.c
+@@ -217,7 +217,6 @@ void
+ kmsg_putchar (int c)
+ {
+   io_req_t ior;
+-  int offset;
+   spl_t s = -1;
+ 
+   /* XXX: cninit is not called before cnputc is used. So call kmsginit
+@@ -230,22 +229,20 @@ kmsg_putchar (int c)
+ 
+   if (spl_init)
+     s = simple_lock_irq (&kmsg_lock);
+-  offset = kmsg_write_offset + 1;
+-  if (offset == KMSGBUFSIZE)
+-    offset = 0;
+-
+-  if (offset == kmsg_read_offset)
+-    {
+-      /* Discard C.  */
+-      if (spl_init)
+-      simple_unlock_irq (s, &kmsg_lock);
+-      return;
+-    }
+ 
+   kmsg_buffer[kmsg_write_offset++] = c;
+   if (kmsg_write_offset == KMSGBUFSIZE)
+     kmsg_write_offset = 0;
+ 
++  if(kmsg_write_offset == kmsg_read_offset)
++    {
++      /* Drop first unread char */
++      kmsg_read_offset++;
++      if (kmsg_read_offset == KMSGBUFSIZE)
++        kmsg_read_offset = 0;
++    }
++
++
+   while ((ior = (io_req_t) dequeue_head (&kmsg_read_queue)) != NULL)
+     iodone (ior);
+ 
+-- 
+2.52.0
+

Reply via email to