diff --git a/src/context/memory.rs b/src/context/memory.rs
index e7d5a0baa78816ec8b5234651d779f66d27cf976..ffc61415d82210736b5f5e4e78a2fd79459cb353 100644
--- a/src/context/memory.rs
+++ b/src/context/memory.rs
@@ -777,11 +777,18 @@ impl Grant {
             };
             let frame = Frame::containing_address(phys);
 
-            let is_cow = !matches!(self.info.provider, Provider::External { .. });
+            let is_cow_opt = match self.info.provider {
+                Provider::Allocated => Some(true),
+                Provider::External { .. } => Some(false),
+                Provider::PhysBorrowed { .. } => None,
+                Provider::Fmap { .. } => todo!(),
+            };
 
-            get_page_info(frame)
-                .expect("allocated frame did not have an associated PageInfo")
-                .remove_ref(is_cow);
+            if let Some(is_cow) = is_cow_opt {
+                get_page_info(frame)
+                    .expect("allocated frame did not have an associated PageInfo")
+                    .remove_ref(is_cow);
+            }
 
 
             flusher.consume(flush);