diff options
author | jdike <jdike> | 2003-08-29 16:43:14 +0000 |
---|---|---|
committer | jdike <jdike> | 2003-08-29 16:43:14 +0000 |
commit | af9e6beb3e8193035a23a2d13ef25a2d722c8ae9 (patch) | |
tree | 8e6e46270c166a026d0ccdd442ce676c224aef2a | |
parent | 77d2107deb3dcf29d96424a90ff2be6549b2ef37 (diff) | |
download | uml-history-af9e6beb3e8193035a23a2d13ef25a2d722c8ae9.tar.gz |
Added some cleanups suggested by Oleg.
-rw-r--r-- | arch/um/drivers/line.c | 14 | ||||
-rw-r--r-- | arch/um/drivers/mconsole_kern.c | 10 | ||||
-rw-r--r-- | arch/um/drivers/xterm_kern.c | 5 | ||||
-rw-r--r-- | arch/um/kernel/frame.c | 3 | ||||
-rw-r--r-- | arch/um/kernel/process_kern.c | 3 | ||||
-rw-r--r-- | arch/um/kernel/signal_kern.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/tt/ptproxy/wait.c | 10 |
7 files changed, 30 insertions, 17 deletions
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 1421341..eefe7d6 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c @@ -16,6 +16,7 @@ #include "user_util.h" #include "kern_util.h" #include "os.h" +#include "irq_kern.h" #define LINE_BUFSIZE 4096 @@ -104,8 +105,10 @@ int line_write(struct line *lines, struct tty_struct *tty, int from_user, if(new == NULL) return(0); n = copy_from_user(new, buf, len); - if(n == len) - return(-EFAULT); + if(n == len){ + len = -EFAULT; + goto out_free; + } buf = new; } @@ -119,21 +122,22 @@ int line_write(struct line *lines, struct tty_struct *tty, int from_user, err = flush_buffer(line); local_irq_restore(flags); if(err <= 0) - goto out; + goto out_up; } else { n = write_chan(&line->chan_list, buf, len, line->driver->write_irq); if(n < 0){ len = n; - goto out; + goto out_up; } if(n < len) buffer_data(line, buf + n, len - n); } - out: + out_up: up(&line->sem); + out_free: if(from_user) kfree(buf); return(len); diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index af28ca6..b16d9f9 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c @@ -27,6 +27,7 @@ #include "init.h" #include "os.h" #include "umid.h" +#include "irq_kern.h" static int do_unlink_socket(struct notifier_block *notifier, unsigned long what, void *data) @@ -361,11 +362,16 @@ static int write_proc_mconsole(struct file *file, const char *buffer, if(buf == NULL) return(-ENOMEM); - if(copy_from_user(buf, buffer, count)) - return(-EFAULT); + if(copy_from_user(buf, buffer, count)){ + count = -EFAULT; + goto out; + } + buf[count] = '\0'; mconsole_notify(notify_socket, MCONSOLE_USER_NOTIFY, buf, count); + out: + kfree(buf); return(count); } diff --git a/arch/um/drivers/xterm_kern.c b/arch/um/drivers/xterm_kern.c index 1b4683f..ab59e06 100644 --- a/arch/um/drivers/xterm_kern.c +++ b/arch/um/drivers/xterm_kern.c @@ -8,6 +8,7 @@ #include "asm/semaphore.h" #include "asm/irq.h" #include "irq_user.h" +#include "irq_kern.h" #include "kern_util.h" #include "os.h" #include "xterm.h" @@ -54,7 +55,8 @@ int xterm_fd(int socket, int *pid_out) if(err){ printk(KERN_ERR "xterm_fd : failed to get IRQ for xterm, " "err = %d\n", err); - return(err); + ret = err; + goto out; } down(&data->sem); @@ -62,6 +64,7 @@ int xterm_fd(int socket, int *pid_out) ret = data->new_fd; *pid_out = data->pid; + out: kfree(data); return(ret); diff --git a/arch/um/kernel/frame.c b/arch/um/kernel/frame.c index d8993f2..c18386a 100644 --- a/arch/um/kernel/frame.c +++ b/arch/um/kernel/frame.c @@ -279,7 +279,7 @@ void capture_signal_stack(void) struct sc_frame_raw raw_sc; struct si_frame_raw raw_si; void *stack, *sigstack; - unsigned long top, sig_top, base; + unsigned long top, base; stack = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); @@ -292,7 +292,6 @@ void capture_signal_stack(void) } top = (unsigned long) stack + PAGE_SIZE - sizeof(void *); - sig_top = (unsigned long) sigstack + PAGE_SIZE; /* Get the sigcontext, no sigrestorer layout */ raw_sc.restorer = 0; diff --git a/arch/um/kernel/process_kern.c b/arch/um/kernel/process_kern.c index e75e7ab..66e582e 100644 --- a/arch/um/kernel/process_kern.c +++ b/arch/um/kernel/process_kern.c @@ -103,7 +103,8 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) current->thread.request.u.thread.proc = fn; current->thread.request.u.thread.arg = arg; pid = do_fork(CLONE_VM | flags, 0, NULL, 0); - if(pid < 0) panic("do_fork failed in kernel_thread, errno = %d", pid); + if(pid < 0) + panic("do_fork failed in kernel_thread, errno = %d", pid); return(pid); } diff --git a/arch/um/kernel/signal_kern.c b/arch/um/kernel/signal_kern.c index 2f6041d..aac18d2 100644 --- a/arch/um/kernel/signal_kern.c +++ b/arch/um/kernel/signal_kern.c @@ -341,7 +341,6 @@ int sys_sigreturn(struct pt_regs regs) int sys_rt_sigreturn(struct pt_regs regs) { struct ucontext *uc = sp_to_uc(PT_REGS_SP(¤t->thread.regs)); - void *fp; int sig_size = _NSIG_WORDS * sizeof(unsigned long); spin_lock_irq(¤t->sigmask_lock); @@ -349,7 +348,6 @@ int sys_rt_sigreturn(struct pt_regs regs) sigdelsetmask(¤t->blocked, ~_BLOCKABLE); recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); - fp = (void *) (((unsigned long) uc) + sizeof(struct ucontext)); copy_sc_from_user(¤t->thread.regs, &uc->uc_mcontext, &signal_frame_si.common.arch); return(PT_REGS_SYSCALL_RET(¤t->thread.regs)); diff --git a/arch/um/kernel/tt/ptproxy/wait.c b/arch/um/kernel/tt/ptproxy/wait.c index aad7e4b..7e0ac8c 100644 --- a/arch/um/kernel/tt/ptproxy/wait.c +++ b/arch/um/kernel/tt/ptproxy/wait.c @@ -56,21 +56,23 @@ int parent_wait_return(struct debugger *debugger, pid_t unused) int real_wait_return(struct debugger *debugger) { unsigned long ip; - int err, pid; + int pid; pid = debugger->pid; + ip = ptrace(PTRACE_PEEKUSER, pid, PT_IP_OFFSET, 0); ip = IP_RESTART_SYSCALL(ip); - err = ptrace(PTRACE_POKEUSER, pid, PT_IP_OFFSET, ip); + if(ptrace(PTRACE_POKEUSER, pid, PT_IP_OFFSET, ip) < 0) tracer_panic("real_wait_return : Failed to restart system " - "call, errno = %d\n"); + "call, errno = %d\n", errno); + if((ptrace(PTRACE_SYSCALL, debugger->pid, 0, SIGCHLD) < 0) || (ptrace(PTRACE_SYSCALL, debugger->pid, 0, 0) < 0) || (ptrace(PTRACE_SYSCALL, debugger->pid, 0, 0) < 0) || debugger_normal_return(debugger, -1)) tracer_panic("real_wait_return : gdb failed to wait, " - "errno = %d\n"); + "errno = %d\n", errno); return(0); } |