diff --git a/sys/amd64/linux/syscalls.master b/sys/amd64/linux/syscalls.master
index 5e1394751ef6..656845451d8f 100644
--- a/sys/amd64/linux/syscalls.master
+++ b/sys/amd64/linux/syscalls.master
@@ -109,7 +109,7 @@
 		    l_ulong prot
 		);
 	}
-11	AUE_MUNMAP	NOPROTO {
+11	AUE_MUNMAP	STD {
 		int munmap(
 		    void *addr,
 		    l_size_t len
diff --git a/sys/compat/linux/linux_mmap.c b/sys/compat/linux/linux_mmap.c
index a8e790a29da4..b03b90499ff0 100644
--- a/sys/compat/linux/linux_mmap.c
+++ b/sys/compat/linux/linux_mmap.c
@@ -423,3 +423,27 @@ linux_fixup_prot(struct thread *td, int *prot)
 
 }
 #endif
+
+int
+linux_munmap(struct thread *td, struct linux_munmap_args *args)
+{
+    uintptr_t start;
+    size_t length;
+
+    /* Linux requires addresses to be page aligned */
+    if ((uintptr_t)args->addr & PAGE_MASK)
+        return -EINVAL;
+
+    /* Check to see if len is 0, this is the EXACT
+     * same operation linux does to check to see
+     * if len is 0.
+     * Citing linux/mm/vma.c
+     */
+    if(len == 0)
+        return -EINVAL;
+
+    /* round up to next page boundary */
+    length = roundup2(args->len, PAGE_SIZE);
+
+    return (kern_munmap(td, (uintptr_t) args->addr, length));
+}
