summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngga Satya Putra <anggasp@hotmail.com>2020-05-09 18:19:32 +0700
committerMichael Bestas <mkbestas@lineageos.org>2020-06-03 18:42:33 +0300
commit4e9d850d6eee26fdd0aeac299350c7d95107b48c (patch)
treebaaa2095adc06d45963778e786a75c559e01ce0c
parent5d60efc89fa6e5a6616bd9dfa2b0702756b7404e (diff)
msm: camera: ois: Prevent direct access to userspace memories
Privileged Access Never prevent the kernel driver from accessing userspace addresses, which this particular procedure did. Fix this by using copy_to_user function for this procedure instead and while we're at it, directly use the settings pointer rather than going through set_info hoops Change-Id: Ia06e1fa93e5f659241548b11e43b57588a6bd8f4 Signed-off-by: Angga Satya Putra <anggasp@hotmail.com>
-rw-r--r--drivers/media/platform/msm/camera_v2/sensor/ois/msm_ois.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/media/platform/msm/camera_v2/sensor/ois/msm_ois.c b/drivers/media/platform/msm/camera_v2/sensor/ois/msm_ois.c
index d3d48b0bbe4c..478ef5b7038d 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/ois/msm_ois.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/ois/msm_ois.c
@@ -456,13 +456,19 @@ static int32_t msm_ois_control(struct msm_ois_ctrl_t *o_ctrl,
settings);
for (i = 0; i < set_info->ois_params.setting_size; i++) {
- if (set_info->ois_params.settings[i].i2c_operation
- == MSM_OIS_READ) {
- set_info->ois_params.settings[i].reg_data =
- settings[i].reg_data;
+ if (settings[i].i2c_operation == MSM_OIS_READ) {
+ if (copy_to_user(
+ (void __user *)
+ (&set_info->ois_params.settings[i].reg_data),
+ &settings[i].reg_data,
+ sizeof(struct reg_settings_ois_t))) {
+ kfree(settings);
+ pr_err("Error copying\n");
+ return -EFAULT;
+ }
CDBG("ois_data at addr 0x%x is 0x%x",
- set_info->ois_params.settings[i].reg_addr,
- set_info->ois_params.settings[i].reg_data);
+ settings[i].reg_addr,
+ settings[i].reg_data);
}
}