summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chromium/mojo/core/node_controller.cc23
1 files changed, 16 insertions, 7 deletions
diff --git a/chromium/mojo/core/node_controller.cc b/chromium/mojo/core/node_controller.cc
index 823a4619efa..a297c500215 100644
--- a/chromium/mojo/core/node_controller.cc
+++ b/chromium/mojo/core/node_controller.cc
@@ -943,7 +943,11 @@ void NodeController::OnBrokerClientAdded(const ports::NodeName& from_node,
void NodeController::OnAcceptBrokerClient(const ports::NodeName& from_node,
const ports::NodeName& broker_name,
PlatformHandle broker_channel) {
- DCHECK(!GetConfiguration().is_broker_process);
+ if (GetConfiguration().is_broker_process) {
+ // The broker should never receive this message from anyone.
+ DropPeer(from_node, nullptr);
+ return;
+ }
// This node should already have an inviter in bootstrap mode.
ports::NodeName inviter_name;
@@ -954,8 +958,13 @@ void NodeController::OnAcceptBrokerClient(const ports::NodeName& from_node,
inviter = bootstrap_inviter_channel_;
bootstrap_inviter_channel_ = nullptr;
}
- DCHECK(inviter_name == from_node);
- DCHECK(inviter);
+
+ if (inviter_name != from_node || !inviter ||
+ broker_name == ports::kInvalidNodeName) {
+ // We are not expecting this message. Assume the source is hostile.
+ DropPeer(from_node, nullptr);
+ return;
+ }
base::queue<ports::NodeName> pending_broker_clients;
std::unordered_map<ports::NodeName, OutgoingMessageQueue>
@@ -966,22 +975,22 @@ void NodeController::OnAcceptBrokerClient(const ports::NodeName& from_node,
std::swap(pending_broker_clients, pending_broker_clients_);
std::swap(pending_relay_messages, pending_relay_messages_);
}
- DCHECK(broker_name != ports::kInvalidNodeName);
// It's now possible to add both the broker and the inviter as peers.
// Note that the broker and inviter may be the same node.
scoped_refptr<NodeChannel> broker;
if (broker_name == inviter_name) {
- DCHECK(!broker_channel.is_valid());
broker = inviter;
- } else {
- DCHECK(broker_channel.is_valid());
+ } else if (broker_channel.is_valid()) {
broker = NodeChannel::Create(
this,
ConnectionParams(PlatformChannelEndpoint(std::move(broker_channel))),
Channel::HandlePolicy::kAcceptHandles, io_task_runner_,
ProcessErrorCallback());
AddPeer(broker_name, broker, true /* start_channel */);
+ } else {
+ DropPeer(from_node, nullptr);
+ return;
}
AddPeer(inviter_name, inviter, false /* start_channel */);