mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 21:20:12 +01:00
anv: Protect memcpy/memset/qsort calls against NULL arguments
Avoids sanitizer errors like: ``` ../src/intel/vulkan/anv_pipeline_cache.c:409:4: runtime error: null pointer passed as argument 1, which is declared to never be null ../src/intel/vulkan/anv_descriptor_set.c:696:4: runtime error: null pointer passed as argument 1, which is declared to never be null ../src/intel/vulkan/anv_descriptor_set.c:2709:10: runtime error: null pointer passed as argument 1, which is declared to never be null ../src/intel/vulkan/anv_descriptor_set.c:2709:10: runtime error: null pointer passed as argument 2, which is declared to never be null ``` Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32098>
This commit is contained in:
parent
6e544214d5
commit
b6d11ba5b4
3 changed files with 32 additions and 21 deletions
|
|
@ -1536,8 +1536,10 @@ intel_perf_init_metrics(struct intel_perf_config *perf_cfg,
|
|||
load_oa_metrics(perf_cfg, drm_fd, devinfo);
|
||||
|
||||
/* sort query groups by name */
|
||||
qsort(perf_cfg->queries, perf_cfg->n_queries,
|
||||
sizeof(perf_cfg->queries[0]), intel_perf_compare_query_names);
|
||||
if (perf_cfg->queries != NULL) {
|
||||
qsort(perf_cfg->queries, perf_cfg->n_queries,
|
||||
sizeof(perf_cfg->queries[0]), intel_perf_compare_query_names);
|
||||
}
|
||||
|
||||
build_unique_counter_list(perf_cfg);
|
||||
|
||||
|
|
|
|||
|
|
@ -693,7 +693,10 @@ VkResult anv_CreateDescriptorSetLayout(
|
|||
}
|
||||
|
||||
/* Initialize all samplers to 0 */
|
||||
memset(samplers, 0, immutable_sampler_count * sizeof(*samplers));
|
||||
assert((samplers == NULL) == (immutable_sampler_count == 0));
|
||||
if (samplers != NULL) {
|
||||
memset(samplers, 0, immutable_sampler_count * sizeof(*samplers));
|
||||
}
|
||||
|
||||
uint32_t buffer_view_count = 0;
|
||||
uint32_t dynamic_offset_count = 0;
|
||||
|
|
@ -2699,20 +2702,27 @@ void anv_UpdateDescriptorSets(
|
|||
* - RENDER_SURFACE_STATE
|
||||
* - SAMPLER_STATE
|
||||
*/
|
||||
memcpy(dst->desc_surface_mem.map +
|
||||
dst_layout->descriptor_surface_offset +
|
||||
(copy->dstArrayElement + j) * dst_layout->descriptor_surface_stride,
|
||||
src->desc_surface_mem.map +
|
||||
src_layout->descriptor_surface_offset +
|
||||
(copy->srcArrayElement + j) * src_layout->descriptor_surface_stride,
|
||||
copy_surface_element_size);
|
||||
memcpy(dst->desc_sampler_mem.map +
|
||||
dst_layout->descriptor_sampler_offset +
|
||||
(copy->dstArrayElement + j) * dst_layout->descriptor_sampler_stride,
|
||||
src->desc_sampler_mem.map +
|
||||
src_layout->descriptor_sampler_offset +
|
||||
(copy->srcArrayElement + j) * src_layout->descriptor_sampler_stride,
|
||||
copy_sampler_element_size);
|
||||
assert((dst->desc_surface_mem.map == NULL) == (src->desc_surface_mem.map == NULL));
|
||||
if (dst->desc_surface_mem.map) {
|
||||
memcpy(dst->desc_surface_mem.map +
|
||||
dst_layout->descriptor_surface_offset +
|
||||
(copy->dstArrayElement + j) * dst_layout->descriptor_surface_stride,
|
||||
src->desc_surface_mem.map +
|
||||
src_layout->descriptor_surface_offset +
|
||||
(copy->srcArrayElement + j) * src_layout->descriptor_surface_stride,
|
||||
copy_surface_element_size);
|
||||
}
|
||||
|
||||
assert((dst->desc_sampler_mem.map == NULL) == (src->desc_sampler_mem.map == NULL));
|
||||
if (dst->desc_sampler_mem.map) {
|
||||
memcpy(dst->desc_sampler_mem.map +
|
||||
dst_layout->descriptor_sampler_offset +
|
||||
(copy->dstArrayElement + j) * dst_layout->descriptor_sampler_stride,
|
||||
src->desc_sampler_mem.map +
|
||||
src_layout->descriptor_sampler_offset +
|
||||
(copy->srcArrayElement + j) * src_layout->descriptor_sampler_stride,
|
||||
copy_sampler_element_size);
|
||||
}
|
||||
|
||||
/* Copy the CPU side data anv_descriptor */
|
||||
*dst_desc = *src_desc;
|
||||
|
|
|
|||
|
|
@ -287,8 +287,8 @@ anv_shader_bin_create(struct anv_device *device,
|
|||
INTEL_DEBUG(DEBUG_SHADER_PRINT) ?
|
||||
brw_stage_prog_data_printf_string_size(prog_data_in) : 0);
|
||||
|
||||
if (!vk_multialloc_alloc(&ma, &device->vk.alloc,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_DEVICE))
|
||||
if (!vk_multialloc_zalloc(&ma, &device->vk.alloc,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_DEVICE))
|
||||
return NULL;
|
||||
|
||||
memcpy(obj_key_data, key_data, key_size);
|
||||
|
|
@ -406,14 +406,13 @@ anv_shader_bin_create(struct anv_device *device,
|
|||
typed_memcpy(prog_data_relocs, prog_data_in->relocs,
|
||||
prog_data_in->num_relocs);
|
||||
prog_data->relocs = prog_data_relocs;
|
||||
memset(prog_data_param, 0,
|
||||
prog_data->nr_params * sizeof(*prog_data_param));
|
||||
prog_data->param = prog_data_param;
|
||||
prog_data->printf_info = printf_infos;
|
||||
shader->prog_data = prog_data;
|
||||
shader->prog_data_size = prog_data_size;
|
||||
|
||||
assert(num_stats <= ARRAY_SIZE(shader->stats));
|
||||
assert((stats != NULL) || (num_stats == 0));
|
||||
typed_memcpy(shader->stats, stats, num_stats);
|
||||
shader->num_stats = num_stats;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue