On Thu, 28 May 2009 00:38:24 +0000 (UTC), Xin LI <delp...@freebsd.org> wrote: > Author: delphij > Date: Thu May 28 00:38:24 2009 > New Revision: 192943 > URL: http://svn.freebsd.org/changeset/base/192943 > > Log: > Correct off-by-one issue in truss(1) which happens when system call number > is nsyscalls. > > PR: bin/134916 > Submitted by: Steven Hartland <steven hartland multiplay co uk> > MFC after: 2 weeks
Thank you! I've been running with precisely the same patch locally for some time, but didn't manage to get it tested well enough to commit it :-) The only local diff I have now from /head is a minor change that wraps lines that are at the same time already wrapped *and* too long. If that looks useful as a followup change please feel free to use it: %%% diff -r b88f7e077f9c usr.bin/truss/amd64-fbsd.c --- a/usr.bin/truss/amd64-fbsd.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/amd64-fbsd.c Thu May 28 05:10:58 2009 +0300 @@ -141,8 +141,8 @@ } fsc.number = syscall_num; - fsc.name = - (syscall_num < 0 || syscall_num > nsyscalls) ? NULL : syscallnames[syscall_num]; + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : + syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); } diff -r b88f7e077f9c usr.bin/truss/amd64-fbsd32.c --- a/usr.bin/truss/amd64-fbsd32.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/amd64-fbsd32.c Thu May 28 05:10:58 2009 +0300 @@ -151,8 +151,7 @@ } fsc.number = syscall_num; - fsc.name = - (syscall_num < 0 || syscall_num > nsyscalls) ? NULL : + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : freebsd32_syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); diff -r b88f7e077f9c usr.bin/truss/amd64-linux32.c --- a/usr.bin/truss/amd64-linux32.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/amd64-linux32.c Thu May 28 05:10:58 2009 +0300 @@ -123,8 +123,8 @@ syscall_num = regs.r_rax; fsc.number = syscall_num; - fsc.name = - (syscall_num < 0 || syscall_num > nsyscalls) ? NULL : linux32_syscallnames[syscall_num]; + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : + linux32_syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); } diff -r b88f7e077f9c usr.bin/truss/i386-fbsd.c --- a/usr.bin/truss/i386-fbsd.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/i386-fbsd.c Thu May 28 05:10:58 2009 +0300 @@ -146,8 +146,8 @@ } fsc.number = syscall_num; - fsc.name = - (syscall_num < 0 || syscall_num > nsyscalls) ? NULL : syscallnames[syscall_num]; + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : + syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); } diff -r b88f7e077f9c usr.bin/truss/i386-linux.c --- a/usr.bin/truss/i386-linux.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/i386-linux.c Thu May 28 05:10:58 2009 +0300 @@ -123,8 +123,8 @@ syscall_num = regs.r_eax; fsc.number = syscall_num; - fsc.name = - (syscall_num < 0 || syscall_num > nsyscalls) ? NULL : linux_syscallnames[syscall_num]; + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : + linux_syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); } diff -r b88f7e077f9c usr.bin/truss/ia64-fbsd.c --- a/usr.bin/truss/ia64-fbsd.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/ia64-fbsd.c Thu May 28 05:10:58 2009 +0300 @@ -135,8 +135,8 @@ syscall_num = (int)*parm_offset++; fsc.number = syscall_num; - fsc.name = (syscall_num < 0 || syscall_num > nsyscalls) - ? NULL : syscallnames[syscall_num]; + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : + syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); } diff -r b88f7e077f9c usr.bin/truss/powerpc-fbsd.c --- a/usr.bin/truss/powerpc-fbsd.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/powerpc-fbsd.c Thu May 28 05:10:58 2009 +0300 @@ -148,8 +148,8 @@ } fsc.number = syscall_num; - fsc.name = - (syscall_num < 0 || syscall_num > nsyscalls) ? NULL : syscallnames[syscall_num]; + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : + syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); } diff -r b88f7e077f9c usr.bin/truss/sparc64-fbsd.c --- a/usr.bin/truss/sparc64-fbsd.c Thu May 21 02:47:46 2009 +0000 +++ b/usr.bin/truss/sparc64-fbsd.c Thu May 28 05:10:58 2009 +0300 @@ -144,8 +144,8 @@ } fsc.number = syscall_num; - fsc.name = - (syscall_num < 0 || syscall_num > nsyscalls) ? NULL : syscallnames[syscall_num]; + fsc.name = (syscall_num < 0 || syscall_num >= nsyscalls) ? NULL : + syscallnames[syscall_num]; if (!fsc.name) { fprintf(trussinfo->outfile, "-- UNKNOWN SYSCALL %d --\n", syscall_num); } %%% _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"