From a8e01bf9ad4d4bbaa11cbde1aca6d631c8314a67 Mon Sep 17 00:00:00 2001 From: "Yu (Tyler) Zhao" <105505114+tylerzhao7684@users.noreply.github.com> Date: Mon, 1 May 2023 17:09:27 -0400 Subject: [PATCH 1/2] Coverity Fix: Free allocated memory before pointer is lost Using destructor to close MMD libraries Clang format Closing mmd_lib in destructor that is not opened globally --- src/acl_hal_mmd.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/acl_hal_mmd.cpp b/src/acl_hal_mmd.cpp index 3ffc2d22..d9ca2df5 100644 --- a/src/acl_hal_mmd.cpp +++ b/src/acl_hal_mmd.cpp @@ -464,6 +464,24 @@ static void my_dlclose(void *library) { #endif } +static void my_dlclose_no_assert(void *library) { +#ifdef _WIN32 + FreeLibrary((HMODULE)library); +#else + dlclose(library); +#endif +} + +typedef struct my_dl_wrapper { + void *handle; + my_dl_wrapper(void *handle) { this->handle = handle; } + ~my_dl_wrapper() { my_dlclose_no_assert(this->handle); } + // prohibit copying to avoid double-close of handle + my_dl_wrapper(const my_dl_wrapper &) = delete; + my_dl_wrapper &operator=(const my_dl_wrapper &) = delete; +} my_dl_wrapper; +std::vector> mmd_libs; + cl_bool l_load_board_functions(acl_mmd_dispatch_t *mmd_dispatch, const char *library_name, void *mmd_library, char *error_msg) { @@ -632,12 +650,14 @@ cl_bool l_load_single_board_library(const char *library_name, if (result == CL_FALSE) { std::cout << "Error: Could not load board library " << library_name << " due to failure to load symbols\n"; + my_dlclose(mmd_library); return result; } } ++num_boards_found; } + mmd_libs.push_back(std::make_unique(mmd_library)); return CL_TRUE; } @@ -1193,6 +1213,7 @@ static acl_mmd_dispatch_t *get_msim_mmd_layer() { return nullptr; } auto *sym = my_dlsym(mmd_lib, sym_name, &error_msg); + mmd_libs.push_back(std::make_unique(mmd_lib)); if (!sym) { std::cout << "Error: Symbol " << sym_name << " not found in simulation MMD library "; From 4b6eb46f6e4c60c60153bf0ff7125d61a2368923 Mon Sep 17 00:00:00 2001 From: Tyler Zhao Date: Mon, 10 Jul 2023 11:01:45 -0700 Subject: [PATCH 2/2] Coverity workflow fix for non-zero exit code when grep finds no match --- .github/workflows/coverity.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index 564e12ae..f7d405fa 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -67,7 +67,7 @@ jobs: - run: cov-analyze --config config.xml --dir results --concurrency --security --rule --enable-constraint-fpp --enable-fnptr --enable-virtual - run: cov-format-errors --text-output-style multiline --dir results --filesort --file "$PWD" --strip-path "$PWD" > cov-errors.txt - run: cat cov-errors.txt - - run: count=$(grep -c '^$' cov-errors.txt) && echo "$(( $count / 2 ))" + - run: count=$(grep -c '^$' cov-errors.txt) || true && echo "$(( $count / 2 ))" - uses: actions/upload-artifact@v3 with: name: fpga-runtime-for-opencl-${{ github.sha }}-coverity-${{ github.run_id }}