summaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/20_zeromap.patch32
-rw-r--r--debian/patches/series1
2 files changed, 33 insertions, 0 deletions
diff --git a/debian/patches/20_zeromap.patch b/debian/patches/20_zeromap.patch
new file mode 100644
index 0000000..7268448
--- /dev/null
+++ b/debian/patches/20_zeromap.patch
@@ -0,0 +1,32 @@
+As discussed on IRC already, the 'diff != 0' GNU Mach assertion failure
+(vm/vm_map.c:1002), that came in with the recent allocator improvement
+patch, is as easy as follows to reproduce:
+
+ vm_map(mach_task_self(), 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);
+
+Before that patch, GNU Mach accepted such a call and returnd 0 -- though
+I did not check what effect it actually has. (And I don't think it has
+any useful one.) I'm also reading that as of lately (Linux 2.6.12), mmap
+with length = 0 is to return EINVAL; and mmap is, I think, the foremost
+user of vm_map.
+
+Richard wants to address this problem, but in the mean time, I'm using
+the following patch, which makes such a vm_map call return
+KERN_INVALID_ARGUMENT, translated to EINVAL for mmap
+(hurd/hurd.h:__hurd_fail).
+
+--- a/vm/vm_user.c~ 2012-11-19 13:02:18.000000000 +0100
++++ b/vm/vm_user.c 2012-11-19 13:11:32.000000000 +0100
+@@ -342,6 +342,10 @@ kern_return_t vm_map(
+ return(KERN_INVALID_ARGUMENT);
+ }
+
++ /* Avoid 'diff != 0' assertion failure later on. */
++ if (size == 0)
++ return KERN_INVALID_ARGUMENT;
++
+ *address = trunc_page(*address);
+ size = round_page(size);
+
+
+
diff --git a/debian/patches/series b/debian/patches/series
index 8433870..fa911f4 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,6 +1,7 @@
00_clean_gfdl.patch
11_ignore_CSIn.patch
12_version_suffix.patch
+20_zeromap.patch
50_initrd.patch
60_bigmem.patch
70_dde.patch