Signed-off-by: Paolo 'Blaisorblade' Giarrusso --- um-linux-2.4.27-paolo/arch/um/drivers/net_user.c | 3 ++- um-linux-2.4.27-paolo/arch/um/kernel/helper.c | 14 +++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff -puN arch/um/drivers/net_user.c~helper-rework arch/um/drivers/net_user.c --- um-linux-2.4.27/arch/um/drivers/net_user.c~helper-rework 2005-04-15 11:12:57.000000000 +0200 +++ um-linux-2.4.27-paolo/arch/um/drivers/net_user.c 2005-04-15 11:12:57.000000000 +0200 @@ -173,8 +173,9 @@ static int change_tramp(char **argv, cha pe_data.stdout = fds[1]; pid = run_helper(change_pre_exec, &pe_data, argv, NULL); - os_close_file(fds[1]); read_output(fds[0], output, output_len); + os_close_file(fds[0]); + os_close_file(fds[1]); waitpid(pid, NULL, 0); return(pid); } diff -puN arch/um/kernel/helper.c~helper-rework arch/um/kernel/helper.c --- um-linux-2.4.27/arch/um/kernel/helper.c~helper-rework 2005-04-15 11:12:57.000000000 +0200 +++ um-linux-2.4.27-paolo/arch/um/kernel/helper.c 2005-04-15 11:12:57.000000000 +0200 @@ -88,29 +88,25 @@ int run_helper(void (*pre_exec)(void *), goto out_close; } - os_close_file(fds[1]); n = os_read_file(fds[0], &err, sizeof(err)); if(n < 0){ printk("run_helper : read on pipe failed, err = %d\n", -n); err = n; - goto out_kill; + os_kill_process(pid, 1); } else if(n != 0){ waitpid(pid, NULL, 0); pid = -errno; } + err = pid; - if(stack_out == NULL) free_stack(stack, 0); - else *stack_out = stack; - return(pid); - - out_kill: - os_kill_process(pid, 1); out_close: os_close_file(fds[0]); os_close_file(fds[1]); out_free: - free_stack(stack, 0); + if(stack_out == NULL) + free_stack(stack, 0); + else *stack_out = stack; return(err); } _