[PATCH] cygwin: pread/pwrite: prevent EBADF error after fork()

Corinna Vinschen corinna-cygwin@cygwin.com
Tue Oct 22 14:47:43 GMT 2024


Hi Christian,

On Sep 24 12:09, Christian Franke wrote:
> This addresses:
> https://sourceware.org/pipermail/cygwin/2024-September/256468.html
> 
> -- 
> Regards,
> Christian
> 

Cool. Can you please add a matching entry to release/3.5.5?

Thanks,
Corinna


> From a688e962eb493140010a75dc24b6b49b34b7d558 Mon Sep 17 00:00:00 2001
> From: Christian Franke <christian.franke@t-online.de>
> Date: Tue, 24 Sep 2024 11:56:43 +0200
> Subject: [PATCH] cygwin: pread/pwrite: prevent EBADF error after fork()
> 
> If the parent process has already used pread() or pwrite(), these
> functions fail with EBADF if used on the inherited fd.  Ensure that
> fix_after_fork() is called to invalidate the prw_handle. This issue
> has been detected by 'stress-ng --pseek 1'.
> 
> Signed-off-by: Christian Franke <christian.franke@t-online.de>
> ---
>  winsup/cygwin/fhandler/disk_file.cc | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/winsup/cygwin/fhandler/disk_file.cc b/winsup/cygwin/fhandler/disk_file.cc
> index f4c21d3b7..2008fb61b 100644
> --- a/winsup/cygwin/fhandler/disk_file.cc
> +++ b/winsup/cygwin/fhandler/disk_file.cc
> @@ -1803,6 +1803,9 @@ fhandler_disk_file::prw_open (bool write, void *aio)
>        return -1;
>      }
>  
> +  /* prw_handle is invalid after fork. */
> +  need_fork_fixup (true);
> +
>    /* record prw_handle's asyncness for subsequent pread/pwrite operations */
>    prw_handle_isasync = !!aio;
>    return 0;
> -- 
> 2.45.1
> 



More information about the Cygwin-patches mailing list