components/golang/patches/0077-syscall-point-to-x-sys-in-DLL-loading-docs-update-sy.patch
author Niveditha Rau <Niveditha.Rau@Oracle.COM>
Fri, 28 Oct 2016 14:58:48 -0700
changeset 7197 5001d53d2e77
parent 5781 ecbdf40c0a37
permissions -rw-r--r--
23245657 Deliver mutter 3.18.1 in Solaris PSARC/2016/396 GNOME 3 Window Manager Bundle
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5781
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     1
From 77ef9c7e79a8e8d948c11330584ea205b35bb0e1 Mon Sep 17 00:00:00 2001
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     2
From: Brad Fitzpatrick <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     3
Date: Sat, 2 Apr 2016 00:20:13 +0000
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     4
Subject: [PATCH 77/79] syscall: point to x/sys in DLL loading docs, update
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     5
 syscall generator
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     6
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     7
Updates the syscall generator for patchset 4 of https://golang.org/cl/21388.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     8
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
     9
Updates #14959
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    10
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    11
Change-Id: Icbd6df489887d3dcc076dfc73d4feb1376abaf8b
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    12
Reviewed-on: https://go-review.googlesource.com/21428
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    13
Reviewed-by: Alex Brainman <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    14
Reviewed-on: https://go-review.googlesource.com/21680
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    15
Reviewed-by: Brad Fitzpatrick <[email protected]>
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    16
---
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    17
 src/syscall/dll_windows.go       | 13 +++++++++++++
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    18
 src/syscall/mksyscall_windows.go |  4 ++--
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    19
 2 files changed, 15 insertions(+), 2 deletions(-)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    20
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    21
diff --git a/src/syscall/dll_windows.go b/src/syscall/dll_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    22
index ec8d85b..453ec11 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    23
--- a/src/syscall/dll_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    24
+++ b/src/syscall/dll_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    25
@@ -37,6 +37,13 @@ type DLL struct {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    26
 }
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    27
 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    28
 // LoadDLL loads the named DLL file into memory.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    29
+//
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    30
+// If name is not an absolute path and is not a known system DLL used by
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    31
+// Go, Windows will search for the named DLL in many locations, causing
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    32
+// potential DLL preloading attacks.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    33
+//
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    34
+// Use LazyDLL in golang.org/x/sys/windows for a secure way to
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    35
+// load system DLLs.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    36
 func LoadDLL(name string) (*DLL, error) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    37
 	namep, err := UTF16PtrFromString(name)
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    38
 	if err != nil {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    39
@@ -174,6 +181,12 @@ func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    40
 // It will delay the load of the DLL until the first
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    41
 // call to its Handle method or to one of its
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    42
 // LazyProc's Addr method.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    43
+//
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    44
+// LazyDLL is subject to the same DLL preloading attacks as documented
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    45
+// on LoadDLL.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    46
+//
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    47
+// Use LazyDLL in golang.org/x/sys/windows for a secure way to
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    48
+// load system DLLs.
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    49
 type LazyDLL struct {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    50
 	mu   sync.Mutex
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    51
 	dll  *DLL // non nil once DLL is loaded
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    52
diff --git a/src/syscall/mksyscall_windows.go b/src/syscall/mksyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    53
index 546cb0d..7786d13 100644
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    54
--- a/src/syscall/mksyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    55
+++ b/src/syscall/mksyscall_windows.go
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    56
@@ -707,9 +707,9 @@ func (src *Source) Generate(w io.Writer) error {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    57
 			}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    58
 			if *sysRepo {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    59
 				if packageName == "windows" {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    60
-					return "&LazyDLL{Name: " + arg + ", Flags: LoadLibrarySearchSystem32}"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    61
+					return "&LazyDLL{Name: " + arg + ", System: true}"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    62
 				} else {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    63
-					return "&windows.LazyDLL{Name: " + arg + ", Flags: windows.LoadLibrarySearchSystem32}"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    64
+					return "&windows.LazyDLL{Name: " + arg + ", System: true}"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    65
 				}
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    66
 			} else {
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    67
 				return syscalldot() + "NewLazyDLL(" + arg + ")"
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    68
-- 
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    69
2.7.4
ecbdf40c0a37 23108116 problem in UTILITY/GOLANG
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff changeset
    70