keybase / keybase/client

/keybase mount, on linux, behaves poorly - hangs `ls /`

Open
#26,864 16 comments 5 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
9.2k
Forks
1.3k
Avg merge
12h 58m
Merged PRs (30d)
56

Description

Keybase reliably causes `ls /` to hang.
* `ls /` -> hang
* `sudo ls /` -> ok
* `sudo ls -l /` -> hang
* `sudo strace -l /` -> hang, at `statx(..., "/keybase",...)`

Additionally, when I "**Quit** Keybase", which is unreasonably hidden and discouraged, echoes of dark pattern fashion, it doesn't clean up the mount, and the same issue still occurs!

```
statx(AT_FDCWD, "/usr", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_MODE|STATX_NLINK|STATX_UID|STATX_GID|STATX_MTIME|STATX_SIZE, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFDIR|0755, stx_size=14, ...}) = 0
lgetxattr("/usr", "security.selinux", 0x63ab931f4fe0, 255) = -1 ENODATA (No data available)
getxattr("/usr", "system.posix_acl_access", NULL, 0) = -1 ENODATA (No data available)
getxattr("/usr", "system.posix_acl_default", NULL, 0) = -1 ENODATA (No data available)
statx(AT_FDCWD, "/etc", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_MODE|STATX_NLINK|STATX_UID|STATX_GID|STATX_MTIME|STATX_SIZE, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFDIR|0755, stx_size=285, ...}) = 0
lgetxattr("/etc", "security.selinux", 0x63ab931f5000, 255) = -1 ENODATA (No data available)
getxattr("/etc", "system.posix_acl_access", NULL, 0) = -1 ENODATA (No data available)
getxattr("/etc", "system.posix_acl_default", NULL, 0) = -1 ENODATA (No data available)
statx(AT_FDCWD, "/run", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_MODE|STATX_NLINK|STATX_UID|STATX_GID|STATX_MTIME|STATX_SIZE, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=STATX_ATTR_MOUNT_ROOT, stx_mode=S_IFDIR|0755, stx_size=1160, ...}) = 0
lgetxattr("/run", "security.selinux", 0x63ab931f5020, 255) = -1 ENODATA (No data available)
getxattr("/run", "system.posix_acl_access", NULL, 0) = -1 ENODATA (No data available)
getxattr("/run", "system.posix_acl_default", NULL, 0) = -1 ENODATA (No data available)
statx(AT_FDCWD, "/keybase", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_MODE|STATX_NLINK|STATX_UID|STATX_GID|STATX_MTIME|STATX_SIZE, ^C
```

### Start with debugging
`[sudo] systemctl status keybase*` -> `keybase.mount` is the only systemd service installed.
```bash
$ sudo systemctl status keybase.mount
● keybase.mount - /keybase
Loaded: loaded (/proc/self/mountinfo)
Active: active (mounted) since Wed 2024-05-15 13:31:38 PDT; 1h 22min ago
Where: /keybase
What: keybase-redirector
CPU: 8ms
```

After **quitting** keybase, not merely _closing_ it, the `keybase.mount` is still mounted, but now throws errors,
```
$ ls /
ls: cannot access '/keybase': Transport endpoint is not connected
...
```
Resolve this with `systemctl stop keybase.mount`, _**only** after_ keybase has been quit.

### System Information
```
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
```

```
$ uname -rvs
Linux 6.5.0-28-generic #29~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Apr 4 14:39:20 UTC 2
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the hang on Ubuntu 22.04.4 with `ls /`, `strace`, and `systemctl status keybase.mount`; then inspect the keybase mount lifecycle around quitting the client. Done means root-directory listing no longer hangs and quitting Keybase cleans up the mount, without requiring a manual `systemctl stop`.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, linux
Domain
operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.