summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.bp5
-rw-r--r--cryptfs_hw.cpp32
-rw-r--r--cryptfs_hw.h2
3 files changed, 34 insertions, 5 deletions
diff --git a/Android.bp b/Android.bp
index edcc386..c4cf947 100644
--- a/Android.bp
+++ b/Android.bp
@@ -15,9 +15,8 @@ commonSharedLibraries = [
cc_library_shared {
name: "libcryptfs_hw",
- header_libs: ["qseecom-kernel-headers",
- "libhardware_headers",
- "libcryptfshw_hidl_headers",],
+ header_libs: ["generated_kernel_headers",
+ "libhardware_headers",],
srcs: sourceFiles,
shared_libs: commonSharedLibraries,
diff --git a/cryptfs_hw.cpp b/cryptfs_hw.cpp
index 6cd634d..c1d42c9 100644
--- a/cryptfs_hw.cpp
+++ b/cryptfs_hw.cpp
@@ -26,6 +26,8 @@
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#define LOG_TAG "Cryptfs_hw"
+
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
@@ -34,8 +36,10 @@
#include <errno.h>
#include "cutils/log.h"
#include "cutils/properties.h"
+#include <hardware/hardware.h>
+#include <hardware/keymaster_common.h>
#include "cryptfs_hw.h"
-#include "CryptfsHw.h"
+#include <vendor/qti/hardware/cryptfshw/1.0/ICryptfsHw.h>
using android::sp;
using vendor::qti::hardware::cryptfshw::V1_0::ICryptfsHw;
@@ -124,3 +128,29 @@ int clear_hw_device_encryption_key()
return rc;
}
+static int get_keymaster_version()
+{
+ int rc = -1;
+ const hw_module_t* mod;
+ rc = hw_get_module_by_class(KEYSTORE_HARDWARE_MODULE_ID, NULL, &mod);
+ if (rc) {
+ ALOGE("could not find any keystore module");
+ return rc;
+ }
+ return mod->module_api_version;
+}
+
+int should_use_keymaster()
+{
+ /*
+ * HW FDE key should be tied to keymaster
+ * if version is above 0.3. this is to
+ * support msm8909 go target.
+ */
+ int rc = 1;
+ if (get_keymaster_version() == KEYMASTER_MODULE_API_VERSION_0_3) {
+ ALOGI("Keymaster version is 0.3");
+ rc = 0;
+ }
+ return rc;
+}
diff --git a/cryptfs_hw.h b/cryptfs_hw.h
index d7ed51e..65321eb 100644
--- a/cryptfs_hw.h
+++ b/cryptfs_hw.h
@@ -43,7 +43,7 @@ int update_hw_device_encryption_key(const char*, const char*, const char*);
int clear_hw_device_encryption_key();
unsigned int is_hw_disk_encryption(const char*);
int is_ice_enabled(void);
-inline int should_use_keymaster(){return 1;}
+int should_use_keymaster();
int set_ice_param(int flag);
#ifdef __cplusplus