Message ID | 20210917025635.32011-8-imp@bsdimp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | bsd-user mmap fixes | expand |
On Thu, Sep 16, 2021 at 8:56 PM Warner Losh <imp@bsdimp.com> wrote: > From: Guy Yur <guyyur@ngmail.com> > I need to fix this email address in the next round or for the pull request. It's gmail.com, not ngmail.com. Switch checks for !(flags & MAP_ANONYMOUS) with checks for fd != -1. > MAP_STACK and MAP_GUARD also force fd == -1 and they don't require > mapping the fd either. > > Signed-off-by: Guy Yur <guyyur@gmail.com> > [ partially merged before, finishing the job and documenting origin] > Signed-off-by: Warner Losh <imp@bsdimp.com> > --- > bsd-user/mmap.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c > index 8b763fffc3..347d314aa9 100644 > --- a/bsd-user/mmap.c > +++ b/bsd-user/mmap.c > @@ -154,7 +154,7 @@ static int mmap_frag(abi_ulong real_start, > if (prot1 == 0) { > /* no page was there, so we allocate one */ > void *p = mmap(host_start, qemu_host_page_size, prot, > - flags | MAP_ANON, -1, 0); > + flags | ((fd != -1) ? MAP_ANON : 0), -1, 0); > if (p == MAP_FAILED) > return -1; > prot1 = prot; > @@ -162,7 +162,7 @@ static int mmap_frag(abi_ulong real_start, > prot1 &= PAGE_BITS; > > prot_new = prot | prot1; > - if (!(flags & MAP_ANON)) { > + if (fd != -1) { > /* msync() won't work here, so we return an error if write is > possible while it is a shared mapping */ > if ((flags & TARGET_BSD_MAP_FLAGMASK) == MAP_SHARED && > @@ -571,7 +571,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, > int prot, > * worst case: we cannot map the file because the offset is not > * aligned, so we read it > */ > - if (!(flags & MAP_ANON) && > + if (fd != -1 && > (offset & ~qemu_host_page_mask) != (start & > ~qemu_host_page_mask)) { > /* > * msync() won't work here, so we return an error if write is > -- > 2.32.0 > >
diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c index 8b763fffc3..347d314aa9 100644 --- a/bsd-user/mmap.c +++ b/bsd-user/mmap.c @@ -154,7 +154,7 @@ static int mmap_frag(abi_ulong real_start, if (prot1 == 0) { /* no page was there, so we allocate one */ void *p = mmap(host_start, qemu_host_page_size, prot, - flags | MAP_ANON, -1, 0); + flags | ((fd != -1) ? MAP_ANON : 0), -1, 0); if (p == MAP_FAILED) return -1; prot1 = prot; @@ -162,7 +162,7 @@ static int mmap_frag(abi_ulong real_start, prot1 &= PAGE_BITS; prot_new = prot | prot1; - if (!(flags & MAP_ANON)) { + if (fd != -1) { /* msync() won't work here, so we return an error if write is possible while it is a shared mapping */ if ((flags & TARGET_BSD_MAP_FLAGMASK) == MAP_SHARED && @@ -571,7 +571,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, * worst case: we cannot map the file because the offset is not * aligned, so we read it */ - if (!(flags & MAP_ANON) && + if (fd != -1 && (offset & ~qemu_host_page_mask) != (start & ~qemu_host_page_mask)) { /* * msync() won't work here, so we return an error if write is