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'.

Fixes: c36cd56c54 ("* fhandler.cc (fhandler_base::open): Drop local create_options variable.")
Signed-off-by: Christian Franke <christian.franke@t-online.de>
This commit is contained in:
Christian Franke 2024-10-23 11:44:34 +02:00 committed by Corinna Vinschen
parent 1b7c72fdcc
commit bdd06f82a1
2 changed files with 6 additions and 0 deletions

View File

@ -1803,6 +1803,9 @@ fhandler_disk_file::prw_open (bool write, void *aio)
return -1; return -1;
} }
/* prw_handle is invalid after fork. */
need_fork_fixup (true);
/* record prw_handle's asyncness for subsequent pread/pwrite operations */ /* record prw_handle's asyncness for subsequent pread/pwrite operations */
prw_handle_isasync = !!aio; prw_handle_isasync = !!aio;
return 0; return 0;

View File

@ -7,3 +7,6 @@ Fixes:
- Fix a regression in 3.5.4 that writing to pipe extremely slows down. - Fix a regression in 3.5.4 that writing to pipe extremely slows down.
Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256398.html Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256398.html
- Fix pread() and pwrite() EBADF error after fork().
Addresses: https://sourceware.org/pipermail/cygwin/2024-September/256468.html