From 8a393cd59e31a87ce6b7dbe7e6565a0976ae6d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20L=C3=B3pez?= Date: Thu, 23 Nov 2023 09:57:51 +0100 Subject: [PATCH] greq: use addr_of!() / addr_of_mut() instead of "as" casting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes code more explicit and clearer. Signed-off-by: Carlos López --- src/greq/driver.rs | 7 ++++--- src/greq/msg.rs | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/greq/driver.rs b/src/greq/driver.rs index f55f66806..a8ea47db2 100644 --- a/src/greq/driver.rs +++ b/src/greq/driver.rs @@ -11,6 +11,7 @@ extern crate alloc; use alloc::boxed::Box; +use core::ptr::addr_of_mut; use core::{cell::OnceCell, mem::size_of}; use crate::{ @@ -158,9 +159,9 @@ impl SnpGuestRequestDriver { fn send(&mut self, req_class: SnpGuestRequestClass) -> Result<(), SvsmReqError> { self.response.clear(); - let req_page = VirtAddr::from(&mut *self.request as *mut SnpGuestRequestMsg); - let resp_page = VirtAddr::from(&mut *self.response as *mut SnpGuestRequestMsg); - let data_pages = VirtAddr::from(&mut *self.ext_data as *mut SnpGuestRequestExtData); + let req_page = VirtAddr::from(addr_of_mut!(*self.request)); + let resp_page = VirtAddr::from(addr_of_mut!(*self.response)); + let data_pages = VirtAddr::from(addr_of_mut!(*self.ext_data)); if req_class == SnpGuestRequestClass::Extended { let num_user_pages = (self.user_extdata_size >> PAGE_SHIFT) as u64; diff --git a/src/greq/msg.rs b/src/greq/msg.rs index 423959365..e165bab7c 100644 --- a/src/greq/msg.rs +++ b/src/greq/msg.rs @@ -14,7 +14,7 @@ use alloc::{ }; use core::{ mem::size_of, - ptr::addr_of, + ptr::{addr_of, addr_of_mut}, slice::{from_raw_parts, from_raw_parts_mut, from_ref}, }; @@ -175,7 +175,7 @@ impl SnpGuestRequestMsgHdr { /// Get [`SnpGuestRequestMsgHdr`] as a mutable slice reference fn as_slice_mut(&mut self) -> &mut [u8] { - unsafe { from_raw_parts_mut(self as *mut _ as *mut u8, size_of::()) } + unsafe { from_raw_parts_mut(addr_of_mut!(*self).cast(), size_of::()) } } } @@ -244,7 +244,7 @@ impl SnpGuestRequestMsg { /// before the object is dropped. Shared pages should not be freed /// (returned to the allocator) pub fn set_shared(&mut self) -> Result<(), SvsmReqError> { - let vaddr = VirtAddr::from(self as *mut Self); + let vaddr = VirtAddr::from(addr_of!(*self)); this_cpu_mut() .get_pgtable() .set_shared_4k(vaddr) @@ -264,7 +264,7 @@ impl SnpGuestRequestMsg { /// Set the C-bit (memory encryption bit) for the Self page pub fn set_encrypted(&mut self) -> Result<(), SvsmReqError> { - let vaddr = VirtAddr::from(self as *mut Self); + let vaddr = VirtAddr::from(addr_of!(*self)); this_cpu_mut() .get_pgtable() .set_encrypted_4k(vaddr) @@ -505,14 +505,14 @@ impl SnpGuestRequestExtData { /// before the object is dropped. Shared pages should not be freed /// (returned to the allocator) pub fn set_shared(&mut self) -> Result<(), SvsmReqError> { - let start = VirtAddr::from(self as *mut Self); + let start = VirtAddr::from(addr_of!(*self)); let end = start + size_of::(); set_shared_region_4k(start, end) } /// Set the C-bit (memory encryption bit) for the Self pages pub fn set_encrypted(&mut self) -> Result<(), SvsmReqError> { - let start = VirtAddr::from(self as *mut Self); + let start = VirtAddr::from(addr_of!(*self)); let end = start + size_of::(); set_encrypted_region_4k(start, end) }