summaryrefslogtreecommitdiff
path: root/drivers/soc/qcom/avtimer.c
diff options
context:
space:
mode:
authorXiaoyu Ye <benyxy@codeaurora.org>2016-12-07 16:35:07 -0800
committerXiaoyu Ye <benyxy@codeaurora.org>2016-12-09 16:42:23 -0800
commit25a64e34bbec7b14887cbfe8266ccf6f27113bab (patch)
tree594913f876221ee2d5c47e3f93de878f97d41c41 /drivers/soc/qcom/avtimer.c
parente46119845c16713bc5f42442d654df0961220361 (diff)
drivers: soc: qcom: Add error handling in function avtimer_ioctl
Error handling is added to prevent garbage value being passed to user space by the uninitialized local variable avtimer_tick. CRs-Fixed: 1097878 Change-Id: I3f895deaae3acf329088cf8135859cc41e781763 Signed-off-by: Xiaoyu Ye <benyxy@codeaurora.org>
Diffstat (limited to 'drivers/soc/qcom/avtimer.c')
-rw-r--r--drivers/soc/qcom/avtimer.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/soc/qcom/avtimer.c b/drivers/soc/qcom/avtimer.c
index 2bded5e83cce..4331af8890c0 100644
--- a/drivers/soc/qcom/avtimer.c
+++ b/drivers/soc/qcom/avtimer.c
@@ -1,4 +1,4 @@
-/* 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
@@ -331,9 +331,17 @@ static long avtimer_ioctl(struct file *file, unsigned int ioctl_num,
switch (ioctl_num) {
case IOCTL_GET_AVTIMER_TICK:
{
- uint64_t avtimer_tick;
+ uint64_t avtimer_tick = 0;
+ int rc;
+
+ rc = avcs_core_query_timer(&avtimer_tick);
+
+ if (rc) {
+ pr_err("%s: Error: Invalid AV Timer tick, rc = %d\n",
+ __func__, rc);
+ return rc;
+ }
- avcs_core_query_timer(&avtimer_tick);
pr_debug_ratelimited("%s: AV Timer tick: time %llx\n",
__func__, avtimer_tick);
if (copy_to_user((void *) ioctl_param, &avtimer_tick,