delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2024/09/22/14:09:50

DKIM-Filter: OpenDKIM Filter v2.11.0 delorie.com 48MI9mYc1294975
Authentication-Results: delorie.com;
dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=or3KjKw9
X-Recipient: archive-cygwin AT delorie DOT com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BE53A3858D3C
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com;
s=default; t=1727028586;
bh=8jaolPDwsYaxk/kCz3T8y0u8xLJOD1XoVqcTEEZ8LHI=;
h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post:
List-Help:List-Subscribe:From:Reply-To:Cc:From;
b=or3KjKw9HRhrvJv60wAF4AQE2Kl49rAmX3JNYttwQiE/Hx4BT8brT47NB3tCFkWXK
PsTN/tIST2fBG7ie5zulJ6U96+SdN+Ay7G+IkJ9SmZ94q1T9GnuUoFtPl/7nWqfokP
XeTBwpw8A3IvxIdnds5pKrC0ySwVRYv6l2w/HeSM=
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6E9F13858D20
ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6E9F13858D20
ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1727028564; cv=none;
b=i6mbEFsAvfV57klq9MnWig5dClVQc7eoWTt+azuiIHvbWdTP/eNCoEZ43AArT+gg//0FKBdInezFj7jLuw1qvb9WmBTwh77x/fombLVSW0FukefhY2jFLx6xlVvjtyFmcPbpOJQvsp3VkEsbIXcU1/8V2GH/r5b6RsRU4+CZ0kI=
ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key;
t=1727028564; c=relaxed/simple;
bh=tvG3MDNrTe65d932OZ+Udwb8kC6E0ftsIrgqNtKdBrI=;
h=To:From:Subject:Message-ID:Date:MIME-Version;
b=xqvdMWRSRmW+BzhhUstXHnshuL/0juNeuRd8Qy1PfWlQH3F1suLH4CxVpWaRY23jAfNzgze9MtFoYBC0f+kLvOGOV84U/nmFJOUPjvhvIQ96M1JLf3HhVukazYdKk0lW84lmdS930NqpBKuJ+ZUhnDjJebZK+OjtcZapKzuJyj4=
ARC-Authentication-Results: i=1; server2.sourceware.org
To: cygwin AT cygwin DOT com
Subject: pread()/pwrite() fail with EBADF in child process if already used
before fork()
Message-ID: <13e3c5b1-3c7b-acc4-469e-0542d50cb6f6@t-online.de>
Date: Sun, 22 Sep 2024 20:09:16 +0200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
SeaMonkey/2.53.18.2
MIME-Version: 1.0
X-TOI-EXPURGATEID: 150726::1727028556-4FFFD5E0-4CA0440B/0/0 CLEAN NORMAL
X-TOI-MSGID: 5819f59f-4d64-4488-89f1-e4b85a7410d5
X-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00, BODY_8BITS,
FREEMAIL_FROM, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,
RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS,
TXREP autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.30
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
From: Christian Franke via Cygwin <cygwin AT cygwin DOT com>
Reply-To: cygwin AT cygwin DOT com
Cc: Christian Franke <Christian DOT Franke AT t-online DOT de>
Sender: "Cygwin" <cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com>
X-MIME-Autoconverted: from base64 to 8bit by delorie.com id 48MI9mYc1294975

Found during test of 'stress-ng --pseek ...' from current upstream 
stress-ng git HEAD:

Testcase:

$ uname -r
3.5.4-1.x86_64

$ cat pfail.c
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
   int fd = open("pwrite.tmp", O_RDWR|O_CREAT|O_BINARY, 0666);
   if (fd < 0) {
     perror("open"); return 1;
   }

   char c = 42;
   if (pwrite(fd, &c, 1, 0) < 0)
     perror("pwrite");

   if (fork() == 0) {
     if (pread(fd, &c, 1, 0) < 0)
       perror("pread");
     _exit(0);
   }

   int status;
   wait(&status);
   return 0;
}

$ make pfail
cc     pfail.c   -o pfail

$ ./pfail
pread: Bad file descriptor

$ strace ./pfail
...
   617   75356 [main] pfail 10826 dofork: 10827 = fork()
    82   11289 [main] pfail 10827 seterrno_from_nt_status: 
/usr/src/debug/cygwin-3.5.4-1/winsup/cygwin/fhandler/disk_file.cc:1883 
status 0xC0000008 -> windows error 6
    80   75436 [main] pfail 10826 wait4: calling proc_subproc, pid -1, 
options 0
    76   11365 [main] pfail 10827 geterrno_from_win_error: windows error 
6 == errno 9
    78   75514 [main] pfail 10826 proc_subproc: args: 5, -7728
    64   11429 [main] pfail 10827 pread: -1 = pread(3, 0x7FFFFCC0B, 1, 
0), errno 9
...


The problem does not occur if there is no pread()/pwrite() before the 
fork(). This suggests that the child process inherits the extra handle 
value used to keep the original seek position, but not the actual handle.

-- 
Regards,
Christian


-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019