vold_decrypt: Add android 9.0 support

* build modified vdc_pie binary with 'checkpw' command support
  if building with Android 9.0 platform. That command and others
  we don't care about, are removed from Pie vdc. Our vdc_pie will
  run if system sdk version is > 27, otherwise system vdc is used.
  Code adapted from Android 9.0 system/vold/vdc.

* include prebuilt vdc_pie(arm, arm64) binary if building with lower
  than Android 9.0 platform - vdc_pie cannot be build from source
  with those platforms without additional imports from Android 9.0

* skip vdc "getpwtype" command for Pie - vds communicates with vold
  directly, no need for connection retries first

* add /system/bin/servicemanager to required services

* mount per-devive additional partitions needed for decryption
  listed with device BoardConfig.mk TW_CRYPTO_SYSTEM_VOLD_MOUNT
  flag like(space separated):
  TW_CRYPTO_SYSTEM_VOLD_MOUNT := vendor cust odm

* add function to backup crypto footer before running vdc commands
  and restore it after - on Xiaomi Mi Max 3 both Oreo and Pie stock
  roms vold alters cripto footer when decrypting data in recovery
  which causes system to ask for crypto password at next reboot
  although password stays unchanged. Crypto footer backup/restore
  added as workaround for systems whit ro.build.version.sdk > 25.
  Also to preserve crypto footer integrity decryption attempts are
  skipped if footer backup fails to ensure no data loss.
  Code adapted from
  https://gerrit.omnirom.org/#/c/android_bootable_recovery/+/31206/

Change-Id: I0a383f3843578fa55595cfea3b7c9c4431646a1a
9 files changed
tree: 8c90a6419398b1da04d45b9fde4269ded53ed91a
  1. .github/
  2. adbbu/
  3. applypatch/
  4. attr/
  5. bmlutils/
  6. boot_control/
  7. bootloader_message/
  8. bootloader_message_twrp/
  9. crypto/
  10. dosfstools/
  11. edify/
  12. etc/
  13. exfat/
  14. fb2png/
  15. flashutils/
  16. fonts/
  17. fuse/
  18. gpt/
  19. gui/
  20. htcdumlock/
  21. injecttwrp/
  22. libblkid/
  23. libcrecovery/
  24. libmincrypt/
  25. libpixelflinger/
  26. libtar/
  27. minadbd/
  28. minadbd21/
  29. minui/
  30. minui21/
  31. minuitwrp/
  32. minzip/
  33. mmcutils/
  34. mtdutils/
  35. mtp/
  36. openaes/
  37. orscmd/
  38. otafault/
  39. otautil/
  40. pigz/
  41. prebuilt/
  42. private/
  43. res/
  44. res-hdpi/
  45. res-mdpi/
  46. res-xhdpi/
  47. res-xxhdpi/
  48. res-xxxhdpi/
  49. scripts/
  50. sepolicy/
  51. simg2img/
  52. tests/
  53. toolbox/
  54. tools/
  55. toybox/
  56. twrpDigest/
  57. twrpTarMain/
  58. uncrypt/
  59. update_verifier/
  60. updater/
  61. verifier24/
  62. .clang-format
  63. .gitignore
  64. adb_install.cpp
  65. adb_install.h
  66. Android.bp
  67. Android.mk
  68. asn1_decoder.cpp
  69. asn1_decoder.h
  70. BasePartition.cpp
  71. bootloader.h
  72. CleanSpec.mk
  73. common.h
  74. data.cpp
  75. data.hpp
  76. default_device.cpp
  77. device.cpp
  78. device.h
  79. exclude.cpp
  80. exclude.hpp
  81. find_file.cpp
  82. find_file.hpp
  83. fixContexts.cpp
  84. fixContexts.hpp
  85. fuse.h
  86. fuse_sdcard_provider.cpp
  87. fuse_sdcard_provider.h
  88. fuse_sideload.cpp
  89. fuse_sideload.h
  90. fuse_sideload22.cpp
  91. fuse_sideload22.h
  92. infomanager.cpp
  93. infomanager.hpp
  94. install.cpp
  95. install.h
  96. installcommand.cpp
  97. installcommand.h
  98. interlace-frames.py
  99. legacy_properties.h
  100. legacy_property_service.cpp
  101. legacy_property_service.h
  102. mounts.c
  103. mounts.cpp
  104. mounts.h
  105. mounts.h~HEAD
  106. NOTICE
  107. openrecoveryscript.cpp
  108. openrecoveryscript.hpp
  109. OWNERS
  110. partition.cpp
  111. partitionmanager.cpp
  112. partitions.hpp
  113. PREUPLOAD.cfg
  114. progresstracking.cpp
  115. progresstracking.hpp
  116. README.md
  117. recovery-persist.cpp
  118. recovery-persist.rc
  119. recovery-refresh.cpp
  120. recovery-refresh.rc
  121. recovery.cpp
  122. recovery_ui.h
  123. roots.cpp
  124. roots.h
  125. rotate_logs.cpp
  126. rotate_logs.h
  127. screen_ui.cpp
  128. screen_ui.h
  129. set_metadata.cpp
  130. set_metadata.h
  131. stub_ui.h
  132. tarWrite.c
  133. tarWrite.h
  134. tw_atomic.cpp
  135. tw_atomic.hpp
  136. twcommon.h
  137. twinstall.cpp
  138. twinstall.h
  139. twinstallorig.cpp
  140. twinstallorig.h
  141. twrp-functions.cpp
  142. twrp-functions.hpp
  143. twrp.cpp
  144. twrpAdbBuFifo.cpp
  145. twrpAdbBuFifo.hpp
  146. twrpDigestDriver.cpp
  147. twrpDigestDriver.hpp
  148. twrpTar.cpp
  149. twrpTar.h
  150. twrpTar.hpp
  151. ui.cpp
  152. ui.h
  153. variables.h
  154. verifier.cpp
  155. verifier.h
  156. vr_device.cpp
  157. vr_ui.cpp
  158. vr_ui.h
  159. wear_device.cpp
  160. wear_ui.cpp
  161. wear_ui.h
  162. zipwrap.cpp
  163. zipwrap.hpp
README.md

Team Win Recovery Project (TWRP)

You can find a compiling guide here.