summaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorAjay Singh Parmar <aparmar@codeaurora.org>2017-01-06 19:22:46 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-01-17 17:42:42 -0800
commited104f71b62b35ab0aa8ab086d8696e3dfdb48f8 (patch)
treef9c56779af82eee1f1afdc5de6764c2b1f7bbc1b /drivers/misc
parent4eaf19c57aed7e7a5bc0188cfe6a1169891bc828 (diff)
msm: hdcp: protect encryption enable with a mutex
Enable/disable encryption API can be called by multiple threads. Protect this API with a mutex to avoid any possible memory violation due to invalid calls to the API. Change-Id: I190cdf24880645ac20ec17934d76498d71b2802a Signed-off-by: Ajay Singh Parmar <aparmar@codeaurora.org>
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/hdcp.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/misc/hdcp.c b/drivers/misc/hdcp.c
index 038c7a94aca3..bd21f8cca2aa 100644
--- a/drivers/misc/hdcp.c
+++ b/drivers/misc/hdcp.c
@@ -559,6 +559,7 @@ static int hdcp_lib_txmtr_init_legacy(struct hdcp_lib_handle *handle);
static struct qseecom_handle *hdcp1_handle;
static bool hdcp1_supported = true;
static bool hdcp1_enc_enabled;
+static struct mutex hdcp1_ta_cmd_lock;
static const char *hdcp_lib_message_name(int msg_id)
{
@@ -2217,6 +2218,8 @@ bool hdcp1_check_if_supported_load_app(void)
if (rc) {
pr_err("qseecom_start_app failed %d\n", rc);
hdcp1_supported = false;
+ } else {
+ mutex_init(&hdcp1_ta_cmd_lock);
}
}
@@ -2281,12 +2284,16 @@ int hdcp1_set_enc(bool enable)
struct hdcp1_set_enc_req *set_enc_req;
struct hdcp1_set_enc_rsp *set_enc_rsp;
- if (!hdcp1_supported || !hdcp1_handle)
- return -EINVAL;
+ mutex_lock(&hdcp1_ta_cmd_lock);
+
+ if (!hdcp1_supported || !hdcp1_handle) {
+ rc = -EINVAL;
+ goto end;
+ }
if (hdcp1_enc_enabled == enable) {
pr_debug("already %s\n", enable ? "enabled" : "disabled");
- return rc;
+ goto end;
}
/* set keys and request aksv */
@@ -2304,18 +2311,21 @@ int hdcp1_set_enc(bool enable)
if (rc < 0) {
pr_err("qseecom cmd failed err=%d\n", rc);
- return -EINVAL;
+ goto end;
}
rc = set_enc_rsp->ret;
if (rc) {
pr_err("enc cmd failed, rsp=%d\n", set_enc_rsp->ret);
- return -EINVAL;
+ rc = -EINVAL;
+ goto end;
}
hdcp1_enc_enabled = enable;
pr_debug("%s success\n", enable ? "enable" : "disable");
- return 0;
+end:
+ mutex_unlock(&hdcp1_ta_cmd_lock);
+ return rc;
}
int hdcp_library_register(struct hdcp_register_data *data)