summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjdike <jdike>2003-08-29 16:43:14 +0000
committerjdike <jdike>2003-08-29 16:43:14 +0000
commitaf9e6beb3e8193035a23a2d13ef25a2d722c8ae9 (patch)
tree8e6e46270c166a026d0ccdd442ce676c224aef2a
parent77d2107deb3dcf29d96424a90ff2be6549b2ef37 (diff)
downloaduml-history-af9e6beb3e8193035a23a2d13ef25a2d722c8ae9.tar.gz
Added some cleanups suggested by Oleg.
-rw-r--r--arch/um/drivers/line.c14
-rw-r--r--arch/um/drivers/mconsole_kern.c10
-rw-r--r--arch/um/drivers/xterm_kern.c5
-rw-r--r--arch/um/kernel/frame.c3
-rw-r--r--arch/um/kernel/process_kern.c3
-rw-r--r--arch/um/kernel/signal_kern.c2
-rw-r--r--arch/um/kernel/tt/ptproxy/wait.c10
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(&current->thread.regs));
- void *fp;
int sig_size = _NSIG_WORDS * sizeof(unsigned long);
spin_lock_irq(&current->sigmask_lock);
@@ -349,7 +348,6 @@ int sys_rt_sigreturn(struct pt_regs regs)
sigdelsetmask(&current->blocked, ~_BLOCKABLE);
recalc_sigpending(current);
spin_unlock_irq(&current->sigmask_lock);
- fp = (void *) (((unsigned long) uc) + sizeof(struct ucontext));
copy_sc_from_user(&current->thread.regs, &uc->uc_mcontext,
&signal_frame_si.common.arch);
return(PT_REGS_SYSCALL_RET(&current->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);
}