]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: point to x/sys in DLL loading docs, update syscall generator
authorBrad Fitzpatrick <bradfitz@golang.org>
Sat, 2 Apr 2016 00:20:13 +0000 (00:20 +0000)
committerAndrew Gerrand <adg@golang.org>
Fri, 8 Apr 2016 05:11:49 +0000 (05:11 +0000)
Updates the syscall generator for patchset 4 of https://golang.org/cl/21388.

Updates #14959

Change-Id: Icbd6df489887d3dcc076dfc73d4feb1376abaf8b
Reviewed-on: https://go-review.googlesource.com/21428
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-on: https://go-review.googlesource.com/21680
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/syscall/dll_windows.go
src/syscall/mksyscall_windows.go

index ec8d85b66b7bf9cf1839659cbfa56da33d5f117f..453ec11dd6e7e01654113f3119242f7fb30a55a1 100644 (file)
@@ -37,6 +37,13 @@ type DLL struct {
 }
 
 // LoadDLL loads the named DLL file into memory.
+//
+// If name is not an absolute path and is not a known system DLL used by
+// Go, Windows will search for the named DLL in many locations, causing
+// potential DLL preloading attacks.
+//
+// Use LazyDLL in golang.org/x/sys/windows for a secure way to
+// load system DLLs.
 func LoadDLL(name string) (*DLL, error) {
        namep, err := UTF16PtrFromString(name)
        if err != nil {
@@ -174,6 +181,12 @@ func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {
 // It will delay the load of the DLL until the first
 // call to its Handle method or to one of its
 // LazyProc's Addr method.
+//
+// LazyDLL is subject to the same DLL preloading attacks as documented
+// on LoadDLL.
+//
+// Use LazyDLL in golang.org/x/sys/windows for a secure way to
+// load system DLLs.
 type LazyDLL struct {
        mu   sync.Mutex
        dll  *DLL // non nil once DLL is loaded
index 546cb0d432aa5ea68320ca72a35adc0e4398a3b7..7786d1349edf6d3c3fd29f5008b7a0d8808d2a97 100644 (file)
@@ -707,9 +707,9 @@ func (src *Source) Generate(w io.Writer) error {
                        }
                        if *sysRepo {
                                if packageName == "windows" {
-                                       return "&LazyDLL{Name: " + arg + ", Flags: LoadLibrarySearchSystem32}"
+                                       return "&LazyDLL{Name: " + arg + ", System: true}"
                                } else {
-                                       return "&windows.LazyDLL{Name: " + arg + ", Flags: windows.LoadLibrarySearchSystem32}"
+                                       return "&windows.LazyDLL{Name: " + arg + ", System: true}"
                                }
                        } else {
                                return syscalldot() + "NewLazyDLL(" + arg + ")"