When running the KUnit tests with memory debugging enabled, a bunch of use-after-free errors are hit. Fix them by using the appropriate alloc manager in the appropriate position.
v2: Fix wb & MST issues by re-ordering the allocs instead (apparently kmemleak lies about not leaking objects in UML KUNIT runs!?). Signed-off-by: John Harrison <[email protected]> CC: Alex Hung <[email protected]> CC: Harry Wentland <[email protected]> --- .../amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c | 2 +- .../amd/display/amdgpu_dm/tests/amdgpu_dm_mst_types_test.c | 7 +++++-- .../drm/amd/display/amdgpu_dm/tests/amdgpu_dm_wb_test.c | 7 ++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c index 5fdf8ce023b9..aa72934e1fea 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c @@ -9702,7 +9702,7 @@ dm_test_conn_init_ctx_alloc(struct kunit *test, enum signal_type signal) ctx->adev->mode_info.num_crtc = 1; dm_test_create_mode_props(test, ctx->adev); - pdev = kunit_kzalloc(test, sizeof(*pdev), GFP_KERNEL); + pdev = drmm_kzalloc(ctx->drm, sizeof(*pdev), GFP_KERNEL); KUNIT_ASSERT_NOT_NULL(test, pdev); device_initialize(&pdev->dev); pdev->dev.parent = dev; diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_mst_types_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_mst_types_test.c index eafa3e6733a6..5a848dd5cd0f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_mst_types_test.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_mst_types_test.c @@ -3808,6 +3808,11 @@ dm_mst_test_alloc_dsc_link_ctx(struct kunit *test, int total_avail_slots) KUNIT_ASSERT_EQ(test, kunit_add_action_or_reset(test, dm_mst_test_dsc_link_drop_locks, ctx), 0); + /* Must be allocatd prior to drm_kunit_helper_atomic_state_alloc to prevent + * use-after-free on cleanup */ + port = kunit_kzalloc(test, sizeof(*port), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, port); + ctx->state = drm_kunit_helper_atomic_state_alloc(test, ctx->drm, &ctx->acquire_ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->state); @@ -3833,11 +3838,9 @@ dm_mst_test_alloc_dsc_link_ctx(struct kunit *test, int total_avail_slots) link_srv = kunit_kzalloc(test, sizeof(*link_srv), GFP_KERNEL); res_pool = kunit_kzalloc(test, sizeof(*res_pool), GFP_KERNEL); sink = kunit_kzalloc(test, sizeof(*sink), GFP_KERNEL); - port = kunit_kzalloc(test, sizeof(*port), GFP_KERNEL); KUNIT_ASSERT_NOT_NULL(test, link_srv); KUNIT_ASSERT_NOT_NULL(test, res_pool); KUNIT_ASSERT_NOT_NULL(test, sink); - KUNIT_ASSERT_NOT_NULL(test, port); link_srv->mst_decide_link_encoding_format = dm_mst_test_mst_encoding_format; diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_wb_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_wb_test.c index 4bc033fdfa97..047ac88cb2a9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_wb_test.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_wb_test.c @@ -486,6 +486,10 @@ static void dm_test_wb_connector_init_success(struct kunit *test) struct dc *dc; int ret; + /* Must be allocated before adev to prevent use-after-free on cleanup */ + wbcon = kunit_kzalloc(test, sizeof(*wbcon), GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, wbcon); + adev = dm_kunit_alloc_adev(test); adev->mode_info.num_crtc = 1; dm = &adev->dm; @@ -500,9 +504,6 @@ static void dm_test_wb_connector_init_success(struct kunit *test) dc->links[0] = link; dm->dc = dc; - wbcon = kunit_kzalloc(test, sizeof(*wbcon), GFP_KERNEL); - KUNIT_ASSERT_NOT_NULL(test, wbcon); - ret = amdgpu_dm_wb_connector_init(dm, wbcon, 0); KUNIT_EXPECT_EQ(test, ret, 0); -- 2.43.0
