--- zzzz-none-000/linux-2.6.19.2/arch/um/os-Linux/helper.c 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/arch/um/os-Linux/helper.c 2007-01-11 07:38:19.000000000 +0000 @@ -8,21 +8,18 @@ #include #include #include -#include #include #include #include "user.h" #include "kern_util.h" #include "user_util.h" #include "os.h" -#include "um_malloc.h" struct helper_data { void (*pre_exec)(void*); void *pre_data; char **argv; int fd; - char *buf; }; /* Debugging aid, changed only from gdb */ @@ -44,8 +41,9 @@ } if (data->pre_exec != NULL) (*data->pre_exec)(data->pre_data); - errval = execvp_noalloc(data->buf, argv[0], argv); - printk("helper_child - execvp of '%s' failed - errno = %d\n", argv[0], -errval); + execvp(argv[0], argv); + errval = -errno; + printk("helper_child - execve of '%s' failed - errno = %d\n", argv[0], errno); os_write_file(data->fd, &errval, sizeof(errval)); kill(os_getpid(), SIGKILL); return 0; @@ -86,13 +84,11 @@ data.pre_data = pre_data; data.argv = argv; data.fd = fds[1]; - data.buf = __cant_sleep() ? um_kmalloc_atomic(PATH_MAX) : - um_kmalloc(PATH_MAX); pid = clone(helper_child, (void *) sp, CLONE_VM | SIGCHLD, &data); if (pid < 0) { ret = -errno; printk("run_helper : clone failed, errno = %d\n", errno); - goto out_free2; + goto out_close; } close(fds[1]); @@ -113,8 +109,6 @@ CATCH_EINTR(waitpid(pid, NULL, 0)); } -out_free2: - kfree(data.buf); out_close: if (fds[1] != -1) close(fds[1]);