Skip to content

Commit df92df4

Browse files
authored
fix(agent): filter out GOTRACEBACK=none (#16924)
With the switch to Go 1.24.1, our dogfood workspaces started setting `GOTRACEBACK=none` in the environment, resulting in missing stacktraces for users. This is due to the capability changes we do when `USE_CAP_NET_ADMIN=true`. https://github.com/coder/coder/blob/564b387262e5b768c503e5317242d9ab576395d6/provisionersdk/scripts/bootstrap_linux.sh#L60-L76 This most likely triggers a change in securitybits which sets `_AT_SECURE` for the process. https://github.com/golang/go/blob/a1ddbdd3ef8b739aab53f20d6ed0a61c3474cf12/src/runtime/os_linux.go#L297-L327 Which in turn triggers secure mode: https://github.com/golang/go/blob/a1ddbdd3ef8b739aab53f20d6ed0a61c3474cf12/src/runtime/security_unix.go This should not affect workspaces as template authors can still set the environment on the agent resource. See https://pkg.go.dev/runtime#hdr-Security
1 parent f01ee96 commit df92df4

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

agent/agentexec/cli_linux.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import (
1717
"golang.org/x/sys/unix"
1818
"golang.org/x/xerrors"
1919
"kernel.org/pub/linux/libs/security/libcap/cap"
20+
21+
"github.com/coder/coder/v2/agent/usershell"
2022
)
2123

2224
// CLI runs the agent-exec command. It should only be called by the cli package.
@@ -114,7 +116,8 @@ func CLI() error {
114116

115117
// Remove environment variables specific to the agentexec command. This is
116118
// especially important for environments that are attempting to develop Coder in Coder.
117-
env := os.Environ()
119+
ei := usershell.SystemEnvInfo{}
120+
env := ei.Environ()
118121
env = slices.DeleteFunc(env, func(e string) bool {
119122
return strings.HasPrefix(e, EnvProcPrioMgmt) ||
120123
strings.HasPrefix(e, EnvProcOOMScore) ||

agent/usershell/usershell.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,17 @@ func (SystemEnvInfo) User() (*user.User, error) {
5050
}
5151

5252
func (SystemEnvInfo) Environ() []string {
53-
return os.Environ()
53+
var env []string
54+
for _, e := range os.Environ() {
55+
// Ignore GOTRACEBACK=none, as it disables stack traces, it can
56+
// be set on the agent due to changes in capabilities.
57+
// https://pkg.go.dev/runtime#hdr-Security.
58+
if e == "GOTRACEBACK=none" {
59+
continue
60+
}
61+
env = append(env, e)
62+
}
63+
return env
5464
}
5565

5666
func (SystemEnvInfo) HomeDir() (string, error) {

agent/usershell/usershell_test.go

+9
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,13 @@ func TestGet(t *testing.T) {
4343
require.NotEmpty(t, shell)
4444
})
4545
})
46+
47+
t.Run("Remove GOTRACEBACK=none", func(t *testing.T) {
48+
t.Setenv("GOTRACEBACK", "none")
49+
ei := usershell.SystemEnvInfo{}
50+
env := ei.Environ()
51+
for _, e := range env {
52+
require.NotEqual(t, "GOTRACEBACK=none", e)
53+
}
54+
})
4655
}

0 commit comments

Comments
 (0)