aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMichel Dänzer2018-01-16 09:55:53 -0600
committerMichel Dänzer2018-01-16 09:57:57 -0600
commit6fe93b8000757e77c3d94f8d8f1b7a22f928de73 (patch)
tree6d884dc87f739d4d9c65fd2052855f67ef845e74 /tests
parent57d3d4c96887cde016fe1d2766196accf77ca423 (diff)
downloadexternal-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.c13
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
91CU_BOOL suite_deadlock_tests_enable(void) 91CU_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
109int suite_deadlock_tests_init(void) 110int suite_deadlock_tests_init(void)