uml: tidy fault code
Tidying in preparation for the segfault register dumping patch which follows. void * pointers are changed to union uml_pt_regs *. This makes the types match reality, except in arch_fixup, which is changed to operate on a union uml_pt_regs. This fixes a bug in the call from segv_handler, which passes a union uml_pt_regs, to segv, which expects to pass a struct sigcontext to arch_fixup. Whitespace and other style fixes. There's also a errno printk fix. Signed-off-by: Jeff Dike <jdike@linux.intel.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
ccdddb5787
commit
5d86456d38
@@ -18,10 +18,9 @@
|
||||
void sig_handler_common_skas(int sig, void *sc_ptr)
|
||||
{
|
||||
struct sigcontext *sc = sc_ptr;
|
||||
struct skas_regs *r;
|
||||
union uml_pt_regs *r;
|
||||
void (*handler)(int, union uml_pt_regs *);
|
||||
int save_errno = errno;
|
||||
int save_user;
|
||||
int save_user, save_errno = errno;
|
||||
|
||||
/* This is done because to allow SIGSEGV to be delivered inside a SEGV
|
||||
* handler. This can happen in copy_user, and if SEGV is disabled,
|
||||
@@ -31,13 +30,13 @@ void sig_handler_common_skas(int sig, void *sc_ptr)
|
||||
if(sig == SIGSEGV)
|
||||
change_sig(SIGSEGV, 1);
|
||||
|
||||
r = &TASK_REGS(get_current())->skas;
|
||||
save_user = r->is_user;
|
||||
r->is_user = 0;
|
||||
r = TASK_REGS(get_current());
|
||||
save_user = r->skas.is_user;
|
||||
r->skas.is_user = 0;
|
||||
if ( sig == SIGFPE || sig == SIGSEGV ||
|
||||
sig == SIGBUS || sig == SIGILL ||
|
||||
sig == SIGTRAP ) {
|
||||
GET_FAULTINFO_FROM_SC(r->faultinfo, sc);
|
||||
GET_FAULTINFO_FROM_SC(r->skas.faultinfo, sc);
|
||||
}
|
||||
|
||||
change_sig(SIGUSR1, 1);
|
||||
@@ -49,10 +48,10 @@ void sig_handler_common_skas(int sig, void *sc_ptr)
|
||||
sig != SIGVTALRM && sig != SIGALRM)
|
||||
unblock_signals();
|
||||
|
||||
handler(sig, (union uml_pt_regs *) r);
|
||||
handler(sig, r);
|
||||
|
||||
errno = save_errno;
|
||||
r->is_user = save_user;
|
||||
r->skas.is_user = save_user;
|
||||
}
|
||||
|
||||
extern int ptrace_faultinfo;
|
||||
|
Reference in New Issue
Block a user