diff options
author | Michel Dänzer | 2018-01-16 09:55:53 -0600 |
---|---|---|
committer | Michel Dänzer | 2018-01-16 09:57:57 -0600 |
commit | 6fe93b8000757e77c3d94f8d8f1b7a22f928de73 (patch) | |
tree | 6d884dc87f739d4d9c65fd2052855f67ef845e74 /tests | |
parent | 57d3d4c96887cde016fe1d2766196accf77ca423 (diff) | |
download | external-libgbm-6fe93b8000757e77c3d94f8d8f1b7a22f928de73.tar.gz external-libgbm-6fe93b8000757e77c3d94f8d8f1b7a22f928de73.tar.xz external-libgbm-6fe93b8000757e77c3d94f8d8f1b7a22f928de73.zip |
amdgpu: Don't dereference device_handle after amdgpu_device_deinitialize
Fixes use after free:
==2537== Invalid read of size 4
==2537== at 0x1162C9: suite_deadlock_tests_enable (deadlock_tests.c:101)
==2537== by 0x10B157: amdgpu_disable_suits (amdgpu_test.c:421)
==2537== by 0x10B157: main (amdgpu_test.c:560)
==2537== Address 0x5e44f24 is 452 bytes inside a block of size 1,016 free'd
==2537== at 0x4C2BE1B: free (vg_replace_malloc.c:530)
==2537== by 0x504CD8B: amdgpu_device_reference (amdgpu_device.c:164)
==2537== by 0x504CD8B: amdgpu_device_deinitialize (amdgpu_device.c:307)
==2537== by 0x1162BB: suite_deadlock_tests_enable (deadlock_tests.c:97)
==2537== by 0x10B157: amdgpu_disable_suits (amdgpu_test.c:421)
==2537== by 0x10B157: main (amdgpu_test.c:560)
==2537== Block was alloc'd at
==2537== at 0x4C2CC05: calloc (vg_replace_malloc.c:711)
==2537== by 0x504CA5E: amdgpu_device_initialize (amdgpu_device.c:212)
==2537== by 0x116298: suite_deadlock_tests_enable (deadlock_tests.c:93)
==2537== by 0x10B157: amdgpu_disable_suits (amdgpu_test.c:421)
==2537== by 0x10B157: main (amdgpu_test.c:560)
Reviewed-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/amdgpu/deadlock_tests.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/tests/amdgpu/deadlock_tests.c b/tests/amdgpu/deadlock_tests.c index 84f4debe..cd34cdf6 100644 --- a/tests/amdgpu/deadlock_tests.c +++ b/tests/amdgpu/deadlock_tests.c | |||
@@ -90,20 +90,21 @@ static void amdgpu_deadlock_compute(void); | |||
90 | 90 | ||
91 | CU_BOOL suite_deadlock_tests_enable(void) | 91 | CU_BOOL suite_deadlock_tests_enable(void) |
92 | { | 92 | { |
93 | CU_BOOL enable = CU_TRUE; | ||
94 | |||
93 | if (amdgpu_device_initialize(drm_amdgpu[0], &major_version, | 95 | if (amdgpu_device_initialize(drm_amdgpu[0], &major_version, |
94 | &minor_version, &device_handle)) | 96 | &minor_version, &device_handle)) |
95 | return CU_FALSE; | 97 | return CU_FALSE; |
96 | 98 | ||
97 | if (amdgpu_device_deinitialize(device_handle)) | ||
98 | return CU_FALSE; | ||
99 | |||
100 | |||
101 | if (device_handle->info.family_id == AMDGPU_FAMILY_AI) { | 99 | if (device_handle->info.family_id == AMDGPU_FAMILY_AI) { |
102 | printf("\n\nCurrently hangs the CP on this ASIC, deadlock suite disabled\n"); | 100 | printf("\n\nCurrently hangs the CP on this ASIC, deadlock suite disabled\n"); |
103 | return CU_FALSE; | 101 | enable = CU_FALSE; |
104 | } | 102 | } |
105 | 103 | ||
106 | return CU_TRUE; | 104 | if (amdgpu_device_deinitialize(device_handle)) |
105 | return CU_FALSE; | ||
106 | |||
107 | return enable; | ||
107 | } | 108 | } |
108 | 109 | ||
109 | int suite_deadlock_tests_init(void) | 110 | int suite_deadlock_tests_init(void) |