Date: Sun, 30 Jul 2023 12:35:02 -0500 From: Alan Cox <alc@rice.edu> To: Dmitry Chagin <dchagin@freebsd.org>, Alan Cox <alc@freebsd.org> Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 50d663b14b31 - main - vm: Fix vm_map_find_min() Message-ID: <d6bd2cfb-857a-b959-4d37-e46fd3f9ba1f@rice.edu> In-Reply-To: <ZMZCPfsfxXH0BcU8@heemeyer.club> References: <202307260525.36Q5PbRm027006@gitrepo.freebsd.org> <ZMY7zdkeRrIgLthK@heemeyer.club> <ZMZCPfsfxXH0BcU8@heemeyer.club>
next in thread | previous in thread | raw e-mail | index | archive | help
I see. That change fixed the case where the address hint is non-zero, e.g., 0x100000, but not zero. On 7/30/23 05:58, Dmitry Chagin wrote: > On Sun, Jul 30, 2023 at 01:30:37PM +0300, Dmitry Chagin wrote: >> On Wed, Jul 26, 2023 at 05:25:37AM +0000, Alan Cox wrote: >>> The branch main has been updated by alc: >>> >>> URL: https://urldefense.com/v3/__https://cgit.FreeBSD.org/src/commit/?id=50d663b14b310d6020b4b6cc92d4fae985f086f2__;!!BuQPrrmRaQ!mJGmkdRJ06TT6ocFnVe7lPS7hSNIIhrCQH9IKMbB6XZVJuiUc2_wPJ55o1zzD6AhClmQwgQKHvKnW4rs75yVrtax$ >>> >>> commit 50d663b14b310d6020b4b6cc92d4fae985f086f2 >>> Author: Alan Cox <alc@FreeBSD.org> >>> AuthorDate: 2023-07-25 07:24:19 +0000 >>> Commit: Alan Cox <alc@FreeBSD.org> >>> CommitDate: 2023-07-26 05:24:50 +0000 >>> >>> vm: Fix vm_map_find_min() >>> >>> Fix the handling of address hints that are less than min_addr by >>> vm_map_find_min(). >>> >> Thank you for fixing that, however it still fails under Linuxulator. >> >> >> #include <sys/mman.h> >> #include <sys/stat.h> >> >> #include <assert.h> >> #include <fcntl.h> >> #include <stdint.h> >> #include <stdio.h> >> #include <stdlib.h> >> #include <unistd.h> >> >> int >> main(int argc, char** argv) >> { >> struct stat sb; >> void *s32; >> int f, r; >> >> f = open(argv[0], O_RDONLY); >> assert(f > 0); >> >> r = fstat(f, &sb); >> assert(r == 0); >> >> s32 = mmap(NULL, sb.st_size, PROT_READ, >> MAP_32BIT|MAP_PRIVATE, f, 0); >> assert(s32 != MAP_FAILED); >> assert((uintptr_t)s32 < 0x80000000); >> >> close(f); >> munmap(s32, sb.st_size); >> return (0); >> } >> > hmm, it also fails natively with disable aslr > > >> >>> Reported by: dchagin >>> Reviewed by: kib >>> Fixes: d8e6f4946cec0 "vm: Fix anonymous memory clustering under ASLR" >>> Differential Revision: https://urldefense.com/v3/__https://reviews.freebsd.org/D41159__;!!BuQPrrmRaQ!mJGmkdRJ06TT6ocFnVe7lPS7hSNIIhrCQH9IKMbB6XZVJuiUc2_wPJ55o1zzD6AhClmQwgQKHvKnW4rs70ygLqzX$ >>> --- >>> sys/vm/vm_map.c | 4 ++-- >>> 1 file changed, 2 insertions(+), 2 deletions(-) >>> >>> diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c >>> index 444e09986d4e..eb607d519247 100644 >>> --- a/sys/vm/vm_map.c >>> +++ b/sys/vm/vm_map.c >>> @@ -2255,10 +2255,10 @@ vm_map_find_min(vm_map_t map, vm_object_t object, vm_ooffset_t offset, >>> int rv; >>> >>> hint = *addr; >>> - if (hint == 0) >>> + if (hint == 0) { >>> cow |= MAP_NO_HINT; >>> - if (hint < min_addr) >>> *addr = hint = min_addr; >>> + } >>> for (;;) { >>> rv = vm_map_find(map, object, offset, addr, length, max_addr, >>> find_space, prot, max, cow);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?d6bd2cfb-857a-b959-4d37-e46fd3f9ba1f>