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'.
			
			
This commit is contained in:
		
							parent
							
								
									76c58ed59c
								
							
						
					
					
						commit
						6abdcef4a6
					
				
					 1 changed files with 5 additions and 1 deletions
				
			
		|  | @ -1,6 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; 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. | ||||
| ;;; | ||||
|  | @ -442,6 +442,10 @@ return the exit status." | |||
|   "Like 'container-excursion', but return the return value of THUNK." | ||||
|   (match (pipe) | ||||
|     ((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 | ||||
|               (lambda () | ||||
|                 (close-port in) | ||||
|  |  | |||
		Reference in a new issue