From 9636c2f0d55fe6daa04c280c70cc9c44c4976fcb Mon Sep 17 00:00:00 2001 From: Brandon Yates Date: Wed, 24 Jan 2024 16:59:31 +0000 Subject: [PATCH] fix: Avoid double free when freeing sip kernels Reset sipKernels unique_ptr when freeing Related-to: NEO-8402 Signed-off-by: Brandon Yates --- .../sources/debug/debug_session_common.h | 26 ++++++++++++++++++- .../sources/debug/test_debug_api.cpp | 21 +++------------ shared/source/built_ins/sip.cpp | 1 + 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/level_zero/tools/test/unit_tests/sources/debug/debug_session_common.h b/level_zero/tools/test/unit_tests/sources/debug/debug_session_common.h index 45cac5e6c3..ac65da1347 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/debug_session_common.h +++ b/level_zero/tools/test/unit_tests/sources/debug/debug_session_common.h @@ -1,17 +1,41 @@ /* - * Copyright (C) 2022-2023 Intel Corporation + * Copyright (C) 2022-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ +#pragma once + +#include "shared/source/os_interface/os_interface.h" +#include "shared/test/common/mocks/mock_device.h" +#include "shared/test/common/mocks/mock_sip.h" + #include "level_zero/core/test/unit_tests/fixtures/device_fixture.h" +#include "level_zero/core/test/unit_tests/mocks/mock_built_ins.h" +#include "level_zero/core/test/unit_tests/mocks/mock_device.h" #include "common/StateSaveAreaHeader.h" namespace L0 { namespace ult { +struct DebugApiFixture : public DeviceFixture { + void setUp() { + DeviceFixture::setUp(); + neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new NEO::OSInterface); + mockBuiltins = new MockBuiltins(); + mockBuiltins->stateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(2); + neoDevice->executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltins); + } + + void tearDown() { + DeviceFixture::tearDown(); + } + + MockBuiltins *mockBuiltins = nullptr; +}; + size_t threadSlotOffset(SIP::StateSaveAreaHeader *pStateSaveAreaHeader, int slice, int subslice, int eu, int thread); size_t regOffsetInThreadSlot(const SIP::regset_desc *regdesc, uint32_t start); diff --git a/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp b/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp index 6ac9fb86bc..06a1c88324 100644 --- a/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp +++ b/level_zero/tools/test/unit_tests/sources/debug/test_debug_api.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2023 Intel Corporation + * Copyright (C) 2021-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -18,27 +18,12 @@ #include "level_zero/core/test/unit_tests/mocks/mock_device.h" #include "level_zero/include/zet_intel_gpu_debug.h" #include "level_zero/tools/source/debug/debug_handlers.h" +#include "level_zero/tools/test/unit_tests/sources/debug/debug_session_common.h" #include "level_zero/tools/test/unit_tests/sources/debug/mock_debug_session.h" namespace L0 { namespace ult { -struct DebugApiFixture : public DeviceFixture { - void setUp() { - DeviceFixture::setUp(); - neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new NEO::OSInterface); - mockBuiltins = new MockBuiltins(); - mockBuiltins->stateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(2); - neoDevice->executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltins); - } - - void tearDown() { - DeviceFixture::tearDown(); - } - - MockBuiltins *mockBuiltins = nullptr; -}; - using DebugApiTest = Test; using MultiTileDebugApiTest = Test; @@ -169,7 +154,7 @@ HWTEST2_F(DebugApiTest, givenDeviceWhenDebugAttachIsAvaialbleThenGetPropertiesRe EXPECT_EQ(ZET_DEVICE_DEBUG_PROPERTY_FLAG_ATTACH, debugProperties.flags); } -using isDebugNotSupportedProduct = IsNotWithinProducts; +using isDebugNotSupportedProduct = IsAtMostProduct; HWTEST2_F(DebugApiTest, givenDeviceWhenDebugIsNotSupportedThenGetPropertiesReturnsCorrectFlag, isDebugNotSupportedProduct) { zet_device_debug_properties_t debugProperties = {}; debugProperties.flags = ZET_DEVICE_DEBUG_PROPERTY_FLAG_FORCE_UINT32; diff --git a/shared/source/built_ins/sip.cpp b/shared/source/built_ins/sip.cpp index 5f9805d175..0fad5ba494 100644 --- a/shared/source/built_ins/sip.cpp +++ b/shared/source/built_ins/sip.cpp @@ -233,6 +233,7 @@ void SipKernel::freeSipKernels(RootDeviceEnvironment *rootDeviceEnvironment, Mem for (auto &sipKernel : rootDeviceEnvironment->sipKernels) { if (sipKernel.get()) { memoryManager->freeGraphicsMemory(sipKernel->getSipAllocation()); + sipKernel.reset(); } } }