diff options
author | Siqi Lin <siqilin@google.com> | 2017-07-24 10:18:12 -0700 |
---|---|---|
committer | Siqi Lin <siqilin@google.com> | 2017-07-24 10:19:26 -0700 |
commit | 2def3b3a085bf04865593adc03597d8efffde5d4 (patch) | |
tree | 9f26d767f1f7d620067478c302fc3bac0c9483f9 | |
parent | daf6cdff947a739c9a2f07442fae1580966354db (diff) | |
parent | 67581c4b3d89fa034484d711c545526f5f52379e (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.c | 53 | ||||
-rw-r--r-- | drivers/md/dm-ioctl.c | 2 | ||||
-rw-r--r-- | drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c | 6 | ||||
-rw-r--r-- | drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c | 2 | ||||
-rw-r--r-- | drivers/media/platform/msm/camera_v2/sensor/actuator/msm_actuator.c | 21 | ||||
-rw-r--r-- | drivers/platform/msm/sps/sps.c | 15 | ||||
-rw-r--r-- | drivers/platform/msm/sps/spsi.h | 17 | ||||
-rw-r--r-- | sound/core/timer.c | 5 |
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; } |