File tree Expand file tree Collapse file tree 2 files changed +13
-6
lines changed Expand file tree Collapse file tree 2 files changed +13
-6
lines changed Original file line number Diff line number Diff line change @@ -128,7 +128,7 @@ pub(crate) async fn ensure_self_unshared_mount_namespace() -> Result<()> {
128
128
anyhow:: bail!( "Failed to unshare mount namespace" ) ;
129
129
}
130
130
}
131
- crate :: reexec:: reexec_with_guardenv ( recurse_env)
131
+ crate :: reexec:: reexec_with_guardenv ( recurse_env, & [ "unshare" , "-m" , "--" ] )
132
132
}
133
133
134
134
/// Acquire a locked sysroot.
Original file line number Diff line number Diff line change 1
1
use std:: os:: unix:: process:: CommandExt ;
2
+ use std:: process:: Command ;
2
3
3
4
use anyhow:: Result ;
4
5
use fn_error_context:: context;
5
6
6
7
/// Re-execute the current process if the provided environment variable is not set.
7
8
#[ context( "Reexec self" ) ]
8
- pub ( crate ) fn reexec_with_guardenv ( k : & str ) -> Result < ( ) > {
9
+ pub ( crate ) fn reexec_with_guardenv ( k : & str , prefix_args : & [ & str ] ) -> Result < ( ) > {
9
10
if std:: env:: var_os ( k) . is_some ( ) {
10
11
return Ok ( ( ) ) ;
11
12
}
12
13
let self_exe = std:: fs:: read_link ( "/proc/self/exe" ) ?;
13
- let mut cmd = std:: process:: Command :: new ( "unshare" ) ;
14
+ let mut prefix_args = prefix_args. iter ( ) ;
15
+ let mut cmd = if let Some ( p) = prefix_args. next ( ) {
16
+ let mut c = Command :: new ( p) ;
17
+ c. args ( prefix_args) ;
18
+ c. arg ( self_exe) ;
19
+ c
20
+ } else {
21
+ Command :: new ( self_exe)
22
+ } ;
14
23
cmd. env ( k, "1" ) ;
15
- cmd. args ( [ "-m" , "--" ] )
16
- . arg ( self_exe)
17
- . args ( std:: env:: args_os ( ) . skip ( 1 ) ) ;
24
+ cmd. args ( std:: env:: args_os ( ) . skip ( 1 ) ) ;
18
25
Err ( cmd. exec ( ) . into ( ) )
19
26
}
You can’t perform that action at this time.
0 commit comments