No description
Find a file
Eric Biggers 2c9d6d6675 KeyUtil: don't use keepOld=true for system DE and volume keys
Commit 77df7f207d / http://aosp/1217657 ("Refactor to use
EncryptionPolicy everywhere we used to use raw_ref") unintentionally
made fscrypt_initialize_systemwide_keys() start specifying keepOld=true
(via default parameter value) when retrieving the system DE key, and
likewise for read_or_create_volkey() and volume keys.

As a result, if the associated Keymaster key needs to be upgraded, the
upgraded key blob gets written to "keymaster_key_blob_upgraded", but it
doesn't replace the original "keymaster_key_blob", nor is the original
key deleted from Keymaster.  This happens at every boot, eventually
resulting in the RPMB partition in Keymaster becoming full.

Only the metadata encryption key ever needs keepOld=true, since it's the
only key that isn't stored in /data, and the purpose of keepOld=true is
to allow a key that isn't stored in /data to be committed or rolled back
when a userdata checkpoint is committed or rolled back.

So, fix this bug by removing the default value of keepOld, and
specifying false everywhere except the metadata encryption key.

Note that when an affected device gets this fix, it will finally upgrade
its system DE key correctly.  However, this fix doesn't free up space in
Keymaster that was consumed by this bug.

Test: On bramble:
  - Flashed rvc-d1-dev build, with wiping userdata
  - Flashed a newer build, without wiping userdata
  - Log expectedly shows key upgrades:
        $ adb logcat | grep 'Upgrading key'
        D vold    : Upgrading key: /metadata/vold/metadata_encryption/key
        D vold    : Upgrading key: /data/unencrypted/key
        D vold    : Upgrading key: /data/misc/vold/user_keys/de/0
        D vold    : Upgrading key: /data/misc/vold/user_keys/ce/0/current
  - Rebooted
  - Log unexpectedly shows the system DE key being upgraded again:
        $ adb logcat | grep 'Upgrading key'
        D vold    : Upgrading key: /data/unencrypted/key
  - "keymaster_key_blob_upgraded" unexpectedly still exists:
        $ adb shell find /data /metadata -name keymaster_key_blob_upgraded
        /data/unencrypted/key/keymaster_key_blob_upgraded
  - Applied this fix and flashed, without wiping userdata
  - Log shows system DE key being upgraded (expected because due to the
    bug, the upgraded key didn't replace the original one before)
        $ adb logcat | grep 'Upgrading key'
        D vold    : Upgrading key: /data/unencrypted/key
  - "keymaster_key_blob_upgraded" expectedly no longer exists
        $ adb shell find /data /metadata -name keymaster_key_blob_upgraded
  - Rebooted
  - Log expectedly doesn't show any more key upgrades
        $ adb logcat | grep 'Upgrading key'
Bug: 171944521
Bug: 172019387
(cherry picked from commit c493903732)
Merged-In: I42d3f5fbe32cb2ec229f4b614cfb271412a3ed29
Change-Id: I42d3f5fbe32cb2ec229f4b614cfb271412a3ed29
2020-11-02 16:10:09 -08:00
bench Abort long-running benchmarks, report progress. 2017-11-07 09:57:12 -07:00
binder/android/os Add an isCheckpointing() binder call for adb remount. 2020-06-18 16:04:36 -07:00
fs Rename casefold/projectid properties (for f2fs). 2020-04-16 10:18:36 +02:00
model Set media folder +F for adopted storage as well 2020-08-19 22:22:02 +00:00
tests [vold] Add argument verification to IncFS methods 2020-03-25 14:33:24 -07:00
.clang-format vold: use system-clang-format 2019-09-16 12:00:40 -07:00
Android.bp Revert "ARC++ swap for AppFuseUtil" 2020-05-12 14:43:42 +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 RAII wake locks 2019-06-26 10:20:30 -07: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
CheckEncryption.cpp Test that plaintext can't be read from disk for encrypted files. 2017-10-27 15:14:56 -07:00
CheckEncryption.h Test that plaintext can't be read from disk for encrypted files. 2017-10-27 15:14:56 -07:00
Checkpoint.cpp Add an isCheckpointing() binder call for adb remount. 2020-06-18 16:04:36 -07:00
Checkpoint.h Add an isCheckpointing() binder call for adb remount. 2020-06-18 16:04:36 -07:00
CleanSpec.mk Add an empty CleanSpec.mk 2010-03-08 18:05:25 -08:00
cryptfs.cpp Don't call block checkpoint functions above dm-default-key 2020-06-18 21:58:32 +00: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: ensure that backup superblocks get encrypted 2020-08-12 09:34:11 -07:00
EncryptInplace.h Refactor: make cryptfs.h smaller 2020-02-07 11:16:12 -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 KeyUtil: don't use keepOld=true for system DE and volume keys 2020-11-02 16:10:09 -08:00
FsCrypt.h vold: Do not cache CE keys in vold 2020-01-24 00:20:22 +00:00
fscrypt_uapi.h fskeyring & userspace reboot: support CE keys 2020-03-07 01:19:42 +00:00
IdleMaint.cpp Merge "vold: use RAII wake locks" am: b585363d93 2019-06-26 19:43:21 -07: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 Send earlyBootEnded notice to all Keymasters 2020-04-01 10:04:32 -06:00
Keymaster.h Send earlyBootEnded notice to all Keymasters 2020-04-01 10:04:32 -06:00
KeyStorage.cpp Fix unaligned access to auth token user_id 2020-02-18 11:00:15 -08:00
KeyStorage.h KeyUtil: don't use keepOld=true for system DE and volume keys 2020-11-02 16:10:09 -08:00
KeyUtil.cpp Introduce ro.crypto.uses_fs_ioc_add_encryption_key property 2020-04-20 22:21:49 +01:00
KeyUtil.h KeyUtil: don't use keepOld=true for system DE and volume keys 2020-11-02 16:10:09 -08:00
Loop.cpp Block and wait for /dev/block/loop<N> to appear in case it was created asynchronously. 2020-03-27 20:16:44 +00:00
Loop.h clang-format many files. 2018-09-18 15:41:22 -07:00
main.cpp Refactor: make cryptfs.h smaller 2020-02-07 11:16:12 -08:00
MetadataCrypt.cpp Don't call block checkpoint functions above dm-default-key 2020-06-18 21:58:32 +00:00
MetadataCrypt.h On newer devices, use dm-default-key to encrypt SD cards 2020-02-18 13:01:00 -08:00
MoveStorage.cpp vold: use RAII wake locks 2019-06-26 10:20:30 -07:00
MoveStorage.h clang-format many files. 2018-09-18 15:41:22 -07:00
NetlinkHandler.cpp clang-format many files. 2018-09-18 15:41:22 -07:00
NetlinkHandler.h clang-format many files. 2018-09-18 15:41:22 -07:00
NetlinkManager.cpp clang-format many files. 2018-09-18 15:41:22 -07:00
NetlinkManager.h clang-format many files. 2018-09-18 15:41:22 -07:00
OWNERS Add zezeozue to OWNERS 2019-11-15 16:03:47 +00:00
PREUPLOAD.cfg vold should be fully developed in AOSP. 2018-09-11 12:08:43 -06:00
Process.cpp Mount direct boot apps obb dir after fuse is ready. 2020-02-19 16:45:07 +00:00
Process.h Mount direct boot apps obb dir after fuse is ready. 2020-02-19 16:45: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: should call fsync to avoid reordering IOs 2019-08-12 15:31:10 +00: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 Set media folder +F for adopted storage as well 2020-08-19 22:22:02 +00:00
Utils.h Set media folder +F for adopted storage as well 2020-08-19 22:22:02 +00:00
vdc.cpp vold: Support aborting FUSE connections. 2020-05-28 16:07:16 +02: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 Allow search permission on apex data directories. 2020-01-17 11:37:31 +00:00
VoldNativeService.cpp Add an isCheckpointing() binder call for adb remount. 2020-06-18 16:04:36 -07:00
VoldNativeService.h Add an isCheckpointing() binder call for adb remount. 2020-06-18 16:04:36 -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 14:33:24 -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 vold: Support aborting FUSE connections. 2020-05-28 16:07:16 +02:00
VolumeManager.h vold: Support aborting FUSE connections. 2020-05-28 16:07:16 +02: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