From 1e9da1e2d6127a1a812e38213cd1ff021aeb310f Mon Sep 17 00:00:00 2001 From: mingxguo27 Date: Tue, 11 Aug 2020 09:48:44 +0000 Subject: [PATCH 1/4] Add fuzz target for CBOR --- libraries/cbor/fuzz/Cargo.toml | 26 +++++++++++++++++++ .../cbor/fuzz/fuzz_targets/fuzz_target_1.rs | 20 ++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 libraries/cbor/fuzz/Cargo.toml create mode 100644 libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs diff --git a/libraries/cbor/fuzz/Cargo.toml b/libraries/cbor/fuzz/Cargo.toml new file mode 100644 index 0000000..439e4c0 --- /dev/null +++ b/libraries/cbor/fuzz/Cargo.toml @@ -0,0 +1,26 @@ + +[package] +name = "cbor-fuzz" +version = "0.0.0" +authors = ["Automatically generated"] +publish = false +edition = "2018" + +[package.metadata] +cargo-fuzz = true + +[dependencies] +libfuzzer-sys = "0.3" + +[dependencies.cbor] +path = ".." + +# Prevent this from interfering with workspaces +[workspace] +members = ["."] + +[[bin]] +name = "fuzz_target_1" +path = "fuzz_targets/fuzz_target_1.rs" +test = false +doc = false diff --git a/libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs b/libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs new file mode 100644 index 0000000..c83e339 --- /dev/null +++ b/libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs @@ -0,0 +1,20 @@ +#![no_main] +#[macro_use] +extern crate libfuzzer_sys; +extern crate cbor; +extern crate alloc; + +use alloc::vec::Vec; + +fuzz_target!(|data: &[u8]| { + let encoded = cbor::read(data); + match encoded{ + Ok(value) => { + let mut decoded = Vec::new(); + let _ = cbor::write(value, &mut decoded); + assert_eq!(decoded, data); + } + Err(_) => {} + }; +}); + From b09d64a01512b764b4583ab66156e43ddaef246c Mon Sep 17 00:00:00 2001 From: mingxguo27 Date: Wed, 12 Aug 2020 10:18:17 +0000 Subject: [PATCH 2/4] Resolve pull request comments: refactoring and workflow --- .github/workflows/cargo_fmt.yml | 6 ++++++ libraries/cbor/fuzz/Cargo.toml | 4 ++-- .../cbor/fuzz/fuzz_targets/fuzz_target_1.rs | 20 ------------------- .../fuzz/fuzz_targets/fuzz_target_cbor.rs | 18 +++++++++++++++++ 4 files changed, 26 insertions(+), 22 deletions(-) delete mode 100644 libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs create mode 100644 libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs diff --git a/.github/workflows/cargo_fmt.yml b/.github/workflows/cargo_fmt.yml index 59757a4..fa04d31 100644 --- a/.github/workflows/cargo_fmt.yml +++ b/.github/workflows/cargo_fmt.yml @@ -43,6 +43,12 @@ jobs: with: command: fmt args: --manifest-path libraries/cbor/Cargo.toml --all -- --check + + - name: Cargo format libraries/cbor/fuzz + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --manifest-path libraries/cbor/fuzz/Cargo.toml --all -- --check - name: Cargo format libraries/crypto uses: actions-rs/cargo@v1 diff --git a/libraries/cbor/fuzz/Cargo.toml b/libraries/cbor/fuzz/Cargo.toml index 439e4c0..e1374e6 100644 --- a/libraries/cbor/fuzz/Cargo.toml +++ b/libraries/cbor/fuzz/Cargo.toml @@ -20,7 +20,7 @@ path = ".." members = ["."] [[bin]] -name = "fuzz_target_1" -path = "fuzz_targets/fuzz_target_1.rs" +name = "fuzz_target_cbor" +path = "fuzz_targets/fuzz_target_cbor.rs" test = false doc = false diff --git a/libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs b/libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs deleted file mode 100644 index c83e339..0000000 --- a/libraries/cbor/fuzz/fuzz_targets/fuzz_target_1.rs +++ /dev/null @@ -1,20 +0,0 @@ -#![no_main] -#[macro_use] -extern crate libfuzzer_sys; -extern crate cbor; -extern crate alloc; - -use alloc::vec::Vec; - -fuzz_target!(|data: &[u8]| { - let encoded = cbor::read(data); - match encoded{ - Ok(value) => { - let mut decoded = Vec::new(); - let _ = cbor::write(value, &mut decoded); - assert_eq!(decoded, data); - } - Err(_) => {} - }; -}); - diff --git a/libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs b/libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs new file mode 100644 index 0000000..8474d51 --- /dev/null +++ b/libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs @@ -0,0 +1,18 @@ +#![no_main] +#[macro_use] +extern crate libfuzzer_sys; +extern crate alloc; +extern crate cbor; + +use alloc::vec::Vec; + +fuzz_target!(|data: &[u8]| { + let encoded = cbor::read(data); + if let Ok(value) = encoded { + let mut decoded = Vec::new(); + let result = cbor::write(value, &mut decoded); + assert!(result); + assert_eq!(decoded, data); + }; +}); + From 6ebb69f275ba12d1a68046dda0a93195c64296d3 Mon Sep 17 00:00:00 2001 From: mingxguo27 Date: Wed, 12 Aug 2020 17:21:00 +0000 Subject: [PATCH 3/4] Refactoring --- libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs b/libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs index 8474d51..fe7a5a2 100644 --- a/libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs +++ b/libraries/cbor/fuzz/fuzz_targets/fuzz_target_cbor.rs @@ -7,12 +7,9 @@ extern crate cbor; use alloc::vec::Vec; fuzz_target!(|data: &[u8]| { - let encoded = cbor::read(data); - if let Ok(value) = encoded { - let mut decoded = Vec::new(); - let result = cbor::write(value, &mut decoded); - assert!(result); - assert_eq!(decoded, data); + if let Ok(value) = cbor::read(data) { + let mut result = Vec::new(); + assert!(cbor::write(value, &mut result)); + assert_eq!(result, data); }; }); - From bbbee74b36b4debdcb6ab170df19a7f1c958b7d6 Mon Sep 17 00:00:00 2001 From: mingxguo27 Date: Fri, 14 Aug 2020 10:21:24 +0000 Subject: [PATCH 4/4] Changed reproducible reference files --- .../reference_binaries_macos-10.15.sha256sum | 10 +++++----- .../reference_binaries_ubuntu-18.04.sha256sum | 10 +++++----- reproducible/reference_elf2tab_ubuntu-18.04.txt | 16 ++++++++-------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/reproducible/reference_binaries_macos-10.15.sha256sum b/reproducible/reference_binaries_macos-10.15.sha256sum index cd7cf02..96d6702 100644 --- a/reproducible/reference_binaries_macos-10.15.sha256sum +++ b/reproducible/reference_binaries_macos-10.15.sha256sum @@ -1,9 +1,9 @@ 91a98f475cb3042dd5184598a8292edb2a414df8d967a35c8f2295826b5a161b third_party/tock/target/thumbv7em-none-eabi/release/nrf52840dk.bin -120028d4e4266aff8123db544d99d5d67594c1e7bebdfe3e4172bd20716fb34b target/nrf52840dk_merged.hex +33164f39a0b5354cdf61236c301242476284c6b96d55275aa603734054ca7928 target/nrf52840dk_merged.hex a5943c5311158b0f99370246d37782eb9b12fc36c56387eadb6587a3a4fe8fd5 third_party/tock/target/thumbv7em-none-eabi/release/nrf52840_dongle.bin -0aae44b66ed6c8a134809446e95efb3d276182823db20755d0b45baa7cfd6efd target/nrf52840_dongle_merged.hex +1232b44947f302900291692690f2e94cdfb165e00e74c682433100882754a516 target/nrf52840_dongle_merged.hex 663297e3e29b9e2a972b68cea1592aaf965d797242579bb5bca09cd73cdfb637 third_party/tock/target/thumbv7em-none-eabi/release/nrf52840_dongle_dfu.bin -fadd8a863c8828ceb18a8e3224fedc32261befb5af3b04dfd7cc3d9bccc6cc64 target/nrf52840_dongle_dfu_merged.hex +b95ce848465523e98cf0c30f94f6430e99dc8ac4b33da5bc0d0f643523ff4b50 target/nrf52840_dongle_dfu_merged.hex 162a05d056aafc16d4868d5c3aa10518e41299dddd60608f96954dc9cf964cd3 third_party/tock/target/thumbv7em-none-eabi/release/nrf52840_mdk_dfu.bin -2495d4aa2f86da9308b1024490513272294e3cb2652d366a56de13dcd92bc1d1 target/nrf52840_mdk_dfu_merged.hex -e0ed5715b4df3850d6899e158fef24052cc056f641083950094afbf0aa8c5cd5 target/tab/ctap2.tab +1085e1789c4429430c47d28b23a975223717eddd7c8aa23114acbc3ec2ec7080 target/nrf52840_mdk_dfu_merged.hex +5bd063ce44e9ddcad8c4d17165a247387e4f1a9c6db81060fbb97244be1929b8 target/tab/ctap2.tab diff --git a/reproducible/reference_binaries_ubuntu-18.04.sha256sum b/reproducible/reference_binaries_ubuntu-18.04.sha256sum index 9330561..750aa64 100644 --- a/reproducible/reference_binaries_ubuntu-18.04.sha256sum +++ b/reproducible/reference_binaries_ubuntu-18.04.sha256sum @@ -1,9 +1,9 @@ 3feb5d29a3d669107b460a00391440be4ebc5e50461f9ef3248714f4f99c070e third_party/tock/target/thumbv7em-none-eabi/release/nrf52840dk.bin -3c4dde09e8e6082a15bbf9d9eedd12de63f70d85c240292aea246f2d83c54f07 target/nrf52840dk_merged.hex +a02f078e165373113adbaf7fa5d272e7e01134061e8212331d54f0b0a8809aaa target/nrf52840dk_merged.hex 8eebe1c1dfe22003466c2570b3735c54c58ae91b8168582ad363ab79c9230a15 third_party/tock/target/thumbv7em-none-eabi/release/nrf52840_dongle.bin -a5e4ce40777ca4de31377bd60dddb92da172afef6ddcbc48c58f43b77809ac26 target/nrf52840_dongle_merged.hex +973bf7d0b6ddb37bb9698cf8f2ef3c2a3dd27cd482b7a4c02e452902394ffa37 target/nrf52840_dongle_merged.hex 779d77071d1e629f92210ac313e230bcaea6d77c710210c1ac4b40f8085cdad7 third_party/tock/target/thumbv7em-none-eabi/release/nrf52840_dongle_dfu.bin -ccacb03f5140bb334843a42d40e9ad3ec56bbf76fdac023bd8d1c9457dc5c228 target/nrf52840_dongle_dfu_merged.hex +d0e7ecc1d2a45ef4c77b39720b95b3e349a0d48d7b9ca99fa591019a9f2cafee target/nrf52840_dongle_dfu_merged.hex f466490d6498f6c06c7c4a717eb437ba2fb06d1985532c23f145d38b9daa8259 third_party/tock/target/thumbv7em-none-eabi/release/nrf52840_mdk_dfu.bin -a165294acddacd95747d064aff4ecf37654bfa107df49151dbbaf25907468ab4 target/nrf52840_mdk_dfu_merged.hex -54074445657b1842d8c005bb94897c6a60d76c6bfc9b6f9cecac930d3485b930 target/tab/ctap2.tab +d3d4a9d3442bb8cf924f553f8df7085e3d6331f1b6d9557115d485e584285d68 target/nrf52840_mdk_dfu_merged.hex +6cda1346503867ef18d3fe7a3d32de6e22585c6134ef3347877894c5469390f5 target/tab/ctap2.tab diff --git a/reproducible/reference_elf2tab_ubuntu-18.04.txt b/reproducible/reference_elf2tab_ubuntu-18.04.txt index 6a155d5..efcb80e 100644 --- a/reproducible/reference_elf2tab_ubuntu-18.04.txt +++ b/reproducible/reference_elf2tab_ubuntu-18.04.txt @@ -5,8 +5,8 @@ Min RAM size from sections in ELF: 20 bytes Number of writeable flash regions: 0 Adding .crt0_header section. Offset: 64 (0x40). Length: 64 (0x40) bytes. Entry point is in .text section - Adding .text section. Offset: 128 (0x80). Length: 187752 (0x2dd68) bytes. - Adding .stack section. Offset: 187880 (0x2dde8). Length: 16384 (0x4000) bytes. + Adding .text section. Offset: 128 (0x80). Length: 187736 (0x2dd58) bytes. + Adding .stack section. Offset: 187864 (0x2ddd8). Length: 16384 (0x4000) bytes. Searching for .rel.X sections to add. TBF Header: version: 2 0x2 @@ -24,8 +24,8 @@ Min RAM size from sections in ELF: 20 bytes Number of writeable flash regions: 0 Adding .crt0_header section. Offset: 64 (0x40). Length: 64 (0x40) bytes. Entry point is in .text section - Adding .text section. Offset: 128 (0x80). Length: 187752 (0x2dd68) bytes. - Adding .stack section. Offset: 187880 (0x2dde8). Length: 16384 (0x4000) bytes. + Adding .text section. Offset: 128 (0x80). Length: 187736 (0x2dd58) bytes. + Adding .stack section. Offset: 187864 (0x2ddd8). Length: 16384 (0x4000) bytes. Searching for .rel.X sections to add. TBF Header: version: 2 0x2 @@ -43,8 +43,8 @@ Min RAM size from sections in ELF: 20 bytes Number of writeable flash regions: 0 Adding .crt0_header section. Offset: 64 (0x40). Length: 64 (0x40) bytes. Entry point is in .text section - Adding .text section. Offset: 128 (0x80). Length: 187752 (0x2dd68) bytes. - Adding .stack section. Offset: 187880 (0x2dde8). Length: 16384 (0x4000) bytes. + Adding .text section. Offset: 128 (0x80). Length: 187736 (0x2dd58) bytes. + Adding .stack section. Offset: 187864 (0x2ddd8). Length: 16384 (0x4000) bytes. Searching for .rel.X sections to add. TBF Header: version: 2 0x2 @@ -62,8 +62,8 @@ Min RAM size from sections in ELF: 20 bytes Number of writeable flash regions: 0 Adding .crt0_header section. Offset: 64 (0x40). Length: 64 (0x40) bytes. Entry point is in .text section - Adding .text section. Offset: 128 (0x80). Length: 187752 (0x2dd68) bytes. - Adding .stack section. Offset: 187880 (0x2dde8). Length: 16384 (0x4000) bytes. + Adding .text section. Offset: 128 (0x80). Length: 187736 (0x2dd58) bytes. + Adding .stack section. Offset: 187864 (0x2ddd8). Length: 16384 (0x4000) bytes. Searching for .rel.X sections to add. TBF Header: version: 2 0x2