]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: remove RtlGenRandom and move it into internal/syscall
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 14 Jan 2021 23:04:10 +0000 (00:04 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 15 Jan 2021 18:42:27 +0000 (18:42 +0000)
There's on need to expose this to the frozen syscall package, and it
also doesn't need to be unsafe. So we move it into internal/syscall and
have the generator make a safer function signature.

Fixes #43704.

Change-Id: Iccae69dc273a0aa97ee6846eb537f1dc1412f2de
Reviewed-on: https://go-review.googlesource.com/c/go/+/283992
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Trust: Jason A. Donenfeld <Jason@zx2c4.com>

api/go1.16.txt
src/crypto/rand/rand_windows.go
src/internal/syscall/windows/syscall_windows.go
src/internal/syscall/windows/zsyscall_windows.go
src/syscall/syscall_windows.go
src/syscall/zsyscall_windows.go

index a4a034be064fe9728e0c497c19e6e187f5f61573..6e1f8ca91d73df1b86100976a052196a2858f3ef 100644 (file)
@@ -430,10 +430,8 @@ pkg syscall (linux-arm-cgo), func AllThreadsSyscall(uintptr, uintptr, uintptr, u
 pkg syscall (linux-arm-cgo), func AllThreadsSyscall6(uintptr, uintptr, uintptr, uintptr, uintptr, uintptr, uintptr) (uintptr, uintptr, Errno)
 pkg syscall (linux-arm-cgo), func Setegid(int) error
 pkg syscall (linux-arm-cgo), func Seteuid(int) error
-pkg syscall (windows-386), func RtlGenRandom(*uint8, uint32) error
 pkg syscall (windows-386), method (*DLLError) Unwrap() error
 pkg syscall (windows-386), type SysProcAttr struct, NoInheritHandles bool
-pkg syscall (windows-amd64), func RtlGenRandom(*uint8, uint32) error
 pkg syscall (windows-amd64), method (*DLLError) Unwrap() error
 pkg syscall (windows-amd64), type SysProcAttr struct, NoInheritHandles bool
 pkg testing/fstest, func TestFS(fs.FS, ...string) error
index 8b2c960906ae65c5d568596af8f0b4631f0fa006..7379f1489adbf13bb41598f56c745b9e03fccd6d 100644 (file)
@@ -8,8 +8,8 @@
 package rand
 
 import (
+       "internal/syscall/windows"
        "os"
-       "syscall"
 )
 
 func init() { Reader = &rngReader{} }
@@ -24,7 +24,7 @@ func (r *rngReader) Read(b []byte) (n int, err error) {
                return 0, nil
        }
 
-       err = syscall.RtlGenRandom(&b[0], inputLen)
+       err = windows.RtlGenRandom(b)
        if err != nil {
                return 0, os.NewSyscallError("RtlGenRandom", err)
        }
index 1f40c11820519114c3b56ef6c10a84acf0940eff..f8965d0bab175de81d8f0355794ded7ff253ea9d 100644 (file)
@@ -342,3 +342,5 @@ func LoadGetFinalPathNameByHandle() error {
 
 //sys  CreateEnvironmentBlock(block **uint16, token syscall.Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock
 //sys  DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock
+
+//sys  RtlGenRandom(buf []byte) (err error) = advapi32.SystemFunction036
index 170b239486d4246c7d3aa451a4dc61f621863631..aaad4a5b94b7e5f7a277c021790a2d94dbb09bf9 100644 (file)
@@ -52,6 +52,7 @@ var (
        procOpenThreadToken              = modadvapi32.NewProc("OpenThreadToken")
        procRevertToSelf                 = modadvapi32.NewProc("RevertToSelf")
        procSetTokenInformation          = modadvapi32.NewProc("SetTokenInformation")
+       procSystemFunction036            = modadvapi32.NewProc("SystemFunction036")
        procGetAdaptersAddresses         = modiphlpapi.NewProc("GetAdaptersAddresses")
        procGetACP                       = modkernel32.NewProc("GetACP")
        procGetComputerNameExW           = modkernel32.NewProc("GetComputerNameExW")
@@ -140,6 +141,18 @@ func SetTokenInformation(tokenHandle syscall.Token, tokenInformationClass uint32
        return
 }
 
+func RtlGenRandom(buf []byte) (err error) {
+       var _p0 *byte
+       if len(buf) > 0 {
+               _p0 = &buf[0]
+       }
+       r1, _, e1 := syscall.Syscall(procSystemFunction036.Addr(), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0)
+       if r1 == 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
 func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {
        r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0)
        if r0 != 0 {
index c1a12ccba362f0fab46d75ffe0d27344338900bc..ba69133d819db3b969082d7fdf9592d34bf22dc6 100644 (file)
@@ -234,7 +234,6 @@ func NewCallbackCDecl(fn interface{}) uintptr {
 //sys  CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW
 //sys  CryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext
 //sys  CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom
-//sys  RtlGenRandom(buf *uint8, bytes uint32) (err error) = advapi32.SystemFunction036
 //sys  GetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW
 //sys  FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW
 //sys  GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW
index 86c4cac2ade20b5146ea25d38e94306b8544cb9d..2166be595bf018be3a8041eb3e2f19f394be6e70 100644 (file)
@@ -65,7 +65,6 @@ var (
        procRegOpenKeyExW                      = modadvapi32.NewProc("RegOpenKeyExW")
        procRegQueryInfoKeyW                   = modadvapi32.NewProc("RegQueryInfoKeyW")
        procRegQueryValueExW                   = modadvapi32.NewProc("RegQueryValueExW")
-       procSystemFunction036                  = modadvapi32.NewProc("SystemFunction036")
        procCertAddCertificateContextToStore   = modcrypt32.NewProc("CertAddCertificateContextToStore")
        procCertCloseStore                     = modcrypt32.NewProc("CertCloseStore")
        procCertCreateCertificateContext       = modcrypt32.NewProc("CertCreateCertificateContext")
@@ -333,14 +332,6 @@ func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32
        return
 }
 
-func RtlGenRandom(buf *uint8, bytes uint32) (err error) {
-       r1, _, e1 := Syscall(procSystemFunction036.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(bytes), 0)
-       if r1 == 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
 func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) {
        r1, _, e1 := Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0)
        if r1 == 0 {