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

Mainnet - v1.8.11

Compare
Choose a tag to compare
@tao-stones tao-stones released this 15 Dec 16:56

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.