Loading drivers/media/platform/msm/vidc/hfi_response_handler.c +30 −34 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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 *) Loading @@ -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; } Loading Loading @@ -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) { Loading @@ -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; } Loading Loading @@ -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--; Loading Loading
drivers/media/platform/msm/vidc/hfi_response_handler.c +30 −34 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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 *) Loading @@ -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; } Loading Loading @@ -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) { Loading @@ -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; } Loading Loading @@ -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--; Loading