]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: move ptrace setup to right before exec
authorJess Frazelle <me@jessfraz.com>
Tue, 15 Aug 2017 16:13:23 +0000 (12:13 -0400)
committerJessie Frazelle <me@jessfraz.com>
Wed, 23 Aug 2017 14:56:03 +0000 (14:56 +0000)
This will prevent any ptrace calls from getting trace output from the runtime
itself setting up after fork.

Fixes #21428.

Change-Id: I9d835bd5a8f404394eb6237679f2111a72e5bc17
Reviewed-on: https://go-review.googlesource.com/55811
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Avelino <t@avelino.xxx>
src/syscall/exec_linux.go

index fd87b86ff897571a040f7bd3380e86c06467461a..bfbe2b3d592090efd289d4be7aeb78e07b73ceba 100644 (file)
@@ -199,14 +199,6 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
                }
        }
 
-       // Enable tracing if requested.
-       if sys.Ptrace {
-               _, _, err1 = RawSyscall(SYS_PTRACE, uintptr(PTRACE_TRACEME), 0, 0)
-               if err1 != 0 {
-                       goto childerror
-               }
-       }
-
        // Session ID
        if sys.Setsid {
                _, _, err1 = RawSyscall(SYS_SETSID, 0, 0, 0)
@@ -402,6 +394,16 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
                }
        }
 
+       // Enable tracing if requested.
+       // Do this right before exec so that we don't unnecessarily trace the runtime
+       // setting up after the fork. See issue #21428.
+       if sys.Ptrace {
+               _, _, err1 = RawSyscall(SYS_PTRACE, uintptr(PTRACE_TRACEME), 0, 0)
+               if err1 != 0 {
+                       goto childerror
+               }
+       }
+
        // Time to exec.
        _, _, err1 = RawSyscall(SYS_EXECVE,
                uintptr(unsafe.Pointer(argv0)),