Applied, thanks!

Etienne Brateau, le lun. 25 mai 2026 23:11:42 +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.
> 
> Signed-off-by: Etienne Brateau <[email protected]>
> ---
>  sysdeps/mach/hurd/msync.c | 23 +++++++++++++++++++----
>  1 file changed, 19 insertions(+), 4 deletions(-)
> 
> diff --git a/sysdeps/mach/hurd/msync.c b/sysdeps/mach/hurd/msync.c
> index 46eabd1ee7..e6c135cbf4 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;
> @@ -45,6 +54,7 @@ msync (void *addr, size_t length, int flags)
>    vm_offset_t offset;
>  
>    kern_return_t err;
> +  kern_return_t unmapped_error = KERN_SUCCESS;
>    int cancel_oldtype;
>  
>    while (cur < target)
> @@ -59,13 +69,16 @@ msync (void *addr, size_t length, int flags)
>       return __hurd_fail (err);
>  
>        if (begin > cur)
> -     /* We were given an address before the first region,
> -        or we found a hole.  */
> -     cur = begin;
> +     {
> +       /* We were given an address before the first region,
> +          or we found a hole.  */
> +       cur = begin;
> +       unmapped_error = ENOMEM;
> +     }
>  
>        if (cur >= target)
>       /* We were given an ending address within a hole. */
> -     break;
> +     return __hurd_fail (ENOMEM);
>  
>        if (MACH_PORT_VALID (obj))
>       {
> @@ -90,5 +103,7 @@ msync (void *addr, size_t length, int flags)
>        cur = begin + len;
>      }
>  
> +  if (unmapped_error != KERN_SUCCESS)
> +    return __hurd_fail (unmapped_error);
>    return 0;
>  }
> -- 
> 2.54.0
> 
> 

-- 
Samuel
<studdud> what the fuck is wtf

Reply via email to