From 78aea9660494230e10c5ceb96d1eab2eb2f987b8 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 23 Mar 2021 19:18:12 +0800 Subject: [PATCH] Fix end_va bug in translated_byte_buffer --- os/src/mm/page_table.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/os/src/mm/page_table.rs b/os/src/mm/page_table.rs index 0ef37db1..31f564c8 100644 --- a/os/src/mm/page_table.rs +++ b/os/src/mm/page_table.rs @@ -131,7 +131,7 @@ impl PageTable { } } -pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&'static [u8]> { +pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&'static mut [u8]> { let page_table = PageTable::from_token(token); let mut start = ptr as usize; let end = start + len; @@ -146,7 +146,11 @@ pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<& vpn.step(); let mut end_va: VirtAddr = vpn.into(); end_va = end_va.min(VirtAddr::from(end)); - v.push(&ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]); + if end_va.page_offset() == 0 { + v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..]); + } else { + v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]); + } start = end_va.into(); } v