| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "debug.h" | 5 #include "debug.h" | 
| 6 #include "sandbox_impl.h" | 6 #include "sandbox_impl.h" | 
| 7 | 7 | 
| 8 namespace { | 8 namespace { | 
| 9 | 9 | 
| 10 bool AllowedSetSockOpt(const Sandbox::SetSockOpt& setsockopt_req) { | 10 bool AllowedSetSockOpt(const Sandbox::SetSockOpt& setsockopt_req) { | 
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 399   // Unsupported flag encountered. Deny the call. | 399   // Unsupported flag encountered. Deny the call. | 
| 400   if (sendto_req.flags & | 400   if (sendto_req.flags & | 
| 401       ~(MSG_CONFIRM|MSG_DONTWAIT|MSG_EOR|MSG_MORE|MSG_NOSIGNAL|MSG_OOB)) { | 401       ~(MSG_CONFIRM|MSG_DONTWAIT|MSG_EOR|MSG_MORE|MSG_NOSIGNAL|MSG_OOB)) { | 
| 402     SecureMem::abandonSystemCall(*info, -EINVAL); | 402     SecureMem::abandonSystemCall(*info, -EINVAL); | 
| 403     return false; | 403     return false; | 
| 404   } | 404   } | 
| 405 | 405 | 
| 406   // Sending data on a connected socket is similar to calling write(). | 406   // Sending data on a connected socket is similar to calling write(). | 
| 407   // Allow it. | 407   // Allow it. | 
| 408   SecureMem::sendSystemCall(*info, SecureMem::SEND_UNLOCKED, sendto_req.sockfd, | 408   SecureMem::sendSystemCall(*info, SecureMem::SEND_UNLOCKED, sendto_req.sockfd, | 
| 409                             sendto_req.buf, sendto_req.len, | 409                             const_cast<void*>(sendto_req.buf), sendto_req.len, | 
| 410                             sendto_req.flags, sendto_req.to, | 410                             sendto_req.flags, const_cast<void*>(sendto_req.to), | 
| 411                             sendto_req.tolen); | 411                             sendto_req.tolen); | 
| 412   return true; | 412   return true; | 
| 413 } | 413 } | 
| 414 | 414 | 
| 415 bool Sandbox::process_setsockopt(const SyscallRequestInfo* info) { | 415 bool Sandbox::process_setsockopt(const SyscallRequestInfo* info) { | 
| 416   // Read request | 416   // Read request | 
| 417   SetSockOpt setsockopt_req; | 417   SetSockOpt setsockopt_req; | 
| 418   SysCalls sys; | 418   SysCalls sys; | 
| 419   if (read(sys, info->trustedProcessFd, &setsockopt_req, | 419   if (read(sys, info->trustedProcessFd, &setsockopt_req, | 
| 420            sizeof(setsockopt_req)) != sizeof(setsockopt_req)) { | 420            sizeof(setsockopt_req)) != sizeof(setsockopt_req)) { | 
| 421     die("Failed to read parameters for setsockopt() [process]"); | 421     die("Failed to read parameters for setsockopt() [process]"); | 
| 422   } | 422   } | 
| 423 | 423 | 
| 424   if (AllowedSetSockOpt(setsockopt_req)) { | 424   if (AllowedSetSockOpt(setsockopt_req)) { | 
| 425     SecureMem::sendSystemCall(*info, SecureMem::SEND_UNLOCKED, | 425     SecureMem::sendSystemCall(*info, SecureMem::SEND_UNLOCKED, | 
| 426                               setsockopt_req.sockfd, | 426                               setsockopt_req.sockfd, | 
| 427                               setsockopt_req.level, setsockopt_req.optname, | 427                               setsockopt_req.level, setsockopt_req.optname, | 
| 428                               setsockopt_req.optval, setsockopt_req.optlen); | 428                               const_cast<void*>(setsockopt_req.optval), | 
|  | 429                               setsockopt_req.optlen); | 
| 429     return true; | 430     return true; | 
| 430   } | 431   } | 
| 431   SecureMem::abandonSystemCall(*info, -EINVAL); | 432   SecureMem::abandonSystemCall(*info, -EINVAL); | 
| 432   return false; | 433   return false; | 
| 433 } | 434 } | 
| 434 | 435 | 
| 435 bool Sandbox::process_getsockopt(const SyscallRequestInfo* info) { | 436 bool Sandbox::process_getsockopt(const SyscallRequestInfo* info) { | 
| 436   // Read request | 437   // Read request | 
| 437   GetSockOpt getsockopt_req; | 438   GetSockOpt getsockopt_req; | 
| 438   SysCalls sys; | 439   SysCalls sys; | 
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 905     default: | 906     default: | 
| 906     deny: | 907     deny: | 
| 907       SecureMem::abandonSystemCall(*info, rc); | 908       SecureMem::abandonSystemCall(*info, rc); | 
| 908       return false; | 909       return false; | 
| 909   } | 910   } | 
| 910 } | 911 } | 
| 911 | 912 | 
| 912 #endif | 913 #endif | 
| 913 | 914 | 
| 914 } // namespace | 915 } // namespace | 
| OLD | NEW | 
|---|