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-- |
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 |