Skip to content

Commit

Permalink
Use fuzzing in CI with some time configuration
Browse files Browse the repository at this point in the history
Update lint ci job
  • Loading branch information
neithanmo committed Nov 13, 2024
1 parent 299933a commit 6049bea
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 7 deletions.
21 changes: 14 additions & 7 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,34 @@ name: Lint and format 💅

on:
workflow_dispatch:
# push:
# pull_request:
# branches:
# - main
# - develop
push:
pull_request:
branches:
- main
- develop
- master # for safety reasons
- dev # for safety reasons

jobs:
lint:
runs-on: ubuntu-latest
runs-on: ${{ github.repository_owner == 'zondax' && 'zondax-runners' || 'ubuntu-latest' }}
container: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-legacy:latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Add missing deps
env:
DEBIAN_FRONTEND: noninteractive
run: |
DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y bear sudo
- name: Generate compilation database
run: bear -- make -j BOLOS_SDK="$NANOSP_SDK"
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Lint and format 💅
uses: cpp-linter/cpp-linter-action@v2
id: linter
Expand Down
81 changes: 81 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -264,3 +264,84 @@ jobs:
tag_name: ${{ steps.flex.outputs.tag_name }}
draft: false
prerelease: false

fuzzing:
name: fuzzing
runs-on: ubuntu-latest
container:
image: rust:latest
steps:
- uses: actions/checkout@v3

# Install only the additional dependencies needed for honggfuzz
- name: Install system dependencies
run: |
apt-get update && apt-get install -y \
binutils-dev \
libunwind-dev \
libblocksruntime-dev \
liblzma-dev
- name: Install honggfuzz
run: cargo install honggfuzz

- name: Generate corpus
run: |
cd app/hfuzz-parser/corpus
cargo run
# Different fuzzing durations based on trigger
- name: Quick fuzz (PR)
if: github.event_name == 'push'
run: |
cd app/hfuzz-parser
timeout 5m cargo hfuzz run transaction ../hfuzz_corpus/
- name: Medium fuzz (main)
if: github.event_name == 'pull_request'
run: |
cd app/hfuzz-parser
timeout 15m cargo hfuzz run transaction ../hfuzz_corpus/
- name: Extended fuzz (weekly)
if: github.event_name == 'schedule'
run: |
cd app/hfuzz-parser
timeout 30m cargo hfuzz run transaction ../hfuzz_corpus/
- name: Check for crashes
run: |
if ls app/hfuzz-parser/hfuzz_workspace/transaction/SIGABRT.PC.* 1> /dev/null 2>&1; then
echo "::error::Crashes found during fuzzing!"
exit 1
fi
- name: Upload crash artifacts
if: failure()
uses: actions/upload-artifact@v3
with:
name: crash-reports
path: |
app/hfuzz-parser/hfuzz_workspace/transaction/SIGABRT.PC.*
app/hfuzz-parser/hfuzz_workspace/transaction/HONGGFUZZ.REPORT.TXT
app/hfuzz-parser/hfuzz_workspace/transaction/input/
- name: Cache corpus
uses: actions/cache@v3
with:
path: app/hfuzz_corpus
key: ${{ runner.os }}-fuzz-corpus-${{ github.sha }}
restore-keys: |
${{ runner.os }}-fuzz-corpus-
- name: Notify on failure
if: failure()
uses: actions/github-script@v6
with:
script: |
github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: 'Fuzzing found crashes',
body: 'Fuzzing job failed. Check the artifacts in the workflow run.'
})

1 comment on commit 6049bea

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cpp-Linter Report ⚠️

Some files did not pass the configured checks!

clang-format (v12.0.1) reports: 18 file(s) not formatted
  • app/src/crypto.c
  • app/src/addr.c
  • app/src/apdu_handler.c
  • app/src/parser.c
  • app/src/common/main.c
  • app/src/common/tx.c
  • app/src/common/actions.c
  • app/src/c_api/rust.c
  • app/rust/include/rslib.h
  • app/src/coin.h
  • app/src/addr.h
  • app/src/crypto.h
  • app/src/parser.h
  • app/src/parser_common.h
  • app/src/coin_standard.h
  • app/src/parser_txdef.h
  • app/src/common/tx.h
  • app/src/common/actions.h
clang-tidy (v12.0.1) reports: 15 concern(s)
  • app/src/apdu_handler.c:89:1: warning: [clang-diagnostic-return-type]

    non-void function does not return a value in all control paths

    }
    ^
  • app/src/addr.h:24:1: error: [clang-diagnostic-error]

    unknown type name 'zxerr_t'

    zxerr_t addr_getNumItems(uint8_t *num_items);
    ^
  • app/src/addr.h:24:26: error: [clang-diagnostic-error]

    unknown type name 'uint8_t'

    zxerr_t addr_getNumItems(uint8_t *num_items);
                             ^
  • app/src/addr.h:27:1: error: [clang-diagnostic-error]

    unknown type name 'zxerr_t'

    zxerr_t addr_getItem(int8_t displayIdx,
    ^
  • app/src/addr.h:27:22: error: [clang-diagnostic-error]

    unknown type name 'int8_t'

    zxerr_t addr_getItem(int8_t displayIdx,
                         ^
  • app/src/addr.h:28:36: error: [clang-diagnostic-error]

    unknown type name 'uint16_t'

                         char *outKey, uint16_t outKeyLen,
                                       ^
  • app/src/addr.h:29:38: error: [clang-diagnostic-error]

    unknown type name 'uint16_t'

                         char *outValue, uint16_t outValueLen,
                                         ^
  • app/src/addr.h:30:22: error: [clang-diagnostic-error]

    unknown type name 'uint8_t'

                         uint8_t pageIdx, uint8_t *pageCount);
                         ^
  • app/src/addr.h:30:39: error: [clang-diagnostic-error]

    unknown type name 'uint8_t'

                         uint8_t pageIdx, uint8_t *pageCount);
                                          ^
  • app/src/common/actions.h:83:17: warning: [clang-diagnostic-unused-function]

    unused function 'app_sign'

    __Z_INLINE void app_sign() {
                    ^
  • app/src/common/actions.h:200:17: warning: [clang-diagnostic-unused-function]

    unused function 'app_reject'

    __Z_INLINE void app_reject() {
                    ^
  • app/src/common/actions.h:207:20: warning: [clang-diagnostic-unused-function]

    unused function 'app_fill_address'

    __Z_INLINE uint8_t app_fill_address(address_kind_e kind) {
                       ^
  • app/src/common/actions.h:223:20: warning: [clang-diagnostic-unused-function]

    unused function 'app_fill_auth_pubkey'

    __Z_INLINE uint8_t app_fill_auth_pubkey(address_kind_e kind) {
                       ^
  • app/src/common/actions.h:240:17: warning: [clang-diagnostic-unused-function]

    unused function 'app_reply_address'

    __Z_INLINE void app_reply_address() {
                    ^
  • app/src/common/actions.h:245:17: warning: [clang-diagnostic-unused-function]

    unused function 'app_reply_error'

    __Z_INLINE void app_reply_error() {
                    ^

Have any feedback or feature suggestions? Share it here.

Please sign in to comment.