From d445b6c8d9f1551816bf1ed30fd437b202a4220c Mon Sep 17 00:00:00 2001
From: Todd Eisenberger <teisenbe@google.com>
Date: Wed, 13 Mar 2019 13:13:38 -0700
Subject: [PATCH] [devmgr] Use abort() instead of exit()

The code was not written with the expectation that global dtors run, and
executing them currently results in ASAN violations.

Change-Id: Ib9e709483b30a8308af59009c0cbb22fec1fd2e1
---
 zircon/system/core/devmgr/devcoordinator/devfs.cpp | 2 +-
 zircon/system/core/devmgr/devcoordinator/main.cpp  | 2 +-
 zircon/system/core/devmgr/devhost/devhost.cpp      | 6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/zircon/system/core/devmgr/devcoordinator/devfs.cpp b/zircon/system/core/devmgr/devcoordinator/devfs.cpp
index 2d84851bd9d..a3a036c56aa 100644
--- a/zircon/system/core/devmgr/devcoordinator/devfs.cpp
+++ b/zircon/system/core/devmgr/devcoordinator/devfs.cpp
@@ -833,7 +833,7 @@ void DcIostate::HandleRpc(fbl::unique_ptr<DcIostate> ios, async_dispatcher_t* di
         });
     } else {
         log(ERROR, "devcoordinator: DcIostate::HandleRpc: invalid signals %x\n", signal->observed);
-        exit(0);
+        abort();
     }
     // Do not start waiting again, and destroy |ios|
 }
diff --git a/zircon/system/core/devmgr/devcoordinator/main.cpp b/zircon/system/core/devmgr/devcoordinator/main.cpp
index a88c22a10d0..3a5a75cb5ad 100644
--- a/zircon/system/core/devmgr/devcoordinator/main.cpp
+++ b/zircon/system/core/devmgr/devcoordinator/main.cpp
@@ -770,7 +770,7 @@ void ParseArgs(int argc, char** argv, devmgr::DevmgrArgs* out) {
         for (const auto& option : options) {
             printf("  --%s\n", option.name);
         }
-        exit(1);
+        abort();
     };
 
     auto check_not_duplicated = [print_usage_and_exit](const char* arg) {
diff --git a/zircon/system/core/devmgr/devhost/devhost.cpp b/zircon/system/core/devmgr/devhost/devhost.cpp
index 48dbaf26008..50d14d0b859 100644
--- a/zircon/system/core/devmgr/devhost/devhost.cpp
+++ b/zircon/system/core/devmgr/devhost/devhost.cpp
@@ -632,7 +632,7 @@ void DevcoordinatorConnection::HandleRpc(fbl::unique_ptr<DevcoordinatorConnectio
         zx_status_t r = dh_handle_rpc_read(wait->object(), conn.get());
         if (r != ZX_OK) {
             log(ERROR, "devhost: devmgr rpc unhandleable ios=%p r=%d. fatal.\n", conn.get(), r);
-            exit(0);
+            abort();
         }
         BeginWait(std::move(conn), dispatcher);
         return;
@@ -650,7 +650,7 @@ void DevcoordinatorConnection::HandleRpc(fbl::unique_ptr<DevcoordinatorConnectio
         }
 
         log(ERROR, "devhost: devmgr disconnected! fatal. (conn=%p)\n", conn.get());
-        exit(0);
+        abort();
     }
     log(ERROR, "devhost: no work? %08x\n", signal->observed);
     BeginWait(std::move(conn), dispatcher);
@@ -679,7 +679,7 @@ void DevfsConnection::HandleRpc(fbl::unique_ptr<DevfsConnection> conn,
         });
     } else {
         printf("dh_handle_fidl_rpc: invalid signals %x\n", signal->observed);
-        exit(0);
+        abort();
     }
 
     // We arrive here if devhost_fidl_handler was a clean close (ERR_DISPATCHER_DONE),
-- 
GitLab