linux-container: 'container-excursion*' marks its FDs as FD_CLOEXEC.
Fixes <https://issues.guix.gnu.org/57827>.
Reported by Mathieu Othacehe <othacehe@gnu.org>.
Fixes a regression introduced with the Shepherd 0.9.2 upgrade in
1ba0e38267
, whereby IN and OUT would no
longer be closed when 'fork+exec-command/container' would call
'exec-command*' as part of the THUNK passed to 'container-excursion*'.
This is because the Shepherd 0.9.2 assumes file descriptors are properly
marked as O_CLOEXEC and, consequently, 'exec-command' no longer run the
close(2) loop prior to 'exec'.
* gnu/build/linux-container.scm (container-excursion*): Add calls to
'fcntl'.
master
parent
76c58ed59c
commit
6abdcef4a6
|
@ -1,6 +1,6 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2015 David Thompson <davet@gnu.org>
|
;;; Copyright © 2015 David Thompson <davet@gnu.org>
|
||||||
;;; Copyright © 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2017-2019, 2022 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -442,6 +442,10 @@ return the exit status."
|
||||||
"Like 'container-excursion', but return the return value of THUNK."
|
"Like 'container-excursion', but return the return value of THUNK."
|
||||||
(match (pipe)
|
(match (pipe)
|
||||||
((in . out)
|
((in . out)
|
||||||
|
;; Make sure IN and OUT are not inherited if THUNK forks + execs.
|
||||||
|
(fcntl in F_SETFD FD_CLOEXEC)
|
||||||
|
(fcntl out F_SETFD FD_CLOEXEC)
|
||||||
|
|
||||||
(match (container-excursion pid
|
(match (container-excursion pid
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(close-port in)
|
(close-port in)
|
||||||
|
|
Reference in New Issue