From c454825fb1ecbb2732eaaccd3e753d522889ffc3 Mon Sep 17 00:00:00 2001 From: VijayaKumar T M Date: Thu, 15 Jun 2017 10:26:19 +0530 Subject: [PATCH] msm: camera: fix untrusted pointer for power down setting When getting power down setting, there is an untrusted pointer from a user space pointer. Need to copy to the kernel space first. CRs-Fixed: 2037398 Change-Id: I64032a96e62ddfeec85eebe984d8ba52754f6148 Signed-off-by: Haibin Liu Signed-off-by: VijayaKumar T M --- .../msm/camera_v2/sensor/msm_sensor_driver.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c index 891e528f75f1..a41d7dba490e 100644 --- a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c +++ b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c @@ -469,17 +469,11 @@ static int32_t msm_sensor_create_pd_settings(void *setting, #ifdef CONFIG_COMPAT if (is_compat_task()) { - int i = 0; - struct msm_sensor_power_setting32 *power_setting_iter = - (struct msm_sensor_power_setting32 *)compat_ptr(( - (struct msm_camera_sensor_slave_info32 *)setting)-> - power_setting_array.power_setting); - - for (i = 0; i < size_down; i++) { - pd[i].config_val = power_setting_iter[i].config_val; - pd[i].delay = power_setting_iter[i].delay; - pd[i].seq_type = power_setting_iter[i].seq_type; - pd[i].seq_val = power_setting_iter[i].seq_val; + rc = msm_sensor_get_pw_settings_compat( + pd, pu, size_down); + if (rc < 0) { + pr_err("failed"); + return -EFAULT; } } else #endif