Skip to content

A Rust implementation of the Linux kernel BPF verifier

License

Notifications You must be signed in to change notification settings

MCB-SMART-BOY/verifier-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

38 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

 ____  ____  _____  __     __        _  __ _           
| __ )|  _ \|  ___| \ \   / /__ _ __(_)/ _(_) ___ _ __ 
|  _ \| |_) | |_     \ \ / / _ \ '__| | |_| |/ _ \ '__|
| |_) |  __/|  _|     \ V /  __/ |  | |  _| |  __/ |   
|____/|_|   |_|        \_/ \___|_|  |_|_| |_|\___|_|   

License: GPL-2.0 Rust Version no_std

๐Ÿ”’ Memory-Safe | ๐ŸŒ Platform-Agnostic | โšก Zero-Cost Abstractions

English | ไธญๆ–‡


#๐Ÿ“˜ English

๐Ÿ‘‹ Hey there, fellow hacker!

Ever wondered what it takes to verify that a piece of eBPF code won't crash your kernel? Well, you're looking at it!

This is a from-scratch Rust implementation of the BPF verifier - the gatekeeper that decides whether your eBPF programs are safe enough to run in kernel space. No C code, no FFI nightmares, just pure Rust goodness with #![no_std] compatibility.

๐Ÿค” Why does this exist?

Because I was curious. And because Rust makes systems programming fun again.

The Linux kernel's BPF verifier is a ~30,000 line C beast. I thought: "What if I could have all that power, but with Rust's safety guarantees?" So here it is.

โœจ What makes this special?

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  ๐ŸŽญ The Magic Architecture                  โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚  Your Platform  โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚   bpf-verifier-core    โ”‚  โ”‚
โ”‚   โ”‚   (Linux, Your  โ”‚ traits  โ”‚   (the brain ๐Ÿง )       โ”‚  โ”‚
โ”‚   โ”‚    own OS, etc) โ”‚         โ”‚                         โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                             โ”‚
โ”‚   Want to run BPF on your own OS? Just implement the       โ”‚
โ”‚   PlatformSpec trait. That's it. No kidding.               โ”‚
โ”‚                                                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ฆ The Crates

Crate What it does Vibe
bpf-verifier-core The platform-agnostic brain ๐Ÿง  Pure logic
bpf-verifier-linux Linux-specific stuff ๐Ÿง Penguin approved
bpf-verifier Convenience re-exports ๐ŸŽ Easy mode

๐Ÿš€ Quick Start

# Clone it
git clone https://github.com/anthropics/verifier-rs
cd verifier-rs

# Build it
cargo build --release

# Test it (I have tests, lots of them)
cargo test --workspace

# Feeling fancy? Check for lint
cargo clippy --workspace

๐Ÿ’ป Show me the code!

Using with Linux:

use bpf_verifier_core::verifier::{GenericVerifierEnv, GenericMainVerifier};
use bpf_verifier_linux::LinuxSpec;

// Create the platform - Linux in this case
let platform = LinuxSpec::new();

// Your BPF program (the instructions you want to verify)
let insns = vec![/* your BPF instructions here */];

// Set up the verifier environment
let mut env = GenericVerifierEnv::new(
    platform,
    insns,
    6,      // program type (XDP in this case)
    false,  // allow_ptr_leaks (usually false unless you're privileged)
)?;

// Let's verify! ๐ŸŽ‰
let mut verifier = GenericMainVerifier::new(&mut env);
verifier.verify()?;

println!("โœ… Your program is safe!");

Building your own platform:

use bpf_verifier_core::platform::*;

// Your custom platform - maybe for your own OS?
#[derive(Clone)]
struct MyAwesomeOS {
    helper: MyHelperProvider,
    // ... other providers
}

impl PlatformSpec for MyAwesomeOS {
    type Helper = MyHelperProvider;
    type ProgType = MyProgTypeProvider;
    type Kfunc = MyKfuncProvider;
    type Map = MyMapProvider;
    type Context = MyContextProvider;

    fn name(&self) -> &'static str { "my-awesome-os" }
    // implement the rest...
}

// Now use it!
let platform = MyAwesomeOS::new();
let mut env = GenericVerifierEnv::new(platform, insns, prog_type, false)?;

๐Ÿงฉ Platform Traits

The secret sauce that makes this all work:

Trait What it's for Example
PlatformSpec The main combo trait Ties everything together
HelperProvider BPF helper functions bpf_map_lookup_elem, etc.
ProgTypeProvider Program types XDP, kprobe, tracepoint...
KfuncProvider Kernel functions The new hotness
MapProvider Map types HashMap, Array, RingBuf...
ContextProvider Context structures What's in R1 when you start

๐Ÿ”ฅ Features that'll make you smile

  • Register tracking: All 11 registers, with types and bounds. I know exactly what's in each one.
  • Memory safety: Stack, maps, packets, context - I check 'em all.
  • Control flow: Every path explored. No shortcuts.
  • Reference tracking: Acquired a lock? I'll make sure you release it.
  • State pruning: Smart equivalence checking so I don't explore the same state twice.

๐Ÿ“ Project Layout

verifier-rs/
โ”œโ”€โ”€ crates/
โ”‚   โ”œโ”€โ”€ bpf-verifier-core/    # ๐Ÿง  The brain
โ”‚   โ”œโ”€โ”€ bpf-verifier-linux/   # ๐Ÿง Linux specifics  
โ”‚   โ””โ”€โ”€ bpf-verifier/         # ๐ŸŽ Easy imports
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ CHANGELOG.md          # ๐Ÿ“ What's new
โ”‚   โ”œโ”€โ”€ PERFORMANCE.md        # โšก Speed stuff
โ”‚   โ””โ”€โ”€ UNSAFE_AUDIT.md       # ๐Ÿ”’ Safety report
โ””โ”€โ”€ README.md                 # ๐Ÿ‘ˆ You are here

๐Ÿ“š Docs

Doc What's inside
CHANGELOG The journey so far
PERFORMANCE Numbers that go brrr
UNSAFE_AUDIT My unsafe code confessions

๐Ÿ“‹ Requirements

  • Rust 1.82.0+ (I use some nice features)
  • #![no_std] compatible (no OS needed!)
  • alloc crate (I do need some heap though)

๐Ÿ“œ License

GPL-2.0-only - Because I believe in freedom.

๐Ÿค Contributing

Found a bug? Have an idea? PRs and issues are welcome!

This project was born from curiosity and a love for Rust. Every contribution, no matter how small, makes it better.


Built with ๐Ÿ’œ and lots of โ˜• by MCB-SMART-BOY

A sophomore student who just really likes BPF and Rust.


๐Ÿ“— ไธญๆ–‡

๐Ÿ‘‹ ๅ˜ฟ๏ผŒๆŠ˜่…พไปฃ็ ็š„ๆœ‹ๅ‹๏ผ

ๆœ‰ๆฒกๆœ‰ๆƒณ่ฟ‡๏ผŒๆ€Žๆ ทๆ‰่ƒฝ้ชŒ่ฏไธ€ๆฎต eBPF ไปฃ็ ไธไผšๆŠŠๅ†…ๆ ธๆžๅดฉ๏ผŸไฝ ็Žฐๅœจ็œ‹ๅˆฐ็š„ๅฐฑๆ˜ฏ็ญ”ๆกˆ๏ผ

่ฟ™ๆ˜ฏไธ€ไธชไปŽ้›ถๅผ€ๅง‹็”จ Rust ๅ†™็š„ BPF ้ชŒ่ฏๅ™จโ€”โ€”ๅฎƒ่ดŸ่ดฃๅ†ณๅฎšไฝ ็š„ eBPF ็จ‹ๅบๆ˜ฏไธๆ˜ฏ่ถณๅคŸๅฎ‰ๅ…จใ€่ƒฝไธ่ƒฝๅœจๅ†…ๆ ธ้‡Œ่ท‘ใ€‚ๆฒกๆœ‰ C ไปฃ็ ๏ผŒๆฒกๆœ‰ FFI ้‚ฃไบ›็ ดไบ‹ๅ„ฟ๏ผŒๅฐฑๆ˜ฏ็บฏ็บฏ็š„ Rust๏ผŒ่€Œไธ”่ฟ˜ๆ”ฏๆŒ #![no_std]ใ€‚

๐Ÿค” ไธบๅ•ฅ่ฆๆž่ฟ™ไธช๏ผŸ

ๅ› ไธบๅฅฝๅฅ‡ๅ‘—ใ€‚่€Œไธ” Rust ่ฎฉ็ณป็ปŸ็ผ–็จ‹้‡ๆ–ฐๅ˜ๅพ—ๆœ‰ๆ„ๆ€ไบ†ใ€‚

Linux ๅ†…ๆ ธ็š„ BPF ้ชŒ่ฏๅ™จๆ˜ฏไธชๅคง็บฆ 30,000 ่กŒ็š„ C ไปฃ็ ๆ€ชๅ…ฝใ€‚ๆˆ‘ๅฝ“ๆ—ถๆƒณ๏ผš"่ฆๆ˜ฏ่ƒฝๆŠŠ่ฟ™ไบ›่ƒฝๅŠ›้ƒฝๆ‹ฟ่ฟ‡ๆฅ๏ผŒ่ฟ˜่ƒฝไบซๅ— Rust ็š„ๅฎ‰ๅ…จไฟ่ฏๅ‘ข๏ผŸ" ไบŽๆ˜ฏๅฐฑๆœ‰ไบ†่ฟ™็Žฉๆ„ๅ„ฟใ€‚

โœจ ๆœ‰ๅ•ฅ็‰นๅˆซ็š„๏ผŸ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  ๐ŸŽญ ๆžถๆž„็š„้ญ”ๆณ•                               โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚   ไฝ ็š„ๅนณๅฐ       โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚   bpf-verifier-core    โ”‚  โ”‚
โ”‚   โ”‚  (Linux, ไฝ ่‡ชๅทฑ  โ”‚ traits  โ”‚   (ๅคง่„‘ ๐Ÿง )            โ”‚  โ”‚
โ”‚   โ”‚   ็š„OS, ้šไพฟๅ•ฅ)  โ”‚         โ”‚                         โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                             โ”‚
โ”‚   ๆƒณๅœจ่‡ชๅทฑ็š„ๆ“ไฝœ็ณป็ปŸไธŠ่ท‘ BPF๏ผŸๅฎž็Žฐไธ€ไธ‹ PlatformSpec        โ”‚
โ”‚   trait ๅฐฑ่กŒใ€‚ๅฐฑ่ฟ™ไนˆ็ฎ€ๅ•๏ผŒๆฒก้ช—ไฝ ใ€‚                          โ”‚
โ”‚                                                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ฆ ่ฟ™ๅ‡ ไธช Crate

Crate ๅนฒๅ•ฅ็š„ ๆ„Ÿ่ง‰
bpf-verifier-core ๅนณๅฐๆ— ๅ…ณ็š„ๅคง่„‘ ๐Ÿง  ็บฏ้€ป่พ‘
bpf-verifier-linux Linux ไธ“ๅฑž็š„ไธœ่ฅฟ ๐Ÿง ไผ้น…่ฎค่ฏ
bpf-verifier ๆ–นไพฟๅฏผๅ…ฅ็š„้‡ๅฏผๅ‡บ ๐ŸŽ ็ฎ€ๅ•ๆจกๅผ

๐Ÿš€ ๅฟซ้€ŸไธŠๆ‰‹

# ๅ…‹้š†ไธ‹ๆฅ
git clone https://github.com/anthropics/verifier-rs
cd verifier-rs

# ็ผ–่ฏ‘
cargo build --release

# ่ท‘ๆต‹่ฏ•๏ผˆๆˆ‘ๅ†™ไบ†ไธ€ๅ †ๆต‹่ฏ•๏ผ‰
cargo test --workspace

# ๆƒณๆ›ดไธ“ไธš็‚น๏ผŸ่ท‘ไธช lint
cargo clippy --workspace

๐Ÿ’ป ไธŠไปฃ็ ๏ผ

็”จ Linux ๅนณๅฐ๏ผš

use bpf_verifier_core::verifier::{GenericVerifierEnv, GenericMainVerifier};
use bpf_verifier_linux::LinuxSpec;

// ๅˆ›ๅปบๅนณๅฐ - ่ฟ™้‡Œ็”จ Linux
let platform = LinuxSpec::new();

// ไฝ ็š„ BPF ็จ‹ๅบ๏ผˆ่ฆ้ชŒ่ฏ็š„ๆŒ‡ไปค๏ผ‰
let insns = vec![/* ไฝ ็š„ BPF ๆŒ‡ไปค */];

// ่ฎพ็ฝฎ้ชŒ่ฏๅ™จ็Žฏๅขƒ
let mut env = GenericVerifierEnv::new(
    platform,
    insns,
    6,      // ็จ‹ๅบ็ฑปๅž‹๏ผˆ่ฟ™้‡Œๆ˜ฏ XDP๏ผ‰
    false,  // allow_ptr_leaks๏ผˆ้™ค้žไฝ ๆ˜ฏ็‰นๆƒ็”จๆˆท๏ผŒไธ็„ถไธ€่ˆฌๆ˜ฏ false๏ผ‰
)?;

// ๅผ€ๅง‹้ชŒ่ฏ๏ผ๐ŸŽ‰
let mut verifier = GenericMainVerifier::new(&mut env);
verifier.verify()?;

println!("โœ… ไฝ ็š„็จ‹ๅบๆ˜ฏๅฎ‰ๅ…จ็š„๏ผ");

ๆžไธช่‡ชๅทฑ็š„ๅนณๅฐ๏ผš

use bpf_verifier_core::platform::*;

// ไฝ ็š„่‡ชๅฎšไน‰ๅนณๅฐ - ไนŸ่ฎธๆ˜ฏ็ป™ไฝ ่‡ชๅทฑ็š„ๆ“ไฝœ็ณป็ปŸ๏ผŸ
#[derive(Clone)]
struct MyAwesomeOS {
    helper: MyHelperProvider,
    // ... ๅ…ถไป– provider
}

impl PlatformSpec for MyAwesomeOS {
    type Helper = MyHelperProvider;
    type ProgType = MyProgTypeProvider;
    type Kfunc = MyKfuncProvider;
    type Map = MyMapProvider;
    type Context = MyContextProvider;

    fn name(&self) -> &'static str { "my-awesome-os" }
    // ๅฎž็Žฐๅ‰ฉไธ‹็š„...
}

// ็”จ่ตทๆฅ๏ผ
let platform = MyAwesomeOS::new();
let mut env = GenericVerifierEnv::new(platform, insns, prog_type, false)?;

๐Ÿงฉ ๅนณๅฐ Trait

่ฎฉ่ฟ™ไธ€ๅˆ‡่ฟ่ฝฌ็š„็ง˜ๅฏ†ๆญฆๅ™จ๏ผš

Trait ๅนฒๅ•ฅ็”จ็š„ ไธพไธชไพ‹ๅญ
PlatformSpec ไธป trait๏ผŒๆŠŠๆ‰€ๆœ‰ไธœ่ฅฟไธฒ่ตทๆฅ ็ป„ๅˆๅ™จ
HelperProvider BPF helper ๅ‡ฝๆ•ฐ bpf_map_lookup_elem ไน‹็ฑป็š„
ProgTypeProvider ็จ‹ๅบ็ฑปๅž‹ XDP, kprobe, tracepoint...
KfuncProvider ๅ†…ๆ ธๅ‡ฝๆ•ฐ ๆ–ฐ็Žฉๆ„ๅ„ฟ
MapProvider Map ็ฑปๅž‹ HashMap, Array, RingBuf...
ContextProvider ไธŠไธ‹ๆ–‡็ป“ๆž„ ๅฏๅŠจๆ—ถ R1 ้‡Œ่ฃ…็š„ๅ•ฅ

๐Ÿ”ฅ ่ฟ™ไบ›ๅŠŸ่ƒฝไฝ ่‚ฏๅฎšๅ–œๆฌข

  • ๅฏ„ๅญ˜ๅ™จ่ฟฝ่ธช๏ผšๅ…จ้ƒจ 11 ไธชๅฏ„ๅญ˜ๅ™จ๏ผŒๅธฆ็ฑปๅž‹ๅ’Œ่พน็•Œใ€‚ๆˆ‘็ฒพ็กฎ็Ÿฅ้“ๆฏไธช้‡Œ้ขๆ˜ฏๅ•ฅใ€‚
  • ๅ†…ๅญ˜ๅฎ‰ๅ…จ๏ผšๆ ˆใ€mapใ€ๆ•ฐๆฎๅŒ…ใ€ไธŠไธ‹ๆ–‡โ€”โ€”ๅ…จ้ƒฝๆฃ€ๆŸฅใ€‚
  • ๆŽงๅˆถๆต๏ผšๆฏๆก่ทฏๅพ„้ƒฝ่ตฐไธ€้ใ€‚ไธๅทๆ‡’ใ€‚
  • ๅผ•็”จ่ฟฝ่ธช๏ผšๆ‹ฟไบ†้”๏ผŸๆˆ‘ไผš็กฎไฟไฝ ้‡Šๆ”พใ€‚
  • ็Šถๆ€ๅ‰ชๆž๏ผšๆ™บ่ƒฝ็š„็ญ‰ไปทๆ€งๆฃ€ๆŸฅ๏ผŒๅŒๆ ท็š„็Šถๆ€ไธไผš่ตฐไธค้ใ€‚

๐Ÿ“ ้กน็›ฎ็ป“ๆž„

verifier-rs/
โ”œโ”€โ”€ crates/
โ”‚   โ”œโ”€โ”€ bpf-verifier-core/    # ๐Ÿง  ๅคง่„‘
โ”‚   โ”œโ”€โ”€ bpf-verifier-linux/   # ๐Ÿง Linux ็›ธๅ…ณ
โ”‚   โ””โ”€โ”€ bpf-verifier/         # ๐ŸŽ ๆ–นไพฟๅฏผๅ…ฅ
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ CHANGELOG.md          # ๐Ÿ“ ๆ›ดๆ–ฐๆ—ฅๅฟ—
โ”‚   โ”œโ”€โ”€ PERFORMANCE.md        # โšก ๆ€ง่ƒฝๆ•ฐๆฎ
โ”‚   โ””โ”€โ”€ UNSAFE_AUDIT.md       # ๐Ÿ”’ ๅฎ‰ๅ…จๆŠฅๅ‘Š
โ””โ”€โ”€ README.md                 # ๐Ÿ‘ˆ ไฝ ๅœจ่ฟ™ๅ„ฟ

๐Ÿ“š ๆ–‡ๆกฃ

ๆ–‡ๆกฃ ้‡Œ้ขๆœ‰ๅ•ฅ
CHANGELOG ไธ€่ทฏ่ตฐๆฅ็š„ๅކ็จ‹
PERFORMANCE ่ท‘ๅˆ†ๆ•ฐๆฎ
UNSAFE_AUDIT unsafe ไปฃ็ ็š„ไบคไปฃ

๐Ÿ“‹ ไพ่ต–่ฆๆฑ‚

  • Rust 1.82.0+๏ผˆ็”จไบ†ไธ€ไบ›ๆ–ฐ็‰นๆ€ง๏ผ‰
  • #![no_std] ๅ…ผๅฎน๏ผˆไธ้œ€่ฆๆ“ไฝœ็ณป็ปŸ๏ผ๏ผ‰
  • alloc crate๏ผˆไฝ†็กฎๅฎž้œ€่ฆ็‚นๅ †ๅ†…ๅญ˜๏ผ‰

๐Ÿ“œ ่ฎธๅฏ่ฏ

GPL-2.0-only - ๅ› ไธบๆˆ‘ไฟก่‡ช็”ฑใ€‚

๐Ÿค ่ดก็Œฎ

ๅ‘็Žฐ bug ไบ†๏ผŸๆœ‰ๆƒณๆณ•๏ผŸๆฌข่ฟŽๆ PR ๅ’Œ issue๏ผ

่ฟ™ไธช้กน็›ฎๆบไบŽๅฅฝๅฅ‡ๅฟƒๅ’Œๅฏน Rust ็š„็ƒญ็ˆฑใ€‚ๆฏไธ€ไปฝ่ดก็Œฎ๏ผŒไธ็ฎกๅคšๅฐ๏ผŒ้ƒฝ่ƒฝ่ฎฉๅฎƒๅ˜ๅพ—ๆ›ดๅฅฝใ€‚


็”จ ๐Ÿ’œ ๅ’Œไธ€ๅ † โ˜• ๆ‰“้€ ๏ผŒไฝœ่€… MCB-SMART-BOY

ไธ€ไธชๅฐฑๆ˜ฏๅพˆๅ–œๆฌข BPF ๅ’Œ Rust ็š„ๅคงไบŒๅญฆ็”Ÿใ€‚

About

A Rust implementation of the Linux kernel BPF verifier

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages