Do not try to handle non ZX_PKT_TYPE_SIGNAL_ONE incorrectly
Closes https://github.com/dart-lang/sdk/pull/50240
TEST=building for fuchsia and testing on Nest Hub device.
GitOrigin-RevId: 28a6d9d8654f81cdf86161b1fc884b289a035392
Change-Id: Ie84d7943ea0d874fe4e5b421ddf47b8f0a884628
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/264640
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/runtime/bin/eventhandler_fuchsia.cc b/runtime/bin/eventhandler_fuchsia.cc
index 1f14ffb..ec2336b 100644
--- a/runtime/bin/eventhandler_fuchsia.cc
+++ b/runtime/bin/eventhandler_fuchsia.cc
@@ -17,6 +17,7 @@
#include <sys/socket.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <zircon/assert.h>
#include <zircon/status.h>
#include <zircon/syscalls.h>
#include <zircon/syscalls/object.h>
@@ -545,16 +546,24 @@
LOG_INFO("HandlePacket: Got event packet: key=%lx\n", pkt->key);
LOG_INFO("HandlePacket: Got event packet: type=%x\n", pkt->type);
LOG_INFO("HandlePacket: Got event packet: status=%d\n", pkt->status);
+
if (pkt->type == ZX_PKT_TYPE_USER) {
ASSERT(pkt->key == kInterruptPacketKey);
InterruptMessage* msg = reinterpret_cast<InterruptMessage*>(&pkt->user);
HandleInterrupt(msg);
return;
}
- LOG_INFO("HandlePacket: Got event packet: observed = %x\n",
- pkt->signal.observed);
- LOG_INFO("HandlePacket: Got event packet: count = %ld\n", pkt->signal.count);
+ if (pkt->type != ZX_PKT_TYPE_SIGNAL_ONE) {
+ LOG_ERR("HandlePacket: Got unexpected packet type: key=%x\n", pkt->type);
+ return;
+ }
+
+ // Handle pkt->type == ZX_PKT_TYPE_SIGNAL_ONE
+ ZX_ASSERT(pkt->key != 0);
+ LOG_INFO("HandlePacket: Got event packet: observed = %x\n",
+ pkt->signal.observed);
+ LOG_INFO("HandlePacket: Got event packet: count = %ld\n", pkt->signal.count);
DescriptorInfo* di = reinterpret_cast<DescriptorInfo*>(pkt->key);
zx_signals_t observed = pkt->signal.observed;
const intptr_t old_mask = di->Mask();