Skip to content

Commit

Permalink
svcdec: Fixes for NULL dereferencing in inter-layer functions
Browse files Browse the repository at this point in the history
Resolution level initialization is tracked in inter layer prediction functions

Bug = ossfuzz:62290
Test: svc_dec_fuzzer
  • Loading branch information
MallikarjunKamble authored and harishdm committed Nov 24, 2023
1 parent 37beb97 commit 82f4e69
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 3 deletions.
1 change: 1 addition & 0 deletions decoder/svc/isvcd_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -5183,6 +5183,7 @@ WORD32 isvcd_video_decode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
UWORD8 u1_layer_nal_data_present = 0;
ps_svcd_ctxt->u1_cur_layer_id = u1_res_id;
ps_svc_lyr_dec = ps_svcd_ctxt->ps_svc_dec_lyr + u1_res_id;
ps_svc_lyr_dec->u1_res_init_done = 0;
ps_dec = &ps_svc_lyr_dec->s_dec;

ps_dec->i4_decode_header = ps_dec_zero_lyr->i4_decode_header;
Expand Down
1 change: 1 addition & 0 deletions decoder/svc/isvcd_parse_ebslice.c
Original file line number Diff line number Diff line change
Expand Up @@ -622,6 +622,7 @@ WORD32 isvcd_mv_pred_ref_tfr_nby2_ebmb(dec_struct_t *ps_dec, UWORD8 u1_mb_idx, U
}
}
}

return OK;
}

Expand Down
4 changes: 4 additions & 0 deletions decoder/svc/isvcd_parse_epslice.c
Original file line number Diff line number Diff line change
Expand Up @@ -3188,6 +3188,8 @@ WORD32 isvcd_parse_interlayer_resamp_func_init(svc_dec_lyr_struct_t *ps_svc_lyr_
dec_struct_t *ps_dec = &ps_svc_lyr_dec->s_dec;
dec_slice_params_t *ps_slice = ps_dec->ps_cur_slice;
WORD32 ret = OK;
if(ps_svc_lyr_dec->u1_res_init_done == 1)
return ret;

if(TARGET_LAYER != ps_svc_lyr_dec->u1_layer_identifier)
{
Expand All @@ -3209,6 +3211,8 @@ WORD32 isvcd_parse_interlayer_resamp_func_init(svc_dec_lyr_struct_t *ps_svc_lyr_
if(ret != OK) return NOT_OK;
ret = isvcd_residual_samp_res_init(ps_svc_lyr_dec);
if(ret != OK) return NOT_OK;

ps_svc_lyr_dec->u1_res_init_done = 1;
}

return ret;
Expand Down
42 changes: 39 additions & 3 deletions decoder/svc/isvcd_process_epslice.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,46 @@ WORD32 isvcd_interlyr_motion_mode_pred(svc_dec_lyr_struct_t *ps_svc_lyr_dec,
/* get the current layer ctxt */
ps_lyr_mem = &ps_ctxt->as_res_lyr_mem[ps_ctxt->i4_res_id];

ps_ctxt->i4_listx = i4_listx;
/* In case of error mb_mode is set to skip */
if(ps_svc_lyr_dec->u1_res_init_done == 0)
{
mv_pred_t *ps_motion_pred;
ps_motion_pred = ps_ctxt->ps_motion_pred_struct;
ps_motion_pred = ps_ctxt->ps_motion_pred_struct;
memset(ps_motion_pred, 0, sizeof(mv_pred_t));

i4_mb_mode = -1;
ps_cur_mb_info->u1_mb_type = MB_SKIP;
ps_mb_part_info->u1_num_part = 1;

ps_cur_mb_info->u1_mb_mc_mode = PRED_16x16;
ps_mb_part_info->u1_col_info[0] = (PRED_16x16 << 6);
ps_mb_part_info->i1_ref_idx[0][0] = 0;

ps_svc_cur_mb_info->u1_residual_prediction_flag = 0;
ps_svc_cur_mb_info->au1_motion_pred_flag[0] = 0;
ps_svc_cur_mb_info->au1_motion_pred_flag[1] = 0;
ps_svc_cur_mb_info->u1_base_mode_flag = 0;

ps_part->u1_partwidth = 4; // interms of 4x4
ps_part->u1_partheight = 4;
ps_part->u1_pred_mode = PRED_L0;
ps_part->u1_is_direct = 0;
ps_part->u1_sub_mb_num = 0;

if(2 == i4_listx)
{
ps_mb_part_info->i1_ref_idx[1][0] = -1;
}
}
else
{
ps_ctxt->i4_listx = i4_listx;

i4_mb_mode =
ps_lyr_mem->pf_inter_lyr_pred(ps_svc_lyr_dec->pv_mode_mv_sample_ctxt, ps_cur_mb_info,
i4_mb_mode =
ps_lyr_mem->pf_inter_lyr_pred(ps_svc_lyr_dec->pv_mode_mv_sample_ctxt, ps_cur_mb_info,
ps_svc_cur_mb_info, ps_dec, ps_mb_part_info, ps_part);
}
}
return i4_mb_mode;
}
Expand Down Expand Up @@ -485,6 +520,7 @@ WORD32 isvcd_mv_pred_ref_tfr_nby2_epmb(dec_struct_t *ps_dec, UWORD8 u1_mb_idx, U
}
}
}

return OK;
}
/*!
Expand Down
1 change: 1 addition & 0 deletions decoder/svc/isvcd_structs.h
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,7 @@ typedef struct _SvcDecLyrStruct
WORD32 i4_frm_svc_base_mode_cabac_size;
UWORD32 u4_pps_id_for_layer;
UWORD8 u1_error_in_cur_frame;
UWORD8 u1_res_init_done;
} svc_dec_lyr_struct_t;

typedef struct
Expand Down

0 comments on commit 82f4e69

Please sign in to comment.