WIP/cpp -> next #31

Closed
crtxcr wants to merge 16 commits from WIP/cpp into next
3 changed files with 17 additions and 15 deletions
Showing only changes of commit 41bd6e8f10 - Show all commits

22
exile.c
View File

@ -1702,11 +1702,11 @@ int exile_clone_handle(void *arg)
if(ret != 0) if(ret != 0)
{ {
EXILE_LOG_ERROR("Failed to enable policy\n"); EXILE_LOG_ERROR("Failed to enable policy\n");
close(child_read_pipe[1]); close(params->child_read_pipe[1]);
close(child_write_pipe[0]); close(params->child_write_pipe[0]);
return 1; return 1;
} }
ret = dup2(child_read_pipe[1], 1); ret = dup2(params->child_read_pipe[1], 1);
if(ret == -1) if(ret == -1)
{ {
EXILE_LOG_ERROR("Failed to redirect stdout to pipe\n"); EXILE_LOG_ERROR("Failed to redirect stdout to pipe\n");
@ -1714,8 +1714,8 @@ int exile_clone_handle(void *arg)
} }
ret = params->func(params->funcarg); ret = params->func(params->funcarg);
fclose(stdout); fclose(stdout);
close(child_read_pipe[1]); close(params->child_read_pipe[1]);
close(child_write_pipe[0]); close(params->child_write_pipe[0]);
return ret; return ret;
} }
@ -1733,14 +1733,14 @@ int exile_clone_handle(void *arg)
* Return value: Negative on error, otherwise the file descriptor to read from*/ * Return value: Negative on error, otherwise the file descriptor to read from*/
int exile_launch(struct exile_launch_params *launch_params, struct exile_launch_result *launch_result) int exile_launch(struct exile_launch_params *launch_params, struct exile_launch_result *launch_result)
{ {
int ret = pipe(child_read_pipe); int ret = pipe(launch_params->child_read_pipe);
if(ret != 0) if(ret != 0)
{ {
EXILE_LOG_ERROR("read pipe creation failed\n"); EXILE_LOG_ERROR("read pipe creation failed\n");
return ret; return ret;
} }
ret = pipe(child_write_pipe); ret = pipe(launch_params->child_write_pipe);
if(ret != 0) if(ret != 0)
{ {
EXILE_LOG_ERROR("write pipe creation failed\n"); EXILE_LOG_ERROR("write pipe creation failed\n");
@ -1768,12 +1768,12 @@ int exile_launch(struct exile_launch_params *launch_params, struct exile_launch_
EXILE_LOG_ERROR("clone failed(): %s\n", strerror(errno)); EXILE_LOG_ERROR("clone failed(): %s\n", strerror(errno));
return ret; return ret;
} }
close(child_read_pipe[1]); close(launch_params->child_read_pipe[1]);
close(child_write_pipe[0]); close(launch_params->child_write_pipe[0]);
launch_result->tid = ret; launch_result->tid = ret;
launch_result->read_fd = child_read_pipe[0]; launch_result->read_fd = launch_params->child_read_pipe[0];
launch_result->write_fd = child_write_pipe[1]; launch_result->write_fd = launch_params->child_write_pipe[1];
return 0; return 0;
} }

View File

@ -497,6 +497,8 @@ struct exile_launch_params
struct exile_policy *policy; /* Policy to activate before jumping to func */ struct exile_policy *policy; /* Policy to activate before jumping to func */
int (*func)(void *); /* Function to be sandboxed */ int (*func)(void *); /* Function to be sandboxed */
void *funcarg; /* Arg to be passed */ void *funcarg; /* Arg to be passed */
int child_read_pipe[2];
int child_write_pipe[2];
}; };
struct exile_launch_result struct exile_launch_result
@ -506,9 +508,6 @@ struct exile_launch_result
int write_fd; int write_fd;
}; };
static int child_read_pipe[2];
static int child_write_pipe[2];
int exile_clone_handle(void *arg); int exile_clone_handle(void *arg);
/* Helper to easily execute a single function sandboxed. /* Helper to easily execute a single function sandboxed.
* *

5
test.c
View File

@ -548,12 +548,14 @@ int test_fail_flags()
return 0; return 0;
} }
static int *read_pipe = NULL;
int do_launch_test(void *arg) int do_launch_test(void *arg)
{ {
int num = *(int *)(arg); int num = *(int *)(arg);
num += 1; num += 1;
char buffer[512] = { 0 }; char buffer[512] = { 0 };
read(child_write_pipe[0], buffer, sizeof(buffer)-1); read(*read_pipe, buffer, sizeof(buffer)-1);
printf("Sandboxed +1: %i\n", num); printf("Sandboxed +1: %i\n", num);
printf("Echoing: %s\n", buffer); printf("Echoing: %s\n", buffer);
fflush(stdout); fflush(stdout);
@ -569,6 +571,7 @@ int test_launch()
params.func = &do_launch_test; params.func = &do_launch_test;
params.funcarg = # params.funcarg = #
params.policy = policy; params.policy = policy;
read_pipe = &params.child_write_pipe[0];
int launchfd = exile_launch(&params, &res); int launchfd = exile_launch(&params, &res);
if(launchfd < 0) if(launchfd < 0)
{ {