diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2007-08-07 19:01:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-08-07 22:58:56 -0400 |
commit | 175fc484256e9c85e043f599ec2f6bc0d2e6c443 (patch) | |
tree | e9a485aaa0810cb85f1198579596f9bd46d5e7c0 /kernel/auditsc.c | |
parent | 9dc83afdbefd184bf29f347e8fcbb6d8a2b5e6fe (diff) |
fix oops in __audit_signal_info()
The check for audit_signals is misplaced and the check for
audit_dummy_context() is missing; as the result, if we send a signal to
auditd from task with NULL ->audit_context while we have audit_signals
!= 0 we end up with an oops.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: James Morris <jmorris@namei.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/auditsc.c')
-rw-r--r-- | kernel/auditsc.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index a777d3761416..3401293359e8 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -1992,19 +1992,19 @@ int __audit_signal_info(int sig, struct task_struct *t) | |||
1992 | extern uid_t audit_sig_uid; | 1992 | extern uid_t audit_sig_uid; |
1993 | extern u32 audit_sig_sid; | 1993 | extern u32 audit_sig_sid; |
1994 | 1994 | ||
1995 | if (audit_pid && t->tgid == audit_pid && | 1995 | if (audit_pid && t->tgid == audit_pid) { |
1996 | (sig == SIGTERM || sig == SIGHUP || sig == SIGUSR1)) { | 1996 | if (sig == SIGTERM || sig == SIGHUP || sig == SIGUSR1) { |
1997 | audit_sig_pid = tsk->pid; | 1997 | audit_sig_pid = tsk->pid; |
1998 | if (ctx) | 1998 | if (ctx) |
1999 | audit_sig_uid = ctx->loginuid; | 1999 | audit_sig_uid = ctx->loginuid; |
2000 | else | 2000 | else |
2001 | audit_sig_uid = tsk->uid; | 2001 | audit_sig_uid = tsk->uid; |
2002 | selinux_get_task_sid(tsk, &audit_sig_sid); | 2002 | selinux_get_task_sid(tsk, &audit_sig_sid); |
2003 | } | ||
2004 | if (!audit_signals || audit_dummy_context()) | ||
2005 | return 0; | ||
2003 | } | 2006 | } |
2004 | 2007 | ||
2005 | if (!audit_signals) /* audit_context checked in wrapper */ | ||
2006 | return 0; | ||
2007 | |||
2008 | /* optimize the common case by putting first signal recipient directly | 2008 | /* optimize the common case by putting first signal recipient directly |
2009 | * in audit_context */ | 2009 | * in audit_context */ |
2010 | if (!ctx->target_pid) { | 2010 | if (!ctx->target_pid) { |