radeonsi/vcn: Fix some small coverity issues

* 1619409 Resource leak
  - fix leak when mapping encode bitstream buffer fails
* 1619403 Dereference after null check
  - remove size ptr NULL check in radeon_enc_get_feedback, can't be NULL
* 1434887 Out-of-bounds access
  - use correct variable for memset in get_vp9_msg
* 1619400 'Constant' variable guards dead code
  - remove code handling frame_mbs_only_flag == 0, hardcoded to true

Reviewed-by: Leo Liu <leo.liu@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31558>
This commit is contained in:
David Rosca
2024-10-08 11:00:54 +02:00
committed by Marge Bot
parent f77ffd6b7c
commit 17842f0584
3 changed files with 10 additions and 16 deletions
@@ -541,7 +541,7 @@ static rvcn_dec_message_vp9_t get_vp9_msg(struct radeon_decoder *dec,
prbs->seg.abs_delta = pic->picture_parameter.abs_delta;
} else
memset(&prbs->seg, 0, 256);
memset(prbs->segment_data, 0, sizeof(prbs->segment_data));
result.frame_header_flags = (pic->picture_parameter.pic_fields.frame_type
<< RDECODE_FRAME_HDR_INFO_VP9_FRAME_TYPE_SHIFT) &
@@ -1557,6 +1557,7 @@ static void *radeon_vcn_enc_encode_headers(struct radeon_encoder *enc)
PIPE_MAP_WRITE | RADEON_MAP_TEMPORARY);
if (!ptr) {
RVID_ERR("Can't map bs buffer.\n");
FREE(data);
return NULL;
}
@@ -1667,15 +1668,13 @@ static void radeon_enc_get_feedback(struct pipe_video_codec *encoder, void *feed
struct radeon_encoder *enc = (struct radeon_encoder *)encoder;
struct rvid_buffer *fb = feedback;
if (size) {
uint32_t *ptr = enc->ws->buffer_map(enc->ws, fb->res->buf, &enc->cs,
PIPE_MAP_READ_WRITE | RADEON_MAP_TEMPORARY);
if (ptr[1])
*size = ptr[6] - ptr[8];
else
*size = 0;
enc->ws->buffer_unmap(enc->ws, fb->res->buf);
}
uint32_t *ptr = enc->ws->buffer_map(enc->ws, fb->res->buf, &enc->cs,
PIPE_MAP_READ_WRITE | RADEON_MAP_TEMPORARY);
if (ptr[1])
*size = ptr[6] - ptr[8];
else
*size = 0;
enc->ws->buffer_unmap(enc->ws, fb->res->buf);
metadata->present_metadata = PIPE_VIDEO_FEEDBACK_METADATA_TYPE_CODEC_UNIT_LOCATION;
@@ -230,12 +230,7 @@ unsigned int radeon_enc_write_sps(struct radeon_encoder *enc, uint8_t nal_byte,
radeon_enc_code_fixed_bits(enc, sps->gaps_in_frame_num_value_allowed_flag, 1);
radeon_enc_code_ue(enc, (pic->session_init.aligned_picture_width / 16 - 1));
radeon_enc_code_ue(enc, (pic->session_init.aligned_picture_height / 16 - 1));
bool frame_mbs_only_flag = true;
radeon_enc_code_fixed_bits(enc, frame_mbs_only_flag ? 0x1 : 0x0, 1);
if (!frame_mbs_only_flag)
radeon_enc_code_fixed_bits(enc, 0x0, 1); /* mb_adaptive_frame_field_flag */
radeon_enc_code_fixed_bits(enc, 0x1, 1); /* frame_mbs_only_flag */
radeon_enc_code_fixed_bits(enc, 0x1, 1); /* direct_8x8_inference_flag */
radeon_enc_code_fixed_bits(enc, sps->enc_frame_cropping_flag, 1);