GNU bug report logs - #72092
popen creates "/dev/null" fds and never closes them

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guile; Severity: important; Reported by: jakub-w@HIDDEN; dated Sat, 13 Jul 2024 12:09:02 UTC; Maintainer for guile is bug-guile@HIDDEN.
Severity set to 'important' from 'normal' Request was from Ludovic Courtès <ludo@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at 72092 <at> debbugs.gnu.org:


Received: (at 72092) by debbugs.gnu.org; 13 Jul 2024 18:23:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jul 13 14:23:03 2024
Received: from localhost ([127.0.0.1]:56779 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1sShOh-0000Uc-46
	for submit <at> debbugs.gnu.org; Sat, 13 Jul 2024 14:23:03 -0400
Received: from mail.nborghese.com ([207.148.28.48]:42354)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <nathan_mail@HIDDEN>) id 1sShOe-0000UA-Gr
 for 72092 <at> debbugs.gnu.org; Sat, 13 Jul 2024 14:23:01 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=062122; bh=I7gj/uVTTiU1z
 SegR/Py49e01qvqMuBO/X9kRQQnqMY=; h=to:subject:from:date;
 d=nborghese.com; b=oZ+PHaXkzzyq4WEAerMr619eRj2VDQHj1Q73uNqBchtF5lpjwZq
 SssqmZ0qrnnLKZ3lvgaJLmi28wglYAEsglhVFUmqIy4BV9XdboKyr5Fyvt98GinGcKeYo3
 MiTOMn3aIjDDHgxxzXmEP0hvED22Qobge0zdvNQlgf5va6ofYw=
Received: by nborghese.com (OpenSMTPD) with ESMTPSA id 29cad47b
 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); 
 Sat, 13 Jul 2024 18:22:51 +0000 (UTC)
Content-Type: multipart/mixed; boundary="------------Jb0SC31Q05tuixOe1BZ7vzWj"
Message-ID: <0ea0f005-32be-2fa1-b96a-e67d3e4ec3f6@HIDDEN>
Date: Sat, 13 Jul 2024 18:22:58 +0000
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
 Thunderbird/102.15.0
From: nathan <nathan_mail@HIDDEN>
Subject: [PATCH] fix file descriptor leak in piped_process/system*/popen/etc
To: 72092 <at> debbugs.gnu.org, jakub-w@HIDDEN
Content-Language: en-US
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 72092
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

This is a multi-part message in MIME format.
--------------Jb0SC31Q05tuixOe1BZ7vzWj
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

fix is attached

test code:
(use-modules (ice-9 ftw))
(use-modules (ice-9 popen))
(define (print-open)
    (format #t "~a\n" (length (scandir "/proc/self/fd"))))
(let ((p (%make-void-port "rw")))
    (print-open)
    (parameterize ((current-output-port p) (current-input-port p) (current-error-port p))
      (system* "ls"))
    (close-port p)
    (print-open))
(parameterize ((current-error-port (%make-void-port OPEN_BOTH)))
      (while
       #t
       (close-pipe (open-pipe* OPEN_READ "free"))
       (print-open)
       (sleep 1)))

there's still a one-time increase in the file descriptors, but it seems unrelated. or at least much harder to find.

(by the way, ignoring current-output-port and using /dev/null is bad. it would be nice to open a pipe in that case and forward whatever the child writes to the scheme port.
but that would require a separate thread, and it may be impossible to do something like that for current-input-port)
--------------Jb0SC31Q05tuixOe1BZ7vzWj
Content-Type: text/x-patch; charset=UTF-8;
 name="0001-fix-file-descriptor-leak-in-piped_process-system-pop.patch"
Content-Disposition: attachment;
 filename*0="0001-fix-file-descriptor-leak-in-piped_process-system-pop.pa";
 filename*1="tch"
Content-Transfer-Encoding: base64

RnJvbSA0NjZlNGFiMmMyY2IxZjkzYWY0ODEyOTBjMWQzNmRiMDA5NzZiOGNlIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBuYXRoYW4gPG5hdGhhbl9tYWlsQG5ib3JnaGVzZS5j
b20+CkRhdGU6IFNhdCwgMTMgSnVsIDIwMjQgMTM6MjU6MDggLTA0MDAKU3ViamVjdDogW1BB
VENIXSBmaXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gcGlwZWRfcHJvY2Vzcy9zeXN0ZW0q
L3BvcGVuL2V0YwoKKiBsaWJndWlsZS9wb3NpeC5jIChwaXBlZF9wcm9jZXNzKTogY2xvc2Ug
YXV0b21hdGljYWxseSBvcGVuZWQgL2Rldi9udWxsCiAgRml4IGJ1ZyAjNzIwOTIKLS0tCiBs
aWJndWlsZS9wb3NpeC5jIHwgMzMgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t
CiAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvbGliZ3VpbGUvcG9zaXguYyBiL2xpYmd1aWxlL3Bvc2l4LmMKaW5kZXgg
OWE4NzNiNWExLi44MDI4YjQ5M2YgMTAwNjQ0Ci0tLSBhL2xpYmd1aWxlL3Bvc2l4LmMKKysr
IGIvbGliZ3VpbGUvcG9zaXguYwpAQCAtMTUzNSwzMiArMTUzNSwzMiBAQCBzdGF0aWMgaW50
CiBwaXBlZF9wcm9jZXNzIChwaWRfdCAqcGlkLCBTQ00gcHJvZywgU0NNIGFyZ3MsIFNDTSBm
cm9tLCBTQ00gdG8pCiAjZGVmaW5lIEZVTkNfTkFNRSAicGlwZWQtcHJvY2VzcyIKIHsKLSAg
aW50IHJlYWRpbmcsIHdyaXRpbmc7CiAgIGludCBjMnBbMl07IC8qIENoaWxkIHRvIHBhcmVu
dC4gICovCiAgIGludCBwMmNbMl07IC8qIFBhcmVudCB0byBjaGlsZC4gICovCiAgIGludCBp
biA9IC0xLCBvdXQgPSAtMSwgZXJyID0gLTE7CiAgIGNoYXIgKmV4ZWNfZmlsZTsKICAgY2hh
ciAqKmV4ZWNfYXJndjsKICAgY2hhciAqKmV4ZWNfZW52ID0gZW52aXJvbjsKKyAgaW50IHRv
X2Nsb3NlWzNdOworICBpbnQgbnVtX3RvX2Nsb3NlPTA7CiAKICAgZXhlY19maWxlID0gc2Nt
X3RvX2xvY2FsZV9zdHJpbmcgKHByb2cpOwogICBleGVjX2FyZ3YgPSBzY21faV9hbGxvY2F0
ZV9zdHJpbmdfcG9pbnRlcnMgKHNjbV9jb25zIChwcm9nLCBhcmdzKSk7CiAKLSAgcmVhZGlu
ZyA9IHNjbV9pc19wYWlyIChmcm9tKTsKLSAgd3JpdGluZyA9IHNjbV9pc19wYWlyICh0byk7
Ci0KLSAgaWYgKHJlYWRpbmcpCisgIGlmIChzY21faXNfcGFpciAoZnJvbSkpCiAgICAgewog
ICAgICAgYzJwWzBdID0gc2NtX3RvX2ludCAoc2NtX2NhciAoZnJvbSkpOwogICAgICAgYzJw
WzFdID0gc2NtX3RvX2ludCAoc2NtX2NkciAoZnJvbSkpOwogICAgICAgb3V0ID0gYzJwWzFd
OworICAgICAgdG9fY2xvc2VbbnVtX3RvX2Nsb3NlKytdID0gb3V0OwogICAgIH0KIAotICBp
ZiAod3JpdGluZykKKyAgaWYgKHNjbV9pc19wYWlyICh0bykpCiAgICAgewogICAgICAgcDJj
WzBdID0gc2NtX3RvX2ludCAoc2NtX2NhciAodG8pKTsKICAgICAgIHAyY1sxXSA9IHNjbV90
b19pbnQgKHNjbV9jZHIgKHRvKSk7CiAgICAgICBpbiA9IHAyY1swXTsKKyAgICAgIHRvX2Ns
b3NlW251bV90b19jbG9zZSsrXSA9IGluOwogICAgIH0KIAogICB7CkBAIC0xNTY5LDMwICsx
NTY5LDM3IEBAIHBpcGVkX3Byb2Nlc3MgKHBpZF90ICpwaWQsIFNDTSBwcm9nLCBTQ00gYXJn
cywgU0NNIGZyb20sIFNDTSB0bykKICAgICBpZiAoU0NNX09QT1VURlBPUlRQICgocG9ydCA9
IHNjbV9jdXJyZW50X2Vycm9yX3BvcnQgKCkpKSkKICAgICAgIGVyciA9IFNDTV9GUE9SVF9G
REVTIChwb3J0KTsKICAgICBlbHNlCi0gICAgICBlcnIgPSBvcGVuICgiL2Rldi9udWxsIiwg
T19XUk9OTFkgfCBPX0NMT0VYRUMpOworICAgICAgeworICAgICAgICBlcnIgPSBvcGVuICgi
L2Rldi9udWxsIiwgT19XUk9OTFkgfCBPX0NMT0VYRUMpOworICAgICAgICB0b19jbG9zZVtu
dW1fdG9fY2xvc2UrK10gPSBlcnI7CisgICAgICB9CiAgICAgaWYgKG91dCA9PSAtMSkKICAg
ICAgIHsKICAgICAgICAgaWYgKFNDTV9PUE9VVEZQT1JUUCAoKHBvcnQgPSBzY21fY3VycmVu
dF9vdXRwdXRfcG9ydCAoKSkpKQogICAgICAgICAgIG91dCA9IFNDTV9GUE9SVF9GREVTIChw
b3J0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgIG91dCA9IG9wZW4gKCIvZGV2L251bGwi
LCBPX1dST05MWSB8IE9fQ0xPRVhFQyk7CisgICAgICAgICAgeworICAgICAgICAgICAgb3V0
ID0gb3BlbiAoIi9kZXYvbnVsbCIsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTsKKyAgICAgICAg
ICAgIHRvX2Nsb3NlW251bV90b19jbG9zZSsrXSA9IG91dDsKKyAgICAgICAgICB9CiAgICAg
ICB9CiAgICAgaWYgKGluID09IC0xKQogICAgICAgewogICAgICAgICBpZiAoU0NNX09QSU5G
UE9SVFAgKChwb3J0ID0gc2NtX2N1cnJlbnRfaW5wdXRfcG9ydCAoKSkpKQogICAgICAgICAg
IGluID0gU0NNX0ZQT1JUX0ZERVMgKHBvcnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
aW4gPSBvcGVuICgiL2Rldi9udWxsIiwgT19SRE9OTFkgfCBPX0NMT0VYRUMpOworICAgICAg
ICAgIHsKKyAgICAgICAgICAgIGluID0gb3BlbiAoIi9kZXYvbnVsbCIsIE9fUkRPTkxZIHwg
T19DTE9FWEVDKTsKKyAgICAgICAgICAgIHRvX2Nsb3NlW251bV90b19jbG9zZSsrXSA9IGlu
OworICAgICAgICAgIH0KICAgICAgIH0KICAgfQogCiAgICpwaWQgPSBkb19zcGF3biAoZXhl
Y19maWxlLCBleGVjX2FyZ3YsIGV4ZWNfZW52LCBpbiwgb3V0LCBlcnIsIDEpOwogICBpbnQg
ZXJybm9fc2F2ZSA9ICgqcGlkIDwgMCkgPyBlcnJubyA6IDA7CiAKLSAgaWYgKHJlYWRpbmcp
Ci0gICAgY2xvc2UgKGMycFsxXSk7Ci0gIGlmICh3cml0aW5nKQotICAgIGNsb3NlIChwMmNb
MF0pOworICB3aGlsZSAobnVtX3RvX2Nsb3NlPjApCisgICAgY2xvc2UgKHRvX2Nsb3NlWy0t
bnVtX3RvX2Nsb3NlXSk7CiAKICAgaWYgKCpwaWQgPT0gLTEpCiAgICAgc3dpdGNoIChlcnJu
b19zYXZlKQotLSAKMi40NS4yCgo=

--------------Jb0SC31Q05tuixOe1BZ7vzWj--




Information forwarded to bug-guile@HIDDEN:
bug#72092; Package guile. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 13 Jul 2024 12:08:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jul 13 08:08:20 2024
Received: from localhost ([127.0.0.1]:55248 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1sSbY3-0007MG-Ra
	for submit <at> debbugs.gnu.org; Sat, 13 Jul 2024 08:08:20 -0400
Received: from lists.gnu.org ([209.51.188.17]:40084)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <jakub-w@HIDDEN>) id 1sSbXz-0007M6-Rg
 for submit <at> debbugs.gnu.org; Sat, 13 Jul 2024 08:08:18 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jakub-w@HIDDEN>)
 id 1sSbXu-0007ro-JW
 for bug-guile@HIDDEN; Sat, 13 Jul 2024 08:08:12 -0400
Received: from mx1.riseup.net ([198.252.153.129])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jakub-w@HIDDEN>)
 id 1sSbXs-0001W9-Gj
 for bug-guile@HIDDEN; Sat, 13 Jul 2024 08:08:10 -0400
Received: from fews01-sea.riseup.net (fews01-sea-pn.riseup.net [10.0.1.109])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by mx1.riseup.net (Postfix) with ESMTPS id 4WLnKb6gYdzDqD5
 for <bug-guile@HIDDEN>; Sat, 13 Jul 2024 12:08:03 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=riseup.net; s=squak;
 t=1720872484; bh=GH08K7Xw+aOR2BkuyOoOllXHMbQtis+fETezh03NbbU=;
 h=Date:From:To:Subject:From;
 b=au2Aki4CLYdDlVcC0P6hSftU9QRk960X8dz6Mw6q9FNi4N/6e2YMkxez6uSTeFnku
 RND2ph3P8bk7VkNez7g5u8nOctHkYhH74AruTZNIBr8ekhPiYTjLL6yLGCiy+fRY5F
 ajm1A5EZJLusByGSTvK/pek3K0AgT55Ta26nS5dQ=
X-Riseup-User-ID: 873CC536C9859A20B49C28E7A8CBB75C66BFCC661137890681FD895B15E39843
Received: from [127.0.0.1] (localhost [127.0.0.1])
 by fews01-sea.riseup.net (Postfix) with ESMTPSA id 4WLnKN5RxWzJtLq
 for <bug-guile@HIDDEN>; Sat, 13 Jul 2024 12:07:52 +0000 (UTC)
MIME-Version: 1.0
Date: Sat, 13 Jul 2024 12:07:52 +0000
From: jakub-w@HIDDEN
To: bug-guile@HIDDEN
Subject: popen creates "/dev/null" fds and never closes them
Message-ID: <77cbc4b2a48a74957cc02fcc53238b29@HIDDEN>
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Received-SPF: pass client-ip=198.252.153.129; envelope-from=jakub-w@HIDDEN;
 helo=mx1.riseup.net
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.3 (-)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.3 (--)

Consider the following example:

(use-modules (ice-9 popen))

(parameterize ((current-error-port (%make-void-port OPEN_BOTH)))
  (while #t
    (close-pipe (open-pipe* OPEN_READ "free"))
    (sleep 1)))

This opens a new "/dev/null" file descriptor every second and doesn't
close it when close-pipe is called.
If current ports are all fd ports, this doesn't happen.

AFAICT the problem was introduced by the commit
36fd2b4920ae926c79b936c29e739e71a6dff2bc in Guile 3.0.10.




Acknowledgement sent to jakub-w@HIDDEN:
New bug report received and forwarded. Copy sent to bug-guile@HIDDEN. Full text available.
Report forwarded to bug-guile@HIDDEN:
bug#72092; Package guile. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 12 Jan 2025 05:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.