Skip to content

Commit

Permalink
Blackfin: check for bad syscalls after tracing it
Browse files Browse the repository at this point in the history
We want to report all system calls (even invalid ones) to the tracing
layers, so check the NR only after we've notified.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
  • Loading branch information
Mike Frysinger committed Mar 9, 2010
1 parent 600482c commit 9e228ee
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions arch/blackfin/mach-common/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -626,13 +626,6 @@ ENTRY(_system_call)
p0 = [sp + PT_ORIG_P0];
#endif /* CONFIG_IPIPE */

/* Check the System Call */
r7 = __NR_syscall;
/* System call number is passed in P0 */
r6 = p0;
cc = r6 < r7;
if ! cc jump .Lbadsys;

/* are we tracing syscalls?*/
r7 = sp;
r6.l = lo(ALIGN_PAGE_MASK);
Expand All @@ -645,6 +638,12 @@ ENTRY(_system_call)
CC = BITTST(r7,TIF_SINGLESTEP);
if CC JUMP _sys_trace;

/* Make sure the system call # is valid */
p4 = __NR_syscall;
/* System call number is passed in P0 */
cc = p4 <= p0;
if cc jump .Lbadsys;

/* Execute the appropriate system call */

p4 = p0;
Expand Down Expand Up @@ -741,9 +740,14 @@ _sys_trace:
r0 = sp;
pseudo_long_call _syscall_trace_enter, p5;

/* Execute the appropriate system call */

/* Make sure the system call # is valid */
p4 = [SP + PT_P0];
p3 = __NR_syscall;
cc = p3 <= p4;
r0 = -ENOSYS;
if cc jump .Lsys_trace_badsys;

/* Execute the appropriate system call */
p5.l = _sys_call_table;
p5.h = _sys_call_table;
p5 = p5 + (p4 << 2);
Expand All @@ -761,6 +765,7 @@ _sys_trace:
SP += -12;
call (p5);
SP += 24;
.Lsys_trace_badsys:
[sp + PT_R0] = r0;

r0 = sp;
Expand Down

0 comments on commit 9e228ee

Please sign in to comment.