]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: add ptracePtr that accepts pointer arg as unsafe.Pointer
authorDmitri Goutnik <dgoutnik@gmail.com>
Wed, 22 Feb 2023 15:58:14 +0000 (10:58 -0500)
committerGopher Robot <gobot@golang.org>
Thu, 23 Feb 2023 11:28:51 +0000 (11:28 +0000)
The existing ptrace wrapper accepts pointer argument as an uintptr which
often points to the memory allocated in Go. This violates unsafe.Pointer safety
rules.

Fixes #58387

Change-Id: Iab12122c495953f94ea00c2a61654a818a464205
Reviewed-on: https://go-review.googlesource.com/c/go/+/470299
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Dmitri Goutnik <dgoutnik@gmail.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Dmitri Goutnik <dgoutnik@gmail.com>

29 files changed:
src/syscall/mksyscall.pl
src/syscall/mksyscall_libc.pl
src/syscall/ptrace_darwin.go
src/syscall/ptrace_ios.go
src/syscall/syscall_aix.go
src/syscall/syscall_darwin_amd64.go
src/syscall/syscall_darwin_arm64.go
src/syscall/syscall_linux.go
src/syscall/syscall_openbsd_libc.go
src/syscall/zsyscall_aix_ppc64.go
src/syscall/zsyscall_darwin_amd64.go
src/syscall/zsyscall_darwin_arm64.go
src/syscall/zsyscall_linux_386.go
src/syscall/zsyscall_linux_amd64.go
src/syscall/zsyscall_linux_arm.go
src/syscall/zsyscall_linux_arm64.go
src/syscall/zsyscall_linux_loong64.go
src/syscall/zsyscall_linux_mips.go
src/syscall/zsyscall_linux_mips64.go
src/syscall/zsyscall_linux_mips64le.go
src/syscall/zsyscall_linux_mipsle.go
src/syscall/zsyscall_linux_ppc64.go
src/syscall/zsyscall_linux_ppc64le.go
src/syscall/zsyscall_linux_riscv64.go
src/syscall/zsyscall_linux_s390x.go
src/syscall/zsyscall_openbsd_386.go
src/syscall/zsyscall_openbsd_amd64.go
src/syscall/zsyscall_openbsd_arm.go
src/syscall/zsyscall_openbsd_arm64.go

index 25ab911b7c6a46a958daf60ef76dafd70cb7d628..075eb1f396afff6de0a6bcfa6f6432f0aeb3955f 100755 (executable)
@@ -137,7 +137,7 @@ while(<>) {
        # without reading the header.
        $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n";
 
-       if (($darwin && $func eq "ptrace1") || (($openbsd && $libc) && $func eq "ptrace")) {
+       if (($darwin && $func =~ /^ptrace1(Ptr)?$/) || (($openbsd && $libc) && $func =~ /^ptrace(Ptr)?$/)) {
                # The ptrace function is called from forkAndExecInChild where stack
                # growth is forbidden.
                $text .= "//go:nosplit\n"
index 37314765d8c92cd6ab146e942c937ae01f266e35..3746c1e3a7d9a7cb1a62bdbdcbfe4c89dd297624 100755 (executable)
@@ -145,11 +145,13 @@ while(<>) {
        $sysname =~ y/A-Z/a-z/; # All libc functions are lowercase.
 
        # Runtime import of function to allow cross-platform builds.
-       $dynimports .= "//go:cgo_import_dynamic ${sysvarname} ${sysname} \"$modname\"\n";
-       # Link symbol to proc address variable.
-       $linknames .= "//go:linkname ${sysvarname} ${sysvarname}\n";
-       # Library proc address variable.
-       push @vars, $sysvarname;
+       if($dynimports !~ /\s+${sysvarname}\s+/) {
+               $dynimports .= "//go:cgo_import_dynamic ${sysvarname} ${sysname} \"$modname\"\n";
+               # Link symbol to proc address variable.
+               $linknames .= "//go:linkname ${sysvarname} ${sysvarname}\n";
+               # Library proc address variable.
+               push @vars, $sysvarname;
+       }
 
        # Go function header.
        $out = join(', ', @out);
index 519e451c73ff94a5f27e8f6d29330823253fc941..466f8135b4c6535d3f35eaef936c647106165286 100644 (file)
@@ -6,9 +6,16 @@
 
 package syscall
 
+import "unsafe"
+
 // Nosplit because it is called from forkAndExecInChild.
 //
 //go:nosplit
 func ptrace(request int, pid int, addr uintptr, data uintptr) error {
        return ptrace1(request, pid, addr, data)
 }
+
+//go:nosplit
+func ptracePtr(request int, pid int, addr unsafe.Pointer, data uintptr) error {
+       return ptrace1Ptr(request, pid, addr, data)
+}
index fa8d0007154997b549453df1ebd3c008ac762f7a..a9b291845bea20ebeb3b4e95f66ade421651d634 100644 (file)
@@ -6,9 +6,16 @@
 
 package syscall
 
+import "unsafe"
+
 // Nosplit because it is called from forkAndExecInChild.
 //
 //go:nosplit
 func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
        panic("unimplemented")
 }
+
+//go:nosplit
+func ptracePtr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) {
+       panic("unimplemented")
+}
index 807990f3c0c5f6ecc89c721a59789d1a079bcb0f..ba1b50e0fcb05bfdfbe3fd3bc17616f34f3565d6 100644 (file)
@@ -505,6 +505,7 @@ func (w WaitStatus) TrapCause() int { return -1 }
 
 //sys  Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
 //sys  ptrace64(request int, id int64, addr int64, data int, buff uintptr) (err error)
+//sys  ptrace64Ptr(request int, id int64, addr int64, data int, buff unsafe.Pointer) (err error) = ptrace64
 
 func raw_ptrace(request int, pid int, addr *byte, data *byte) Errno {
        if request == PTRACE_TRACEME {
@@ -525,7 +526,7 @@ func ptracePeek(pid int, addr uintptr, out []byte) (count int, err error) {
                if bsize > 1024 {
                        bsize = 1024
                }
-               err = ptrace64(PT_READ_BLOCK, int64(pid), int64(addr), bsize, uintptr(unsafe.Pointer(&out[0])))
+               err = ptrace64Ptr(PT_READ_BLOCK, int64(pid), int64(addr), bsize, unsafe.Pointer(&out[0]))
                if err != nil {
                        return 0, err
                }
@@ -551,7 +552,7 @@ func ptracePoke(pid int, addr uintptr, data []byte) (count int, err error) {
                if bsize > 1024 {
                        bsize = 1024
                }
-               err = ptrace64(PT_WRITE_BLOCK, int64(pid), int64(addr), bsize, uintptr(unsafe.Pointer(&data[0])))
+               err = ptrace64Ptr(PT_WRITE_BLOCK, int64(pid), int64(addr), bsize, unsafe.Pointer(&data[0]))
                if err != nil {
                        return 0, err
                }
index ef3c1998aada5b5d4a61dbc07b548a592aa12fae..52ca3c8d5aeac4da1f4ec5628da1634823e741dc 100644 (file)
@@ -25,6 +25,7 @@ func setTimeval(sec, usec int64) Timeval {
 //sys  Statfs(path string, stat *Statfs_t) (err error) = SYS_statfs64
 //sys   fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_fstatat64
 //sys   ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace
+//sys   ptrace1Ptr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) = SYS_ptrace
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
        k.Ident = uint64(fd)
index cea42772bbccf180514bfd26b2df1c6f22420efb..d5da988117850921cc5ad046a37d69f51aa5302a 100644 (file)
@@ -25,6 +25,7 @@ func setTimeval(sec, usec int64) Timeval {
 //sys  Statfs(path string, stat *Statfs_t) (err error)
 //sys  fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
 //sys  ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace
+//sys  ptrace1Ptr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) = SYS_ptrace
 
 func SetKevent(k *Kevent_t, fd, mode, flags int) {
        k.Ident = uint64(fd)
index f337388a749e372113b9cd84e23c8c8e8016dd7d..c1f43bf43dcb0aa56ad97b2c3dac0d39eb2ec615 100644 (file)
@@ -828,6 +828,7 @@ func BindToDevice(fd int, device string) (err error) {
 }
 
 //sys  ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
+//sys  ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) = SYS_PTRACE
 
 func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) {
        // The peek requests are machine-size oriented, so we wrap it
@@ -845,7 +846,7 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro
        // boundary.
        n := 0
        if addr%sizeofPtr != 0 {
-               err = ptrace(req, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
+               err = ptracePtr(req, pid, addr-addr%sizeofPtr, unsafe.Pointer(&buf[0]))
                if err != nil {
                        return 0, err
                }
@@ -857,7 +858,7 @@ func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err erro
        for len(out) > 0 {
                // We use an internal buffer to guarantee alignment.
                // It's not documented if this is necessary, but we're paranoid.
-               err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0])))
+               err = ptracePtr(req, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))
                if err != nil {
                        return n, err
                }
@@ -885,7 +886,7 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c
        n := 0
        if addr%sizeofPtr != 0 {
                var buf [sizeofPtr]byte
-               err = ptrace(peekReq, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0])))
+               err = ptracePtr(peekReq, pid, addr-addr%sizeofPtr, unsafe.Pointer(&buf[0]))
                if err != nil {
                        return 0, err
                }
@@ -912,7 +913,7 @@ func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (c
        // Trailing edge.
        if len(data) > 0 {
                var buf [sizeofPtr]byte
-               err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0])))
+               err = ptracePtr(peekReq, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))
                if err != nil {
                        return n, err
                }
@@ -937,11 +938,11 @@ func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
 }
 
 func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {
-       return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
+       return ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))
 }
 
 func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {
-       return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))
+       return ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))
 }
 
 func PtraceSetOptions(pid int, options int) (err error) {
@@ -950,7 +951,7 @@ func PtraceSetOptions(pid int, options int) (err error) {
 
 func PtraceGetEventMsg(pid int) (msg uint, err error) {
        var data _C_long
-       err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data)))
+       err = ptracePtr(PTRACE_GETEVENTMSG, pid, 0, unsafe.Pointer(&data))
        msg = uint(data)
        return
 }
index 516d02975c530a3ea1aea3b826039f7891797c80..de503cc078bc81b64f1fd914f423e56deff48aea 100644 (file)
@@ -67,6 +67,7 @@ func syscall9X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
 //sysnb execve(path *byte, argv **byte, envp **byte) (err error)
 //sysnb exit(res int) (err error)
 //sys   ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
+//sys   ptracePtr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) = SYS_ptrace
 //sysnb getentropy(p []byte) (err error)
 //sys   fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
 //sys  fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) = SYS_fcntl
index c9e2edea242b15959c1036deb77b9fbf82ed255e..56af51c48276fccfeaf9702fa41117598f1668b7 100644 (file)
@@ -658,6 +658,16 @@ func ptrace64(request int, id int64, addr int64, data int, buff uintptr) (err er
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptrace64Ptr(request int, id int64, addr int64, data int, buff unsafe.Pointer) (err error) {
+       _, _, e1 := syscall6(uintptr(unsafe.Pointer(&libc_ptrace64)), 5, uintptr(request), uintptr(id), uintptr(addr), uintptr(data), uintptr(buff), 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func Acct(path string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 6b3fff3f3726a224ad1c6bbdc856eec18e73fdfe..4872fbd529e99a060bf35e1fce1455ad0e9ed293 100644 (file)
@@ -2022,3 +2022,14 @@ func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {
 func libc_ptrace_trampoline()
 
 //go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+//go:nosplit
+func ptrace1Ptr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) {
+       _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
index 61601449a04043f185cd640cd3599af492d565cd..76d1ff84af2e245ffeadc86b49d3220b5b7b265b 100644 (file)
@@ -2022,3 +2022,14 @@ func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {
 func libc_ptrace_trampoline()
 
 //go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+//go:nosplit
+func ptrace1Ptr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) {
+       _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
index 6a646fba4f5fc05cef912c1508ba1c94bd058139..d57f0e980e6e6169cbf8239b7b689fb58a2ef488 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index d5b0099a9a70e289badfcfc5e3c8c8bdcd2f32ee..a895e55ee5b8c1bc61870dcfd52cffb1fbc0afe6 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 69f811a0ec7c31aecd0c1a86a8b3b226cc5fa658..86d8e1c2d7e1b4f2b7548141b3fa50899e6d28ea 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 7655ccbb3d7935a125618caf112daf5458749a90..aed45ebe2559744dd8f5493068a0893718bac2e2 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index abbc19be6046bf466015ddaa4c96d85cda2ee28a..95ecce8a671af1f03782d0ac2a67206e2a2a1b32 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 792668c1d5c3756df3727a0e008a168cf62015db..3d7f0ce8ef330adaff0ac6dd65b15062e821e8ae 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 27dbcb8a2d24a9e7cc6786522dcc149f40fd4efc..98d50c593dfbf57b17eeb0d11a2f816493f1432a 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 0362303c5f4ce40364ec754b0f895aff3f4e793c..b3e25aec2f6ccbb59e3f42d730d55335c1d8026a 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 5320dfa65a7f53835cfa8179017788866dc72a00..1b4a4468f318838ebc02a2b181de541a0f89a196 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 61f3063352c8719bd3e15dd04241c5d03366e543..1c521d0fcddc9f36a3d62a4cf4144dbda10fac31 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 3e14ab37a1dfe1ee72de4069bf277e1654a8b0ae..fc0f2ac00e6e9b99fcd4bfdb074c377def411a76 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 4a3fa5dbd86b9163fe6e0abaad80c3c8d73d0d27..cc328fc100e302ff2a0efaad45d542bc95f7fc2b 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index 1fca71e3044511df36cf355715f0519c15e8fc7b..3c5ee28941b645220db24202fc77c739a7c2db65 100644 (file)
@@ -210,6 +210,16 @@ func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
+       _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(arg)
index b60af1743d891dd62343b26e410987131c7e80df..953e9616a8b50a3ef255b4b72e8bdd20eeb93709 100644 (file)
@@ -1844,6 +1844,17 @@ func libc_ptrace_trampoline()
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+//go:nosplit
+func ptracePtr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) {
+       _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func getentropy(p []byte) (err error) {
        var _p0 unsafe.Pointer
        if len(p) > 0 {
index 8b3e81e6bd36f2491575962e0d6cdbeb02019204..8bc7f3d213c3dd7523d5b1db435f78f4e0e0b971 100644 (file)
@@ -1844,6 +1844,17 @@ func libc_ptrace_trampoline()
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+//go:nosplit
+func ptracePtr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) {
+       _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func getentropy(p []byte) (err error) {
        var _p0 unsafe.Pointer
        if len(p) > 0 {
index 42d57812b25d30e379932663c9be592cd564f12e..8184436200aded492ba876947a6fcc704de83075 100644 (file)
@@ -1844,6 +1844,17 @@ func libc_ptrace_trampoline()
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+//go:nosplit
+func ptracePtr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) {
+       _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func getentropy(p []byte) (err error) {
        var _p0 unsafe.Pointer
        if len(p) > 0 {
index 7a5a2c0c819e42f0b1319ab614222b241b0a1930..fe17521e808e5ca403931c96f96eb2ba40646a48 100644 (file)
@@ -1844,6 +1844,17 @@ func libc_ptrace_trampoline()
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+//go:nosplit
+func ptracePtr(request int, pid int, addr unsafe.Pointer, data uintptr) (err error) {
+       _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func getentropy(p []byte) (err error) {
        var _p0 unsafe.Pointer
        if len(p) > 0 {