Revert "Restore parent mount namespace before executing a child process"
This reverts commit a0ef21262f. This
doesn't work in 'nix run' and nix-shell because setns() fails in
multithreaded programs, and Boehm GC mark threads are uncancellable.
Fixes #2646.
			
			
This commit is contained in:
		
							parent
							
								
									92d08c02c8
								
							
						
					
					
						commit
						01d07b1e92
					
				
					 9 changed files with 4 additions and 52 deletions
				
			
		|  | @ -936,8 +936,6 @@ pid_t startProcess(std::function<void()> fun, const ProcessOptions & options) | |||
|                 throw SysError("setting death signal"); | ||||
| #endif | ||||
|             restoreAffinity(); | ||||
|             if (options.restoreMountNamespace) | ||||
|                 restoreMountNamespace(); | ||||
|             fun(); | ||||
|         } catch (std::exception & e) { | ||||
|             try { | ||||
|  | @ -1506,26 +1504,4 @@ std::unique_ptr<InterruptCallback> createInterruptCallback(std::function<void()> | |||
|     return std::unique_ptr<InterruptCallback>(res.release()); | ||||
| } | ||||
| 
 | ||||
| static AutoCloseFD fdSavedMountNamespace; | ||||
| 
 | ||||
| void saveMountNamespace() | ||||
| { | ||||
| #if __linux__ | ||||
|     std::once_flag done; | ||||
|     std::call_once(done, []() { | ||||
|         fdSavedMountNamespace = open("/proc/self/ns/mnt", O_RDONLY); | ||||
|         if (!fdSavedMountNamespace) | ||||
|             throw SysError("saving parent mount namespace"); | ||||
|     }); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void restoreMountNamespace() | ||||
| { | ||||
| #if __linux__ | ||||
|     if (fdSavedMountNamespace && setns(fdSavedMountNamespace.get(), CLONE_NEWNS) == -1) | ||||
|         throw SysError("restoring parent mount namespace"); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue