Sergey Bugaev, le jeu. 06 mai 2021 15:56:30 +0300, a ecrit:
> The code tried to round up the allocation size to a multiple of page size.
> But we actually allocate newsize * sizeof (*p->pagemap) bytes, not newsize
> bytes, which meant allocations were sizeof (*p->pagemap) times larger than
> they needed to be.
Indeed, applied, thanks!
> ---
> libpager/pagemap.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/libpager/pagemap.c b/libpager/pagemap.c
> index 63c5f44d..1570c75b 100644
> --- a/libpager/pagemap.c
> +++ b/libpager/pagemap.c
> @@ -17,21 +17,22 @@
>
> #include "priv.h"
> #include <string.h>
> -
> +
> /* Grow the pagemap of pager P as necessary to deal with address OFF */
> error_t
> _pager_pagemap_resize (struct pager *p, vm_address_t off)
> {
> error_t err = 0;
> -
> +
> off /= __vm_page_size;
>
> if (p->pagemapsize < off)
> {
> void *newaddr;
> - vm_size_t newsize = round_page (off);
> + vm_size_t newsize = round_page (off * sizeof (*p->pagemap))
> + / sizeof (*p->pagemap);
>
> - newaddr = mmap (0, newsize * sizeof (*p->pagemap),
> + newaddr = mmap (0, newsize * sizeof (*p->pagemap),
> PROT_READ|PROT_WRITE, MAP_ANON, 0, 0);
> err = (newaddr == (void *) -1) ? errno : 0;
> if (! err)
> --
> 2.31.1
>
>