Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Swaylock crashes if you spam enter #10

Closed
Jacotsu opened this issue Jan 16, 2019 · 9 comments
Closed

Swaylock crashes if you spam enter #10

Jacotsu opened this issue Jan 16, 2019 · 9 comments
Labels
bug Something isn't working security

Comments

@Jacotsu
Copy link

Jacotsu commented Jan 16, 2019

Swaylock crashes if you spam enter really fast and gives you full access to the desktop.

lock command

bindsym XF86ScreenSaver exec swaylock --scaling=fill -i ~/Pictures/22713368_10213619311424692_4943994771009049545_o.jpg

Even if i use the -e option i'm able to crash it.
The only unusual pam module that i use is pam_mount (but it has always worked fine)

System info and related logs following.

 OS: Arch Linux 
 Kernel: x86_64 Linux 4.20.0-arch1-1-ARCH
 Uptime: 3m
 Shell: bash 4.4.23
 Resolution: 1600x900
 WM: sway
 GTK Theme: "Adapta-Nokto-Eta" [GTK3]
 CPU: Intel Core i5-3320M @ 4x 3.3GHz [47.0°C]
 GPU: Mesa DRI Intel(R) Ivybridge Mobile 
 RAM: 1059MiB / 7791MiB
 Display Manager: GDM 3.30.2 (gdm-plymouth from aur)
Jan 16 01:15:50 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:50 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:50 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:50 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:50 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:48 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:48 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:48 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:48 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:48 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:47 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:47 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:47 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:47 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:47 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:45 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:45 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:45 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:45 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:45 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:43 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:43 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:43 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:43 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:43 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:42 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:42 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:42 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:42 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:42 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:40 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:40 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:40 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:40 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:40 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:38 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:38 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:38 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:38 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:38 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:36 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:36 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:36 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:36 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:36 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:34 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:34 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:34 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:34 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:34 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:33 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:33 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:33 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:33 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:33 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:31 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:31 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
Jan 16 01:15:31 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for update
Jan 16 01:15:31 codeWriter /usr/lib/gdm-wayland-session[30626]: 2019-01-16 01:15:31 - [sway/swaylock/pam.c:49] pam_authenticate failed
Jan 16 01:15:29 codeWriter swaylock[3398]: pam_unix(swaylock:auth): authentication failure; logname= uid=1000 euid=1000 tty= ruser= rhost=  user=jacotsu
Jan 16 01:15:29 codeWriter swaylock[3398]: pam_tally(swaylock:auth): Error opening /var/log/faillog for read
@Jacotsu
Copy link
Author

Jacotsu commented Jan 16, 2019

Just tried the pam tally module with a time delay on failed logins, it crashes anyway

@emersion
Copy link
Member

Please provide a stack trace. You can do so by running coredumpctl gdb and then bt full.

@Jacotsu
Copy link
Author

Jacotsu commented Jan 16, 2019

Please provide a stack trace. You can do so by running coredumpctl gdb and then bt full.

#0  0x00007f5426fe3c36 in  () at /usr/lib/libglib-2.0.so.0
#1  0x00007f5426fe3e1e in g_log_default_handler ()
    at /usr/lib/libglib-2.0.so.0
#2  0x00007f5426fe45c1 in g_logv () at /usr/lib/libglib-2.0.so.0
#3  0x00007f5426fe47e0 in g_log () at /usr/lib/libglib-2.0.so.0
#4  0x000055dd3651e546 in  ()
#5  0x00007f54270dd3c5 in g_closure_invoke ()
    at /usr/lib/libgobject-2.0.so.0
#6  0x00007f54270ca348 in  () at /usr/lib/libgobject-2.0.so.0
#7  0x00007f54270ce01e in g_signal_emit_valist ()
    at /usr/lib/libgobject-2.0.so.0
#8  0x00007f54270cea80 in g_signal_emit ()
    at /usr/lib/libgobject-2.0.so.0
#9  0x00007f542719bb8f in g_application_register ()
    at /usr/lib/libgio-2.0.so.0
#10 0x00007f542719ce27 in  () at /usr/lib/libgio-2.0.so.0
#11 0x00007f542719c89b in g_application_run ()
    at /usr/lib/libgio-2.0.so.0
#12 0x000055dd36526ef5 in _vala_main ()
--Type <RET> for more, q to quit, c to continue without paging--
#13 0x00007f5426dc7223 in __libc_start_main () at /usr/lib/libc.so.6
#14 0x000055dd3651d09e in _start ()
(gdb) bt full
#0  0x00007f5426fe3c36 in  () at /usr/lib/libglib-2.0.so.0
#1  0x00007f5426fe3e1e in g_log_default_handler () at /usr/lib/libglib-2.0.so.0
#2  0x00007f5426fe45c1 in g_logv () at /usr/lib/libglib-2.0.so.0
#3  0x00007f5426fe47e0 in g_log () at /usr/lib/libglib-2.0.so.0
#4  0x000055dd3651e546 in  ()
#5  0x00007f54270dd3c5 in g_closure_invoke () at /usr/lib/libgobject-2.0.so.0
#6  0x00007f54270ca348 in  () at /usr/lib/libgobject-2.0.so.0
#7  0x00007f54270ce01e in g_signal_emit_valist () at /usr/lib/libgobject-2.0.so.0
#8  0x00007f54270cea80 in g_signal_emit () at /usr/lib/libgobject-2.0.so.0
#9  0x00007f542719bb8f in g_application_register () at /usr/lib/libgio-2.0.so.0
#10 0x00007f542719ce27 in  () at /usr/lib/libgio-2.0.so.0
#11 0x00007f542719c89b in g_application_run () at /usr/lib/libgio-2.0.so.0
#12 0x000055dd36526ef5 in _vala_main ()
#13 0x00007f5426dc7223 in __libc_start_main () at /usr/lib/libc.so.6
#14 0x000055dd3651d09e in _start ()

The strange thing is only the window crashes but the terminal keeps going

jacotsu@codeWriter:~/Documents/programming/swaylock$swaylock 
2019-01-16 20:35:01 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:04 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:08 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:11 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:15 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:18 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:22 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:25 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:28 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:32 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:35 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:38 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:41 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:45 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:48 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:51 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:54 - [pam.c:49] pam_authenticate failed
2019-01-16 20:35:58 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:01 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:04 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:08 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:11 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:14 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:17 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:21 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:24 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:28 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:31 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:35 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:38 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:41 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:44 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:48 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:51 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:55 - [pam.c:49] pam_authenticate failed
2019-01-16 20:36:59 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:02 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:05 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:08 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:11 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:15 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:18 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:22 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:26 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:29 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:32 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:35 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:38 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:41 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:45 - [pam.c:49] pam_authenticate failed
^[2019-01-16 20:37:48 - [pam.c:49] pam_authenticate failed
^[2019-01-16 20:37:51 - [pam.c:49] pam_authenticate failed
^[2019-01-16 20:37:54 - [pam.c:49] pam_authenticate failed
2019-01-16 20:37:57 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:01 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:04 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:08 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:12 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:15 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:17 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:21 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:24 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:27 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:30 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:33 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:37 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:40 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:43 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:47 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:50 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:53 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:56 - [pam.c:49] pam_authenticate failed
2019-01-16 20:38:59 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:02 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:05 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:08 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:11 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:14 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:17 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:20 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:23 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:25 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:28 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:32 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:35 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:38 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:41 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:44 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:47 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:50 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:53 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:56 - [pam.c:49] pam_authenticate failed
2019-01-16 20:39:59 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:02 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:05 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:08 - [pam.c:49] pam_authenticate failed
^[2019-01-16 20:40:11 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:13 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:16 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:20 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:23 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:25 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:28 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:32 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:35 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:38 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:41 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:45 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:48 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:51 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:54 - [pam.c:49] pam_authenticate failed
2019-01-16 20:40:57 - [pam.c:49] pam_authenticate failed

@emersion
Copy link
Member

Okay, it seems the stack trace you provided is for a Vala app. Are you sure swaylock crashes? You can also run coredumpctl gdb -r to get a list of crashes.

@ddevault
Copy link
Member

You probably want coredumpctl gdb swaylock

@emersion
Copy link
Member

Okay, I can reproduce. What happens is that PAM blocks, but sway still sends input events. If you send enough events, it fills the socket buffer and disconnects the client:

error in client communication (pid 18399)

We should make sure to never block in swaylock.

@emersion emersion added the bug Something isn't working label Jan 16, 2019
@emersion
Copy link
Member

The fix is probably to authenticate with PAM in a child process, just like we do for non-PAM systems.

@Jacotsu
Copy link
Author

Jacotsu commented Jan 16, 2019

The fix is probably to authenticate with PAM in a child process, just like we do for non-PAM systems.

I've "fixed" the problem by implementing a barebones input debouncing.
Wouldn't the child process solution just leave you with a dead lockscreen?

@emersion
Copy link
Member

I've "fixed" the problem by implementing a barebones input debouncing.

It's still possible to trigger this issue, just need to type faster. ;)

Wouldn't the child process solution just leave you with a dead lockscreen?

Nope, it'll process all events in a non-blocking manner, so it'll fix completely this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working security
Development

No branches or pull requests

3 participants