Skip to content

Commit 0ea5c44

Browse files
authored
Fix fuzz (#475)
* Fix fuzz * Build fuzz in ci
1 parent b613eb6 commit 0ea5c44

File tree

8 files changed

+51
-34
lines changed

8 files changed

+51
-34
lines changed

.github/workflows/develop.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,3 +197,13 @@ jobs:
197197
shell: pwsh
198198
run: |
199199
make ci-asm
200+
201+
linux-fuzz:
202+
runs-on: ubuntu-latest
203+
steps:
204+
- uses: actions/checkout@v3
205+
- name: Build fuzz
206+
run: |
207+
sudo apt install device-tree-compiler
208+
cargo install cargo-fuzz
209+
cargo +nightly fuzz build

fuzz/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "ckb-vm-fuzz"
33
version = "0.1.0"
44
authors = ["Nervos Core Dev <dev@nervos.org>"]
55
publish = false
6-
edition = "2018"
6+
edition = "2024"
77

88
[package.metadata]
99
cargo-fuzz = true

fuzz/fuzz_targets/asm.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
#![no_main]
22
use ckb_vm::cost_model::constant_cycles;
3-
use ckb_vm::machine::asm::{AsmCoreMachine, AsmMachine};
3+
use ckb_vm::machine::asm::{AsmCoreMachine, AsmDefaultMachineBuilder, AsmMachine};
44
use ckb_vm::machine::trace::TraceMachine;
5-
use ckb_vm::machine::{DefaultCoreMachine, DefaultMachineBuilder, SupportMachine, VERSION2};
5+
use ckb_vm::machine::{
6+
DefaultCoreMachine, DefaultMachineRunner, RustDefaultMachineBuilder, SupportMachine, VERSION2,
7+
};
68
use ckb_vm::memory::sparse::SparseMemory;
79
use ckb_vm::memory::wxorx::WXorXMemory;
810
use ckb_vm::{Bytes, Error, ISA_A, ISA_B, ISA_IMC, ISA_MOP};
911
use libfuzzer_sys::fuzz_target;
1012

1113
fn run_asm(data: &[u8]) -> Result<(i8, u64), Error> {
1214
let asm_core = AsmCoreMachine::new(ISA_IMC | ISA_A | ISA_B | ISA_MOP, VERSION2, 200_000);
13-
let core = DefaultMachineBuilder::<Box<AsmCoreMachine>>::new(asm_core)
15+
let core = AsmDefaultMachineBuilder::new(asm_core)
1416
.instruction_cycle_func(Box::new(constant_cycles))
1517
.build();
1618
let mut machine = AsmMachine::new(core);
@@ -22,15 +24,13 @@ fn run_asm(data: &[u8]) -> Result<(i8, u64), Error> {
2224
}
2325

2426
fn run_int(data: &[u8]) -> Result<(i8, u64), Error> {
25-
let machine_memory = WXorXMemory::new(SparseMemory::<u64>::default());
26-
let machine_core = DefaultCoreMachine::new_with_memory(
27+
let machine_core = DefaultCoreMachine::<u64, WXorXMemory<SparseMemory<u64>>>::new(
2728
ISA_IMC | ISA_A | ISA_B | ISA_MOP,
2829
VERSION2,
2930
200_000,
30-
machine_memory,
3131
);
3232
let mut machine = TraceMachine::new(
33-
DefaultMachineBuilder::new(machine_core)
33+
RustDefaultMachineBuilder::new(machine_core)
3434
.instruction_cycle_func(Box::new(constant_cycles))
3535
.build(),
3636
);

fuzz/fuzz_targets/interpreter.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
#![no_main]
22
use ckb_vm::cost_model::constant_cycles;
33
use ckb_vm::machine::trace::TraceMachine;
4-
use ckb_vm::machine::{DefaultCoreMachine, DefaultMachineBuilder, SupportMachine, VERSION2};
4+
use ckb_vm::machine::{DefaultCoreMachine, RustDefaultMachineBuilder, SupportMachine, VERSION2};
55
use ckb_vm::memory::sparse::SparseMemory;
66
use ckb_vm::memory::wxorx::WXorXMemory;
7-
use ckb_vm::{Bytes, Error, ISA_A, ISA_B, ISA_IMC, ISA_MOP};
7+
use ckb_vm::{Bytes, DefaultMachineRunner, Error, ISA_A, ISA_B, ISA_IMC, ISA_MOP};
88
use libfuzzer_sys::fuzz_target;
99

1010
fn run(data: &[u8]) -> Result<(i8, u64), Error> {
11-
let machine_memory = WXorXMemory::new(SparseMemory::<u64>::default());
12-
let machine_core = DefaultCoreMachine::new_with_memory(
11+
let machine_core = DefaultCoreMachine::<u64, WXorXMemory<SparseMemory<u64>>>::new(
1312
ISA_IMC | ISA_A | ISA_B | ISA_MOP,
1413
VERSION2,
1514
200_000,
16-
machine_memory,
1715
);
1816
let mut machine = TraceMachine::new(
19-
DefaultMachineBuilder::new(machine_core)
17+
RustDefaultMachineBuilder::new(machine_core)
2018
.instruction_cycle_func(Box::new(constant_cycles))
2119
.build(),
2220
);

fuzz/fuzz_targets/isa_a.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![no_main]
2-
use ckb_vm::{CoreMachine, Memory};
2+
use ckb_vm::{CoreMachine, Memory, SupportMachine};
33
use libfuzzer_sys::fuzz_target;
44
use spike_sys::Spike;
55
use std::collections::VecDeque;
@@ -34,13 +34,17 @@ fuzz_target!(|data: [u8; 512]| {
3434
let ckb_vm_isa = ckb_vm::ISA_IMC | ckb_vm::ISA_A | ckb_vm::ISA_B;
3535
let ckb_vm_version = ckb_vm::machine::VERSION2;
3636
let mut ckb_vm_int =
37-
ckb_vm::DefaultMachineBuilder::new(ckb_vm::DefaultCoreMachine::<
37+
ckb_vm::RustDefaultMachineBuilder::new(ckb_vm::DefaultCoreMachine::<
3838
u64,
3939
ckb_vm::SparseMemory<u64>,
4040
>::new(ckb_vm_isa, ckb_vm_version, u64::MAX))
4141
.build();
42-
let mut ckb_vm_asm = ckb_vm::DefaultMachineBuilder::new(
43-
ckb_vm::machine::asm::AsmCoreMachine::new(ckb_vm_isa, ckb_vm_version, u64::MAX),
42+
let mut ckb_vm_asm = ckb_vm::machine::asm::AsmDefaultMachineBuilder::new(
43+
<ckb_vm::machine::asm::AsmCoreMachine as SupportMachine>::new(
44+
ckb_vm_isa,
45+
ckb_vm_version,
46+
u64::MAX,
47+
),
4448
)
4549
.build();
4650
let insts: [u32; 18] = [

fuzz/fuzz_targets/isa_b.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![no_main]
2-
use ckb_vm::CoreMachine;
2+
use ckb_vm::{CoreMachine, SupportMachine};
33
use libfuzzer_sys::fuzz_target;
44
use spike_sys::Spike;
55
use std::collections::VecDeque;
@@ -40,13 +40,17 @@ fuzz_target!(|data: [u8; 512]| {
4040
let ckb_vm_isa = ckb_vm::ISA_IMC | ckb_vm::ISA_A | ckb_vm::ISA_B;
4141
let ckb_vm_version = ckb_vm::machine::VERSION2;
4242
let mut ckb_vm_int =
43-
ckb_vm::DefaultMachineBuilder::new(ckb_vm::DefaultCoreMachine::<
43+
ckb_vm::RustDefaultMachineBuilder::new(ckb_vm::DefaultCoreMachine::<
4444
u64,
4545
ckb_vm::SparseMemory<u64>,
4646
>::new(ckb_vm_isa, ckb_vm_version, u64::MAX))
4747
.build();
48-
let mut ckb_vm_asm = ckb_vm::DefaultMachineBuilder::new(
49-
ckb_vm::machine::asm::AsmCoreMachine::new(ckb_vm_isa, ckb_vm_version, u64::MAX),
48+
let mut ckb_vm_asm = ckb_vm::machine::asm::AsmDefaultMachineBuilder::new(
49+
<ckb_vm::machine::asm::AsmCoreMachine as SupportMachine>::new(
50+
ckb_vm_isa,
51+
ckb_vm_version,
52+
u64::MAX,
53+
),
5054
)
5155
.build();
5256

fuzz/fuzz_targets/snapshot.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#![no_main]
22
use ckb_vm::cost_model::constant_cycles;
3-
use ckb_vm::machine::asm::{AsmCoreMachine, AsmMachine};
4-
use ckb_vm::machine::{DefaultMachineBuilder, VERSION2};
3+
use ckb_vm::machine::VERSION2;
4+
use ckb_vm::machine::asm::{AsmCoreMachine, AsmDefaultMachineBuilder, AsmMachine};
55
use ckb_vm::snapshot;
6-
use ckb_vm::{Bytes, Error, SupportMachine, ISA_A, ISA_B, ISA_IMC, ISA_MOP};
6+
use ckb_vm::{Bytes, DefaultMachineRunner, Error, ISA_A, ISA_B, ISA_IMC, ISA_MOP, SupportMachine};
77
use libfuzzer_sys::fuzz_target;
88

99
fuzz_target!(|data: &[u8]| {
1010
let mut machine1 = {
1111
let asm_core = AsmCoreMachine::new(ISA_IMC | ISA_A | ISA_B | ISA_MOP, VERSION2, 200_000);
12-
let machine = DefaultMachineBuilder::<Box<AsmCoreMachine>>::new(asm_core)
12+
let machine = AsmDefaultMachineBuilder::new(asm_core)
1313
.instruction_cycle_func(Box::new(constant_cycles))
1414
.build();
1515
AsmMachine::new(machine)
@@ -27,7 +27,7 @@ fuzz_target!(|data: &[u8]| {
2727
let mut machine2 = {
2828
let asm_core =
2929
AsmCoreMachine::new(ISA_IMC | ISA_A | ISA_B | ISA_MOP, VERSION2, half_cycles);
30-
let machine = DefaultMachineBuilder::<Box<AsmCoreMachine>>::new(asm_core)
30+
let machine = AsmDefaultMachineBuilder::new(asm_core)
3131
.instruction_cycle_func(Box::new(constant_cycles))
3232
.build();
3333
AsmMachine::new(machine)
@@ -40,7 +40,7 @@ fuzz_target!(|data: &[u8]| {
4040
let mut machine3 = {
4141
let asm_core =
4242
AsmCoreMachine::new(ISA_IMC | ISA_A | ISA_B | ISA_MOP, VERSION2, half_cycles);
43-
let machine = DefaultMachineBuilder::<Box<AsmCoreMachine>>::new(asm_core)
43+
let machine = AsmDefaultMachineBuilder::new(asm_core)
4444
.instruction_cycle_func(Box::new(constant_cycles))
4545
.build();
4646
AsmMachine::new(machine)

fuzz/fuzz_targets/snapshot2.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#![no_main]
22
use ckb_vm::{
3+
Bytes, CoreMachine, DEFAULT_MEMORY_SIZE, ISA_A, ISA_B, ISA_IMC, ISA_MOP, Memory,
4+
RISCV_PAGESIZE, SupportMachine,
35
elf::{LoadingAction, ProgramMetadata},
46
machine::VERSION2,
5-
memory::{round_page_down, round_page_up, FLAG_EXECUTABLE, FLAG_FREEZED},
7+
machine::asm::{AsmDefaultMachine, AsmDefaultMachineBuilder},
8+
memory::{FLAG_EXECUTABLE, FLAG_FREEZED, round_page_down, round_page_up},
69
snapshot2::{DataSource, Snapshot2Context},
7-
Bytes, CoreMachine, DefaultMachine, DefaultMachineBuilder, Memory, DEFAULT_MEMORY_SIZE, ISA_A,
8-
ISA_B, ISA_IMC, ISA_MOP, RISCV_PAGESIZE,
910
};
1011
use ckb_vm_definitions::asm::AsmCoreMachine;
1112
use libfuzzer_sys::fuzz_target;
@@ -63,10 +64,10 @@ impl DataSource<u32> for DummyData {
6364
}
6465
}
6566

66-
fn build_machine() -> DefaultMachine<Box<AsmCoreMachine>> {
67+
fn build_machine() -> AsmDefaultMachine {
6768
let isa = ISA_IMC | ISA_A | ISA_B | ISA_MOP;
68-
let core_machine = AsmCoreMachine::new(isa, VERSION2, u64::MAX);
69-
DefaultMachineBuilder::new(core_machine).build()
69+
let core_machine = <AsmCoreMachine as SupportMachine>::new(isa.into(), VERSION2, u64::MAX);
70+
AsmDefaultMachineBuilder::new(core_machine).build()
7071
}
7172

7273
fuzz_target!(|data: [u8; 96]| {

0 commit comments

Comments
 (0)