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

Commit 86d77e6c authored by Priyanka Gujjula's avatar Priyanka Gujjula
Browse files

msm: vidc: Fix validate_pkt_size macro definition



[1] Convert validate_pkt_size macro to an inline
function as the macro definition always returns true.
[2] Handle return error code from hfi_fill_codec_info.

Change-Id: I9e7eadfe82c041721565c880eca3a46e4e3e98d9
Signed-off-by: default avatarPriyanka Gujjula <pgujjula@codeaurora.org>
parent 9fcd72d5
Loading
Loading
Loading
Loading
+30 −34
Original line number Diff line number Diff line
@@ -104,6 +104,16 @@ static int get_hal_pixel_depth(u32 hfi_bit_depth)
	return MSM_VIDC_BIT_DEPTH_UNSUPPORTED;
}

static inline int validate_pkt_size(u32 rem_size, u32 msg_size)
{
	if (rem_size < msg_size) {
		dprintk(VIDC_ERR, "%s: bad_packet_size: %d\n",
			__func__, rem_size);
		return false;
	}
	return true;
}

static int hfi_process_sess_evt_seq_changed(u32 device_id,
		struct hfi_msg_event_notify_packet *pkt,
		struct msm_vidc_cb_info *info)
@@ -123,15 +133,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
	int luma_bit_depth, chroma_bit_depth;
	struct hfi_colour_space *colour_info;

#define VALIDATE_PKT_SIZE(__rem_size, __msg_size) ({ \
		if (__rem_size < __msg_size) { \
			dprintk(VIDC_ERR, \
			"hal_process_session_init_done: bad_pkt_size\n"); \
			false; \
		} \
		true; \
	})
	if (!VALIDATE_PKT_SIZE(pkt->size,
	if (!validate_pkt_size(pkt->size,
			       sizeof(struct hfi_msg_event_notify_packet)))
		return -E2BIG;

@@ -157,13 +159,13 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
		rem_size = pkt->size - sizeof(struct
				hfi_msg_event_notify_packet) + sizeof(u32);
		do {
			if (!VALIDATE_PKT_SIZE(rem_size, sizeof(u32)))
			if (!validate_pkt_size(rem_size, sizeof(u32)))
				return -E2BIG;
			prop_id = (int) *((u32 *)data_ptr);
			rem_size -= sizeof(u32);
			switch (prop_id) {
			case HFI_PROPERTY_PARAM_FRAME_SIZE:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
					hfi_frame_size)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -178,7 +180,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
				rem_size -= sizeof(struct hfi_frame_size);
				break;
			case HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
					hfi_profile_level)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -194,7 +196,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
				rem_size -= sizeof(struct hfi_profile_level);
				break;
			case HFI_PROPERTY_PARAM_VDEC_PIXEL_BITDEPTH:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
					hfi_bit_depth)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -230,7 +232,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
				rem_size -= sizeof(struct hfi_bit_depth);
				break;
			case HFI_PROPERTY_PARAM_VDEC_PIC_STRUCT:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
					hfi_pic_struct)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -245,7 +247,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
				rem_size -= sizeof(struct hfi_pic_struct);
				break;
			case HFI_PROPERTY_PARAM_VDEC_DPB_COUNTS:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
					hfi_dpb_counts)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -266,7 +268,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
				rem_size -= sizeof(struct hfi_dpb_counts);
				break;
			case HFI_PROPERTY_PARAM_VDEC_COLOUR_SPACE:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
					hfi_colour_space)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -282,7 +284,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
				rem_size -= sizeof(struct hfi_colour_space);
				break;
			case HFI_PROPERTY_CONFIG_VDEC_ENTROPY:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(u32)))
				if (!validate_pkt_size(rem_size, sizeof(u32)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
				entropy_mode = *(u32 *)data_ptr;
@@ -294,7 +296,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
				rem_size -= sizeof(u32);
				break;
			case HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
					hfi_buffer_requirements)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -312,7 +314,7 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
					sizeof(struct hfi_buffer_requirements);
				break;
			case HFI_INDEX_EXTRADATA_INPUT_CROP:
				if (!VALIDATE_PKT_SIZE(rem_size, sizeof(struct
				if (!validate_pkt_size(rem_size, sizeof(struct
				     hfi_index_extradata_input_crop_payload)))
					return -E2BIG;
				data_ptr = data_ptr + sizeof(u32);
@@ -347,7 +349,6 @@ static int hfi_process_sess_evt_seq_changed(u32 device_id,
			num_properties_changed--;
		} while (num_properties_changed > 0);
	}
#undef VALIDATE_PKT_SIZE

	info->response_type = HAL_SESSION_EVENT_CHANGE;
	info->response.event = event_notify;
@@ -811,18 +812,10 @@ static int hfi_fill_codec_info(u8 *data_ptr,
	u32 prop_id = *((u32 *)data_ptr);
	u8 *orig_data_ptr = data_ptr;

#define VALIDATE_PKT_SIZE(__rem_size, __msg_size) ({ \
		if (__rem_size < __msg_size) { \
			dprintk(VIDC_ERR, \
			"hfi_msg_sys_init_done: Bad packet size\n"); \
			false; \
		} \
		true; \
	})
	if (prop_id ==  HFI_PROPERTY_PARAM_CODEC_SUPPORTED) {
		struct hfi_codec_supported *prop;

		if (!VALIDATE_PKT_SIZE(rem_size - sizeof(u32),
		if (!validate_pkt_size(rem_size - sizeof(u32),
				       sizeof(struct hfi_codec_supported)))
			return -E2BIG;
		data_ptr = data_ptr + sizeof(u32);
@@ -874,13 +867,13 @@ static int hfi_fill_codec_info(u8 *data_ptr,
	}
	sys_init_done->codec_count = codec_count;

	if (!VALIDATE_PKT_SIZE(rem_size, sizeof(u32)))
	if (!validate_pkt_size(rem_size, sizeof(u32)))
		return -E2BIG;
	prop_id = *((u32 *)(orig_data_ptr + size));
	if (prop_id == HFI_PROPERTY_PARAM_MAX_SESSIONS_SUPPORTED) {
		struct hfi_max_sessions_supported *prop;

		if (!VALIDATE_PKT_SIZE(rem_size - sizeof(u32), sizeof(struct
		if (!validate_pkt_size(rem_size - sizeof(u32), sizeof(struct
				hfi_max_sessions_supported)))
			return -E2BIG;
		prop = (struct hfi_max_sessions_supported *)
@@ -893,7 +886,6 @@ static int hfi_fill_codec_info(u8 *data_ptr,
		dprintk(VIDC_DBG, "max_sessions_supported %d\n",
				prop->max_sessions);
	}
#undef VALIDATE_PKT_SIZE
	return size;
}

@@ -1247,7 +1239,8 @@ enum vidc_status hfi_process_sys_init_done_prop_read(
	struct vidc_hal_sys_init_done *sys_init_done)
{
	enum vidc_status status = VIDC_ERR_NONE;
	u32 rem_bytes, bytes_read, num_properties;
	int bytes_read;
	u32 rem_bytes, num_properties;
	u8 *data_ptr;

	if (!pkt || !sys_init_done) {
@@ -1256,7 +1249,8 @@ enum vidc_status hfi_process_sys_init_done_prop_read(
		return VIDC_ERR_FAIL;
	}
	if (pkt->size < sizeof(struct hfi_msg_sys_init_done_packet)) {
		dprintk(VIDC_ERR, "hfi_msg_sys_init_done: bad packet size\n");
		dprintk(VIDC_ERR, "%s: bad_packet_size: %d\n",
			__func__, pkt->size);
		return VIDC_ERR_FAIL;
	}

@@ -1287,6 +1281,8 @@ enum vidc_status hfi_process_sys_init_done_prop_read(
		return status;
	}
	bytes_read = hfi_fill_codec_info(data_ptr, sys_init_done, rem_bytes);
	if (bytes_read < 0)
		return VIDC_ERR_FAIL;
	data_ptr += bytes_read;
	rem_bytes -= bytes_read;
	num_properties--;