| 
6 | 6 | 	"fmt"  | 
7 | 7 | 	"io"  | 
8 | 8 | 	"os"  | 
9 |  | -	"strconv"  | 
10 |  | -	"syscall"  | 
11 | 9 | 	"unsafe"  | 
12 | 10 | 
 
  | 
13 | 11 | 	"github.com/sirupsen/logrus"  | 
@@ -43,49 +41,6 @@ func Exec(cmd string, args []string, env []string) error {  | 
43 | 41 | 	}  | 
44 | 42 | }  | 
45 | 43 | 
 
  | 
46 |  | -func execveat(fd uintptr, pathname string, args []string, env []string, flags int) error {  | 
47 |  | -	pathnamep, err := syscall.BytePtrFromString(pathname)  | 
48 |  | -	if err != nil {  | 
49 |  | -		return err  | 
50 |  | -	}  | 
51 |  | - | 
52 |  | -	argvp, err := syscall.SlicePtrFromStrings(args)  | 
53 |  | -	if err != nil {  | 
54 |  | -		return err  | 
55 |  | -	}  | 
56 |  | - | 
57 |  | -	envp, err := syscall.SlicePtrFromStrings(env)  | 
58 |  | -	if err != nil {  | 
59 |  | -		return err  | 
60 |  | -	}  | 
61 |  | - | 
62 |  | -	_, _, errno := syscall.Syscall6(  | 
63 |  | -		unix.SYS_EXECVEAT,  | 
64 |  | -		fd,  | 
65 |  | -		uintptr(unsafe.Pointer(pathnamep)),  | 
66 |  | -		uintptr(unsafe.Pointer(&argvp[0])),  | 
67 |  | -		uintptr(unsafe.Pointer(&envp[0])),  | 
68 |  | -		uintptr(flags),  | 
69 |  | -		0,  | 
70 |  | -	)  | 
71 |  | -	return errno  | 
72 |  | -}  | 
73 |  | - | 
74 |  | -func Fexecve(fd uintptr, args []string, env []string) error {  | 
75 |  | -	var err error  | 
76 |  | -	for {  | 
77 |  | -		err = execveat(fd, "", args, env, unix.AT_EMPTY_PATH)  | 
78 |  | -		if err != unix.EINTR { // nolint:errorlint // unix errors are bare  | 
79 |  | -			break  | 
80 |  | -		}  | 
81 |  | -	}  | 
82 |  | -	if err == unix.ENOSYS { // nolint:errorlint // unix errors are bare  | 
83 |  | -		// Fallback to classic /proc/self/fd/... exec.  | 
84 |  | -		return Exec("/proc/self/fd/"+strconv.Itoa(int(fd)), args, env)  | 
85 |  | -	}  | 
86 |  | -	return os.NewSyscallError("execveat", err)  | 
87 |  | -}  | 
88 |  | - | 
89 | 44 | func SetParentDeathSignal(sig uintptr) error {  | 
90 | 45 | 	if err := unix.Prctl(unix.PR_SET_PDEATHSIG, sig, 0, 0, 0); err != nil {  | 
91 | 46 | 		return err  | 
 | 
0 commit comments