diff --git a/scheme/user.rs b/scheme/user.rs
index a02b2b7bf11725a52f1b1468feb684716ad4d88e..e91fb0975e381368e54f0ea565a80b354ac390c0 100644
--- a/scheme/user.rs
+++ b/scheme/user.rs
@@ -247,6 +247,14 @@ impl Scheme for UserScheme {
         inner.call(SYS_FEVENT, file, flags, 0)
     }
 
+    fn fpath(&self, file: usize, buf: &mut [u8]) -> Result<usize> {
+        let inner = self.inner.upgrade().ok_or(Error::new(ENODEV))?;
+        let address = inner.capture_mut(buf)?;
+        let result = inner.call(SYS_FPATH, file, address, buf.len());
+        let _ = inner.release(address);
+        result
+    }
+
     fn fstat(&self, file: usize, stat: &mut Stat) -> Result<usize> {
         let inner = self.inner.upgrade().ok_or(Error::new(ENODEV))?;
         let address = inner.capture_mut(stat)?;