Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Aug 2023 15:16:40 +0200
From:      tuexen@freebsd.org
To:        Konstantin Belousov <kib@FreeBSD.org>
Cc:        "src-committers@freebsd.org" <src-committers@FreeBSD.org>, "dev-commits-src-all@freebsd.org" <dev-commits-src-all@FreeBSD.org>, "dev-commits-src-main@freebsd.org" <dev-commits-src-main@FreeBSD.org>
Subject:   Re: git: c718009884b3 - main - vm_map.c: plug several more places which might modify entry->offset
Message-ID:  <9F89FB07-6B8A-4028-8667-171CBCFA33B2@freebsd.org>
In-Reply-To: <202308181244.37ICi4AR067333@gitrepo.freebsd.org>
References:  <202308181244.37ICi4AR067333@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> On 18. Aug 2023, at 14:44, Konstantin Belousov <kib@FreeBSD.org> =
wrote:
>=20
> The branch main has been updated by kib:
>=20
> URL: =
https://cgit.FreeBSD.org/src/commit/?id=3Dc718009884b3d65528deaff24712cbf9=
8e3be656
>=20
> commit c718009884b3d65528deaff24712cbf98e3be656
> Author:     Konstantin Belousov <kib@FreeBSD.org>
> AuthorDate: 2023-08-15 19:05:33 +0000
> Commit:     Konstantin Belousov <kib@FreeBSD.org>
> CommitDate: 2023-08-18 12:43:35 +0000
>=20
>   vm_map.c: plug several more places which might modify entry->offset
>=20
>   for the GUARD entries protecting stacks gaps.
>=20
>   syzkaller: =
https://syzkaller.appspot.com/bug?extid=3Dc325d6a75e4fd0a68714
>   Reviewed by:    dougm, markj (previous version)
>   Tested by:      pho (previous version)
>   Sponsored by:   The FreeBSD Foundation
>   MFC after:      1 week
>   Differential revision:  https://reviews.freebsd.org/D41475
> ---
> sys/vm/vm_map.c | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>=20
> diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
> index 252b58ad2924..f609d1fd68d7 100644
> --- a/sys/vm/vm_map.c
> +++ b/sys/vm/vm_map.c
> @@ -1413,7 +1413,9 @@ vm_map_entry_link(vm_map_t map, vm_map_entry_t =
entry)
> KASSERT(entry->end < root->end,
>   ("%s: clip_start not within entry", __func__));
> vm_map_splay_findprev(root, &llist);
> - root->offset +=3D entry->end - root->start;
> + if ((root->eflags & (MAP_ENTRY_STACK_GAP_DN |
> +    MAP_ENTRY_STACK_GAP_UP)) =3D=3D 0)
> + root->offset +=3D entry->end - root->start;
> root->start =3D entry->end;
> max_free_left =3D vm_map_splay_merge_pred(header, entry, llist);
> max_free_right =3D root->max_free =3D vm_size_max(
> @@ -1429,7 +1431,9 @@ vm_map_entry_link(vm_map_t map, vm_map_entry_t =
entry)
> KASSERT(entry->end =3D=3D root->end,
>   ("%s: clip_start not within entry", __func__));
> vm_map_splay_findnext(root, &rlist);
> - entry->offset +=3D entry->start - root->start;
> + if ((entry->eflags & (MAP_ENTRY_STACK_GAP_DN |
> +    MAP_ENTRY_STACK_GAP_UP)) =3D=3D 0)
> + entry->offset +=3D entry->start - root->start;
> root->end =3D entry->start;
> max_free_left =3D root->max_free =3D vm_size_max(
>   vm_map_splay_merge_left(header, root, llist),
> @@ -1463,6 +1467,8 @@ vm_map_entry_unlink(vm_map_t map, vm_map_entry_t =
entry,
> vm_map_splay_findnext(root, &rlist);
> if (op =3D=3D UNLINK_MERGE_NEXT) {
> rlist->start =3D root->start;
> + MPASS((rlist->eflags & (MAP_ENTRY_STACK_GAP_DN |
> +    MAP_ENTRY_STACK_GAP_UP) =3D=3D 0);
This breaks compilation. I guess it should be

+ MPASS((rlist->eflags & (MAP_ENTRY_STACK_GAP_DN |
+    MAP_ENTRY_STACK_GAP_UP)) =3D=3D 0);

Best regards
Michael

> rlist->offset =3D root->offset;
> }
> if (llist !=3D header) {
> @@ -3103,7 +3109,8 @@ vm_map_madvise(
>   entry =3D vm_map_entry_succ(entry)) {
> vm_offset_t useEnd, useStart;
>=20
> - if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) !=3D 0)
> + if ((entry->eflags & (MAP_ENTRY_IS_SUB_MAP |
> +    MAP_ENTRY_GUARD)) !=3D 0)
> continue;
>=20
> /*




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9F89FB07-6B8A-4028-8667-171CBCFA33B2>