From 99b9c5f43dbcf5b158df17ea755c0da91c941fc8 Mon Sep 17 00:00:00 2001 From: jikui Date: Wed, 15 Jul 2020 11:26:10 +0800 Subject: [PATCH] iSulad: supplement fuzz testcase for image.c Signed-off-by: jikui --- test/fuzz/CMakeLists.txt | 39 +++++++++++++++++++----- test/fuzz/fuzz.sh | 4 +++ test/fuzz/im_config_image_exist_fuzz.cpp | 29 ++++++++++++++++++ test/fuzz/im_get_image_count_fuzz.cpp | 39 ++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 test/fuzz/im_config_image_exist_fuzz.cpp create mode 100644 test/fuzz/im_get_image_count_fuzz.cpp diff --git a/test/fuzz/CMakeLists.txt b/test/fuzz/CMakeLists.txt index 02e24e6..340cf75 100644 --- a/test/fuzz/CMakeLists.txt +++ b/test/fuzz/CMakeLists.txt @@ -13,28 +13,51 @@ MESSAGE(STATUS "LIB_FUZZING_ENGINE is set to ${LIB_FUZZING_ENGINE}") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address -fsanitize-coverage=trace-pc") SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUGS} -fsanitize=address -fsanitize-coverage=trace-pc") -SET(EXE im_oci_image_exist_fuzz) SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) -add_executable(${EXE} im_oci_image_exist_fuzz.cpp) -target_include_directories(${EXE} PUBLIC +SET(EXE0 im_oci_image_exist_fuzz) +SET(EXE1 im_config_image_exist_fuzz) +SET(EXE2 im_get_image_count_fuzz) +add_executable(${EXE0} im_oci_image_exist_fuzz.cpp) +add_executable(${EXE1} im_config_image_exist_fuzz.cpp) +add_executable(${EXE2} im_get_image_count_fuzz.cpp) + +SET(IMAGE_FUZZ_INCLUDE_DIRS ${GTEST_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../include ${CMAKE_CURRENT_SOURCE_DIR}/../../src ${CMAKE_CURRENT_SOURCE_DIR}/../../src/common - ${CMAKE_CURRENT_SOURCE_DIR}/../../src/utils ${CMAKE_CURRENT_SOURCE_DIR}/../../src/utils/http ${CMAKE_CURRENT_SOURCE_DIR}/../../src/utils/tar ${CMAKE_CURRENT_SOURCE_DIR}/../../src/utils/sha256 ${CMAKE_CURRENT_SOURCE_DIR}/../../src/utils/cutils ${CMAKE_CURRENT_SOURCE_DIR}/../../src/utils/cutils/map - ${CMAKE_CURRENT_SOURCE_DIR}/../../src/daemon ${CMAKE_CURRENT_SOURCE_DIR}/../../src/daemon/modules ${CMAKE_CURRENT_SOURCE_DIR}/../../src/daemon/modules/api ) -set_target_properties(${EXE} PROPERTIES LINKER_LANGUAGE CXX) -set_target_properties(${EXE} PROPERTIES LINK_FLAGS "-fsanitize=address -fsanitize-coverage=trace-pc") -target_link_libraries(${EXE} ${CMAKE_THREAD_LIBS_INIT} ${ISULA_LIBUTILS_LIBRARY} ${LIB_FUZZING_ENGINE} pthread rt -lisulad_img) +target_include_directories(${EXE0} PUBLIC + ${IMAGE_FUZZ_INCLUDE_DIRS} + ) + +target_include_directories(${EXE1} PUBLIC + ${IMAGE_FUZZ_INCLUDE_DIRS} + ) + +target_include_directories(${EXE2} PUBLIC + ${IMAGE_FUZZ_INCLUDE_DIRS} + ) + +set_target_properties(${EXE0} PROPERTIES LINKER_LANGUAGE CXX) +set_target_properties(${EXE0} PROPERTIES LINK_FLAGS "-fsanitize=address -fsanitize-coverage=trace-pc") +target_link_libraries(${EXE0} ${CMAKE_THREAD_LIBS_INIT} ${ISULA_LIBUTILS_LIBRARY} ${LIB_FUZZING_ENGINE} pthread rt -lisulad_img) + +set_target_properties(${EXE1} PROPERTIES LINKER_LANGUAGE CXX) +set_target_properties(${EXE1} PROPERTIES LINK_FLAGS "-fsanitize=address -fsanitize-coverage=trace-pc") +target_link_libraries(${EXE1} ${CMAKE_THREAD_LIBS_INIT} ${ISULA_LIBUTILS_LIBRARY} ${LIB_FUZZING_ENGINE} pthread rt -lisulad_img) + +set_target_properties(${EXE2} PROPERTIES LINKER_LANGUAGE CXX) +set_target_properties(${EXE2} PROPERTIES LINK_FLAGS "-fsanitize=address -fsanitize-coverage=trace-pc") +target_link_libraries(${EXE2} ${CMAKE_THREAD_LIBS_INIT} ${ISULA_LIBUTILS_LIBRARY} ${LIB_FUZZING_ENGINE} pthread rt -lisulad_img) diff --git a/test/fuzz/fuzz.sh b/test/fuzz/fuzz.sh index d2f1829..9022ab2 100755 --- a/test/fuzz/fuzz.sh +++ b/test/fuzz/fuzz.sh @@ -15,6 +15,8 @@ fi # 运行fuzz测试程序 ${current_dir}/im_oci_image_exist_fuzz ${FUZZ_OPTION} -artifact_prefix=im_oci_image_exist_fuzz- +${current_dir}/im_config_image_exist_fuzz ${FUZZ_OPTION} -artifact_prefix=im_config_image_exist_fuzz- +${current_dir}/im_get_image_count_fuzz ${FUZZ_OPTION} -artifact_prefix=im_get_image_count_fuzz- # 查找crash文件 @@ -26,4 +28,6 @@ if [ x"${crash}" != x"" ];then exit 1 else echo "all fuzz success." + rm -f ${current_dir}/corpus/* + rm -f ${current_dir}/*_fuzz fi diff --git a/test/fuzz/im_config_image_exist_fuzz.cpp b/test/fuzz/im_config_image_exist_fuzz.cpp new file mode 100644 index 0000000..54127a3 --- /dev/null +++ b/test/fuzz/im_config_image_exist_fuzz.cpp @@ -0,0 +1,29 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved. + * iSulad licensed under the Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR + * PURPOSE. + * See the Mulan PSL v2 for more details. + * Author: jikui + * Create: 2020-07-09 + * Description: provide image fuzz test + ******************************************************************************/ + +#include +#include +#include "image_api.h" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + std::string testData(reinterpret_cast(data), size); + if (testData == "empty") { + im_config_image_exist(nullptr); + } else { + im_config_image_exist(testData.c_str()); + } + return 0; +} diff --git a/test/fuzz/im_get_image_count_fuzz.cpp b/test/fuzz/im_get_image_count_fuzz.cpp new file mode 100644 index 0000000..8e165a5 --- /dev/null +++ b/test/fuzz/im_get_image_count_fuzz.cpp @@ -0,0 +1,39 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved. + * iSulad licensed under the Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR + * PURPOSE. + * See the Mulan PSL v2 for more details. + * Author: jikui + * Create: 2020-07-09 + * Description: provide image fuzz test + ******************************************************************************/ + +#include +#include +#include "image_api.h" +#include "utils.h" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + std::string testData(reinterpret_cast(data), size); + im_image_count_request *rq = nullptr; + char *tmp_type = nullptr; + + if (testData == "empty") { + im_get_image_count(nullptr); + } else { + rq = (im_image_count_request *)util_common_calloc_s(sizeof(im_image_count_request)); + tmp_type = util_strdup_s(testData.c_str()); + rq->type = tmp_type; + im_get_image_count(rq); + + free(tmp_type); + free(rq); + } + return 0; +} -- GitLab