• Bug#1108549: procps: w segfaults when run as non-root user

    From Andrew Bower@21:1/5 to Andrew Bower on Wed Jul 23 23:40:01 2025
    Hi,

    On Mon, Jun 30, 2025 at 11:36:59PM +0100, Andrew Bower wrote:
    Running 'w' as a non-root user on i386 segfaults:

    $ gdb w
    GNU gdb (Debian 16.3-1) 16.3
    [...]
    This GDB was configured as "i686-linux-gnu".
    [...]
    (gdb) run
    Starting program: /usr/bin/w
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
    23:21:56 up 4 min, 0 users, load average: 0.74, 1.06, 0.52
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

    Program received signal SIGSEGV, Segmentation fault.
    Download failed: Invalid argument. Continuing without source file ./src/w.c. 0x00401979 in main (argc=<optimized out>, argv=<optimized out>) at src/w.c:1130
    warning: 1130 src/w.c: No such file or directory

    This reliably reproduces in the failing environment but not when run as root or
    on an amd64 host with kernel 6.12.27-1.

    The proximate cause seems to be that sessions is undefined and that sessions_list is then also used, undefined. This part of the bug is
    therefore not architecture-specific even if the crash is not generally reproduced yet.

    I attach a patch that fixes the segfault to advance the discussion.
    Personally I think this ought to be fixed for trixie.

    However, we are unfortunately not out of the woods: elogind is running
    on this host and root is able to see the sessions. So is 'who' as
    non-root with the newly libsystemd-ised coreutils:

    $ w
    21:26:33 up 10 min, 0 users, load average: 0.00, 0.10, 0.12
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT Segmentation fault
    $ debian/procps/usr/bin/w # with patch
    21:26:42 up 11 min, 0 users, load average: 0.00, 0.10, 0.12
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    $ sudo w
    Please touch the FIDO authenticator.
    21:26:50 up 11 min, 1 user, load average: 0.64, 0.23, 0.16
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    ajb85 pts/0 - 21:26 0.00s 0.03s 0.12s sudo w
    $ sudo debian/procps/usr/bin/w # with patch
    21:26:54 up 11 min, 1 user, load average: 0.59, 0.23, 0.16
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    ajb85 pts/0 - 21:26 0.00s 0.02s 0.06s sudo debian/procps/usr/bin/w
    $ who
    ajb85 seat0 2025-07-23 21:17
    ajb85 tty1 2025-07-23 21:17

    This secondary issue could of course be an elogingd problem so I am
    copying this message to the elogind package tracker for awareness.

    Thanks!

    From 3b519356a12c62e322287a2d0ffa0311da70f8a1 Mon Sep 17 00:00:00 2001
    From: Andrew Bower <[email protected]>
    Date: Wed, 23 Jul 2025 18:27:13 +0100
    Subject: [PATCH] Initialise sessions variable in w. (Closes: #1108549)

    ---
    debian/patches/w_terminal_mode | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/debian/patches/w_terminal_mode b/debian/patches/w_terminal_mode index 075a14f..e6e5a36 100644
    --- a/debian/patches/w_terminal_mode
    +++ b/debian/patches/w_terminal_mode
    @@ -19,11 +19,14 @@ Description: w: Add terminal mode
    screens so its not real big difference.
    * From/IP won't work for utmp systems
    .
    - This patch includes the upstreams original commit and the enhancement.
    + This patch includes the upstream's original commit and the enhancement.
    + .
    + Updated 2025-07-23 to avoid acting on the value of uninitialised sessions
    + variable.
    Author: Craig Small <[email protected]>
    Origin: upstream, https://gitlab.com/procps-ng/procps/-/commit/f53cc24d57085c87ebb1871b92c0069b72a60926
    Applied-Upstream: 4.0.6
    -Last-Update: 2025-04-14
    +Last-Update: 2025-07-23
    ---
    This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
    --- a/man/w.1
    @@ -485,7 +488,7 @@ This
  • From Andrew Bower@21:1/5 to Andrew Bower on Thu Jul 24 20:20:01 2025
    Control: tag -1 + patch

    On Wed, Jul 23, 2025 at 10:31:47PM +0100, Andrew Bower wrote:
    On Mon, Jun 30, 2025 at 11:36:59PM +0100, Andrew Bower wrote:
    [...]
    However, we are unfortunately not out of the woods: elogind is running
    on this host and root is able to see the sessions. So is 'who' as
    non-root with the newly libsystemd-ised coreutils:

    Done a bit more digging. A number of issues - sorry, I don't have time
    to split them out into appropriate bugs right now. The first is
    definitely for procps:

    1. Unitialised 'sessions' variable is a a bug on all systems which leads
    to a segfault on some. I'm now tagging this bug as having a patch.

    2. elogind not being queried. Is this an elogind issue? Should it give a
    different answer to sd_booted() or is this the wrong way to detect the
    seat management capability? 'who' does not have this problem - it
    somehow queries elogind anyway.

    procps then resorts to utmp.

    3. Some (vc) sessions not reported unless running as root, but the non-root
    user could read utmp. 'who' does not have this problem but then it
    probably didn't resort to reading utmp (see 2 above).

    4. Virtual console sessions reported as pts/# instead of tty# in utmp - I
    guess we can blame login for that but we're off on a tangent now: 1-3 are
    more important to sort out.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)