[PATCH i-g-t 1/2] lib/amdgpu: fix NULL deref computing available_rings in amdgpu_create_ip_queues
Jesse Zhang <[email protected]>
| Newsgroups | org.freedesktop.lists.igt-dev |
|---|---|
| Message-ID | <[email protected]> |
amdgpu_create_ip_queues() dereferenced ring_context->hw_ip_info to compute available_rings while ring_context was still NULL - it is only allocated later via calloc(). This crashed the all-queues-with-umq subtest with a SIGSEGV in amdgpu_create_ip_queues() before any queue was created. The HW IP info is already queried into the local hw_ip_info at the top of the function, so read available_rings from that instead of the not-yet-allocated ring_context. Signed-off-by: Jesse Zhang <[email protected]> --- lib/amdgpu/amd_command_submission.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/amdgpu/amd_command_submission.c b/lib/amdgpu/amd_command_submission.c index 0334c2ded..7210cffb9 100644 --- a/lib/amdgpu/amd_command_submission.c +++ b/lib/amdgpu/amd_command_submission.c @@ -181,10 +181,10 @@ static void amdgpu_create_ip_queues(amdgpu_device_handle device, amdgpu_dma_limits_query(device, &limits); if (user_queue) - available_rings = ring_context->hw_ip_info.num_userq_slots ? - ((1 << ring_context->hw_ip_info.num_userq_slots) -1) : 1; + available_rings = hw_ip_info.num_userq_slots ? + ((1 << hw_ip_info.num_userq_slots) - 1) : 1; else - available_rings = ring_context->hw_ip_info.available_rings; + available_rings = hw_ip_info.available_rings; if (available_rings <= 0) { *ring_context_out = NULL; -- 2.49.0