Revert "[securemem] Fix for use-after scope bug in SetPhysicalSecureHeaps"
This reverts commit 3bc92dc3e3f17f39b1555c2707b1659e85d1b436.
Reason for revert: This seems to be causing some securemem problems in smart displays: https://paste.googleplex.com/6421987821879296
Original change's description:
> [securemem] Fix for use-after scope bug in SetPhysicalSecureHeaps
>
> The fit::defer is run after response goes out of scope (because of C++
> destructor invocation order).
>
> Fixed: 48997
>
> Change-Id: Idce68a6cb08668cc49fc349c218e7394c9f67279
TBR=bprosnitz@google.com,pascallouis@google.com
Change-Id: I6843a7e1d6945237991558575b4a40ebe89dadea
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
diff --git a/src/devices/securemem/drivers/aml-securemem/sysmem-secure-mem-server.cc b/src/devices/securemem/drivers/aml-securemem/sysmem-secure-mem-server.cc
index d3c6c3b..bcab508 100644
--- a/src/devices/securemem/drivers/aml-securemem/sysmem-secure-mem-server.cc
+++ b/src/devices/securemem/drivers/aml-securemem/sysmem-secure-mem-server.cc
@@ -115,17 +115,22 @@
llcpp::fuchsia::sysmem::SecureMem::Interface::SetPhysicalSecureHeapsCompleter::Sync completer) {
ZX_DEBUG_ASSERT(thrd_current() == loop_thread_);
// must out-live |complete|
+ fidl::aligned<llcpp::fuchsia::sysmem::SecureMem_SetPhysicalSecureHeaps_Response> response;
+ // must out-live |complete|
llcpp::fuchsia::sysmem::SecureMem_SetPhysicalSecureHeaps_Result result;
+ // ~complete before ~result or ~response
+ auto complete = fit::defer([&completer, &result] {
+ ZX_DEBUG_ASSERT(!result.has_invalid_tag());
+ completer.Reply(std::move(result));
+ });
zx_status_t status = SetPhysicalSecureHeapsInternal(heaps);
if (status != ZX_OK) {
LOG(ERROR, "SetPhysicalSecureHeapsInternal() failed - status: %d", status);
result.set_err(fidl::unowned_ptr(&status));
return;
}
- fidl::aligned<llcpp::fuchsia::sysmem::SecureMem_SetPhysicalSecureHeaps_Response> response;
result.set_response(fidl::unowned_ptr(&response));
- ZX_DEBUG_ASSERT(!result.has_invalid_tag());
- completer.Reply(std::move(result));
+ // ~complete, ~result, ~response in that order
}
void SysmemSecureMemServer::PostToLoop(fit::closure to_run) {