Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(746)

Side by Side Diff: sandbox/win/src/window.cc

Issue 683683002: Further restrict access on the alternate winstation and desktop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sandbox/win/src/window.h" 5 #include "sandbox/win/src/window.h"
6 6
7 #include <aclapi.h> 7 #include <aclapi.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 26 matching lines...) Expand all
37 ResultCode CreateAltWindowStation(HWINSTA* winsta) { 37 ResultCode CreateAltWindowStation(HWINSTA* winsta) {
38 // Get the security attributes from the current window station; we will 38 // Get the security attributes from the current window station; we will
39 // use this as the base security attributes for the new window station. 39 // use this as the base security attributes for the new window station.
40 SECURITY_ATTRIBUTES attributes = {0}; 40 SECURITY_ATTRIBUTES attributes = {0};
41 if (!GetSecurityAttributes(::GetProcessWindowStation(), &attributes)) { 41 if (!GetSecurityAttributes(::GetProcessWindowStation(), &attributes)) {
42 return SBOX_ERROR_CANNOT_CREATE_WINSTATION; 42 return SBOX_ERROR_CANNOT_CREATE_WINSTATION;
43 } 43 }
44 44
45 // Create the window station using NULL for the name to ask the os to 45 // Create the window station using NULL for the name to ask the os to
46 // generate it. 46 // generate it.
47 // TODO(nsylvain): don't ask for WINSTA_ALL_ACCESS if we don't need to. 47 *winsta = ::CreateWindowStationW(
48 *winsta = ::CreateWindowStationW(NULL, 0, WINSTA_ALL_ACCESS, &attributes); 48 NULL, 0, GENERIC_READ | WINSTA_CREATEDESKTOP, &attributes);
49 LocalFree(attributes.lpSecurityDescriptor); 49 LocalFree(attributes.lpSecurityDescriptor);
50 50
51 if (*winsta) 51 if (*winsta)
52 return SBOX_ALL_OK; 52 return SBOX_ALL_OK;
53 53
54 return SBOX_ERROR_CANNOT_CREATE_WINSTATION; 54 return SBOX_ERROR_CANNOT_CREATE_WINSTATION;
55 } 55 }
56 56
57 ResultCode CreateAltDesktop(HWINSTA winsta, HDESK* desktop) { 57 ResultCode CreateAltDesktop(HWINSTA winsta, HDESK* desktop) {
58 base::string16 desktop_name = L"sbox_alternate_desktop_"; 58 base::string16 desktop_name = L"sbox_alternate_desktop_";
(...skipping 18 matching lines...) Expand all
77 if (winsta) { 77 if (winsta) {
78 // We need to switch to the alternate window station before creating the 78 // We need to switch to the alternate window station before creating the
79 // desktop. 79 // desktop.
80 if (!::SetProcessWindowStation(winsta)) { 80 if (!::SetProcessWindowStation(winsta)) {
81 ::LocalFree(attributes.lpSecurityDescriptor); 81 ::LocalFree(attributes.lpSecurityDescriptor);
82 return SBOX_ERROR_CANNOT_CREATE_DESKTOP; 82 return SBOX_ERROR_CANNOT_CREATE_DESKTOP;
83 } 83 }
84 } 84 }
85 85
86 // Create the destkop. 86 // Create the destkop.
87 // TODO(nsylvain): don't ask for GENERIC_ALL if we don't need to. 87 *desktop = ::CreateDesktop(desktop_name.c_str(),
88 *desktop = ::CreateDesktop(desktop_name.c_str(), NULL, NULL, 0, GENERIC_ALL, 88 NULL,
89 NULL,
90 0,
91 DESKTOP_CREATEWINDOW | DESKTOP_READOBJECTS |
92 READ_CONTROL | WRITE_DAC | WRITE_OWNER,
89 &attributes); 93 &attributes);
90 ::LocalFree(attributes.lpSecurityDescriptor); 94 ::LocalFree(attributes.lpSecurityDescriptor);
91 95
92 if (winsta) { 96 if (winsta) {
93 // Revert to the right window station. 97 // Revert to the right window station.
94 if (!::SetProcessWindowStation(current_winsta)) { 98 if (!::SetProcessWindowStation(current_winsta)) {
95 return SBOX_ERROR_FAILED_TO_SWITCH_BACK_WINSTATION; 99 return SBOX_ERROR_FAILED_TO_SWITCH_BACK_WINSTATION;
96 } 100 }
97 } 101 }
98 102
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if (winsta) { 152 if (winsta) {
149 name = GetWindowObjectName(winsta); 153 name = GetWindowObjectName(winsta);
150 name += L'\\'; 154 name += L'\\';
151 } 155 }
152 156
153 name += GetWindowObjectName(desktop); 157 name += GetWindowObjectName(desktop);
154 return name; 158 return name;
155 } 159 }
156 160
157 } // namespace sandbox 161 } // namespace sandbox
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698