diff options
author | Neeraj Soni <neersoni@codeaurora.org> | 2017-09-02 13:38:18 +0530 |
---|---|---|
committer | Michael Bestas <mkbestas@lineageos.org> | 2017-12-20 23:31:29 +0200 |
commit | 2ab4e3f1067e4e18ace7c3106d826e751e0a2c9d (patch) | |
tree | 82af5a8bae161e136de37464bcf673121397b254 | |
parent | 5d42fe57c3223c18a5ff612c7fa51876e9c5e202 (diff) | |
download | android_vendor_qcom_opensource_cryptfs_hw-2ab4e3f1067e4e18ace7c3106d826e751e0a2c9d.tar.gz android_vendor_qcom_opensource_cryptfs_hw-2ab4e3f1067e4e18ace7c3106d826e751e0a2c9d.tar.bz2 android_vendor_qcom_opensource_cryptfs_hw-2ab4e3f1067e4e18ace7c3106d826e751e0a2c9d.zip |
cryptfs_hw: Wait for qseecom daemon to start FDE operation
FDE operation requires listener services. Qseecom daemon
should be up and running to ensure all listeners are
registered and running.
Change-Id: I45637fe25a4ccc9a9ae4939449d310b9a7313e10
Signed-off-by: Neeraj Soni <neersoni@codeaurora.org>
-rwxr-xr-x | cryptfs_hw.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/cryptfs_hw.c b/cryptfs_hw.c index 576033c..c9d11dd 100755 --- a/cryptfs_hw.c +++ b/cryptfs_hw.c @@ -162,7 +162,6 @@ static int __cryptfs_hw_wipe_clear_key(enum cryptfs_hw_key_management_usage_type static int cryptfs_hw_wipe_key(enum cryptfs_hw_key_management_usage_type usage) { int32_t ret; - ret = __cryptfs_hw_wipe_clear_key(usage, CRYPTFS_HW_KMS_WIPE_KEY); if (ret) { SLOGE("Error::ioctl call to wipe the encryption key for usage %d failed with ret = %d, errno = %d\n", @@ -278,11 +277,12 @@ static int is_qseecom_up() char value[PROPERTY_VALUE_MAX] = {0}; for (; i<CRYPTFS_HW_UP_CHECK_COUNT; i++) { - property_get("sys.keymaster.loaded", value, ""); + property_get("sys.listeners.registered", value, ""); if (!strncmp(value, "true", PROPERTY_VALUE_MAX)) return 1; usleep(100000); } + SLOGE("%s Qseecom daemon timed out", __func__); return 0; } @@ -293,7 +293,7 @@ static int is_qseecom_up() static int set_key(const char* currentpasswd, const char* passwd, const char* enc_mode, int operation) { int err = -1; - if (is_hw_disk_encryption(enc_mode)) { + if (is_hw_disk_encryption(enc_mode) && is_qseecom_up()) { unsigned char* tmp_passwd = get_tmp_passwd(passwd); unsigned char* tmp_currentpasswd = get_tmp_passwd(currentpasswd); if (tmp_passwd) { @@ -413,7 +413,9 @@ int is_ice_enabled(void) int clear_hw_device_encryption_key() { - return cryptfs_hw_wipe_key(map_usage(CRYPTFS_HW_KM_USAGE_DISK_ENCRYPTION)); + if(is_qseecom_up()) + return cryptfs_hw_wipe_key(map_usage(CRYPTFS_HW_KM_USAGE_DISK_ENCRYPTION)); + return 0; } static int get_keymaster_version() |