summaryrefslogtreecommitdiff
path: root/goodix_ts_core.c
diff options
context:
space:
mode:
authorWendly Li <wendlyli@google.com>2022-09-12 04:42:36 +0000
committerWendly Li <wendlyli@google.com>2022-09-12 05:16:44 +0000
commitdfb1c6a783f415fc2bc6efe5e39bdb7b6921fcc2 (patch)
tree434f47fbff897cb0074007f5ccc1044db500a1fc /goodix_ts_core.c
parent56736144d2526262a689ebdd6e4c8a4b6194bb22 (diff)
downloadgoodix_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.c34
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);