mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxenlight: remove ctx dangerously passed to children
apart from ctx->waitpid, it's potentially harmful to call into logging. Signed-off-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
This commit is contained in:
1 parent
246098effc
commit
4d5c98f988
3 files changed
+10
-12
No files matched your search
+2
-2
@@ -726,8 +726,8 @@ static char ** libxl_build_device_model_args(struct libxl_ctx *ctx,
|
||||
return (char **) flexarray_contents(dm_args);
|
||||
}
|
||||
|
||||
void dm_xenstore_record_pid(struct libxl_ctx *ctx, void *for_spawn,
|
||||
pid_t innerchild) {
|
||||
void dm_xenstore_record_pid(void *for_spawn, pid_t innerchild)
|
||||
{
|
||||
struct libxl_device_model_starting *starting = for_spawn;
|
||||
char *kvs[3];
|
||||
int rc;
|
||||
|
||||
@@ -100,8 +100,7 @@ void libxl_report_child_exitstatus(struct libxl_ctx *ctx,
|
||||
int libxl_spawn_spawn(struct libxl_ctx *ctx,
|
||||
libxl_device_model_starting *starting,
|
||||
const char *what,
|
||||
void (*intermediate_hook)(struct libxl_ctx *ctx,
|
||||
void *for_spawn,
|
||||
void (*intermediate_hook)(void *for_spawn,
|
||||
pid_t innerchild))
|
||||
{
|
||||
pid_t child, got;
|
||||
@@ -127,18 +126,19 @@ int libxl_spawn_spawn(struct libxl_ctx *ctx,
|
||||
|
||||
/* we are now the intermediate process */
|
||||
|
||||
child = libxl_fork(ctx);
|
||||
if (!child) return 0; /* caller runs child code */
|
||||
if (child < 0) exit(255);
|
||||
child = fork();
|
||||
if (child == -1)
|
||||
exit(255);
|
||||
if (!child)
|
||||
return 0; /* caller runs child code */
|
||||
|
||||
intermediate_hook(ctx, starting, child);
|
||||
intermediate_hook(starting, child);
|
||||
|
||||
if (!for_spawn) _exit(0); /* just detach then */
|
||||
|
||||
got = call_waitpid(ctx->waitpid_instead, child, &status, 0);
|
||||
assert(got == child);
|
||||
|
||||
libxl_report_child_exitstatus(ctx, what, child, status);
|
||||
_exit(WIFEXITED(status) ? WEXITSTATUS(status) :
|
||||
WIFSIGNALED(status) && WTERMSIG(status) < 127
|
||||
? WTERMSIG(status)+128 : -1);
|
||||
|
||||
@@ -181,9 +181,7 @@ struct libxl_device_model_starting {
|
||||
int libxl_spawn_spawn(struct libxl_ctx *ctx,
|
||||
libxl_device_model_starting *starting,
|
||||
const char *what,
|
||||
void (*intermediate_hook)(struct libxl_ctx *ctx,
|
||||
void *for_spawn,
|
||||
pid_t innerchild));
|
||||
void (*intermediate_hook)(void *for_spawn, pid_t innerchild));
|
||||
/* Logs errors. A copy of "what" is taken. Return values:
|
||||
* < 0 error, for_spawn need not be detached
|
||||
* +1 caller is now the inner child, should probably call libxl_exec
|
||||
|
||||