diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 20128d0e847abe1523511a20eba636347de5381e..f354cf43e40967d75964e4be36f00f5391b79bf2 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -511,6 +511,7 @@ impl UserInner { return Err(Error::new(EIO)); } }; + let file_ref = GrantFileRef { description: desc, base_offset: map.offset, @@ -520,16 +521,21 @@ impl UserInner { let mut src_write_guard; let src = match base_page_opt { - Some(base_addr) => Some(BorrowedFmapSource { - src_base: Page::containing_address(VirtualAddress::new(base_addr)), - mode: if map.flags.contains(MapFlags::MAP_SHARED) { - src_read_guard = src_address_space.read(); - MmapMode::Shared(&src_read_guard.table.utable) - } else { - src_write_guard = src_address_space.write(); - MmapMode::Cow(&mut src_write_guard.table.utable) - }, + Some(base_addr) => Some({ + if base_addr % PAGE_SIZE != 0 { + return Err(Error::new(EINVAL)); + } + BorrowedFmapSource { + src_base: Page::containing_address(VirtualAddress::new(base_addr)), + mode: if map.flags.contains(MapFlags::MAP_SHARED) { + src_read_guard = src_address_space.read(); + MmapMode::Shared(&src_read_guard.table.utable) + } else { + src_write_guard = src_address_space.write(); + MmapMode::Cow(&mut src_write_guard.table.utable) + }, + } }), None => None, };