Commit 9088616f authored by Colin Ian King's avatar Colin Ian King Committed by Chris Metcalf

arch: tile: fix null pointer dereference on pt_regs pointer

Cppcheck reports the following issue:
[arch/tile/kernel/stack.c:116]: (error) Possible null
  pointer dereference: p

In this case, on reporting on an odd fault, p is set to NULL
and immediately afterwords p is dereferenced iff
!kbt->profile is false.  Rather than doing this check just
return NULL rather than falling through to the potential
null pointer dereference (since the original intentional
outcome would be to return NULL anyhow) for this odd fault
case.
Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com> [tweaked lightly]
parent 5a3b4e80
...@@ -108,14 +108,15 @@ static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt) ...@@ -108,14 +108,15 @@ static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt)
p->sp < PAGE_OFFSET && p->sp != 0) { p->sp < PAGE_OFFSET && p->sp != 0) {
if (kbt->verbose) if (kbt->verbose)
pr_err(" <%s while in user mode>\n", fault); pr_err(" <%s while in user mode>\n", fault);
} else if (kbt->verbose) { } else {
if (kbt->verbose)
pr_err(" (odd fault: pc %#lx, sp %#lx, ex1 %#lx?)\n", pr_err(" (odd fault: pc %#lx, sp %#lx, ex1 %#lx?)\n",
p->pc, p->sp, p->ex1); p->pc, p->sp, p->ex1);
p = NULL; return NULL;
} }
if (!kbt->profile || ((1ULL << p->faultnum) & QUEUED_INTERRUPTS) == 0) if (kbt->profile && ((1ULL << p->faultnum) & QUEUED_INTERRUPTS) != 0)
return p;
return NULL; return NULL;
return p;
} }
/* Is the pc pointing to a sigreturn trampoline? */ /* Is the pc pointing to a sigreturn trampoline? */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment