diff options
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/musl/fexecve-execveat.patch')
-rw-r--r-- | nixpkgs/pkgs/os-specific/linux/musl/fexecve-execveat.patch | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/musl/fexecve-execveat.patch b/nixpkgs/pkgs/os-specific/linux/musl/fexecve-execveat.patch new file mode 100644 index 000000000000..6b3894a916c8 --- /dev/null +++ b/nixpkgs/pkgs/os-specific/linux/musl/fexecve-execveat.patch @@ -0,0 +1,33 @@ +From e36f80cba6d5eefcc1ee664f16c2c72054b83134 Mon Sep 17 00:00:00 2001 +From: "Joseph C. Sible" <josephcsible@gmail.com> +Date: Sun, 2 Sep 2018 13:42:26 -0400 +Subject: implement fexecve in terms of execveat when it exists + +This lets fexecve work even when /proc isn't mounted. +--- + src/process/fexecve.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/process/fexecve.c b/src/process/fexecve.c +index 6507b429..8be3f760 100644 +--- a/src/process/fexecve.c ++++ b/src/process/fexecve.c +@@ -1,10 +1,15 @@ ++#define _GNU_SOURCE + #include <unistd.h> + #include <errno.h> ++#include <fcntl.h> ++#include "syscall.h" + + void __procfdname(char *, unsigned); + + int fexecve(int fd, char *const argv[], char *const envp[]) + { ++ int r = __syscall(SYS_execveat, fd, "", argv, envp, AT_EMPTY_PATH); ++ if (r != -ENOSYS) return __syscall_ret(r); + char buf[15 + 3*sizeof(int)]; + __procfdname(buf, fd); + execve(buf, argv, envp); +-- +cgit v1.2.1 + |