Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 568463b2 authored by Sarada Prasanna Garnayak's avatar Sarada Prasanna Garnayak Committed by Gerrit - the friendly Code Review server
Browse files

input: synaptics: add NULL pointer check



add null pointer exception check for pointers which
may be NULL after request for memory allocation and
may be deferenced.

This patch is propagated from msm-3.10 kernel
(commit: 5a734f6783bdb12fe696efe1c4668f50ea294054
input: synaptics: add NULL pointer check)
Also cleaned checkpatch warnings on msm-3.18 kernel.

CRs-Fixed: 712847
Change-Id: I59ee5b00b124bc49fcc5d9d8bbfcb393fa70de05
Signed-off-by: default avatarSarada Prasanna Garnayak <c_sgarna@codeaurora.org>
Signed-off-by: default avatarSudhakar Manapati <smanap@codeaurora.org>
parent 1efbcd74
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -706,12 +706,18 @@ static enum flash_area fwu_go_nogo(void)
	unsigned char config_id[4];
	unsigned char pkg_id[4];
	char *strptr;
	char *imagePR = kzalloc(sizeof(MAX_FIRMWARE_ID_LEN), GFP_KERNEL);
	char *imagePR;
	enum flash_area flash_area = NONE;
	struct i2c_client *i2c_client = fwu->rmi4_data->i2c_client;
	struct f01_device_status f01_device_status;
	struct image_content *img = &fwu->image_content;

	imagePR = kzalloc(sizeof(MAX_FIRMWARE_ID_LEN), GFP_KERNEL);
	if (!imagePR) {
		flash_area = NONE;
		return flash_area;
	}

	if (fwu->force_update) {
		flash_area = UI_FIRMWARE;
		goto exit;
+28 −11
Original line number Diff line number Diff line
@@ -2075,16 +2075,20 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,

	fhandler->fn_number = fd->fn_number;
	fhandler->num_of_data_sources = fd->intr_src_count;
	size_of_2d_data = sizeof(struct synaptics_rmi4_f12_finger_data);

	fhandler->extra = kmalloc(sizeof(*extra_data), GFP_KERNEL);
	if (!fhandler->extra)
		return -ENOMEM;

	extra_data = (struct synaptics_rmi4_f12_extra_data *)fhandler->extra;
	size_of_2d_data = sizeof(struct synaptics_rmi4_f12_finger_data);

	retval = synaptics_rmi4_i2c_read(rmi4_data,
			fhandler->full_addr.query_base + 5,
			query_5.data,
			sizeof(query_5.data));
	if (retval < 0)
		return retval;
		goto free_function_handler_mem;

	ctrl_8_offset = query_5.ctrl0_is_present +
			query_5.ctrl1_is_present +
@@ -2124,7 +2128,7 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
			ctrl_23.data,
			sizeof(ctrl_23.data));
	if (retval < 0)
		return retval;
		goto free_function_handler_mem;

	/* Maximum number of fingers supported */
	fhandler->num_of_data_points = min(ctrl_23.max_reported_objects,
@@ -2138,14 +2142,14 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
			&size_of_query8,
			sizeof(size_of_query8));
	if (retval < 0)
		return retval;
		goto free_function_handler_mem;

	retval = synaptics_rmi4_i2c_read(rmi4_data,
			fhandler->full_addr.query_base + 8,
			query_8.data,
			size_of_query8);
	if (retval < 0)
		return retval;
		goto free_function_handler_mem;

	/* Determine the presence of the Data0 register */
	extra_data->data1_offset = query_8.data0_is_present;
@@ -2182,14 +2186,14 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
	retval = synaptics_rmi4_f12_set_enables(rmi4_data,
			fhandler->full_addr.ctrl_base + ctrl_28_offset);
	if (retval < 0)
		return retval;
		goto free_function_handler_mem;

	retval = synaptics_rmi4_i2c_read(rmi4_data,
			fhandler->full_addr.ctrl_base + ctrl_8_offset,
			ctrl_8.data,
			sizeof(ctrl_8.data));
	if (retval < 0)
		return retval;
		goto free_function_handler_mem;

	/* Maximum x */
	rmi4_data->sensor_max_x =
@@ -2201,7 +2205,8 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
			if (rmi4_data->board->panel_maxx >= F12_MAX_X) {
				dev_err(&rmi4_data->i2c_client->dev,
					"F12 max_x value out of bound.");
				return -EINVAL;
				retval = -EINVAL;
				goto free_function_handler_mem;
			}
			if (rmi4_data->sensor_max_x !=
					rmi4_data->board->panel_maxx) {
@@ -2219,7 +2224,7 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
					ctrl_8.data,
					sizeof(ctrl_8.data));
				if (retval < 0)
					return retval;
					goto free_function_handler_mem;
			}
		}
	}
@@ -2234,7 +2239,8 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
			if (rmi4_data->board->panel_maxy >= F12_MAX_Y) {
				dev_err(&rmi4_data->i2c_client->dev,
					"F12 max_y value out of bound.");
					return -EINVAL;
				retval = -EINVAL;
				goto free_function_handler_mem;
			}
			if (rmi4_data->sensor_max_y !=
				rmi4_data->board->panel_maxy) {
@@ -2252,7 +2258,7 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
					ctrl_8.data,
					sizeof(ctrl_8.data));
				if (retval < 0)
					return retval;
					goto free_function_handler_mem;
			}
		}
	}
@@ -2284,8 +2290,19 @@ static int synaptics_rmi4_f12_init(struct synaptics_rmi4_data *rmi4_data,
	/* Allocate memory for finger data storage space */
	fhandler->data_size = num_of_fingers * size_of_2d_data;
	fhandler->data = kmalloc(fhandler->data_size, GFP_KERNEL);
	if (!fhandler->data) {
		dev_err(&rmi4_data->i2c_client->dev,
			"%s: Failed to alloc mem for function handler data\n",
			__func__);
		retval = -ENOMEM;
		goto free_function_handler_mem;
	}

	return retval;

free_function_handler_mem:
	kfree(fhandler->extra);
	return retval;
}

static int synaptics_rmi4_f1a_alloc_mem(struct synaptics_rmi4_data *rmi4_data,