Skip to content

Commit

Permalink
arch: tile: fix null pointer dereference on pt_regs pointer
Browse files Browse the repository at this point in the history
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: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com> [tweaked lightly]
  • Loading branch information
Colin Ian King authored and Chris Metcalf committed Apr 17, 2015
1 parent 5a3b4e8 commit 9088616
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions arch/tile/kernel/stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,15 @@ static struct pt_regs *valid_fault_handler(struct KBacktraceIterator* kbt)
p->sp < PAGE_OFFSET && p->sp != 0) {
if (kbt->verbose)
pr_err(" <%s while in user mode>\n", fault);
} else if (kbt->verbose) {
pr_err(" (odd fault: pc %#lx, sp %#lx, ex1 %#lx?)\n",
p->pc, p->sp, p->ex1);
p = NULL;
} else {
if (kbt->verbose)
pr_err(" (odd fault: pc %#lx, sp %#lx, ex1 %#lx?)\n",
p->pc, p->sp, p->ex1);
return NULL;
}
if (!kbt->profile || ((1ULL << p->faultnum) & QUEUED_INTERRUPTS) == 0)
return p;
return NULL;
if (kbt->profile && ((1ULL << p->faultnum) & QUEUED_INTERRUPTS) != 0)
return NULL;
return p;
}

/* Is the pc pointing to a sigreturn trampoline? */
Expand Down

0 comments on commit 9088616

Please sign in to comment.