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"

Reply via email to