From 438dad888e1a08f2a14bbe7be26f660c14ecd958 Mon Sep 17 00:00:00 2001 From: Qingsong Chen Date: Mon, 4 Nov 2024 03:39:54 +0000 Subject: [PATCH] Fix the range of IoMem's reader/writer --- ostd/src/io_mem.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/ostd/src/io_mem.rs b/ostd/src/io_mem.rs index a4e844f3b..fd21d9b2c 100644 --- a/ostd/src/io_mem.rs +++ b/ostd/src/io_mem.rs @@ -125,8 +125,8 @@ impl IoMem { // safety of reading from the mapped physical address, and the mapping is valid. unsafe { VmReader::from_kernel_space( - self.kvirt_area.deref().start() as *mut u8, - self.kvirt_area.deref().len(), + (self.kvirt_area.deref().start() + self.offset) as *mut u8, + self.limit, ) } } @@ -136,8 +136,8 @@ impl IoMem { // safety of writing to the mapped physical address, and the mapping is valid. unsafe { VmWriter::from_kernel_space( - self.kvirt_area.deref().start() as *mut u8, - self.kvirt_area.deref().len(), + (self.kvirt_area.deref().start() + self.offset) as *mut u8, + self.limit, ) } } @@ -147,9 +147,7 @@ impl VmIo for IoMem { fn read(&self, offset: usize, writer: &mut VmWriter) -> Result<()> { let offset = offset + self.offset; if self - .kvirt_area - .deref() - .len() + .limit .checked_sub(offset) .is_none_or(|remain| remain < writer.avail()) { @@ -168,9 +166,7 @@ impl VmIo for IoMem { fn write(&self, offset: usize, reader: &mut VmReader) -> Result<()> { let offset = offset + self.offset; if self - .kvirt_area - .deref() - .len() + .limit .checked_sub(offset) .is_none_or(|remain| remain < reader.remain()) { @@ -189,10 +185,10 @@ impl VmIo for IoMem { impl VmIoOnce for IoMem { fn read_once(&self, offset: usize) -> Result { - self.reader().skip(offset + self.offset).read_once() + self.reader().skip(offset).read_once() } fn write_once(&self, offset: usize, new_val: &T) -> Result<()> { - self.writer().skip(offset + self.offset).write_once(new_val) + self.writer().skip(offset).write_once(new_val) } }