tests: remove previous fuzz testing

We now use https://github.com/google/fuzztest (see previous commits).
And the test was also failing to build
(https://github.com/PX4/PX4-Autopilot/actions/workflows/cflite_batch.yml)

This reverts these commits:
- 9eda5b373c1f16ffec585a0e27d55682d5726c0e
- 2cbc99397681ad9b67f69703c5dd65eaea26c154
- be0a5b4b3272fac13716436c06ff435d157965b4
This commit is contained in:
Beat Küng 2025-06-17 13:53:52 +02:00
parent e50f1774ae
commit 7594a270f7
10 changed files with 6 additions and 246 deletions

View File

@ -1,7 +0,0 @@
FROM gcr.io/oss-fuzz-base/base-builder:v1
COPY . $SRC/PX4-Autopilot
RUN apt-get install -y libjpeg8-dev zlib1g-dev
RUN pip3 install --upgrade pip
RUN python3 -m pip install -r $SRC/PX4-Autopilot/Tools/setup/requirements.txt
WORKDIR $SRC/PX4-Autopilot
COPY ./.clusterfuzzlite/build.sh $SRC/

View File

@ -1,4 +0,0 @@
#!/usr/bin/env bash -eu
PX4_FUZZ=1 make px4_sitl
cp build/px4_sitl_default/bin/px4 $OUT/px4

View File

@ -1 +0,0 @@
language: c++

View File

@ -1,34 +0,0 @@
name: ClusterFuzzLite batch fuzzing
on:
schedule:
- cron: '0 6 * * *' # UTC 6am every day.
permissions: read-all
jobs:
BatchFuzzing:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sanitizer:
- address
- undefined
- memory
steps:
- name: Build Fuzzers (${{ matrix.sanitizer }})
id: build
uses: google/clusterfuzzlite/actions/build_fuzzers@v1
with:
sanitizer: ${{ matrix.sanitizer }}
- name: Run Fuzzers (${{ matrix.sanitizer }})
id: run
uses: google/clusterfuzzlite/actions/run_fuzzers@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
fuzz-seconds: 1800 # 30 mins
mode: 'batch'
sanitizer: ${{ matrix.sanitizer }}
# Optional but recommended: For storing certain artifacts from fuzzing.
# See later section on "Git repo for storage".
# storage-repo: https://${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/OWNER/STORAGE-REPO-NAME.git
# storage-repo-branch: main # Optional. Defaults to "main"
# storage-repo-branch-coverage: gh-pages # Optional. Defaults to "gh-pages".

View File

@ -160,11 +160,6 @@ else
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE=UndefinedBehaviorSanitizer
endif
# Fuzz Testing
ifdef PX4_FUZZ
override CMAKE_ARGS += -DCMAKE_BUILD_TYPE=FuzzTesting
endif
endif
# Pick up specific Python path if set

View File

@ -8,8 +8,6 @@ if(REPLAY_FILE)
message(STATUS "Building without lockstep for replay")
set(ENABLE_LOCKSTEP_SCHEDULER no)
elseif(CMAKE_BUILD_TYPE STREQUAL FuzzTesting)
set(ENABLE_LOCKSTEP_SCHEDULER no)
else()
set(ENABLE_LOCKSTEP_SCHEDULER yes)
endif()

View File

@ -162,7 +162,7 @@ function(px4_add_common_flags)
-Wno-overloaded-virtual # TODO: fix and remove
)
if((NOT CMAKE_BUILD_TYPE STREQUAL FuzzTesting) AND (NOT PX4_CONFIG MATCHES "px4_sitl"))
if((NOT BUILD_TESTING) AND (NOT PX4_CONFIG MATCHES "px4_sitl"))
list(APPEND cxx_flags
-fno-rtti
)

View File

@ -131,23 +131,6 @@ elseif (CMAKE_BUILD_TYPE STREQUAL UndefinedBehaviorSanitizer)
set_tests_properties(${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "runtime error:")
endfunction(sanitizer_fail_test_on_error)
elseif (CMAKE_BUILD_TYPE STREQUAL FuzzTesting)
message(STATUS "FuzzTesting enabled")
add_compile_options(
-g3
-fsanitize=fuzzer
-DFUZZTESTING
)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=fuzzer $ENV{LIB_FUZZING_ENGINE}" CACHE INTERNAL "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=fuzzer $ENV{LIB_FUZZING_ENGINE}" CACHE INTERNAL "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fsanitize=fuzzer $ENV{LIB_FUZZING_ENGINE}" CACHE INTERNAL "" FORCE)
function(sanitizer_fail_test_on_error test_name)
# Not sure what to do here
endfunction(sanitizer_fail_test_on_error)
else()
function(sanitizer_fail_test_on_error test_name)

View File

@ -21,19 +21,12 @@ px4_posix_generate_alias(
PREFIX ${PX4_SHELL_COMMAND_PREFIX}
)
if (CMAKE_BUILD_TYPE STREQUAL FuzzTesting)
add_executable(px4
src/px4/common/main_fuzztesting.cpp
apps.cpp
)
else()
add_definitions(-DPX4_SOURCE_DIR="${PX4_SOURCE_DIR}" -DPX4_BINARY_DIR="${PX4_BINARY_DIR}")
add_definitions(-DPX4_SOURCE_DIR="${PX4_SOURCE_DIR}" -DPX4_BINARY_DIR="${PX4_BINARY_DIR}")
add_executable(px4
src/px4/common/main.cpp
apps.cpp
)
endif()
add_executable(px4
src/px4/common/main.cpp
apps.cpp
)
if (BUILD_TESTING)
# Build mavlink fuzz tests. These run other modules and thus cannot be a functional/unit test
@ -83,11 +76,6 @@ endif()
target_link_libraries(px4 PRIVATE uORB)
if (CMAKE_BUILD_TYPE STREQUAL FuzzTesting)
target_include_directories(px4 PRIVATE SYSTEM "${CMAKE_BINARY_DIR}/mavlink}")
target_compile_options(px4 PRIVATE "-Wno-cast-align")
endif()
#=============================================================================
# install
#

View File

@ -1,158 +0,0 @@
/****************************************************************************
*
* Copyright (C) 2022 PX4 Development Team. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name PX4 nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/**
* This is an alternative main entrypoint for fuzz testing.
*/
#include <stdint.h>
#include "px4_platform_common/init.h"
#include "px4_platform_common/posix.h"
#include "apps.h"
#include "px4_daemon/client.h"
#include "px4_daemon/server.h"
#include "px4_daemon/pxh.h"
#include <netinet/in.h>
#include <arpa/inet.h>
#include "common/mavlink.h"
#define MODULE_NAME "px4"
#ifndef PATH_MAX
#define PATH_MAX 1024
#endif
namespace px4
{
void init_once();
}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, const size_t size);
void initialize_fake_px4_once();
void send_mavlink(const uint8_t *data, const size_t size);
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, const size_t size)
{
initialize_fake_px4_once();
send_mavlink(data, size);
return 0;
}
void initialize_fake_px4_once()
{
static bool first_time = true;
if (!first_time) {
return;
}
first_time = false;
px4::init_once();
px4::init(0, nullptr, "px4");
px4_daemon::Pxh pxh;
pxh.process_line("uorb start", true);
pxh.process_line("param load", true);
pxh.process_line("dataman start", true);
pxh.process_line("load_mon start", true);
pxh.process_line("battery_simulator start", true);
pxh.process_line("tone_alarm start", true);
pxh.process_line("rc_update start", true);
pxh.process_line("sensors start", true);
pxh.process_line("commander start", true);
pxh.process_line("navigator start", true);
pxh.process_line("ekf2 start", true);
pxh.process_line("mc_att_control start", true);
pxh.process_line("mc_pos_control start", true);
pxh.process_line("land_detector start multicopter", true);
pxh.process_line("logger start", true);
pxh.process_line("mavlink start -x -o 14540 -r 4000000", true);
pxh.process_line("mavlink boot_complete", true);
}
void send_mavlink(const uint8_t *data, const size_t size)
{
int socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_fd < 0) {
PX4_ERR("socket error: %s", strerror(errno));
return;
}
struct sockaddr_in addr {};
addr.sin_family = AF_INET;
inet_pton(AF_INET, "0.0.0.0", &(addr.sin_addr));
addr.sin_port = htons(14540);
if (bind(socket_fd, reinterpret_cast<sockaddr *>(&addr), sizeof(addr)) != 0) {
PX4_ERR("bind error: %s", strerror(errno));
close(socket_fd);
return;
}
mavlink_message_t message {};
uint8_t buffer[MAVLINK_MAX_PACKET_LEN] {};
for (size_t i = 0; i < size; i += sizeof(message)) {
const size_t copy_len = std::min(sizeof(message), size - i);
//printf("copy_len: %zu, %zu (%zu)\n", i, copy_len, size);
memcpy(reinterpret_cast<void *>(&message), data + i, copy_len);
const ssize_t buffer_len = mavlink_msg_to_send_buffer(buffer, &message);
struct sockaddr_in dest_addr {};
dest_addr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &dest_addr.sin_addr.s_addr);
dest_addr.sin_port = htons(14556);
if (sendto(socket_fd, buffer, buffer_len, 0, reinterpret_cast<sockaddr *>(&dest_addr),
sizeof(dest_addr)) != buffer_len) {
PX4_ERR("sendto error: %s", strerror(errno));
}
}
close(socket_fd);
}