From 91c6bdeed27e1978726f80e7df8f7de717f5753c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Wed, 6 Dec 2023 11:18:06 +0100 Subject: [PATCH] Adds deny(clippy::ptr_as_ptr). --- src/error.rs | 2 +- src/jit.rs | 8 ++++---- src/lib.rs | 1 + src/memory_management.rs | 10 +++++----- src/memory_region.rs | 4 ++-- src/program.rs | 2 +- src/vm.rs | 6 ++++-- 7 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/error.rs b/src/error.rs index 989acba01..b10ac5bb7 100644 --- a/src/error.rs +++ b/src/error.rs @@ -145,7 +145,7 @@ impl StableResult { allow(dead_code) )] pub(crate) fn discriminant(&self) -> u64 { - unsafe { *(self as *const _ as *const u64) } + unsafe { *std::ptr::addr_of!(*self).cast::() } } } diff --git a/src/jit.rs b/src/jit.rs index c68bb8b63..f18bd75e7 100644 --- a/src/jit.rs +++ b/src/jit.rs @@ -47,7 +47,7 @@ impl JitProgram { let raw = allocate_pages(pc_loc_table_size + over_allocated_code_size)?; Ok(Self { page_size, - pc_section: std::slice::from_raw_parts_mut(raw as *mut usize, pc), + pc_section: std::slice::from_raw_parts_mut(raw.cast::(), pc), text_section: std::slice::from_raw_parts_mut( raw.add(pc_loc_table_size), over_allocated_code_size, @@ -80,7 +80,7 @@ impl JitProgram { self.text_section = std::slice::from_raw_parts_mut(raw.add(pc_loc_table_size), text_section_usage); protect_pages( - self.pc_section.as_mut_ptr() as *mut u8, + self.pc_section.as_mut_ptr().cast::(), pc_loc_table_size, false, )?; @@ -119,7 +119,7 @@ impl JitProgram { "pop rbp", "pop rbx", host_stack_pointer = in(reg) &mut vm.host_stack_pointer, - inlateout("rdi") (vm as *mut _ as *mut u64).offset(get_runtime_environment_key() as isize) => _, + inlateout("rdi") std::ptr::addr_of_mut!(*vm).cast::().offset(get_runtime_environment_key() as isize) => _, inlateout("rax") (vm.previous_instruction_meter as i64).wrapping_add(registers[11] as i64) => _, inlateout("r10") self.pc_section[registers[11] as usize] => _, inlateout("r11") ®isters => _, @@ -1269,7 +1269,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { } fn emit_set_exception_kind(&mut self, err: EbpfError) { - let err_kind = unsafe { *(&err as *const _ as *const u64) }; + let err_kind = unsafe { *std::ptr::addr_of!(err).cast::() }; let err_discriminant = ProgramResult::Err(err).discriminant(); self.emit_ins(X86Instruction::lea(OperandSize::S64, REGISTER_PTR_TO_VM, REGISTER_OTHER_SCRATCH, Some(X86IndirectAccess::Offset(self.slot_in_vm(RuntimeEnvironmentSlot::ProgramResult))))); self.emit_ins(X86Instruction::store_immediate(OperandSize::S64, REGISTER_OTHER_SCRATCH, X86IndirectAccess::Offset(0), err_discriminant as i64)); // result.discriminant = err_discriminant; diff --git a/src/lib.rs b/src/lib.rs index ae4c5652b..def5dcf59 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ html_favicon_url = "https://raw.githubusercontent.com/qmonnet/rbpf/master/misc/rbpf.ico" )] #![deny(clippy::arithmetic_side_effects)] +#![deny(clippy::ptr_as_ptr)] extern crate byteorder; extern crate combine; diff --git a/src/memory_management.rs b/src/memory_management.rs index 9c7bac5e0..7606db3cb 100644 --- a/src/memory_management.rs +++ b/src/memory_management.rs @@ -113,16 +113,16 @@ pub unsafe fn allocate_pages(size_in_bytes: usize) -> Result<*mut u8, EbpfError> winnt::MEM_RESERVE | winnt::MEM_COMMIT, winnt::PAGE_READWRITE, ); - Ok(raw as *mut u8) + Ok(raw.cast::()) } pub unsafe fn free_pages(raw: *mut u8, size_in_bytes: usize) -> Result<(), EbpfError> { #[cfg(not(target_os = "windows"))] - libc_error_guard!(munmap, raw as *mut _, size_in_bytes); + libc_error_guard!(munmap, raw.cast::(), size_in_bytes); #[cfg(target_os = "windows")] winapi_error_guard!( VirtualFree, - raw as *mut _, + raw.cast::(), size_in_bytes, winnt::MEM_RELEASE, // winnt::MEM_DECOMMIT ); @@ -138,7 +138,7 @@ pub unsafe fn protect_pages( { libc_error_guard!( mprotect, - raw as *mut _, + raw.cast::(), size_in_bytes, if executable_flag { libc::PROT_EXEC | libc::PROT_READ @@ -153,7 +153,7 @@ pub unsafe fn protect_pages( let ptr_old: *mut minwindef::DWORD = &mut old; winapi_error_guard!( VirtualProtect, - raw as *mut _, + raw.cast::(), size_in_bytes, if executable_flag { winnt::PAGE_EXECUTE_READ diff --git a/src/memory_region.rs b/src/memory_region.rs index 1e1611b7b..e86485572 100644 --- a/src/memory_region.rs +++ b/src/memory_region.rs @@ -389,7 +389,7 @@ impl<'a> UnalignedMemoryMapping<'a> { let initial_len = len; let initial_vm_addr = vm_addr; let mut value = 0u64; - let mut ptr = &mut value as *mut _ as *mut u8; + let mut ptr = std::ptr::addr_of_mut!(value).cast::(); while len > 0 { let load_len = len.min(region.vm_addr_end.saturating_sub(vm_addr)); @@ -440,7 +440,7 @@ impl<'a> UnalignedMemoryMapping<'a> { // guaranteed to be unique. let cache = unsafe { &mut *self.cache.get() }; - let mut src = &value as *const _ as *const u8; + let mut src = std::ptr::addr_of!(value).cast::(); let mut region = match self.find_region(cache, vm_addr) { Some(region) if ensure_writable_region(region, &self.cow_cb) => { diff --git a/src/program.rs b/src/program.rs index c1c138eaf..6605814d7 100644 --- a/src/program.rs +++ b/src/program.rs @@ -324,7 +324,7 @@ macro_rules! declare_builtin_function { ) { use $crate::vm::ContextObject; let vm = unsafe { - &mut *(($vm as *mut u64).offset(-($crate::vm::get_runtime_environment_key() as isize)) as *mut $crate::vm::EbpfVm<$ContextObject>) + &mut *($vm.cast::().offset(-($crate::vm::get_runtime_environment_key() as isize)).cast::<$crate::vm::EbpfVm<$ContextObject>>()) }; let config = vm.loader.get_config(); if config.enable_instruction_meter { diff --git a/src/vm.rs b/src/vm.rs index 9f6dbd0bd..40c222a75 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -426,8 +426,10 @@ impl<'a, C: ContextObject> EbpfVm<'a, C> { pub fn invoke_function(&mut self, function: BuiltinFunction) { function( unsafe { - (self as *mut _ as *mut u64).offset(get_runtime_environment_key() as isize) - as *mut _ + std::ptr::addr_of_mut!(*self) + .cast::() + .offset(get_runtime_environment_key() as isize) + .cast::() }, self.registers[1], self.registers[2],