Mainnet - v1.8.11
This is a stable release suitable for use on Mainnet Beta
Changes
-
[validator] Upgraded solana_rbpf crate 0.2.11 -> 0.2.19. This brings in a bunch of changes to the way solana
programs compiled to the BPF instruction set are validated and run:- Don't accept programs with overlapping ELF read-only sections
- Fix: Unchecked integer arithmetic in elf.rs
- Adds some new checks which are utilized by the validator code base
- Ignore rest bytes at the end of the instruction stream
- Fix R_BPF_64_64 relocation handling
- Fix verifier shift instruction overflows imm value
- Stops reseeding the JIT diversification rng
- Fix JIT instruction meter in syscall & unresolved symbol exceptions
- Implement handling of R_BPF_64_64 relocations used in ld_imm64
- Adds a stopwatch to JIT to allow precise time measurements by instrumentation
- Stop Inlining Address Translation
- Fixes a bug in the instruction meter of JIT
- Fix ELF Symbol Parsing Performance
- Machinecode Diversification in JIT
- Use mmap instead of memalign
- Fix libc error detection
- Unify BPF verifiers
- Fixes incorrect target_pc calculation
- Improve .bss reporting
- Fixes reporting of PC in JIT when jumping into LDDW
- Add Missing target_pc Check in ELF Symbol Loader
-
[cli] cli will perform extra checks before allowing a program to be uploaded: reject_unresolved_syscalls,
verify_shift32_imm, reject_section_virtual_address_file_offset_mismatch, but will not verify_mul64_imm_nonzero.
This will prevent programs with certain kinds of errors that would prevent them from running successfully from even
being uploaded to the block chain. -
Removed some hacks (vtable_send_sync_plus_one and REPORT_UNRESOLVED_SYMBOL_INDEX) for code cleanliness
-
[validator] Implemented use of the new solana_rbpf safety checks in the validator when loading and executing BPF programs, enabled by features:
| check | feature | |-----------------------------------------------------|-----------------------------------------------------| | reject_unresolved_syscalls | reject_deployment_of_unresolved_syscalls | | reject_section_virtual_address_file_offset_mismatch | reject_section_virtual_address_file_offset_mismatch | | verify_mul64_imm_nonzero | !stop_verify_mul64_imm_nonzero | | verify_shift32_imm | start_verify_shift32_imm | | reject_all_writable_sections | reject_all_elf_rw |
-
[validator] BPF program code and some other BPF virtual machine componentry is now pinned in memory when the BPF virtual machine is created, for extra safety/performance
-
[validator] BPF program heap is given a fixed size instead of being sized according to available compute budget. This prevents some excessive memory usage in the validator when running certain transactions. This is a reversion of the changes to enable larger heaps for programs that request it, from this change: #20298. The feature was never enabled on mainnet-beta so removing it from the code has no effect in the short term. May be re-added in 1.9.