fix bpf lddw check (#13554)
This commit is contained in:
		| @@ -83,7 +83,7 @@ fn check_imm_endian(insn: &ebpf::Insn, insn_ptr: usize) -> Result<(), BPFError> | |||||||
| } | } | ||||||
|  |  | ||||||
| fn check_load_dw(prog: &[u8], insn_ptr: usize) -> Result<(), BPFError> { | fn check_load_dw(prog: &[u8], insn_ptr: usize) -> Result<(), BPFError> { | ||||||
|     if insn_ptr >= (prog.len() / ebpf::INSN_SIZE) { |     if insn_ptr + 1 >= (prog.len() / ebpf::INSN_SIZE) { | ||||||
|         // Last instruction cannot be LD_DW because there would be no 2nd DW |         // Last instruction cannot be LD_DW because there would be no 2nd DW | ||||||
|         return Err(VerifierError::LDDWCannotBeLast.into()); |         return Err(VerifierError::LDDWCannotBeLast.into()); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -370,6 +370,15 @@ mod tests { | |||||||
|             .unwrap(); |             .unwrap(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     #[test] | ||||||
|  |     #[should_panic(expected = "VerifierError(LDDWCannotBeLast)")] | ||||||
|  |     fn test_bpf_loader_check_load_dw() { | ||||||
|  |         let prog = &[ | ||||||
|  |             0x18, 0x00, 0x00, 0x00, 0x88, 0x77, 0x66, 0x55, // first half of lddw | ||||||
|  |         ]; | ||||||
|  |         bpf_verifier::check(prog, true).unwrap(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_bpf_loader_write() { |     fn test_bpf_loader_write() { | ||||||
|         let program_id = solana_sdk::pubkey::new_rand(); |         let program_id = solana_sdk::pubkey::new_rand(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user