summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <shade@chemlab.org>2014-02-23 02:28:01 +0100
committerSteve Kondik <shade@chemlab.org>2014-02-23 02:28:01 +0100
commit87fb5927db55ba17dc87effac474855f3ee3b009 (patch)
tree2e094011b4d11b659f0ba4824a3f132065b90220
parentb2310a33f801b9e676467c101f11903ad4eaacbe (diff)
parent0be59acb05a25a0822d55a1bc8d1e4a652144d14 (diff)
downloadandroid_hardware_qcom_keymaster-87fb5927db55ba17dc87effac474855f3ee3b009.tar.gz
android_hardware_qcom_keymaster-87fb5927db55ba17dc87effac474855f3ee3b009.tar.bz2
android_hardware_qcom_keymaster-87fb5927db55ba17dc87effac474855f3ee3b009.zip
Merge branch 'kk' of git://codeaurora.org/platform/hardware/qcom/keymaster into cm-11.0
Change-Id: I672bfaf0c681dacc677fbcc34279c4342e246ab4
-rw-r--r--Android.mk28
-rw-r--r--keymaster_qcom.cpp23
2 files changed, 36 insertions, 15 deletions
diff --git a/Android.mk b/Android.mk
index d8408cd..49faec9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,28 +1,32 @@
LOCAL_PATH := $(call my-dir)
-ifneq ($(filter msm8960 msm8974 msm8226,$(TARGET_BOARD_PLATFORM)),)
-
include $(CLEAR_VARS)
-LOCAL_MODULE := keystore.$(TARGET_BOARD_PLATFORM)
+ifneq ($(filter msm8960 msm8974 msm8226 msm8610,$(TARGET_BOARD_PLATFORM)),)
+
+LOCAL_MODULE := keystore.qcom
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_SRC_FILES := keymaster_qcom.cpp
-LOCAL_C_INCLUDES := $(TARGET_OUT_HEADERS)/common/inc \
- $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
- external/openssl/include
+LOCAL_C_INCLUDES := \
+ $(TARGET_OUT_HEADERS)/common/inc \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
+ $(LOCAL_PATH)/../../../system/security/keystore \
+ $(LOCAL_PATH)/../../../external/openssl/include
LOCAL_C_FLAGS = -fvisibility=hidden -Wall -Werror
-LOCAL_SHARED_LIBRARIES := \
- libcrypto \
- liblog \
- libc \
- libdl
+LOCAL_SHARED_LIBRARIES := libcrypto liblog \
+ libc \
+ libcutils \
+ libutils \
+ libdl
-LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+LOCAL_ADDITIONAL_DEPENDENCIES := \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr \
+ $(LOCAL_PATH)/Android.mk
LOCAL_MODULE_TAGS := optional
diff --git a/keymaster_qcom.cpp b/keymaster_qcom.cpp
index 55220d1..ebbcb97 100644
--- a/keymaster_qcom.cpp
+++ b/keymaster_qcom.cpp
@@ -62,8 +62,8 @@ struct qcom_km_ion_info_t {
struct qcom_keymaster_handle {
struct QSEECom_handle *qseecom;
void *libhandle;
- int (*QSEECom_start_app)(struct QSEECom_handle ** handle, char* path,
- char* appname, uint32_t size);
+ int (*QSEECom_start_app)(struct QSEECom_handle ** handle, const char *path,
+ const char *appname, uint32_t size);
int (*QSEECom_shutdown_app)(struct QSEECom_handle **handle);
int (*QSEECom_send_cmd)(struct QSEECom_handle* handle, void *cbuf,
uint32_t clen, void *rbuf, uint32_t rlen);
@@ -664,6 +664,10 @@ static int qcom_km_close(hw_device_t *dev)
keymaster_device_t* km_dev = (keymaster_device_t *)dev;
struct qcom_keymaster_handle *km_handle =(struct qcom_keymaster_handle *)km_dev->context;
+ if (km_handle == NULL) {
+ ALOGE("km_handle == NULL");
+ return -1;
+ }
if (km_handle->qseecom == NULL) {
ALOGE("Context == NULL");
return -1;
@@ -676,7 +680,7 @@ static int qcom_km_close(hw_device_t *dev)
static int qcom_km_get_lib_sym(qcom_keymaster_handle_t* km_handle)
{
- km_handle->libhandle = dlopen("/system/lib/libQSEEComAPI.so", RTLD_NOW);
+ km_handle->libhandle = dlopen("/vendor/lib/libQSEEComAPI.so", RTLD_NOW);
if ( km_handle->libhandle ) {
*(void **)(&km_handle->QSEECom_start_app) =
dlsym(km_handle->libhandle,"QSEECom_start_app");
@@ -758,8 +762,21 @@ static int qcom_km_open(const hw_module_t* module, const char* name,
ret = (*km_handle->QSEECom_start_app)((struct QSEECom_handle **)&km_handle->qseecom,
"/vendor/firmware/keymaster", "keymaster", 4096*2);
if (ret) {
+ ret = (*km_handle->QSEECom_start_app)((struct QSEECom_handle **)&km_handle->qseecom,
+ "/firmware/image", "keymaste", 4096*2);
+ }
+ if (ret) {
ALOGE("Loading keymaster app failied");
free(km_handle);
+ dev->context = NULL;
+ dev->generate_keypair = NULL;
+ dev->import_keypair = NULL;
+ dev->get_keypair_public = NULL;
+ dev->delete_keypair = NULL;
+ dev->delete_all = NULL;
+ dev->sign_data = NULL;
+ dev->verify_data = NULL;
+ dev->common.close = NULL;
return -1;
}
dev->common.tag = HARDWARE_DEVICE_TAG;