Yes, you are right, we want to do this. I see that linux keep the error for
later, process anyway the request and finally return the error. Do you
think I should return directly or do the same (memorize there was an error,
continue and at the end return the error)?

Le lun. 25 mai 2026 à 22:40, Samuel Thibault <[email protected]> a
écrit :

> Hello,
>
> Etienne Brateau, le lun. 25 mai 2026 22:07:13 +0200, a ecrit:
> > POSIX specs specify that invalid flags shall return EINVAL and that
> > ENOMEM shall be returned in case of address outside of address space or
> > when one or more pages are not mapped.
> > ---
> >  sysdeps/mach/hurd/msync.c | 11 ++++++++++-
> >  1 file changed, 10 insertions(+), 1 deletion(-)
> >
> > diff --git a/sysdeps/mach/hurd/msync.c b/sysdeps/mach/hurd/msync.c
> > index 46eabd1ee7..7e0ffff8db 100644
> > --- a/sysdeps/mach/hurd/msync.c
> > +++ b/sysdeps/mach/hurd/msync.c
> > @@ -36,6 +36,15 @@ msync (void *addr, size_t length, int flags)
> >    vm_address_t cur = (vm_address_t) addr;
> >    vm_address_t target = cur + length;
> >
> > +  if (flags & ~(MS_ASYNC | MS_INVALIDATE | MS_SYNC))
> > +    return __hurd_fail (EINVAL);
> > +
> > +  if (flags & MS_ASYNC && flags & MS_SYNC)
> > +    return __hurd_fail (EINVAL);
> > +
> > +  if (target < cur)
> > +    return __hurd_fail (ENOMEM);
> > +
> >    vm_size_t len;
> >    vm_prot_t prot;
> >    vm_prot_t max_prot;
> > @@ -65,7 +74,7 @@ msync (void *addr, size_t length, int flags)
> >
> >        if (cur >= target)
> >       /* We were given an ending address within a hole. */
> > -     break;
> > +     return __hurd_fail (ENOMEM);
>
> Don't we also want to return ENOMEM when begin > cur?
>
> Samuel
>

Reply via email to