Skip to content

Commit

Permalink
Merge pull request #150 from LedgerHQ/fbe/generic_fuzzing_cmake
Browse files Browse the repository at this point in the history
Improve fuzzing cmake
  • Loading branch information
fbeutin-ledger authored May 21, 2024
2 parents 4018f2e + 27d4565 commit 78f3e95
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 31 deletions.
26 changes: 14 additions & 12 deletions fuzzing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -81,22 +81,24 @@ include_directories(
${SRC_DIR}
)

# Take all source files from the application and the sdk
file(GLOB_RECURSE APPLICATION_SRC
# Take all plugin sources
${SRC_DIR}/*.c

# Take all sdk sources
${ETH_DIR}/src/*.c
)
# Filter out main.c from the SDK, the fuzzing has its own main
list(FILTER APPLICATION_SRC EXCLUDE REGEX "${ETH_DIR}/src/main")

add_executable(fuzz
${APPLICATION_SRC}

# fuzzing specific files
fuzz_plugin.c
mocks.c

${SRC_DIR}/plugin.c
${SRC_DIR}/handle_init_contract.c
${SRC_DIR}/handle_provide_parameter.c
${SRC_DIR}/handle_finalize.c
${SRC_DIR}/handle_provide_token.c
${SRC_DIR}/handle_query_contract_ui.c
${SRC_DIR}/handle_query_contract_id.c

# Ethereum SDK
${ETH_DIR}/src/common_utils.c
${ETH_DIR}/src/plugin_utils.c

# sdk utils
${BOLOS_SDK}/src/ledger_assert.c
${BOLOS_SDK}/lib_standard_app/format.c
Expand Down
50 changes: 31 additions & 19 deletions fuzzing/fuzz_plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {

init_contract.interfaceVersion = ETH_PLUGIN_INTERFACE_VERSION_LATEST;
init_contract.selector = data;
init_contract.pluginSharedRO = &shared_ro;
init_contract.pluginSharedRW = &shared_rw;
init_contract.pluginContext = (uint8_t *) &context;
init_contract.pluginContextLength = sizeof(context);

Expand All @@ -66,6 +68,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
provide_param.parameter = data + i;
provide_param.parameterOffset = i;
provide_param.pluginContext = (uint8_t *) &context;
provide_param.pluginSharedRO = &shared_ro;
provide_param.pluginSharedRW = &shared_rw;
handle_provide_parameter(&provide_param);
if (provide_param.result != ETH_PLUGIN_RESULT_OK) {
return 0;
Expand All @@ -75,38 +79,46 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {

finalize.pluginContext = (uint8_t *) &context;
finalize.address = address;
finalize.pluginSharedRO = &shared_ro;
finalize.pluginSharedRW = &shared_rw;
handle_finalize(&finalize);
if (finalize.result != ETH_PLUGIN_RESULT_OK) {
return 0;
}

provide_info.pluginContext = (uint8_t *) &context;
if (finalize.tokenLookup1) {
if (size - i >= sizeof(extraInfo_t)) {
provide_info.item1 = &item1;

memcpy(provide_info.item1, data + i, sizeof(extraInfo_t));
provide_info.item1->token.ticker[MAX_TICKER_LEN - 1] = '\0';
i += sizeof(extraInfo_t);
if (finalize.tokenLookup1 || finalize.tokenLookup2) {
provide_info.pluginContext = (uint8_t *) &context;
provide_info.pluginSharedRO = &shared_ro;
provide_info.pluginSharedRW = &shared_rw;
if (finalize.tokenLookup1) {
if (size - i >= sizeof(extraInfo_t)) {
provide_info.item1 = &item1;

memcpy(provide_info.item1, data + i, sizeof(extraInfo_t));
provide_info.item1->token.ticker[MAX_TICKER_LEN - 1] = '\0';
i += sizeof(extraInfo_t);
}
}
}

if (finalize.tokenLookup2) {
if (size - i >= sizeof(extraInfo_t)) {
provide_info.item2 = &item2;
if (finalize.tokenLookup2) {
if (size - i >= sizeof(extraInfo_t)) {
provide_info.item2 = &item2;

memcpy(provide_info.item2, data + i, sizeof(extraInfo_t));
provide_info.item2->token.ticker[MAX_TICKER_LEN - 1] = '\0';
i += sizeof(extraInfo_t);
memcpy(provide_info.item2, data + i, sizeof(extraInfo_t));
provide_info.item2->token.ticker[MAX_TICKER_LEN - 1] = '\0';
i += sizeof(extraInfo_t);
}
}
}

handle_provide_token(&provide_info);
if (provide_info.result != ETH_PLUGIN_RESULT_OK) {
return 0;
handle_provide_token(&provide_info);
if (provide_info.result != ETH_PLUGIN_RESULT_OK) {
return 0;
}
}

query_id.pluginContext = (uint8_t *) &context;
query_id.pluginSharedRO = &shared_ro;
query_id.pluginSharedRW = &shared_rw;
query_id.name = name;
query_id.nameLength = sizeof(name);
query_id.version = version;
Expand Down

0 comments on commit 78f3e95

Please sign in to comment.