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

Unified Diff: mojo/edk/system/node_controller.cc

Issue 1988413002: [mojo-edk] Sanity checks on ports message parsing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 7 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
« no previous file with comments | « mojo/edk/system/node_controller.h ('k') | mojo/edk/system/ports/message.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/node_controller.cc
diff --git a/mojo/edk/system/node_controller.cc b/mojo/edk/system/node_controller.cc
index 58c87e24e3662dfbd7929cd853510b24ff90b4ff..40c57eeac58f98a668ee3634303dd9673967cb30 100644
--- a/mojo/edk/system/node_controller.cc
+++ b/mojo/edk/system/node_controller.cc
@@ -786,20 +786,28 @@ void NodeController::OnAcceptBrokerClient(const ports::NodeName& from_node,
DVLOG(1) << "Child " << name_ << " accepted by broker " << broker_name;
}
-void NodeController::OnPortsMessage(Channel::MessagePtr channel_message) {
+void NodeController::OnPortsMessage(const ports::NodeName& from_node,
+ Channel::MessagePtr channel_message) {
DCHECK(io_task_runner_->RunsTasksOnCurrentThread());
void* data;
size_t num_data_bytes;
NodeChannel::GetPortsMessageData(
channel_message.get(), &data, &num_data_bytes);
+ if (!num_data_bytes) {
+ DropPeer(from_node);
+ return;
+ }
size_t num_header_bytes, num_payload_bytes, num_ports_bytes;
- ports::Message::Parse(data,
- num_data_bytes,
- &num_header_bytes,
- &num_payload_bytes,
- &num_ports_bytes);
+ if (!ports::Message::Parse(data,
+ num_data_bytes,
+ &num_header_bytes,
+ &num_payload_bytes,
+ &num_ports_bytes)) {
+ DropPeer(from_node);
+ return;
+ }
CHECK(channel_message);
ports::ScopedMessage message(
@@ -928,7 +936,7 @@ void NodeController::OnRelayPortsMessage(const ports::NodeName& from_node,
if (destination == name_) {
// Great, we can deliver this message locally.
- OnPortsMessage(std::move(message));
+ OnPortsMessage(from_node, std::move(message));
return;
}
« no previous file with comments | « mojo/edk/system/node_controller.h ('k') | mojo/edk/system/ports/message.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698