[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
'diff != 0' GNU Mach assertion failure
From: |
Thomas Schwinge |
Subject: |
'diff != 0' GNU Mach assertion failure |
Date: |
Mon, 19 Nov 2012 13:25:54 +0100 |
User-agent: |
Notmuch/0.9-101-g81dad07 (http://notmuchmail.org) Emacs/23.3.1 (i486-pc-linux-gnu) |
Hi!
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).
--- vm/vm_user.c~ 2012-11-19 13:02:18.000000000 +0100
+++ 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);
Grüße,
Thomas
pgpKdjpUD3nJ8.pgp
Description: PGP signature
- 'diff != 0' GNU Mach assertion failure,
Thomas Schwinge <=