wet_process: Inline child_client_exec()
It was only a small function, and inlining it will allow us to make it more safe without having to duplicate a ton of stuff. Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
c0a76716c1
commit
8aa4571240
@ -368,28 +368,6 @@ sigchld_handler(int signal_number, void *data)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
child_client_exec(struct fdstr *wayland_socket, const char *path)
|
||||
{
|
||||
sigset_t allsigs;
|
||||
|
||||
/* do not give our signal mask to the new process */
|
||||
sigfillset(&allsigs);
|
||||
sigprocmask(SIG_UNBLOCK, &allsigs, NULL);
|
||||
|
||||
/* Launch clients as the user. Do not launch clients with wrong euid. */
|
||||
if (seteuid(getuid()) == -1) {
|
||||
weston_log("compositor: failed seteuid\n");
|
||||
return;
|
||||
}
|
||||
|
||||
setenv("WAYLAND_SOCKET", wayland_socket->str1, 1);
|
||||
|
||||
if (execl(path, path, NULL) < 0)
|
||||
weston_log("compositor: executing '%s' failed: %s\n",
|
||||
path, strerror(errno));
|
||||
}
|
||||
|
||||
WL_EXPORT struct wl_client *
|
||||
weston_client_launch(struct weston_compositor *compositor,
|
||||
struct weston_process *proc,
|
||||
@ -398,6 +376,7 @@ weston_client_launch(struct weston_compositor *compositor,
|
||||
{
|
||||
struct wl_client *client = NULL;
|
||||
struct fdstr wayland_socket;
|
||||
sigset_t allsigs;
|
||||
pid_t pid;
|
||||
bool ret;
|
||||
|
||||
@ -423,6 +402,16 @@ weston_client_launch(struct weston_compositor *compositor,
|
||||
*/
|
||||
setsid();
|
||||
|
||||
/* do not give our signal mask to the new process */
|
||||
sigfillset(&allsigs);
|
||||
sigprocmask(SIG_UNBLOCK, &allsigs, NULL);
|
||||
|
||||
/* Launch clients as the user. Do not launch clients with wrong euid. */
|
||||
if (seteuid(getuid()) == -1) {
|
||||
weston_log("compositor: failed seteuid\n");
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
ret = fdstr_clear_cloexec_fd1(&wayland_socket);
|
||||
if (!ret) {
|
||||
weston_log("compositor: clearing CLOEXEC failed: %s\n",
|
||||
@ -430,8 +419,13 @@ weston_client_launch(struct weston_compositor *compositor,
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
child_client_exec(&wayland_socket, path);
|
||||
_exit(-1);
|
||||
setenv("WAYLAND_SOCKET", wayland_socket.str1, 1);
|
||||
|
||||
if (execl(path, path, NULL) < 0)
|
||||
weston_log("compositor: executing '%s' failed: %s\n",
|
||||
path, strerror(errno));
|
||||
|
||||
_exit(EXIT_FAILURE);
|
||||
|
||||
default:
|
||||
close(wayland_socket.fds[1]);
|
||||
|
Loading…
Reference in New Issue
Block a user