Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 363d8d1

Browse files
authored
Bump rBPF (#25593)
1 parent 8674c96 commit 363d8d1

File tree

13 files changed

+126
-76
lines changed

13 files changed

+126
-76
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ solana-sdk = { path = "../sdk", version = "=1.11.0" }
4242
solana-transaction-status = { path = "../transaction-status", version = "=1.11.0" }
4343
solana-version = { path = "../version", version = "=1.11.0" }
4444
solana-vote-program = { path = "../programs/vote", version = "=1.11.0" }
45-
solana_rbpf = "=0.2.30"
45+
solana_rbpf = "=0.2.31"
4646
spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] }
4747
thiserror = "1.0.31"
4848
tiny-bip39 = "0.8.2"

cli/src/program.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ use {
2525
tpu_client::{TpuClient, TpuClientConfig},
2626
},
2727
solana_program_runtime::invoke_context::InvokeContext,
28-
solana_rbpf::{elf::Executable, verifier, vm::Config},
28+
solana_rbpf::{
29+
elf::Executable,
30+
verifier::RequisiteVerifier,
31+
vm::{Config, VerifiedExecutable},
32+
},
2933
solana_remote_wallet::remote_wallet::RemoteWalletManager,
3034
solana_sdk::{
3135
account::Account,
@@ -2079,9 +2083,8 @@ fn read_and_verify_elf(program_location: &str) -> Result<Vec<u8>, Box<dyn std::e
20792083
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
20802084

20812085
// Verify the program
2082-
Executable::<BpfError, ThisInstructionMeter>::from_elf(
2086+
let executable = Executable::<BpfError, ThisInstructionMeter>::from_elf(
20832087
&program_data,
2084-
Some(verifier::check),
20852088
Config {
20862089
reject_broken_elfs: true,
20872090
..Config::default()
@@ -2090,6 +2093,12 @@ fn read_and_verify_elf(program_location: &str) -> Result<Vec<u8>, Box<dyn std::e
20902093
)
20912094
.map_err(|err| format!("ELF error: {}", err))?;
20922095

2096+
let _ =
2097+
VerifiedExecutable::<RequisiteVerifier, BpfError, ThisInstructionMeter>::from_executable(
2098+
executable,
2099+
)
2100+
.map_err(|err| format!("ELF error: {}", err))?;
2101+
20932102
Ok(program_data)
20942103
}
20952104

programs/bpf/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

programs/bpf/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.1
3333
solana-cli-output = { path = "../../cli-output", version = "=1.11.0" }
3434
solana-logger = { path = "../../logger", version = "=1.11.0" }
3535
solana-measure = { path = "../../measure", version = "=1.11.0" }
36-
solana_rbpf = "=0.2.30"
36+
solana_rbpf = "=0.2.31"
3737
solana-runtime = { path = "../../runtime", version = "=1.11.0" }
3838
solana-program-runtime = { path = "../../program-runtime", version = "=1.11.0" }
3939
solana-sdk = { path = "../../sdk", version = "=1.11.0" }

programs/bpf/benches/bpf_loader.rs

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ use {
1515
solana_program_runtime::invoke_context::with_mock_invoke_context,
1616
solana_rbpf::{
1717
elf::Executable,
18-
vm::{Config, InstructionMeter, SyscallRegistry},
18+
verifier::RequisiteVerifier,
19+
vm::{Config, InstructionMeter, SyscallRegistry, VerifiedExecutable},
1920
},
2021
solana_runtime::{
2122
bank::Bank,
@@ -81,7 +82,6 @@ fn bench_program_create_executable(bencher: &mut Bencher) {
8182
bencher.iter(|| {
8283
let _ = Executable::<BpfError, ThisInstructionMeter>::from_elf(
8384
&elf,
84-
None,
8585
Config::default(),
8686
SyscallRegistry::default(),
8787
)
@@ -105,17 +105,30 @@ fn bench_program_alu(bencher: &mut Bencher) {
105105
.get_compute_meter()
106106
.borrow_mut()
107107
.mock_set_remaining(std::i64::MAX as u64);
108-
let mut executable = Executable::<BpfError, ThisInstructionMeter>::from_elf(
108+
let executable = Executable::<BpfError, ThisInstructionMeter>::from_elf(
109109
&elf,
110-
None,
111110
Config::default(),
112111
register_syscalls(invoke_context, true).unwrap(),
113112
)
114113
.unwrap();
115-
Executable::<BpfError, ThisInstructionMeter>::jit_compile(&mut executable).unwrap();
114+
115+
let mut verified_executable = VerifiedExecutable::<
116+
RequisiteVerifier,
117+
BpfError,
118+
ThisInstructionMeter,
119+
>::from_executable(executable)
120+
.unwrap();
121+
122+
verified_executable.jit_compile().unwrap();
116123
let compute_meter = invoke_context.get_compute_meter();
117124
let mut instruction_meter = ThisInstructionMeter { compute_meter };
118-
let mut vm = create_vm(&executable, &mut inner_iter, vec![], invoke_context).unwrap();
125+
let mut vm = create_vm(
126+
&verified_executable,
127+
&mut inner_iter,
128+
vec![],
129+
invoke_context,
130+
)
131+
.unwrap();
119132

120133
println!("Interpreted:");
121134
assert_eq!(
@@ -222,15 +235,21 @@ fn bench_create_vm(bencher: &mut Bencher) {
222235

223236
let executable = Executable::<BpfError, ThisInstructionMeter>::from_elf(
224237
&elf,
225-
None,
226238
Config::default(),
227239
register_syscalls(invoke_context, true).unwrap(),
228240
)
229241
.unwrap();
230242

243+
let verified_executable = VerifiedExecutable::<
244+
RequisiteVerifier,
245+
BpfError,
246+
ThisInstructionMeter,
247+
>::from_executable(executable)
248+
.unwrap();
249+
231250
bencher.iter(|| {
232251
let _ = create_vm(
233-
&executable,
252+
&verified_executable,
234253
serialized.as_slice_mut(),
235254
account_lengths.clone(),
236255
invoke_context,
@@ -263,15 +282,22 @@ fn bench_instruction_count_tuner(_bencher: &mut Bencher) {
263282

264283
let executable = Executable::<BpfError, ThisInstructionMeter>::from_elf(
265284
&elf,
266-
None,
267285
Config::default(),
268286
register_syscalls(invoke_context, true).unwrap(),
269287
)
270288
.unwrap();
289+
290+
let verified_executable = VerifiedExecutable::<
291+
RequisiteVerifier,
292+
BpfError,
293+
ThisInstructionMeter,
294+
>::from_executable(executable)
295+
.unwrap();
296+
271297
let compute_meter = invoke_context.get_compute_meter();
272298
let mut instruction_meter = ThisInstructionMeter { compute_meter };
273299
let mut vm = create_vm(
274-
&executable,
300+
&verified_executable,
275301
serialized.as_slice_mut(),
276302
account_lengths,
277303
invoke_context,

programs/bpf/tests/programs.rs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ use {
2525
solana_rbpf::{
2626
elf::Executable,
2727
static_analysis::Analysis,
28-
vm::{Config, Tracer},
28+
verifier::RequisiteVerifier,
29+
vm::{Config, Tracer, VerifiedExecutable},
2930
},
3031
solana_runtime::{
3132
bank::{
@@ -222,14 +223,20 @@ fn run_program(name: &str) -> u64 {
222223
reject_broken_elfs: true,
223224
..Config::default()
224225
};
225-
let mut executable = Executable::<BpfError, ThisInstructionMeter>::from_elf(
226+
let executable = Executable::<BpfError, ThisInstructionMeter>::from_elf(
226227
&data,
227-
None,
228228
config,
229229
register_syscalls(invoke_context, true /* no sol_alloc_free */).unwrap(),
230230
)
231231
.unwrap();
232-
Executable::<BpfError, ThisInstructionMeter>::jit_compile(&mut executable).unwrap();
232+
233+
let mut verified_executable = VerifiedExecutable::<
234+
RequisiteVerifier,
235+
BpfError,
236+
ThisInstructionMeter,
237+
>::from_executable(executable)
238+
.unwrap();
239+
verified_executable.jit_compile().unwrap();
233240

234241
let mut instruction_count = 0;
235242
let mut tracer = None;
@@ -247,7 +254,7 @@ fn run_program(name: &str) -> u64 {
247254
let mut parameter_bytes = parameter_bytes.clone();
248255
{
249256
let mut vm = create_vm(
250-
&executable,
257+
&verified_executable,
251258
parameter_bytes.as_slice_mut(),
252259
account_lengths.clone(),
253260
invoke_context,
@@ -266,7 +273,9 @@ fn run_program(name: &str) -> u64 {
266273
if config.enable_instruction_tracing {
267274
if i == 1 {
268275
if !Tracer::compare(tracer.as_ref().unwrap(), vm.get_tracer()) {
269-
let analysis = Analysis::from_executable(&executable).unwrap();
276+
let analysis =
277+
Analysis::from_executable(verified_executable.get_executable())
278+
.unwrap();
270279
let stdout = std::io::stdout();
271280
println!("TRACE (interpreted):");
272281
tracer
@@ -280,7 +289,9 @@ fn run_program(name: &str) -> u64 {
280289
.unwrap();
281290
assert!(false);
282291
} else if log_enabled!(Trace) {
283-
let analysis = Analysis::from_executable(&executable).unwrap();
292+
let analysis =
293+
Analysis::from_executable(verified_executable.get_executable())
294+
.unwrap();
284295
let mut trace_buffer = Vec::<u8>::new();
285296
tracer
286297
.as_ref()

programs/bpf_loader/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ solana-metrics = { path = "../../metrics", version = "=1.11.0" }
1919
solana-program-runtime = { path = "../../program-runtime", version = "=1.11.0" }
2020
solana-sdk = { path = "../../sdk", version = "=1.11.0" }
2121
solana-zk-token-sdk = { path = "../../zk-token-sdk", version = "=1.11.0" }
22-
solana_rbpf = "=0.2.30"
22+
solana_rbpf = "=0.2.31"
2323
thiserror = "1.0"
2424

2525
[dev-dependencies]

0 commit comments

Comments
 (0)