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
pgpVzMiCoymu2.pgp
Description: PGP signature