diff options
| author | Fazlul Shahriar <fshahriar@gmail.com> | 2019-10-21 12:18:27 -0400 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2019-10-23 20:13:18 +0000 |
| commit | b284dac23250a2c0ad941d6e20de7d54ffa13253 (patch) | |
| tree | 37b3c3aa346911fe481b25d5d48809de6c71c7e7 /src/syscall | |
| parent | 7833302a6258a65bc17526b54347601df5ff1c5e (diff) | |
| download | go-b284dac23250a2c0ad941d6e20de7d54ffa13253.tar.xz | |
syscall: fix Clearenv on Plan 9
Update #25234
Fixes #35083
Change-Id: Ida39516ab1c14a34a62c2232476a75e83f4e3f75
Reviewed-on: https://go-review.googlesource.com/c/go/+/202657
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/syscall')
| -rw-r--r-- | src/syscall/env_plan9.go | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/syscall/env_plan9.go b/src/syscall/env_plan9.go index 9a8a837e7d..e403a25e31 100644 --- a/src/syscall/env_plan9.go +++ b/src/syscall/env_plan9.go @@ -74,7 +74,21 @@ func Setenv(key, value string) error { } func Clearenv() { - RawSyscall(SYS_RFORK, RFCENVG, 0, 0) + // Creating a new environment group using rfork(RFCENVG) can race + // with access to files in /env (e.g. from Setenv or Getenv). + // Remove all environment variables in current environment group instead. + fd, err := open("/env", O_RDONLY) + if err != nil { + return + } + defer Close(fd) + files, err := readdirnames(fd) + if err != nil { + return + } + for _, key := range files { + Remove("/env/" + key) + } } func Unsetenv(key string) error { |
