diff options
author | Wendly Li <wendlyli@google.com> | 2022-09-12 04:42:36 +0000 |
---|---|---|
committer | Wendly Li <wendlyli@google.com> | 2022-09-12 05:16:44 +0000 |
commit | dfb1c6a783f415fc2bc6efe5e39bdb7b6921fcc2 (patch) | |
tree | 434f47fbff897cb0074007f5ccc1044db500a1fc /goodix_ts_core.c | |
parent | 56736144d2526262a689ebdd6e4c8a4b6194bb22 (diff) | |
download | goodix_touch-dfb1c6a783f415fc2bc6efe5e39bdb7b6921fcc2.tar.gz |
touch/goodix: Fix null pointer exception
Bug: 245694496
Bug: 245500983
Test: cat /sys/devices/virtual/goog_touch_interface/gti.0/self_test
Change-Id: I18c72645285f8ff89b39218fbc189ceb807275a2
Signed-off-by: Wendly Li <wendlyli@google.com>
Diffstat (limited to 'goodix_ts_core.c')
-rw-r--r-- | goodix_ts_core.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/goodix_ts_core.c b/goodix_ts_core.c index 3113018..f4a1931 100644 --- a/goodix_ts_core.c +++ b/goodix_ts_core.c @@ -1049,7 +1049,7 @@ static int gti_ping(void *private_data, struct gti_ping_cmd *cmd) return cd->hw_ops->ping(cd); } -static int git_selftest(void *private_data, struct gti_selftest_cmd *cmd) +static int gti_selftest(void *private_data, struct gti_selftest_cmd *cmd) { cmd->result = GTI_SELFTEST_RESULT_DONE; return driver_test_selftest(cmd->buffer); @@ -2712,6 +2712,11 @@ int goodix_ts_stage2_init(struct goodix_ts_core *cd) #if IS_ENABLED(CONFIG_GOOG_TOUCH_INTERFACE) options = devm_kzalloc(&cd->pdev->dev, sizeof(struct gti_optional_configuration), GFP_KERNEL); + if (options == NULL) { + ts_err("Failed to alloc gti options\n"); + ret = -ENOMEM; + goto err_init_tpm; + } options->get_mutual_sensor_data = get_mutual_sensor_data; options->get_self_sensor_data = get_self_sensor_data; options->set_continuous_report = set_continuous_report; @@ -2724,7 +2729,7 @@ int goodix_ts_stage2_init(struct goodix_ts_core *cd) options->set_heatmap_enabled = set_heatmap_enabled; options->get_fw_version = gti_get_fw_version; options->ping = gti_ping; - options->selftest = git_selftest; + options->selftest = gti_selftest; cd->gti = goog_touch_interface_probe( cd, cd->bus->dev, cd->input_dev, gti_default_handler, options); @@ -2771,13 +2776,38 @@ int goodix_ts_stage2_init(struct goodix_ts_core *cd) cd->touch_frame_size = touch_frame_size; cd->touch_frame_package = devm_kzalloc(&cd->pdev->dev, touch_frame_size + 8, GFP_KERNEL); + if (cd->touch_frame_package == NULL) { + ts_err("failed to alloc touch_frame_package"); + ret = -ENOMEM; + goto err_setup_irq; + } cd->mutual_data = devm_kzalloc(&cd->pdev->dev, mutual_size, GFP_KERNEL); + if (cd->mutual_data == NULL) { + ts_err("failed to alloc mutual_data"); + ret = -ENOMEM; + goto err_setup_irq; + } cd->mutual_data_manual = devm_kzalloc(&cd->pdev->dev, mutual_size, GFP_KERNEL); + if (cd->mutual_data_manual == NULL) { + ts_err("failed to alloc mutual_data_manual"); + ret = -ENOMEM; + goto err_setup_irq; + } cd->self_sensing_data = devm_kzalloc(&cd->pdev->dev, self_sensing_size, GFP_KERNEL); + if (cd->self_sensing_data == NULL) { + ts_err("failed to alloc self_sensing_data"); + ret = -ENOMEM; + goto err_setup_irq; + } cd->self_sensing_data_manual = devm_kzalloc(&cd->pdev->dev, self_sensing_size, GFP_KERNEL); + if (cd->self_sensing_data_manual == NULL) { + ts_err("failed to alloc self_sensing_data_manual"); + ret = -ENOMEM; + goto err_setup_irq; + } /* request irq line */ ret = goodix_ts_irq_setup(cd); |