summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
Diffstat (limited to 'debian')
-rw-r--r--debian/changelog6
-rw-r--r--debian/patches/20_zeromap.patch32
-rw-r--r--debian/patches/series1
3 files changed, 39 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index a8f4e6b..6a2bf79 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+gnumach (2:1.3.99.dfsg.git20120923-2) UNRELEASED; urgency=low
+
+ * patches/20_zeromap.patch: New patch to fix abortion on mmap(size=0);
+
+ -- Samuel Thibault <sthibault@debian.org> Mon, 19 Nov 2012 16:57:00 +0100
+
gnumach (2:1.3.99.dfsg.git20120923-1) unstable; urgency=low
* New upstream snapshot
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