]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: fix closing of reordered FDs in plan9 ForkExec
authormiller <millerresearch@gmail.com>
Tue, 13 Dec 2022 10:43:23 +0000 (10:43 +0000)
committerGopher Robot <gobot@golang.org>
Tue, 13 Dec 2022 17:52:02 +0000 (17:52 +0000)
After dup'ing file descriptors in syscall.ProcAttr.Files to pass
to the exec'ed process, the logic for closing the old descriptors
was incorrect and could close the new descriptor instead.

Fixes #57180

Change-Id: I7725f21a465ffba57050fe4e36f3d36ba181cfb2
Reviewed-on: https://go-review.googlesource.com/c/go/+/457115
Run-TryBot: David du Colombier <0intro@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: David du Colombier <0intro@gmail.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
src/syscall/exec_plan9.go

index d6b7890f55137f44c019a28743d72ecfa6c1e362..8f28b5aa22adbefc2d7f18f356e7323e4c9aa51a 100644 (file)
@@ -276,7 +276,7 @@ dirloop:
 
        // Pass 3: close fd[i] if it was moved in the previous pass.
        for i = 0; i < len(fd); i++ {
-               if fd[i] >= 0 && fd[i] != int(i) {
+               if fd[i] >= len(fd) {
                        RawSyscall(SYS_CLOSE, uintptr(fd[i]), 0, 0)
                }
        }