Subject: bug#22526: 25.0.90; Crash starting gnus

From: Eli Zaretskii <[email-masked]>
Date: Mon, 15 Feb 2016 13:39:02 +0200

> From: Fabrice Popineau <[email-masked]>
> Date: Mon, 15 Feb 2016 09:09:09 +0100
> Cc: [email-masked], [email-masked]
> 
>  > As vmmap shows it, the next region is unusable.
>  > The reserved region is 4k and the 60k after are lost.
> 
>  But we only asked for 800 bytes, which could have been satisfied by
>  those 4KB that were reserved there, no? So why dod the commit fail?
> 
> As I read it, the first bloc has been reserved and committed for 4k = 0x10000 starting at 0x1f0000, and then
> 800 bytes
> have been asked for at 0x1f0000+0x10000 = 0x200000, but we failedl to extend the block (mmap_realloc
> failed
> to commit further pages to accommodate the 800 bytes).

No.  We had a buffer whose size was 0xf804, in a block starting at
0x1f0000, which means we already had 0x10000 committed there.  We
needed to enlarge buffer text by another 0x1000 (4KB), which exceeded
the 64KB committed size by 807 bytes, so we asked for a commit of 807
bytes of the next region, starting at 0x200000.  That should have
given us a single 4KB page, since the state of that region was
"reserved".  Instead, it failed with ERROR_INVALID_PARAMETER.

IOW, all of the 64KB of the 0x1f0000 block were already committed, and
all we needed was a single page of the next block.