microdroid_manager: wait for failure reason to transmit

Writing only 16 bytes at a time makes the race condition less likely to
happen, but, theoretically, it isn't a complete fix. Instead, use
`tcdrain` to block until the serial port driver knows all the data has
been trasmitted.

In the very unlikely case that the failure reason is larger than the
pipe capacity, this could cause a deadlock, so the pipe read is moved
into a new thread.

I was not able to reproduce the race condition either before or after
this change.

Bug: 220071963
Test: packages/modules/Virtualization/android/vm/vm_shell.sh start-microdroid
Change-Id: I3626e942f4a4ec86422c40befb28ee34f2682f22
2 files changed
tree: 14b5b8bb7897d7c5e1d9f7e2a8b0cb588f8d13f0
  1. android/
  2. build/
  3. docs/
  4. guest/
  5. libs/
  6. microfuchsia/
  7. tests/
  8. .clang-format
  9. .gitignore
  10. Android.bp
  11. dice_for_avf_guest.cddl
  12. OWNERS
  13. PREUPLOAD.cfg
  14. README.md
  15. rustfmt.toml
  16. TEST_MAPPING
README.md

Android Virtualization Framework (AVF)

Android Virtualization Framework (AVF) provides secure and private execution environments for executing code. AVF is ideal for security-oriented use cases that require stronger isolation assurances over those offered by Android’s app sandbox.

Visit our public doc site to learn more about what AVF is, what it is for, and how it is structured. This repository contains source code for userspace components of AVF.

If you want a quick start, see the getting started guideline and follow the steps there.

For in-depth explanations about individual topics and components, visit the following links.

AVF components:

AVF APIs:

How-Tos: