https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=0281d2c8e294b45a66761fb912095e16f290c556
commit 0281d2c8e294b45a66761fb912095e16f290c556 Author: Christian Franke <[email protected]> AuthorDate: Wed Oct 23 11:44:34 2024 +0200 Commit: Corinna Vinschen <[email protected]> CommitDate: Wed Oct 23 11:58:49 2024 +0200 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: c36cd56c548a ("* fhandler.cc (fhandler_base::open): Drop local create_options variable.") Signed-off-by: Christian Franke <[email protected]> Diff: --- winsup/cygwin/fhandler/disk_file.cc | 3 +++ winsup/cygwin/release/3.5.5 | 3 +++ 2 files changed, 6 insertions(+) diff --git a/winsup/cygwin/fhandler/disk_file.cc b/winsup/cygwin/fhandler/disk_file.cc index 2cfac6be1e57..794c8ebcacd2 100644 --- a/winsup/cygwin/fhandler/disk_file.cc +++ b/winsup/cygwin/fhandler/disk_file.cc @@ -1810,6 +1810,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; diff --git a/winsup/cygwin/release/3.5.5 b/winsup/cygwin/release/3.5.5 index 904119a3877a..d01f31c603b0 100644 --- a/winsup/cygwin/release/3.5.5 +++ b/winsup/cygwin/release/3.5.5 @@ -7,3 +7,6 @@ Fixes: - Fix a regression in 3.5.4 that writing to pipe extremely slows down. 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
