Speaker
Description
Large-size Arguments
Current bpf verifier will reject a function if one of its arguments
is a union/struct or more than one register size (except __int128 type).
Such limitation forces users to work around codes to fit bpf prog
requirement, but such limitation does not exists for other languages,
like normal C, rust, etc. Without such limitation, users will be able
to write more elegant codes.
Rust Based Exception Handling
Current C based bpf prog do not have language level exception
handling. The bpf echosystem added bpf_throw() kfunc to allow
exception which does architecture unwinding and allows some
code at main prog level.
Rust bpf supports more flexible exception handling at language
level. It allows bpf callbacks at individual function exception
level, e.g. to release certain references etc. At each function
level, it is possible there are multiple possible exception
handling, e.g., A -> B -> C. If C tiggered exception, bpf
callbacks can be called for C, then B, then A.
In any case, Rust can provide lots of flexibility when something
wrong during verification.