aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiqi Lin <siqilin@google.com>2017-07-24 10:18:12 -0700
committerSiqi Lin <siqilin@google.com>2017-07-24 10:19:26 -0700
commit2def3b3a085bf04865593adc03597d8efffde5d4 (patch)
tree9f26d767f1f7d620067478c302fc3bac0c9483f9
parentdaf6cdff947a739c9a2f07442fae1580966354db (diff)
parent67581c4b3d89fa034484d711c545526f5f52379e (diff)
Merge branch 'android-msm-shamu-3.10-security-next' into android-msm-shamu-3.10android-7.1.1_r0.65
September 2017.2 Bug: 63173776 Change-Id: I552ad70f1ddca645c6177cc4f51ead796f910dc8
-rw-r--r--drivers/crypto/msm/qcedev.c53
-rw-r--r--drivers/md/dm-ioctl.c2
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c6
-rw-r--r--drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c2
-rw-r--r--drivers/media/platform/msm/camera_v2/sensor/actuator/msm_actuator.c21
-rw-r--r--drivers/platform/msm/sps/sps.c15
-rw-r--r--drivers/platform/msm/sps/spsi.h17
-rw-r--r--sound/core/timer.c5
8 files changed, 37 insertions, 84 deletions
diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c
index dc1d5bb5ba6a..44bd52a86e67 100644
--- a/drivers/crypto/msm/qcedev.c
+++ b/drivers/crypto/msm/qcedev.c
@@ -56,7 +56,6 @@ static uint8_t _std_init_vector_sha256_uint8[] = {
static DEFINE_MUTEX(send_cmd_lock);
static DEFINE_MUTEX(qcedev_sent_bw_req);
-static DEFINE_MUTEX(hash_access_lock);
/*-------------------------------------------------------------------------
* Resource Locking Service
* ------------------------------------------------------------------------*/
@@ -1758,18 +1757,12 @@ static long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
(void __user *)arg,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
- mutex_lock(&hash_access_lock);
- if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) {
- mutex_unlock(&hash_access_lock);
+ if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev))
return -EINVAL;
- }
qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA;
err = qcedev_hash_init(&qcedev_areq, handle, &sg_src);
- if (err) {
- mutex_unlock(&hash_access_lock);
+ if (err)
return err;
- }
- mutex_unlock(&hash_access_lock);
if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
@@ -1787,42 +1780,32 @@ static long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
(void __user *)arg,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
- mutex_lock(&hash_access_lock);
- if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) {
- mutex_unlock(&hash_access_lock);
+ if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev))
return -EINVAL;
- }
qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA;
if (qcedev_areq.sha_op_req.alg == QCEDEV_ALG_AES_CMAC) {
err = qcedev_hash_cmac(&qcedev_areq, handle, &sg_src);
- if (err) {
- mutex_unlock(&hash_access_lock);
+ if (err)
return err;
- }
} else {
if (handle->sha_ctxt.init_done == false) {
pr_err("%s Init was not called\n", __func__);
- mutex_unlock(&hash_access_lock);
return -EINVAL;
}
err = qcedev_hash_update(&qcedev_areq, handle, &sg_src);
- if (err) {
- mutex_unlock(&hash_access_lock);
+ if (err)
return err;
- }
}
if (handle->sha_ctxt.diglen > QCEDEV_MAX_SHA_DIGEST) {
pr_err("Invalid sha_ctxt.diglen %d\n",
handle->sha_ctxt.diglen);
- mutex_unlock(&hash_access_lock);
return -EINVAL;
}
memcpy(&qcedev_areq.sha_op_req.digest[0],
&handle->sha_ctxt.digest[0],
handle->sha_ctxt.diglen);
- mutex_unlock(&hash_access_lock);
if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
@@ -1839,29 +1822,22 @@ static long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
(void __user *)arg,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
- mutex_lock(&hash_access_lock);
- if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) {
- mutex_unlock(&hash_access_lock);
+ if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev))
return -EINVAL;
- }
qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA;
err = qcedev_hash_final(&qcedev_areq, handle);
- if (err) {
- mutex_unlock(&hash_access_lock);
+ if (err)
return err;
- }
if (handle->sha_ctxt.diglen > QCEDEV_MAX_SHA_DIGEST) {
pr_err("Invalid sha_ctxt.diglen %d\n",
handle->sha_ctxt.diglen);
- mutex_unlock(&hash_access_lock);
return -EINVAL;
}
qcedev_areq.sha_op_req.diglen = handle->sha_ctxt.diglen;
memcpy(&qcedev_areq.sha_op_req.digest[0],
&handle->sha_ctxt.digest[0],
handle->sha_ctxt.diglen);
- mutex_unlock(&hash_access_lock);
if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
@@ -1876,35 +1852,26 @@ static long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
(void __user *)arg,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
- mutex_lock(&hash_access_lock);
- if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) {
- mutex_unlock(&hash_access_lock);
+ if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev))
return -EINVAL;
- }
qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA;
qcedev_hash_init(&qcedev_areq, handle, &sg_src);
err = qcedev_hash_update(&qcedev_areq, handle, &sg_src);
- if (err) {
- mutex_unlock(&hash_access_lock);
+ if (err)
return err;
- }
err = qcedev_hash_final(&qcedev_areq, handle);
- if (err) {
- mutex_unlock(&hash_access_lock);
+ if (err)
return err;
- }
if (handle->sha_ctxt.diglen > QCEDEV_MAX_SHA_DIGEST) {
pr_err("Invalid sha_ctxt.diglen %d\n",
handle->sha_ctxt.diglen);
- mutex_unlock(&hash_access_lock);
return -EINVAL;
}
qcedev_areq.sha_op_req.diglen = handle->sha_ctxt.diglen;
memcpy(&qcedev_areq.sha_op_req.digest[0],
&handle->sha_ctxt.digest[0],
handle->sha_ctxt.diglen);
- mutex_unlock(&hash_access_lock);
if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req,
sizeof(struct qcedev_sha_op_req)))
return -EFAULT;
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index f21bc46cd1d2..81a79b739e97 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1767,7 +1767,7 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user)
if (r)
goto out;
- param->data_size = offsetof(struct dm_ioctl, data);
+ param->data_size = sizeof(*param);
r = fn(param, input_param_size);
if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) &&
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c
index 074a309b1cba..318dee999415 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c
@@ -631,12 +631,6 @@ int msm_isp_cfg_stats_stream(struct vfe_device *vfe_dev, void *arg)
if (vfe_dev->stats_data.num_active_stream == 0)
vfe_dev->hw_info->vfe_ops.stats_ops.cfg_ub(vfe_dev);
- if (stream_cfg_cmd->num_streams > MSM_ISP_STATS_MAX) {
- pr_err("%s invalid num_streams %d\n", __func__,
- stream_cfg_cmd->num_streams);
- return -EINVAL;
- }
-
if (stream_cfg_cmd->enable) {
msm_isp_stats_update_cgc_override(vfe_dev, stream_cfg_cmd);
diff --git a/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c b/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c
index fd7c0f1e3430..101e344b6599 100644
--- a/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c
+++ b/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c
@@ -200,7 +200,7 @@ static int msm_ispif_reset(struct ispif_device *ispif)
ispif->base + ISPIF_VFE_m_INTF_CMD_0(i));
msm_camera_io_w(ISPIF_STOP_INTF_IMMEDIATELY,
ispif->base + ISPIF_VFE_m_INTF_CMD_1(i));
- pr_debug("%s: base %pK", __func__, ispif->base);
+ pr_debug("%s: base %lx", __func__, (unsigned long)ispif->base);
msm_camera_io_w(0, ispif->base +
ISPIF_VFE_m_PIX_INTF_n_CID_MASK(i, 0));
msm_camera_io_w(0, ispif->base +
diff --git a/drivers/media/platform/msm/camera_v2/sensor/actuator/msm_actuator.c b/drivers/media/platform/msm/camera_v2/sensor/actuator/msm_actuator.c
index 3523396156e6..82eb2a8383bb 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/actuator/msm_actuator.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/actuator/msm_actuator.c
@@ -805,7 +805,7 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
{
struct msm_actuator_cfg_data *cdata =
(struct msm_actuator_cfg_data *)argp;
- int32_t rc = -EINVAL;
+ int32_t rc = 0;
mutex_lock(a_ctrl->actuator_mutex);
CDBG("Enter\n");
CDBG("%s type %d\n", __func__, cdata->cfgtype);
@@ -818,7 +818,6 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
case CFG_GET_ACTUATOR_INFO:
cdata->is_af_supported = 1;
cdata->cfg.cam_name = a_ctrl->cam_name;
- rc = 0;
break;
case CFG_SET_ACTUATOR_INFO:
@@ -828,19 +827,15 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
break;
case CFG_SET_DEFAULT_FOCUS:
- if (a_ctrl->func_tbl &&
- a_ctrl->func_tbl->actuator_set_default_focus)
- rc = a_ctrl->func_tbl->actuator_set_default_focus(
- a_ctrl, &cdata->cfg.move);
+ rc = a_ctrl->func_tbl->actuator_set_default_focus(a_ctrl,
+ &cdata->cfg.move);
if (rc < 0)
pr_err("move focus failed %d\n", rc);
break;
case CFG_MOVE_FOCUS:
- if (a_ctrl->func_tbl &&
- a_ctrl->func_tbl->actuator_move_focus)
- rc = a_ctrl->func_tbl->actuator_move_focus(a_ctrl,
- &cdata->cfg.move);
+ rc = a_ctrl->func_tbl->actuator_move_focus(a_ctrl,
+ &cdata->cfg.move);
if (rc < 0)
pr_err("move focus failed %d\n", rc);
break;
@@ -859,10 +854,8 @@ static int32_t msm_actuator_config(struct msm_actuator_ctrl_t *a_ctrl,
break;
case CFG_SET_POSITION:
- if (a_ctrl->func_tbl &&
- a_ctrl->func_tbl->actuator_set_position)
- rc = a_ctrl->func_tbl->actuator_set_position(a_ctrl,
- &cdata->cfg.setpos);
+ rc = a_ctrl->func_tbl->actuator_set_position(a_ctrl,
+ &cdata->cfg.setpos);
if (rc < 0)
pr_err("actuator_set_position failed %d\n", rc);
break;
diff --git a/drivers/platform/msm/sps/sps.c b/drivers/platform/msm/sps/sps.c
index be4a757d61b4..fdcc1ea6dc51 100644
--- a/drivers/platform/msm/sps/sps.c
+++ b/drivers/platform/msm/sps/sps.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2013, 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
@@ -98,7 +98,6 @@ static char *debugfs_buf;
static u32 debugfs_buf_size;
static u32 debugfs_buf_used;
static int wraparound;
-static struct mutex sps_debugfs_lock;
struct dentry *dent;
struct dentry *dfile_info;
@@ -116,7 +115,6 @@ static struct sps_bam *phy2bam(phys_addr_t phys_addr);
/* record debug info for debugfs */
void sps_debugfs_record(const char *msg)
{
- mutex_lock(&sps_debugfs_lock);
if (debugfs_record_enabled) {
if (debugfs_buf_used + MAX_MSG_LEN >= debugfs_buf_size) {
debugfs_buf_used = 0;
@@ -130,7 +128,6 @@ void sps_debugfs_record(const char *msg)
debugfs_buf_size - debugfs_buf_used,
"\n**** end line of sps log ****\n\n");
}
- mutex_unlock(&sps_debugfs_lock);
}
/* read the recorded debug info to userspace */
@@ -140,7 +137,6 @@ static ssize_t sps_read_info(struct file *file, char __user *ubuf,
int ret = 0;
int size;
- mutex_lock(&sps_debugfs_lock);
if (debugfs_record_enabled) {
if (wraparound)
size = debugfs_buf_size - MAX_MSG_LEN;
@@ -150,7 +146,6 @@ static ssize_t sps_read_info(struct file *file, char __user *ubuf,
ret = simple_read_from_buffer(ubuf, count, ppos,
debugfs_buf, size);
}
- mutex_unlock(&sps_debugfs_lock);
return ret;
}
@@ -195,13 +190,11 @@ static ssize_t sps_set_info(struct file *file, const char __user *buf,
new_buf_size = buf_size_kb * SZ_1K;
- mutex_lock(&sps_debugfs_lock);
if (debugfs_record_enabled) {
if (debugfs_buf_size == new_buf_size) {
/* need do nothing */
pr_info("sps:debugfs: input buffer size "
"is the same as before.\n");
- mutex_unlock(&sps_debugfs_lock);
return count;
} else {
/* release the current buffer */
@@ -221,14 +214,12 @@ static ssize_t sps_set_info(struct file *file, const char __user *buf,
if (!debugfs_buf) {
debugfs_buf_size = 0;
pr_err("sps:fail to allocate memory for debug_fs.\n");
- mutex_unlock(&sps_debugfs_lock);
return -ENOMEM;
}
debugfs_buf_used = 0;
wraparound = false;
debugfs_record_enabled = true;
- mutex_unlock(&sps_debugfs_lock);
return count;
}
@@ -276,7 +267,6 @@ static ssize_t sps_set_logging_option(struct file *file, const char __user *buf,
return count;
}
- mutex_lock(&sps_debugfs_lock);
if (((option == 0) || (option == 2)) &&
((logging_option == 1) || (logging_option == 3))) {
debugfs_record_enabled = false;
@@ -288,7 +278,6 @@ static ssize_t sps_set_logging_option(struct file *file, const char __user *buf,
}
logging_option = option;
- mutex_unlock(&sps_debugfs_lock);
return count;
}
@@ -615,8 +604,6 @@ static void sps_debugfs_init(void)
goto bam_addr_err;
}
- mutex_init(&sps_debugfs_lock);
-
return;
bam_addr_err:
diff --git a/drivers/platform/msm/sps/spsi.h b/drivers/platform/msm/sps/spsi.h
index b2acb39ee673..78ea656b0d8a 100644
--- a/drivers/platform/msm/sps/spsi.h
+++ b/drivers/platform/msm/sps/spsi.h
@@ -60,6 +60,11 @@ extern u8 logging_option;
extern u8 debug_level_option;
extern u8 print_limit_option;
+#define SPS_DEBUGFS(msg, args...) do { \
+ char buf[MAX_MSG_LEN]; \
+ snprintf(buf, MAX_MSG_LEN, msg"\n", ##args); \
+ sps_debugfs_record(buf); \
+ } while (0)
#define SPS_ERR(msg, args...) do { \
if (logging_option != 1) { \
if (unlikely(print_limit_option > 2)) \
@@ -67,6 +72,8 @@ extern u8 print_limit_option;
else \
pr_err(msg, ##args); \
} \
+ if (unlikely(debugfs_record_enabled)) \
+ SPS_DEBUGFS(msg, ##args); \
} while (0)
#define SPS_INFO(msg, args...) do { \
if (logging_option != 1) { \
@@ -75,6 +82,8 @@ extern u8 print_limit_option;
else \
pr_info(msg, ##args); \
} \
+ if (unlikely(debugfs_record_enabled)) \
+ SPS_DEBUGFS(msg, ##args); \
} while (0)
#define SPS_DBG(msg, args...) do { \
if ((unlikely(logging_option > 1)) \
@@ -85,6 +94,8 @@ extern u8 print_limit_option;
pr_info(msg, ##args); \
} else \
pr_debug(msg, ##args); \
+ if (unlikely(debugfs_record_enabled)) \
+ SPS_DEBUGFS(msg, ##args); \
} while (0)
#define SPS_DBG1(msg, args...) do { \
if ((unlikely(logging_option > 1)) \
@@ -95,6 +106,8 @@ extern u8 print_limit_option;
pr_info(msg, ##args); \
} else \
pr_debug(msg, ##args); \
+ if (unlikely(debugfs_record_enabled)) \
+ SPS_DEBUGFS(msg, ##args); \
} while (0)
#define SPS_DBG2(msg, args...) do { \
if ((unlikely(logging_option > 1)) \
@@ -105,6 +118,8 @@ extern u8 print_limit_option;
pr_info(msg, ##args); \
} else \
pr_debug(msg, ##args); \
+ if (unlikely(debugfs_record_enabled)) \
+ SPS_DEBUGFS(msg, ##args); \
} while (0)
#define SPS_DBG3(msg, args...) do { \
if ((unlikely(logging_option > 1)) \
@@ -115,6 +130,8 @@ extern u8 print_limit_option;
pr_info(msg, ##args); \
} else \
pr_debug(msg, ##args); \
+ if (unlikely(debugfs_record_enabled)) \
+ SPS_DEBUGFS(msg, ##args); \
} while (0)
#else
#define SPS_DBG3(x...) pr_debug(x)
diff --git a/sound/core/timer.c b/sound/core/timer.c
index 0641d14bc423..ee81c947c24b 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -1534,7 +1534,6 @@ static int snd_timer_user_tselect(struct file *file,
if (err < 0)
goto __err;
- tu->qhead = tu->qtail = tu->qused = 0;
kfree(tu->queue);
tu->queue = NULL;
kfree(tu->tqueue);
@@ -1859,7 +1858,6 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
tu = file->private_data;
unit = tu->tread ? sizeof(struct snd_timer_tread) : sizeof(struct snd_timer_read);
- mutex_lock(&tu->ioctl_lock);
spin_lock_irq(&tu->qlock);
while ((long)count - result >= unit) {
while (!tu->qused) {
@@ -1875,9 +1873,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
add_wait_queue(&tu->qchange_sleep, &wait);
spin_unlock_irq(&tu->qlock);
- mutex_unlock(&tu->ioctl_lock);
schedule();
- mutex_lock(&tu->ioctl_lock);
spin_lock_irq(&tu->qlock);
remove_wait_queue(&tu->qchange_sleep, &wait);
@@ -1916,7 +1912,6 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
}
spin_unlock_irq(&tu->qlock);
_error:
- mutex_unlock(&tu->ioctl_lock);
return result > 0 ? result : err;
}