summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeeraj Soni <neersoni@codeaurora.org>2017-09-02 13:38:18 +0530
committerMichael Bestas <mkbestas@lineageos.org>2017-12-20 23:31:29 +0200
commit2ab4e3f1067e4e18ace7c3106d826e751e0a2c9d (patch)
tree82af5a8bae161e136de37464bcf673121397b254
parent5d42fe57c3223c18a5ff612c7fa51876e9c5e202 (diff)
downloadandroid_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-xcryptfs_hw.c10
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()