No description
Find a file
Eric Biggers b4faeb8d44 cryptfs: kill processes more quickly in wait_and_unmount()
In wait_and_unmount(), kill the processes with open files after umount()
has been failing for 2 seconds rather than 17 seconds.  This avoids a
long boot delay on devices that use FDE.

Detailed explanation:

On FDE devices, vold needs to unmount the tmpfs /data in order to mount
the real, decrypted /data.  On first boot, it also needs to unmount the
unencrypted /data in order to encrypt it in-place.

/data can't be unmounted if files are open inside it.  In theory, init
is responsible for killing all processes with open files in /data, via
the property trigger "vold.decrypt=trigger_shutdown_framework".

However, years ago, commit 6e8440fd50 ("cryptfs: kill processes with
open files on tmpfs /data") added a fallback where vold kills the
processes itself.  Since then, in practice people have increasingly been
relying on this fallback, as services keep being added that use /data
but don't get stopped by trigger_shutdown_framework.

This is slowing down boot, as vold sleeps for 17 seconds before it
actually kills the processes.

The problematic services include services that are now started
explicitly in the post-fs-data trigger rather than implicitly as part of
a class (e.g., tombstoned), as well as services that now need to be
started as part of one of the early-boot classes like core or early_hal
but can still open files in /data later (e.g. keystore2 and credstore).

Another complication is that on default-encrypted devices (devices with
no PIN/pattern/password), trigger_shutdown_framework isn't run at all,
but rather it's expected that the relevant services simply weren't
started yet.  This means that we can't fix the problem just by fixing
trigger_shutdown_framework to kill all the needed processes.

Therefore, given that the vold fallback is being relied on in practice,
and FDE won't be supported much longer anyway (so simple fixes are very
much preferable here), let's just change wait_and_unmount() in vold to
use more appropriate timeouts.  Instead of waiting for 17 seconds before
killing processes, just wait for 2 seconds.  Keep the total timeout of
20 seconds, but spend most of it retrying killing the processes, and
only if the unmount is still failing.

This avoids the long boot delays in practice.

Bug: 187231646
Bug: 186165644
Test: Tested FDE on Cuttlefish, and checked logcat to verify that the
      boot delay is gone.
Change-Id: Id06a9615a87988c8336396c49ee914b35f8d585b
2021-05-10 20:44:07 -07:00
bench [LSC] Add LOCAL_LICENSE_KINDS to system/vold 2021-02-14 10:37:25 -08:00
binder/android/os vold: add getUnlockedUsers() method to Binder interface 2021-04-13 10:53:00 -07:00
fs mkfs_f2fs: give the log in kernel 2021-04-15 20:24:04 -07:00
model Always unmount data and obb directory that mounted 2021-05-05 14:44:16 +00:00
tests Add syncs when creating parent directories 2021-02-16 16:18:53 -08:00
.clang-format vold: use system-clang-format 2019-09-16 12:00:40 -07:00
Android.bp Make vold use keystore2 instead of keymaster 2021-04-08 00:16:01 +00:00
AppFuseUtil.cpp AppFuseUtil: Call ForceUnmount before PrepareDir. 2019-04-09 18:45:32 +01:00
AppFuseUtil.h Extract AppFuse as a util 2018-11-14 07:28:06 +00:00
Benchmark.cpp vold: Use Wakelock::tryGet() 2021-02-22 17:24:51 -05:00
Benchmark.h clang-format many files. 2018-09-18 15:41:22 -07:00
BenchmarkGen.h Abort long-running benchmarks, report progress. 2017-11-07 09:57:12 -07:00
Checkpoint.cpp IdleMaint: use fstab_default from VoldUtil 2020-10-15 16:54:38 -07:00
Checkpoint.h Add an isCheckpointing() binder call for adb remount. 2020-06-10 23:52:25 -07:00
CleanSpec.mk Add an empty CleanSpec.mk 2010-03-08 18:05:25 -08:00
cryptfs.cpp cryptfs: kill processes more quickly in wait_and_unmount() 2021-05-10 20:44:07 -07:00
cryptfs.h Refactor key generation to handle both normal and metadata encryption. 2020-02-14 13:59:06 -08:00
CryptoType.cpp Generalize CryptoType infrastructure 2020-02-14 00:48:27 -08:00
CryptoType.h Generalize CryptoType infrastructure 2020-02-14 00:48:27 -08:00
Devmapper.cpp Replace manual dm ioctls with libdm. 2019-05-13 13:07:12 -07:00
Devmapper.h Replace manual dm ioctls with libdm. 2019-05-13 13:07:12 -07:00
EncryptInplace.cpp EncryptInplace: fsync cryptofd before reporting success 2020-11-04 19:24:19 -08:00
EncryptInplace.h Refactor EncryptInplace.cpp 2020-11-03 14:16:32 -08:00
FileDeviceUtils.cpp Remove excess logging in secdiscard 2019-03-21 19:13:51 +00:00
FileDeviceUtils.h clang-format many files. 2018-09-18 15:41:22 -07:00
FsCrypt.cpp vold: add getUnlockedUsers() method to Binder interface 2021-04-13 10:53:00 -07:00
FsCrypt.h vold: add getUnlockedUsers() method to Binder interface 2021-04-13 10:53:00 -07:00
IdleMaint.cpp vold: Use Wakelock::tryGet() 2021-02-22 17:24:51 -05:00
IdleMaint.h Add functions to handle idle maintenance 2017-11-14 15:12:30 -08:00
KeyBuffer.cpp clang-format many files. 2018-09-18 15:41:22 -07:00
KeyBuffer.h clang-format many files. 2018-09-18 15:41:22 -07:00
Keymaster.cpp Merge "Fix cryptfs RSA signing with keystore2" 2021-04-26 18:51:13 +00:00
Keymaster.h Remove Keymaster::isSecure() and simplify callers 2021-04-08 00:47:54 +00:00
KeyStorage.cpp Make vold use keystore2 instead of keymaster 2021-04-08 00:16:01 +00:00
KeyStorage.h Remove HardwareAuthToken support from vold::Keymaster 2021-04-07 02:05:35 -07:00
KeyUtil.cpp KeyStorage: improve logging for key generation 2021-03-15 12:44:36 -07:00
KeyUtil.h KeyStorage: rework key upgrade handling 2020-11-05 19:58:26 -08:00
Loop.cpp Silence useless LOOP_GET_STATUS64 warnings 2020-10-15 15:26:27 -07:00
Loop.h clang-format many files. 2018-09-18 15:41:22 -07:00
main.cpp Acknowledge the 'nofail' fs_mgr flag and skip the expected failure. 2020-05-06 16:45:23 +00:00
MetadataCrypt.cpp Add syncs when creating parent directories 2021-02-16 16:18:53 -08:00
MetadataCrypt.h Let vold format the encrypted partition 2020-12-22 11:28:50 -08:00
MoveStorage.cpp vold: Use Wakelock::tryGet() 2021-02-22 17:24:51 -05:00
MoveStorage.h clang-format many files. 2018-09-18 15:41:22 -07:00
NetlinkHandler.cpp vold: remove unused stop() methods 2020-09-23 10:02:25 -07:00
NetlinkHandler.h vold: remove unused stop() methods 2020-09-23 10:02:25 -07:00
NetlinkManager.cpp vold: remove unused stop() methods 2020-09-23 10:02:25 -07:00
NetlinkManager.h vold: remove unused stop() methods 2020-09-23 10:02:25 -07:00
OWNERS OWNERS: add alan and jeff, alphabetize 2020-12-10 13:08:28 +01:00
PREUPLOAD.cfg vold should be fully developed in AOSP. 2018-09-11 12:08:43 -06:00
Process.cpp Only kill apps with storage app data isolation enabled 2021-04-30 13:58:07 +00:00
Process.h Only kill apps with storage app data isolation enabled 2021-04-30 13:58:07 +00:00
ScryptParameters.cpp clang-format many files. 2018-09-18 15:41:22 -07:00
ScryptParameters.h clang-format many files. 2018-09-18 15:41:22 -07:00
secdiscard.cpp secdiscard: use F2FS_IOC_SEC_TRIM_FILE for secure discard 2020-09-14 08:43:15 +09:00
sehandle.h clang-format many files. 2018-09-18 15:41:22 -07:00
TEST_MAPPING FuseDaemonHostTest is migrated to CTS and renamed. 2020-05-28 18:43:08 +01:00
Utils.cpp Merge "Only kill apps with storage app data isolation enabled" 2021-05-05 14:16:00 +00:00
Utils.h Only kill apps with storage app data isolation enabled 2021-04-30 13:58:07 +00:00
vdc.cpp Let vold format the encrypted partition 2020-12-22 11:28:50 -08:00
vdc.rc Remove all references to FDE enable wipe 2017-12-22 11:17:15 -08:00
vold.rc vold: Grant root group 2018-08-08 17:08:02 -07:00
vold_prepare_subdirs.cpp Remove ro.vold.level_from_user. 2021-01-05 09:49:24 +00:00
VoldNativeService.cpp vold: add getUnlockedUsers() method to Binder interface 2021-04-13 10:53:00 -07:00
VoldNativeService.h vold: add getUnlockedUsers() method to Binder interface 2021-04-13 10:53:00 -07:00
VoldNativeServiceValidation.cpp Additional operation check when enabling read logs. 2020-04-03 18:42:04 -07:00
VoldNativeServiceValidation.h [vold] Add argument verification to IncFS methods 2020-03-25 17:21:49 -07:00
VoldUtil.cpp Move over to the C++ Fstab class 2019-01-31 12:34:39 -08:00
VoldUtil.h Remove unused code in VoldUtil.h 2020-02-18 10:48:16 -08:00
VolumeManager.cpp Remove unused mount modes and re-number the modes for consistency 2021-02-24 14:52:37 +00:00
VolumeManager.h Add a method in vold to unmount app data and obb dir for testing 2021-01-18 13:47:44 +00:00
wait_for_keymaster.cpp add wait_for_keymaster 2018-05-09 12:59:18 -07:00
wait_for_keymaster.rc Add rc file for wait_for_keymaster 2018-05-15 16:15:21 -07:00