struct amdgpu_mem_partition_info *mem_ranges;
uint32_t i = 0;
- if (cmd->input_size != sizeof(*input_data))
+ if ((cmd->input_size != sizeof(*input_data)) ||
+ (cmd->output_buf_size < sizeof(*ranges)))
return RAS_CMD__ERROR_INVALID_INPUT_DATA;
mem_ranges = adev->gmc.mem_partitions;
(struct ras_cmd_translate_fb_address_rsp *)cmd->output_buff_raw;
int ret = RAS_CMD__ERROR_GENERIC;
- if (cmd->input_size != sizeof(struct ras_cmd_translate_fb_address_req))
+ if ((cmd->input_size != sizeof(struct ras_cmd_translate_fb_address_req)) ||
+ (cmd->output_buf_size < sizeof(*rsp_buff)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
if ((req_buff->src_addr_type >= RAS_FB_ADDR_UNKNOWN) ||
cmd->cmd_res = res;
- if (cmd->output_size > cmd->output_buf_size) {
+ if (!res && (cmd->output_size > cmd->output_buf_size)) {
RAS_DEV_ERR(cmd_core->dev,
"Output size 0x%x exceeds output buffer size 0x%x!\n",
cmd->output_size, cmd->output_buf_size);
uint8_t *out_buf;
int ret = 0, i, count;
- if (cmd->input_size != sizeof(struct ras_cmd_cper_record_req))
+ if (cmd->input_size != sizeof(struct ras_cmd_cper_record_req) ||
+ (cmd->output_buf_size < sizeof(*rsp)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
if (!req->buf_size || !req->buf_ptr || !req->cper_num ||
cmd->cmd_res = res;
- if (cmd->output_size > cmd->output_buf_size) {
+ if (!res && (cmd->output_size > cmd->output_buf_size)) {
RAS_DEV_ERR(ras_core->dev,
"Output data size 0x%x exceeds buffer size 0x%x!\n",
cmd->output_size, cmd->output_buf_size);
struct ras_ecc_count err_data;
int ret;
- if (cmd->input_size != sizeof(struct ras_cmd_block_ecc_info_req))
+ if ((cmd->input_size != sizeof(struct ras_cmd_block_ecc_info_req)) ||
+ (cmd->output_buf_size < sizeof(*output_data)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
memset(&err_data, 0, sizeof(err_data));
(struct ras_cmd_bad_pages_info_rsp *)cmd->output_buff_raw;
int ret;
- if (cmd->input_size != sizeof(struct ras_cmd_bad_pages_info_req))
+ if ((cmd->input_size != sizeof(struct ras_cmd_bad_pages_info_req)) ||
+ (cmd->output_buf_size < sizeof(*output_data)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
ret = ras_cmd_get_group_bad_pages(ras_core, input_data->group_index, output_data);
(struct ras_cmd_cper_snapshot_rsp *)cmd->output_buff_raw;
struct ras_log_batch_overview overview;
- if (cmd->input_size != sizeof(struct ras_cmd_cper_snapshot_req))
+ if ((cmd->input_size != sizeof(struct ras_cmd_cper_snapshot_req)) ||
+ (cmd->output_buf_size < sizeof(*output_data)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
ras_log_ring_get_batch_overview(ras_core, &overview);
uint8_t *buffer;
int ret = 0, i, count;
- if (cmd->input_size != sizeof(struct ras_cmd_cper_record_req))
+ if ((cmd->input_size != sizeof(struct ras_cmd_cper_record_req)) ||
+ (cmd->output_buf_size < sizeof(*rsp)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
if (!req->buf_size || !req->buf_ptr || !req->cper_num ||
struct ras_log_batch_overview overview;
- if (cmd->input_size != sizeof(struct ras_cmd_batch_trace_snapshot_req))
+ if ((cmd->input_size != sizeof(struct ras_cmd_batch_trace_snapshot_req)) ||
+ (cmd->output_buf_size < sizeof(*rsp)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
ras_log_ring_get_batch_overview(ras_core, &overview);
uint64_t id;
bool completed = false;
- if (cmd->input_size != sizeof(struct ras_cmd_batch_trace_record_req))
+ if ((cmd->input_size != sizeof(struct ras_cmd_batch_trace_record_req)) ||
+ (cmd->output_buf_size < sizeof(*output_data)))
return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
if ((!input_data->batch_num) || (input_data->batch_num > RAS_CMD_MAX_BATCH_NUM))
.value = req->method,
};
+ if ((cmd->input_size != sizeof(*req)) ||
+ (cmd->output_buf_size < sizeof(*output_data)))
+ return RAS_CMD__ERROR_INVALID_INPUT_SIZE;
+
ret = ras_psp_trigger_error(ras_core, &block_info, req->instance_mask);
if (!ret) {
output_data->version = 0;