Loading drivers/misc/qseecom.c +22 −20 Original line number Diff line number Diff line /*Qualcomm Secure Execution Environment Communicator (QSEECOM) driver * * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -1765,9 +1765,7 @@ static int __qseecom_check_app_exists(struct qseecom_check_app_ireq req) spin_lock_irqsave(&qseecom.registered_app_list_lock, flags); list_for_each_entry(entry, &qseecom.registered_app_list_head, list) { if (!memcmp(entry->app_name, req.app_name, strlen(req.app_name))) { if (!strcmp(entry->app_name, req.app_name)) { found_app = true; break; } Loading Loading @@ -1987,6 +1985,16 @@ static int qseecom_load_app(struct qseecom_dev_handle *data, void __user *argp) entry->app_id = app_id; entry->ref_cnt = 1; entry->app_arch = load_img_req.app_arch; /* * keymaster app may be first loaded as "keymaste" by qseecomd, * and then used as "keymaster" on some targets. To avoid app * name checking error, register "keymaster" into app_list and * thread private data. */ if (!strcmp(load_img_req.img_name, "keymaste")) strlcpy(entry->app_name, "keymaster", MAX_APP_NAME_SIZE); else strlcpy(entry->app_name, load_img_req.img_name, MAX_APP_NAME_SIZE); entry->app_blocked = false; Loading @@ -2006,6 +2014,9 @@ static int qseecom_load_app(struct qseecom_dev_handle *data, void __user *argp) } data->client.app_id = app_id; data->client.app_arch = load_img_req.app_arch; if (!strcmp(load_img_req.img_name, "keymaste")) strlcpy(data->client.app_name, "keymaster", MAX_APP_NAME_SIZE); else strlcpy(data->client.app_name, load_img_req.img_name, MAX_APP_NAME_SIZE); load_img_req.app_id = app_id; Loading Loading @@ -2078,9 +2089,8 @@ static int qseecom_unload_app(struct qseecom_dev_handle *data, list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { if (ptr_app->app_id == data->client.app_id) { if (!memcmp((void *)ptr_app->app_name, (void *)data->client.app_name, strlen(data->client.app_name))) { if (!strcmp((void *)ptr_app->app_name, (void *)data->client.app_name)) { found_app = true; if (app_crash || ptr_app->ref_cnt == 1) unload = true; Loading Loading @@ -2606,7 +2616,6 @@ static int __qseecom_send_cmd(struct qseecom_dev_handle *data, unsigned long flags; struct qseecom_registered_app_list *ptr_app; bool found_app = false; int name_len = 0; void *cmd_buf = NULL; size_t cmd_len; Loading @@ -2615,11 +2624,8 @@ static int __qseecom_send_cmd(struct qseecom_dev_handle *data, spin_lock_irqsave(&qseecom.registered_app_list_lock, flags); list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { name_len = min(strlen(data->client.app_name), strlen(ptr_app->app_name)); if ((ptr_app->app_id == data->client.app_id) && (!memcmp(ptr_app->app_name, data->client.app_name, name_len))) { (!strcmp(ptr_app->app_name, data->client.app_name))) { found_app = true; break; } Loading Loading @@ -5811,9 +5817,7 @@ static int __qseecom_qteec_issue_cmd(struct qseecom_dev_handle *data, list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { if ((ptr_app->app_id == data->client.app_id) && (!memcmp(ptr_app->app_name, data->client.app_name, strlen(ptr_app->app_name)))) { (!strcmp(ptr_app->app_name, data->client.app_name))) { found_app = true; break; } Loading Loading @@ -5982,9 +5986,7 @@ static int qseecom_qteec_invoke_modfd_cmd(struct qseecom_dev_handle *data, list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { if ((ptr_app->app_id == data->client.app_id) && (!memcmp(ptr_app->app_name, data->client.app_name, strlen(ptr_app->app_name)))) { (!strcmp(ptr_app->app_name, data->client.app_name))) { found_app = true; break; } Loading Loading
drivers/misc/qseecom.c +22 −20 Original line number Diff line number Diff line /*Qualcomm Secure Execution Environment Communicator (QSEECOM) driver * * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -1765,9 +1765,7 @@ static int __qseecom_check_app_exists(struct qseecom_check_app_ireq req) spin_lock_irqsave(&qseecom.registered_app_list_lock, flags); list_for_each_entry(entry, &qseecom.registered_app_list_head, list) { if (!memcmp(entry->app_name, req.app_name, strlen(req.app_name))) { if (!strcmp(entry->app_name, req.app_name)) { found_app = true; break; } Loading Loading @@ -1987,6 +1985,16 @@ static int qseecom_load_app(struct qseecom_dev_handle *data, void __user *argp) entry->app_id = app_id; entry->ref_cnt = 1; entry->app_arch = load_img_req.app_arch; /* * keymaster app may be first loaded as "keymaste" by qseecomd, * and then used as "keymaster" on some targets. To avoid app * name checking error, register "keymaster" into app_list and * thread private data. */ if (!strcmp(load_img_req.img_name, "keymaste")) strlcpy(entry->app_name, "keymaster", MAX_APP_NAME_SIZE); else strlcpy(entry->app_name, load_img_req.img_name, MAX_APP_NAME_SIZE); entry->app_blocked = false; Loading @@ -2006,6 +2014,9 @@ static int qseecom_load_app(struct qseecom_dev_handle *data, void __user *argp) } data->client.app_id = app_id; data->client.app_arch = load_img_req.app_arch; if (!strcmp(load_img_req.img_name, "keymaste")) strlcpy(data->client.app_name, "keymaster", MAX_APP_NAME_SIZE); else strlcpy(data->client.app_name, load_img_req.img_name, MAX_APP_NAME_SIZE); load_img_req.app_id = app_id; Loading Loading @@ -2078,9 +2089,8 @@ static int qseecom_unload_app(struct qseecom_dev_handle *data, list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { if (ptr_app->app_id == data->client.app_id) { if (!memcmp((void *)ptr_app->app_name, (void *)data->client.app_name, strlen(data->client.app_name))) { if (!strcmp((void *)ptr_app->app_name, (void *)data->client.app_name)) { found_app = true; if (app_crash || ptr_app->ref_cnt == 1) unload = true; Loading Loading @@ -2606,7 +2616,6 @@ static int __qseecom_send_cmd(struct qseecom_dev_handle *data, unsigned long flags; struct qseecom_registered_app_list *ptr_app; bool found_app = false; int name_len = 0; void *cmd_buf = NULL; size_t cmd_len; Loading @@ -2615,11 +2624,8 @@ static int __qseecom_send_cmd(struct qseecom_dev_handle *data, spin_lock_irqsave(&qseecom.registered_app_list_lock, flags); list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { name_len = min(strlen(data->client.app_name), strlen(ptr_app->app_name)); if ((ptr_app->app_id == data->client.app_id) && (!memcmp(ptr_app->app_name, data->client.app_name, name_len))) { (!strcmp(ptr_app->app_name, data->client.app_name))) { found_app = true; break; } Loading Loading @@ -5811,9 +5817,7 @@ static int __qseecom_qteec_issue_cmd(struct qseecom_dev_handle *data, list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { if ((ptr_app->app_id == data->client.app_id) && (!memcmp(ptr_app->app_name, data->client.app_name, strlen(ptr_app->app_name)))) { (!strcmp(ptr_app->app_name, data->client.app_name))) { found_app = true; break; } Loading Loading @@ -5982,9 +5986,7 @@ static int qseecom_qteec_invoke_modfd_cmd(struct qseecom_dev_handle *data, list_for_each_entry(ptr_app, &qseecom.registered_app_list_head, list) { if ((ptr_app->app_id == data->client.app_id) && (!memcmp(ptr_app->app_name, data->client.app_name, strlen(ptr_app->app_name)))) { (!strcmp(ptr_app->app_name, data->client.app_name))) { found_app = true; break; } Loading