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

Unified Diff: chrome/browser/nacl_host/nacl_process_host.cc

Issue 11787029: Remove the socket_count parameter from NaCl Launch IPC messages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/nacl_host/nacl_process_host.cc
diff --git a/chrome/browser/nacl_host/nacl_process_host.cc b/chrome/browser/nacl_host/nacl_process_host.cc
index 7d628a77f132a8915950097ebd68f4848a826452..fbd32126514d178adc16ace8b87b7efb79f33ef4 100644
--- a/chrome/browser/nacl_host/nacl_process_host.cc
+++ b/chrome/browser/nacl_host/nacl_process_host.cc
@@ -127,8 +127,10 @@ ppapi::PpapiPermissions GetNaClPermissions(uint32 permission_bits) {
} // namespace
struct NaClProcessHost::NaClInternal {
- std::vector<nacl::Handle> sockets_for_renderer;
+ nacl::Handle socket_for_renderer;
std::vector<nacl::Handle> sockets_for_sel_ldr;
Mark Seaborn 2013/01/08 00:40:57 You can simplify sockets_for_sel_ldr too. It's on
jvoung (off chromium) 2013/01/08 19:35:39 Done.
+
+ NaClInternal() : socket_for_renderer(nacl::kInvalidHandle) { }
};
// -----------------------------------------------------------------------------
@@ -204,11 +206,12 @@ NaClProcessHost::~NaClProcessHost() {
LOG(ERROR) << message;
}
- for (size_t i = 0; i < internal_->sockets_for_renderer.size(); i++) {
- if (nacl::Close(internal_->sockets_for_renderer[i]) != 0) {
+ if (internal_->socket_for_renderer != nacl::kInvalidHandle) {
+ if (nacl::Close(internal_->socket_for_renderer) != 0) {
NOTREACHED() << "nacl::Close() failed";
}
}
+
for (size_t i = 0; i < internal_->sockets_for_sel_ldr.size(); i++) {
if (nacl::Close(internal_->sockets_for_sel_ldr[i]) != 0) {
NOTREACHED() << "nacl::Close() failed";
@@ -252,21 +255,12 @@ void NaClProcessHost::EarlyStartup() {
void NaClProcessHost::Launch(
ChromeRenderMessageFilter* chrome_render_message_filter,
- int socket_count,
IPC::Message* reply_msg,
scoped_refptr<ExtensionInfoMap> extension_info_map) {
chrome_render_message_filter_ = chrome_render_message_filter;
reply_msg_ = reply_msg;
extension_info_map_ = extension_info_map;
- // Place an arbitrary limit on the number of sockets to limit
- // exposure in case the renderer is compromised. We can increase
- // this if necessary.
- if (socket_count > 8) {
- delete this;
- return;
- }
-
// Start getting the IRT open asynchronously while we launch the NaCl process.
// We'll make sure this actually finished in StartWithLaunchedProcess, below.
NaClBrowser* nacl_browser = NaClBrowser::GetInstance();
@@ -286,18 +280,16 @@ void NaClProcessHost::Launch(
// This means the sandboxed renderer cannot send handles to the
// browser process.
- for (int i = 0; i < socket_count; i++) {
- nacl::Handle pair[2];
- // Create a connected socket
- if (nacl::SocketPair(pair) == -1) {
- delete this;
- return;
- }
- internal_->sockets_for_renderer.push_back(pair[0]);
- internal_->sockets_for_sel_ldr.push_back(pair[1]);
- SetCloseOnExec(pair[0]);
- SetCloseOnExec(pair[1]);
+ nacl::Handle pair[2];
+ // Create a connected socket
+ if (nacl::SocketPair(pair) == -1) {
+ delete this;
+ return;
}
+ internal_->socket_for_renderer = pair[0];
+ internal_->sockets_for_sel_ldr.push_back(pair[1]);
+ SetCloseOnExec(pair[0]);
+ SetCloseOnExec(pair[1]);
// Launch the process
if (!LaunchSelLdr()) {
@@ -618,33 +610,31 @@ void NaClProcessHost::OnResourcesReady() {
bool NaClProcessHost::ReplyToRenderer(
const IPC::ChannelHandle& channel_handle) {
- std::vector<nacl::FileDescriptor> handles_for_renderer;
- for (size_t i = 0; i < internal_->sockets_for_renderer.size(); i++) {
+ nacl::FileDescriptor handle_for_renderer;
#if defined(OS_WIN)
- // Copy the handle into the renderer process.
- HANDLE handle_in_renderer;
- if (!DuplicateHandle(base::GetCurrentProcessHandle(),
- reinterpret_cast<HANDLE>(
- internal_->sockets_for_renderer[i]),
- chrome_render_message_filter_->peer_handle(),
- &handle_in_renderer,
- 0, // Unused given DUPLICATE_SAME_ACCESS.
- FALSE,
- DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) {
- DLOG(ERROR) << "DuplicateHandle() failed";
- return false;
- }
- handles_for_renderer.push_back(
- reinterpret_cast<nacl::FileDescriptor>(handle_in_renderer));
+ // Copy the handle into the renderer process.
+ HANDLE handle_in_renderer;
+ if (!DuplicateHandle(base::GetCurrentProcessHandle(),
+ reinterpret_cast<HANDLE>(
+ internal_->socket_for_renderer),
+ chrome_render_message_filter_->peer_handle(),
+ &handle_in_renderer,
+ 0, // Unused given DUPLICATE_SAME_ACCESS.
+ FALSE,
+ DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) {
+ DLOG(ERROR) << "DuplicateHandle() failed";
+ return false;
+ }
+ handle_for_renderer = reinterpret_cast<nacl::FileDescriptor>(
+ handle_in_renderer);
#else
- // No need to dup the imc_handle - we don't pass it anywhere else so
- // it cannot be closed.
- nacl::FileDescriptor imc_handle;
- imc_handle.fd = internal_->sockets_for_renderer[i];
- imc_handle.auto_close = true;
- handles_for_renderer.push_back(imc_handle);
+ // No need to dup the imc_handle - we don't pass it anywhere else so
+ // it cannot be closed.
+ nacl::FileDescriptor imc_handle;
+ imc_handle.fd = internal_->socket_for_renderer;
+ imc_handle.auto_close = true;
+ handle_for_renderer = imc_handle;
#endif
- }
#if defined(OS_WIN)
// If we are on 64-bit Windows, the NaCl process's sandbox is
@@ -662,12 +652,12 @@ bool NaClProcessHost::ReplyToRenderer(
const ChildProcessData& data = process_->GetData();
ChromeViewHostMsg_LaunchNaCl::WriteReplyParams(
- reply_msg_, handles_for_renderer,
+ reply_msg_, handle_for_renderer,
channel_handle, base::GetProcId(data.handle), data.id);
chrome_render_message_filter_->Send(reply_msg_);
chrome_render_message_filter_ = NULL;
reply_msg_ = NULL;
- internal_->sockets_for_renderer.clear();
+ internal_->socket_for_renderer = nacl::kInvalidHandle;
return true;
}
« no previous file with comments | « chrome/browser/nacl_host/nacl_process_host.h ('k') | chrome/browser/renderer_host/chrome_render_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698