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,
         };