GNU bug report logs - #37308
guix weston-launch segfaults, /usr/bin/weston-launch does not -- why?

Previous Next

Package: guix;

Reported by: Bengt Richter <bokr <at> bokr.com>

Date: Thu, 5 Sep 2019 12:19:02 UTC

Severity: normal

To reply to this bug, email your comments to 37308 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#37308; Package guix. (Thu, 05 Sep 2019 12:19:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Bengt Richter <bokr <at> bokr.com>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Thu, 05 Sep 2019 12:19:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Bengt Richter <bokr <at> bokr.com>
To: New-Bug <bug-guix <at> gnu.org>
Subject: guix weston-launch segfaults, /usr/bin/weston-launch does not -- why?
Date: Thu, 5 Sep 2019 05:17:48 -0700
I used guix strace and /usr/bin/strace to try to diagnose weston-launch,
from grepping my history:

  531  /usr/bin/strace -fyk -o wes-launch-fyk $(which weston-launch|xargs readlink -f)
  553  /usr/bin/strace -fyk -o wes-launch-fyk-usr $(which /usr/bin/weston-launch|xargs readlink -f)

I used /usr/bin/strace because it still had the -k option:

$ diff -u <(/usr/bin/strace -h) <(strace -h)
--- /dev/fd/63	2019-09-05 01:38:07.086388920 -0700
+++ /dev/fd/62	2019-09-05 01:38:07.086388920 -0700
@@ -7,7 +7,6 @@
 Output format:
   -a column      alignment COLUMN for printing syscall results (default 40)
   -i             print instruction pointer at time of syscall
-  -k             obtain stack trace between each syscall
   -o file        send trace output to FILE instead of stderr
   -q             suppress messages about attaching, detaching, etc.
   -r             print relative timestamp
$ 

Could we have it back, or is it a security issue? Anyway, it does a LOT
of work, so it makes the trace very slow -- but still useful.

The first thing I noticed was a permission problem. 
 Note difference between trace logs (no EACCES errors for /usr/bin/weston-launch):

$ grep EACC wes-launch-fyk
3989  openat(AT_FDCWD, "/dev/input/event3", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event9", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event10", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event0", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event2", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event1", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event7", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event11", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event12", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event13", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event14", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event15", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event16", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event4", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event8", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event5", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  openat(AT_FDCWD, "/dev/input/event6", O_RDWR|O_NONBLOCK|O_CLOEXEC) = -1 EACCES (Permission denied)
3989  ioctl(4</dev/dri/card0>, DRM_IOCTL_DROP_MASTER, 0) = -1 EACCES (Permission denied)
$ 
$ grep EACC wes-launch-fyk-usr
$ 
(The above grep found no (! :) EACCES problems for /usr/bin/weston-launch in the strace ouput)

Here's my attempt to see what kind of errors happened:

$ egrep -ohe '-1 E.*' wes-launch-fyk|sort|uniq -c|sort -h
      1 -1 EPERM (Operation not permitted)
      2 -1 ENOTTY (Inappropriate ioctl for device)
     18 -1 EACCES (Permission denied)
     40 -1 EINVAL (Invalid argument)
    640 -1 ENOENT (No such file or directory)
$ 

EINVALs look like they may mostly be legitimate probes for input devices,
and ENOENTs are mostly walking through all the places to look for config data
-- which seems like someone could memoize away once at login time so a program
would usually just have to do a single am-I-newer-than-my-memoized-config-data check.

The /usr/bin/weston-launch succeeded in bringing up the gui weston/wayland desktop
with an icon for starting a terminal, so naturally it did a lot more, and bumped
into more things. Some look like bugs, but I'm not sure using /usr/bin/strace like

    /usr/bin/strace -fyk -o wes-launch-fyk $(which weston-launch|xargs readlink -f)

was not itself producing some errors. Amazing tool anyway :)

$ egrep -ohe '-1 E.*' wes-launch-fyk-usr|sort|uniq -c|sort -h
      1 -1 EBADF (Bad file descriptor)
      1 -1 EPERM (Operation not permitted)
      3 -1 ENOTTY (Inappropriate ioctl for device)
     68 -1 EAGAIN (Resource temporarily unavailable)
     86 -1 EINVAL (Invalid argument)
    984 -1 ENOENT (No such file or directory)
$
I included the -y option so you can see the files as </path/to/file> in the strace,
so it seems /dev/dri/card0 produced EPERM for both versions of weston-launch.

Idk what _IOC does  to /dev/tty1, but I guess the <anon_inode:[eventpoll]> might come from
exiting the gui desktop using Ctl-Alt-Backspace.

BTW, I have noticed  that on returning to console after such an exit, I lose write permission
to /dev/stderr -- don't know what that means, but I get it back if I log out and log back in.

$ egrep '(EBADF|EPERM|ENOTTY)' wes-launch-fyk wes-launch-fyk-usr
wes-launch-fyk:3989  ioctl(0</dev/tty1>, _IOC(_IOC_NONE, 0x4b, 0x51, 0), 0x1) = -1 ENOTTY (Inappropriate ioctl for device)
wes-launch-fyk:3990  ioctl(12</dev/dri/card0>, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, 0x7fffc5200270) = -1 EPERM (Operation not permitted)
wes-launch-fyk:3989  ioctl(0</dev/tty1>, _IOC(_IOC_NONE, 0x4b, 0x51, 0), 0) = -1 ENOTTY (Inappropriate ioctl for device)
wes-launch-fyk-usr:5421  ioctl(0</dev/tty1>, _IOC(_IOC_NONE, 0x4b, 0x51, 0), 0x1) = -1 ENOTTY (Inappropriate ioctl for device)
wes-launch-fyk-usr:5422  ioctl(15</dev/dri/card0>, DRM_IOCTL_I915_GEM_CONTEXT_SETPARAM, 0x7ffdb7571460) = -1 EPERM (Operation not permitted)
wes-launch-fyk-usr:5422  epoll_ctl(17<anon_inode:[eventpoll]>, EPOLL_CTL_DEL, 19, NULL) = -1 EBADF (Bad file descriptor)
wes-launch-fyk-usr:5421  ioctl(0</dev/tty1>, _IOC(_IOC_NONE, 0x4b, 0x51, 0), 0) = -1 ENOTTY (Inappropriate ioctl for device)
wes-launch-fyk-usr:5421  ioctl(0</dev/tty1>, DRM_IOCTL_DROP_MASTER, 0) = -1 ENOTTY (Inappropriate ioctl for device)
$

The output logged to the console tty1 can be extracted from the strace,
along with the segfault:

egrep '/dev/tty1|SEG' wes-launch-fyk|tail -20

3990  write(2</dev/tty1>, "event5: opening input device '/d"..., 83) = 83
3990  write(2</dev/tty1>, "[00:35:11.032] ", 15) = 15
3990  write(2</dev/tty1>, "event5  - failed to create input"..., 60) = 60
3989  write(2</dev/tty1>, "Error opening device /dev/input/"..., 58) = 58
3990  write(2</dev/tty1>, "[00:35:11.100] ", 15) = 15
3990  write(2</dev/tty1>, "event6: opening input device '/d"..., 83) = 83
3990  write(2</dev/tty1>, "[00:35:11.110] ", 15) = 15
3990  write(2</dev/tty1>, "event6  - failed to create input"..., 60) = 60
3990  write(2</dev/tty1>, "[00:35:11.136] ", 15) = 15
3990  write(2</dev/tty1>, "warning: no input devices on ent"..., 191) = 191
3990  write(2</dev/tty1>, "[00:35:11.144] ", 15) = 15
3990  write(2</dev/tty1>, "failed to create input devices\n", 31) = 31
3990  close(0</dev/tty1> <unfinished ...>
3990  --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7f2ee04e23c4} ---
3990  +++ killed by SIGSEGV (core dumped) +++
3989  wait4(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGSEGV && WCOREDUMP(s)}], 0, NULL) = 3990
3989  ioctl(0</dev/tty1>, _IOC(_IOC_NONE, 0x4b, 0x51, 0), 0) = -1 ENOTTY (Inappropriate ioctl for device)
3989  ioctl(0</dev/tty1>, KDSKBMODE, 0x3) = 0
3989  ioctl(0</dev/tty1>, KDSETMODE, 0) = 0
3989  ioctl(0</dev/tty1>, VT_SETMODE, 0x7ffeaa561f84) = 0

I still haven't nailed just where it happens, but I need some zs right now :)

Any help getting my guix weston-launch running would be greatly appreciated!

BTW, icecat sort of runs on top of /usr/bin/weston-launch, but it crashes seemingly on any save-as type of action,
blasting all the way back to the login console, not just back to the weston-terminal from which it was launched.

BTW2, I finally got icecat to show useful output after shotgunning like:

 guix package -i nss-certs
 guix upgrade icecat
 guix install fontconfig
 guix install libxfont
 guix install font-dejavu -->> this finally gave icecat a font
 guix install moka-icon-theme
 guix install hicolor-icon-theme
 guix install less
 guix package -i libsigsegv

I think it would be nice to be advised that font-dejavu may solve
the hex-box-font problem for a novice ;-)

installed mozjs also, but must have logged it elsewhere
(it's of course in guix package -l)

Anyway, TIA

Regards,
Bengt Richter





Information forwarded to bug-guix <at> gnu.org:
bug#37308; Package guix. (Thu, 05 Sep 2019 20:23:02 GMT) Full text and rfc822 format available.

Message #8 received at 37308 <at> debbugs.gnu.org (full text, mbox):

From: Tobias Geerinckx-Rice <me <at> tobias.gr>
To: Bengt Richter <bokr <at> bokr.com>
Cc: 37308 <at> debbugs.gnu.org
Subject: Re: bug#37308: guix weston-launch segfaults,
 /usr/bin/weston-launch does not -- why?
Date: Thu, 05 Sep 2019 22:22:34 +0200
[Message part 1 (text/plain, inline)]
Bengt,

Bengt Richter 写道:
> Could we have [strace -k] back, or is it a security issue?

Ask upstream, they disabled[0] it by default, but I can't see how 
it could ever be a ‘security issue’.  strace isn't installed 
setuid.

Thanks for noticing,

T G-R

[0]: 
https://github.com/strace/strace/blob/172dc2fedd23d4debf65252eb3aafe0df70a1567/NEWS#L200
[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 5 years and 325 days ago.

Previous Next


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