summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-03-03 14:38:26 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2021-03-08 21:04:09 -0700
commit497ba95de7833566d696768c8a366e39fdb40f8b (patch)
tree2eae133ac40b551c6ec41af7d2d72b1c4dc8367c
parent0eb720629553800b351c8ac7f6aa5ffad3de427d (diff)
memmod: do not use IsBadReadPtr
It should be enough to check for the trailing zero name. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--tun/wintun/memmod/memmod_windows.go2
-rw-r--r--tun/wintun/memmod/mksyscall.go8
-rw-r--r--tun/wintun/memmod/syscall_windows.go2
-rw-r--r--tun/wintun/memmod/zsyscall_windows.go50
4 files changed, 1 insertions, 61 deletions
diff --git a/tun/wintun/memmod/memmod_windows.go b/tun/wintun/memmod/memmod_windows.go
index a9514c4..c75de5a 100644
--- a/tun/wintun/memmod/memmod_windows.go
+++ b/tun/wintun/memmod/memmod_windows.go
@@ -312,7 +312,7 @@ func (module *Module) buildImportTable() error {
module.modules = make([]windows.Handle, 0, 16)
importDesc := (*IMAGE_IMPORT_DESCRIPTOR)(a2p(module.codeBase + uintptr(directory.VirtualAddress)))
- for !isBadReadPtr(uintptr(unsafe.Pointer(importDesc)), unsafe.Sizeof(*importDesc)) && importDesc.Name != 0 {
+ for importDesc.Name != 0 {
handle, err := windows.LoadLibraryEx(windows.BytePtrToString((*byte)(a2p(module.codeBase+uintptr(importDesc.Name)))), 0, windows.LOAD_LIBRARY_SEARCH_SYSTEM32)
if err != nil {
return fmt.Errorf("Error loading module: %w", err)
diff --git a/tun/wintun/memmod/mksyscall.go b/tun/wintun/memmod/mksyscall.go
deleted file mode 100644
index a78f613..0000000
--- a/tun/wintun/memmod/mksyscall.go
+++ /dev/null
@@ -1,8 +0,0 @@
-/* SPDX-License-Identifier: MIT
- *
- * Copyright (C) 2017-2021 WireGuard LLC. All Rights Reserved.
- */
-
-package memmod
-
-//go:generate go run golang.org/x/sys/windows/mkwinsyscall -output zsyscall_windows.go syscall_windows.go
diff --git a/tun/wintun/memmod/syscall_windows.go b/tun/wintun/memmod/syscall_windows.go
index 11715c0..31dd0b5 100644
--- a/tun/wintun/memmod/syscall_windows.go
+++ b/tun/wintun/memmod/syscall_windows.go
@@ -324,8 +324,6 @@ const (
DLL_PROCESS_DETACH = 0
)
-//sys isBadReadPtr(addr uintptr, ucb uintptr) (ret bool) = kernel32.IsBadReadPtr
-
type SYSTEM_INFO struct {
ProcessorArchitecture uint16
Reserved uint16
diff --git a/tun/wintun/memmod/zsyscall_windows.go b/tun/wintun/memmod/zsyscall_windows.go
deleted file mode 100644
index 6a5b76f..0000000
--- a/tun/wintun/memmod/zsyscall_windows.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Code generated by 'go generate'; DO NOT EDIT.
-
-package memmod
-
-import (
- "syscall"
- "unsafe"
-
- "golang.org/x/sys/windows"
-)
-
-var _ unsafe.Pointer
-
-// Do the interface allocations only once for common
-// Errno values.
-const (
- errnoERROR_IO_PENDING = 997
-)
-
-var (
- errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)
- errERROR_EINVAL error = syscall.EINVAL
-)
-
-// errnoErr returns common boxed Errno values, to prevent
-// allocations at runtime.
-func errnoErr(e syscall.Errno) error {
- switch e {
- case 0:
- return errERROR_EINVAL
- case errnoERROR_IO_PENDING:
- return errERROR_IO_PENDING
- }
- // TODO: add more here, after collecting data on the common
- // error values see on Windows. (perhaps when running
- // all.bat?)
- return e
-}
-
-var (
- modkernel32 = windows.NewLazySystemDLL("kernel32.dll")
-
- procIsBadReadPtr = modkernel32.NewProc("IsBadReadPtr")
-)
-
-func isBadReadPtr(addr uintptr, ucb uintptr) (ret bool) {
- r0, _, _ := syscall.Syscall(procIsBadReadPtr.Addr(), 2, uintptr(addr), uintptr(ucb), 0)
- ret = r0 != 0
- return
-}