OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include "native_client/src/trusted/nonnacl_util/sel_ldr_launcher.h" | 7 #include "native_client/src/trusted/nonnacl_util/sel_ldr_launcher.h" |
8 | 8 |
9 #include "native_client/src/include/nacl_macros.h" | 9 #include "native_client/src/include/nacl_macros.h" |
10 #include "native_client/src/public/secure_service.h" | 10 #include "native_client/src/public/secure_service.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 if (NACL_SRPC_RESULT_OK != rpc_result) { | 120 if (NACL_SRPC_RESULT_OK != rpc_result) { |
121 NaClLog(LOG_ERROR, "SelLdrLauncherBase::LoadModule: " | 121 NaClLog(LOG_ERROR, "SelLdrLauncherBase::LoadModule: " |
122 "rpc_result=%d is not successful\n", | 122 "rpc_result=%d is not successful\n", |
123 static_cast<int>(rpc_result)); | 123 static_cast<int>(rpc_result)); |
124 NaClSrpcDtor(command); | 124 NaClSrpcDtor(command); |
125 return false; | 125 return false; |
126 } | 126 } |
127 return true; | 127 return true; |
128 } | 128 } |
129 | 129 |
130 bool SelLdrLauncherBase::SetupCommandAndLoad(NaClSrpcChannel* command, | |
131 DescWrapper* nexe) { | |
132 if (!SetupCommand(command)) { | |
133 return false; | |
134 } | |
135 if (nexe != NULL) { | |
136 if (!LoadModule(command, nexe)) { | |
137 return false; | |
138 } | |
139 } | |
140 return true; | |
141 } | |
142 | |
143 bool SelLdrLauncherBase::StartModule(NaClSrpcChannel* command) { | 130 bool SelLdrLauncherBase::StartModule(NaClSrpcChannel* command) { |
144 // Start untrusted code module. | 131 // Start untrusted code module. |
145 int start_result; | 132 int start_result; |
146 NaClSrpcResultCodes rpc_result = NaClSrpcInvokeBySignature( | 133 NaClSrpcResultCodes rpc_result = NaClSrpcInvokeBySignature( |
147 command, | 134 command, |
148 NACL_SECURE_SERVICE_START_MODULE, | 135 NACL_SECURE_SERVICE_START_MODULE, |
149 &start_result); | 136 &start_result); |
150 NaClLog(4, "SelLdrLauncher::StartModule rpc result %d\n", | 137 NaClLog(4, "SelLdrLauncherBase::StartModule rpc result %d\n", |
151 static_cast<int>(rpc_result)); | 138 static_cast<int>(rpc_result)); |
152 if (NACL_SRPC_RESULT_OK != rpc_result || LOAD_OK != start_result) { | 139 if (NACL_SRPC_RESULT_OK != rpc_result || LOAD_OK != start_result) { |
153 NaClSrpcDtor(command); | 140 NaClSrpcDtor(command); |
154 NaClLog(LOG_ERROR, "SelLdrLauncherBase::StartModule: " | 141 NaClLog(LOG_ERROR, "SelLdrLauncherBase::StartModule: " |
155 "start_module failed: rpc_result=%d, start_result=%d (%s)\n", | 142 "start_module failed: rpc_result=%d, start_result=%d (%s)\n", |
156 static_cast<int>(rpc_result), start_result, | 143 static_cast<int>(rpc_result), start_result, |
157 NaClErrorString(static_cast<NaClErrorCode>(start_result))); | 144 NaClErrorString(static_cast<NaClErrorCode>(start_result))); |
158 return false; | 145 return false; |
159 } | 146 } |
160 return true; | 147 return true; |
161 } | 148 } |
162 | 149 |
163 bool SelLdrLauncherBase::SetupAppChannel(NaClSrpcChannel* out_app_chan) { | 150 bool SelLdrLauncherBase::SetupAppChannel(NaClSrpcChannel* out_app_chan) { |
164 // Connect to the untrusted service itself. | 151 // Connect to the untrusted service itself. |
165 scoped_ptr<DescWrapper> untrusted_desc(socket_addr_->Connect()); | 152 scoped_ptr<DescWrapper> untrusted_desc(socket_addr_->Connect()); |
166 if (untrusted_desc == NULL) { | 153 if (untrusted_desc == NULL) { |
167 NaClLog(LOG_ERROR, "SelLdrLauncher::StartModuleAndSetupAppChannel: " | 154 NaClLog(LOG_ERROR, "SelLdrLauncherBase::SetupAppChannel: " |
168 "Connect failed\n"); | 155 "Connect failed\n"); |
169 return false; | 156 return false; |
170 } | 157 } |
171 // Start the SRPC client to communicate with the untrusted service | 158 // Start the SRPC client to communicate with the untrusted service |
172 // SRPC client takes an additional reference to untrusted_desc. | 159 // SRPC client takes an additional reference to untrusted_desc. |
173 if (!NaClSrpcClientCtor(out_app_chan, untrusted_desc->desc())) { | 160 if (!NaClSrpcClientCtor(out_app_chan, untrusted_desc->desc())) { |
174 NaClLog(LOG_ERROR, "SelLdrLauncherBase::SetupAppChannel: " | 161 NaClLog(LOG_ERROR, "SelLdrLauncherBase::SetupAppChannel: " |
175 "NaClSrpcClientCtor failed\n"); | 162 "NaClSrpcClientCtor failed\n"); |
176 return false; | 163 return false; |
177 } | 164 } |
178 return true; | 165 return true; |
179 } | 166 } |
180 | 167 |
181 // Sends the SRPC to start the nexe over |command| and sets up the application | |
182 // SRPC chanel |out_app_chan|. | |
183 bool SelLdrLauncherBase::StartModuleAndSetupAppChannel( | |
184 NaClSrpcChannel* command, | |
185 NaClSrpcChannel* out_app_chan) { | |
186 if (!StartModule(command)) { | |
187 return false; | |
188 } | |
189 if (!SetupAppChannel(out_app_chan)) { | |
190 return false; | |
191 } | |
192 return true; | |
193 } | |
194 | |
195 DescWrapper* SelLdrLauncherBase::Wrap(NaClDesc* raw_desc) { | |
196 CHECK(factory_ != NULL); | |
197 return factory_->MakeGeneric(raw_desc); | |
198 } | |
199 | |
200 DescWrapper* SelLdrLauncherBase::WrapCleanup(NaClDesc* raw_desc) { | |
201 CHECK(factory_ != NULL); | |
202 return factory_->MakeGenericCleanup(raw_desc); | |
203 } | |
204 | |
205 } // namespace nacl | 168 } // namespace nacl |
OLD | NEW |