aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin
diff options
context:
space:
mode:
authorChristian Franke <christian.franke@t-online.de>2024-10-23 11:44:34 +0200
committerCorinna Vinschen <corinna@vinschen.de>2024-10-23 11:56:59 +0200
commitbdd06f82a186a509256d1b3c2dd9282f4c96553f (patch)
tree4feab86aae041d093626af5faac89823837c1bb6 /winsup/cygwin
parent1b7c72fdcc4bde7520407d2d3364146f04fb8312 (diff)
downloadnewlib-bdd06f82a186a509256d1b3c2dd9282f4c96553f.zip
newlib-bdd06f82a186a509256d1b3c2dd9282f4c96553f.tar.gz
newlib-bdd06f82a186a509256d1b3c2dd9282f4c96553f.tar.bz2
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 <christian.franke@t-online.de>
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/fhandler/disk_file.cc3
-rw-r--r--winsup/cygwin/release/3.5.53
2 files changed, 6 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler/disk_file.cc b/winsup/cygwin/fhandler/disk_file.cc
index f4c21d3..2008fb6 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;
diff --git a/winsup/cygwin/release/3.5.5 b/winsup/cygwin/release/3.5.5
index 904119a..d01f31c 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