diff options
Diffstat (limited to 'arch/um/os-Linux/helper.c')
-rw-r--r-- | arch/um/os-Linux/helper.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/um/os-Linux/helper.c b/arch/um/os-Linux/helper.c index 8a78bf03b468..d13299cfa318 100644 --- a/arch/um/os-Linux/helper.c +++ b/arch/um/os-Linux/helper.c | |||
@@ -50,7 +50,8 @@ static int helper_child(void *arg) | |||
50 | } | 50 | } |
51 | 51 | ||
52 | /* Returns either the pid of the child process we run or -E* on failure. | 52 | /* Returns either the pid of the child process we run or -E* on failure. |
53 | * XXX The alloc_stack here breaks if this is called in the tracing thread */ | 53 | * XXX The alloc_stack here breaks if this is called in the tracing thread, so |
54 | * we need to receive a preallocated stack (a local buffer is ok). */ | ||
54 | int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, | 55 | int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv, |
55 | unsigned long *stack_out) | 56 | unsigned long *stack_out) |
56 | { | 57 | { |
@@ -113,10 +114,8 @@ out_close: | |||
113 | close(fds[1]); | 114 | close(fds[1]); |
114 | close(fds[0]); | 115 | close(fds[0]); |
115 | out_free: | 116 | out_free: |
116 | if (stack_out == NULL) | 117 | if ((stack_out == NULL) || (*stack_out == 0)) |
117 | free_stack(stack, 0); | 118 | free_stack(stack, 0); |
118 | else | ||
119 | *stack_out = stack; | ||
120 | return ret; | 119 | return ret; |
121 | } | 120 | } |
122 | 121 | ||