From: Fazlul Shahriar Date: Mon, 21 Oct 2019 16:18:27 +0000 (-0400) Subject: syscall: fix Clearenv on Plan 9 X-Git-Tag: go1.14beta1~609 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b284dac23250a2c0ad941d6e20de7d54ffa13253;p=gostls13.git 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 --- 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 {