| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/filesystem_interception.h" | 5 #include "sandbox/win/src/filesystem_interception.h" |
| 6 | 6 |
| 7 #include "sandbox/win/src/crosscall_client.h" | 7 #include "sandbox/win/src/crosscall_client.h" |
| 8 #include "sandbox/win/src/ipc_tags.h" | 8 #include "sandbox/win/src/ipc_tags.h" |
| 9 #include "sandbox/win/src/policy_params.h" | 9 #include "sandbox/win/src/policy_params.h" |
| 10 #include "sandbox/win/src/policy_target.h" | 10 #include "sandbox/win/src/policy_target.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 SharedMemIPCClient ipc(memory); | 67 SharedMemIPCClient ipc(memory); |
| 68 CrossCallReturn answer = {0}; | 68 CrossCallReturn answer = {0}; |
| 69 // The following call must match in the parameters with | 69 // The following call must match in the parameters with |
| 70 // FilesystemDispatcher::ProcessNtCreateFile. | 70 // FilesystemDispatcher::ProcessNtCreateFile. |
| 71 ResultCode code = CrossCall(ipc, IPC_NTCREATEFILE_TAG, name, attributes, | 71 ResultCode code = CrossCall(ipc, IPC_NTCREATEFILE_TAG, name, attributes, |
| 72 desired_access_uint32, file_attributes, sharing, | 72 desired_access_uint32, file_attributes, sharing, |
| 73 disposition, options_uint32, &answer); | 73 disposition, options_uint32, &answer); |
| 74 if (SBOX_ALL_OK != code) | 74 if (SBOX_ALL_OK != code) |
| 75 break; | 75 break; |
| 76 | 76 |
| 77 status = answer.nt_status; |
| 78 |
| 77 if (!NT_SUCCESS(answer.nt_status)) | 79 if (!NT_SUCCESS(answer.nt_status)) |
| 78 return answer.nt_status; | 80 break; |
| 79 | 81 |
| 80 __try { | 82 __try { |
| 81 *file = answer.handle; | 83 *file = answer.handle; |
| 82 io_status->Status = answer.nt_status; | 84 io_status->Status = answer.nt_status; |
| 83 io_status->Information = answer.extended[0].ulong_ptr; | 85 io_status->Information = answer.extended[0].ulong_ptr; |
| 84 status = io_status->Status; | |
| 85 } __except(EXCEPTION_EXECUTE_HANDLER) { | 86 } __except(EXCEPTION_EXECUTE_HANDLER) { |
| 86 break; | 87 break; |
| 87 } | 88 } |
| 88 } while (false); | 89 } while (false); |
| 89 | 90 |
| 90 if (name) | 91 if (name) |
| 91 operator delete(name, NT_ALLOC); | 92 operator delete(name, NT_ALLOC); |
| 92 | 93 |
| 93 return status; | 94 return status; |
| 94 } | 95 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 break; | 139 break; |
| 139 | 140 |
| 140 SharedMemIPCClient ipc(memory); | 141 SharedMemIPCClient ipc(memory); |
| 141 CrossCallReturn answer = {0}; | 142 CrossCallReturn answer = {0}; |
| 142 ResultCode code = CrossCall(ipc, IPC_NTOPENFILE_TAG, name, attributes, | 143 ResultCode code = CrossCall(ipc, IPC_NTOPENFILE_TAG, name, attributes, |
| 143 desired_access_uint32, sharing, options_uint32, | 144 desired_access_uint32, sharing, options_uint32, |
| 144 &answer); | 145 &answer); |
| 145 if (SBOX_ALL_OK != code) | 146 if (SBOX_ALL_OK != code) |
| 146 break; | 147 break; |
| 147 | 148 |
| 149 status = answer.nt_status; |
| 150 |
| 148 if (!NT_SUCCESS(answer.nt_status)) | 151 if (!NT_SUCCESS(answer.nt_status)) |
| 149 return answer.nt_status; | 152 break; |
| 150 | 153 |
| 151 __try { | 154 __try { |
| 152 *file = answer.handle; | 155 *file = answer.handle; |
| 153 io_status->Status = answer.nt_status; | 156 io_status->Status = answer.nt_status; |
| 154 io_status->Information = answer.extended[0].ulong_ptr; | 157 io_status->Information = answer.extended[0].ulong_ptr; |
| 155 status = io_status->Status; | |
| 156 } __except(EXCEPTION_EXECUTE_HANDLER) { | 158 } __except(EXCEPTION_EXECUTE_HANDLER) { |
| 157 break; | 159 break; |
| 158 } | 160 } |
| 159 } while (false); | 161 } while (false); |
| 160 | 162 |
| 161 if (name) | 163 if (name) |
| 162 operator delete(name, NT_ALLOC); | 164 operator delete(name, NT_ALLOC); |
| 163 | 165 |
| 164 return status; | 166 return status; |
| 165 } | 167 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 params[FileName::BROKER] = ParamPickerMake(broker); | 203 params[FileName::BROKER] = ParamPickerMake(broker); |
| 202 | 204 |
| 203 if (!QueryBroker(IPC_NTQUERYATTRIBUTESFILE_TAG, params.GetBase())) | 205 if (!QueryBroker(IPC_NTQUERYATTRIBUTESFILE_TAG, params.GetBase())) |
| 204 break; | 206 break; |
| 205 | 207 |
| 206 SharedMemIPCClient ipc(memory); | 208 SharedMemIPCClient ipc(memory); |
| 207 CrossCallReturn answer = {0}; | 209 CrossCallReturn answer = {0}; |
| 208 ResultCode code = CrossCall(ipc, IPC_NTQUERYATTRIBUTESFILE_TAG, name, | 210 ResultCode code = CrossCall(ipc, IPC_NTQUERYATTRIBUTESFILE_TAG, name, |
| 209 attributes, file_info, &answer); | 211 attributes, file_info, &answer); |
| 210 | 212 |
| 211 operator delete(name, NT_ALLOC); | |
| 212 | |
| 213 if (SBOX_ALL_OK != code) | 213 if (SBOX_ALL_OK != code) |
| 214 break; | 214 break; |
| 215 | 215 |
| 216 return answer.nt_status; | 216 status = answer.nt_status; |
| 217 | 217 |
| 218 } while (false); | 218 } while (false); |
| 219 | 219 |
| 220 if (name) | 220 if (name) |
| 221 operator delete(name, NT_ALLOC); | 221 operator delete(name, NT_ALLOC); |
| 222 | 222 |
| 223 return status; | 223 return status; |
| 224 } | 224 } |
| 225 | 225 |
| 226 NTSTATUS WINAPI TargetNtQueryFullAttributesFile( | 226 NTSTATUS WINAPI TargetNtQueryFullAttributesFile( |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 params[FileName::BROKER] = ParamPickerMake(broker); | 262 params[FileName::BROKER] = ParamPickerMake(broker); |
| 263 | 263 |
| 264 if (!QueryBroker(IPC_NTQUERYFULLATTRIBUTESFILE_TAG, params.GetBase())) | 264 if (!QueryBroker(IPC_NTQUERYFULLATTRIBUTESFILE_TAG, params.GetBase())) |
| 265 break; | 265 break; |
| 266 | 266 |
| 267 SharedMemIPCClient ipc(memory); | 267 SharedMemIPCClient ipc(memory); |
| 268 CrossCallReturn answer = {0}; | 268 CrossCallReturn answer = {0}; |
| 269 ResultCode code = CrossCall(ipc, IPC_NTQUERYFULLATTRIBUTESFILE_TAG, name, | 269 ResultCode code = CrossCall(ipc, IPC_NTQUERYFULLATTRIBUTESFILE_TAG, name, |
| 270 attributes, file_info, &answer); | 270 attributes, file_info, &answer); |
| 271 | 271 |
| 272 operator delete(name, NT_ALLOC); | |
| 273 | |
| 274 if (SBOX_ALL_OK != code) | 272 if (SBOX_ALL_OK != code) |
| 275 break; | 273 break; |
| 276 | 274 |
| 277 return answer.nt_status; | 275 status = answer.nt_status; |
| 278 } while (false); | 276 } while (false); |
| 279 | 277 |
| 280 if (name) | 278 if (name) |
| 281 operator delete(name, NT_ALLOC); | 279 operator delete(name, NT_ALLOC); |
| 282 | 280 |
| 283 return status; | 281 return status; |
| 284 } | 282 } |
| 285 | 283 |
| 286 NTSTATUS WINAPI TargetNtSetInformationFile( | 284 NTSTATUS WINAPI TargetNtSetInformationFile( |
| 287 NtSetInformationFileFunction orig_SetInformationFile, HANDLE file, | 285 NtSetInformationFileFunction orig_SetInformationFile, HANDLE file, |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 status = answer.nt_status; | 354 status = answer.nt_status; |
| 357 } while (false); | 355 } while (false); |
| 358 | 356 |
| 359 if (name) | 357 if (name) |
| 360 operator delete(name, NT_ALLOC); | 358 operator delete(name, NT_ALLOC); |
| 361 | 359 |
| 362 return status; | 360 return status; |
| 363 } | 361 } |
| 364 | 362 |
| 365 } // namespace sandbox | 363 } // namespace sandbox |
| OLD | NEW |