From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhangxiliang Subject: Re: [PATCH] Fix the kernel panic of audit_filter_task when key field is set Date: Sat, 02 Aug 2008 10:56:37 +0800 Message-ID: <4893CCE5.7020907@cn.fujitsu.com> References: <4892F063.1080109@cn.fujitsu.com> <4893C42A.60803@cn.fujitsu.com> <4893CBA9.9020008@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <4893CBA9.9020008@cn.fujitsu.com> Sender: linux-kernel-owner@vger.kernel.org Cc: Eric Paris , Steve Grubb , viro@zeniv.linux.org.uk, Linux Audit , Linux Kernel Mailing List , Yu Zhiguo List-Id: linux-audit@redhat.com Sorry, I miss a blank between if and "(". And I add "unlikely" to check "ctx" in audit_match_perm() and audit_match_filetype(). This is a new patch for it. Signed-off-by: Zhang Xiliang --- kernel/auditsc.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 4699950..57a001a 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -243,6 +243,9 @@ static inline int open_arg(int flags, int mask) static int audit_match_perm(struct audit_context *ctx, int mask) { + if (unlikely(!ctx)) + return 0; + unsigned n = ctx->major; switch (audit_classify_syscall(ctx->arch, n)) { case 0: /* native */ @@ -284,6 +287,10 @@ static int audit_match_filetype(struct audit_context *ctx, int which) { unsigned index = which & ~S_IFMT; mode_t mode = which & S_IFMT; + + if (unlikely(!ctx)) + return 0; + if (index >= ctx->name_count) return 0; if (ctx->names[index].ino == -1) Yu Zhiguo said the following on 2008-08-02 10:51: > > zhangxiliang wrote: > >> static int audit_match_perm(struct audit_context *ctx, int mask) >> { >> + if(!ctx) >> + return 0; >> unsigned n = ctx->major; > > Please check this patch with scripts/checkpatch.pl and then resend it. > > >> switch (audit_classify_syscall(ctx->arch, n)) { >> case 0: /* native */ >> @@ -284,6 +286,8 @@ static int audit_match_filetype(struct >> audit_context *ctx, int which) >> { >> unsigned index = which & ~S_IFMT; >> mode_t mode = which & S_IFMT; >> + if(!ctx) >> + return 0; >> if (index >= ctx->name_count) >> return 0; >> if (ctx->names[index].ino == -1) >> >> > > > >