Author: kib
Date: Mon Apr 20 09:07:12 2015
New Revision: 281763
URL: https://svnweb.freebsd.org/changeset/base/281763

Log:
  Remove code to support the top of the stack layout for FreeBSD 1.x/2.x
  kernel, but keep explanation of the old ps_strings structure to make
  it clear what sanity check tries to accomplish.
  
  Noted by:     Oliver Pinter <[email protected]>
  Sponsored by: The FreeBSD Foundation
  MFC after:    2 weeks

Modified:
  head/lib/libc/gen/setproctitle.c

Modified: head/lib/libc/gen/setproctitle.c
==============================================================================
--- head/lib/libc/gen/setproctitle.c    Mon Apr 20 08:25:55 2015        
(r281762)
+++ head/lib/libc/gen/setproctitle.c    Mon Apr 20 09:07:12 2015        
(r281763)
@@ -42,9 +42,10 @@ __FBSDID("$FreeBSD$");
  * 1: old_ps_strings at the very top of the stack.
  * 2: old_ps_strings at SPARE_USRSPACE below the top of the stack.
  * 3: ps_strings at the very top of the stack.
- * This attempts to support a kernel built in the #2 and #3 era.
- */
-
+ * We only support a kernel providing #3 style ps_strings.
+ *
+ * For historical purposes, a definition of the old ps_strings structure
+ * and location is preserved below:
 struct old_ps_strings {
        char    *old_ps_argvstr;
        int     old_ps_nargvstr;
@@ -53,6 +54,7 @@ struct old_ps_strings {
 };
 #define        OLD_PS_STRINGS ((struct old_ps_strings *) \
        (USRSTACK - SPARE_USRSPACE - sizeof(struct old_ps_strings)))
+ */
 
 #include <stdarg.h>
 
@@ -136,41 +138,38 @@ setproctitle(const char *fmt, ...)
                ps_strings = (struct ps_strings *)ul_ps_strings;
        }
 
-       /* PS_STRINGS points to zeroed memory on a style #2 kernel */
-       if (ps_strings->ps_argvstr) {
-               /* style #3 */
-               if (oargc == -1) {
-                       /* Record our original args */
-                       oargc = ps_strings->ps_nargvstr;
-                       oargv = ps_strings->ps_argvstr;
-                       for (i = len = 0; i < oargc; i++) {
-                               /*
-                                * The program may have scribbled into its
-                                * argv array, e.g., to remove some arguments.
-                                * If that has happened, break out before
-                                * trying to call strlen on a NULL pointer.
-                                */
-                               if (oargv[i] == NULL) {
-                                       oargc = i;
-                                       break;
-                               }
-                               snprintf(obuf + len, SPT_BUFSIZE - len, "%s%s",
-                                   len ? " " : "", oargv[i]);
-                               if (len)
-                                       len++;
-                               len += strlen(oargv[i]);
-                               if (len >= SPT_BUFSIZE)
-                                       break;
+       /*
+        * PS_STRINGS points to zeroed memory on a style #2 kernel.
+        * Should not happen.
+        */
+       if (ps_strings->ps_argvstr == NULL)
+               return;
+
+       /* style #3 */
+       if (oargc == -1) {
+               /* Record our original args */
+               oargc = ps_strings->ps_nargvstr;
+               oargv = ps_strings->ps_argvstr;
+               for (i = len = 0; i < oargc; i++) {
+                       /*
+                        * The program may have scribbled into its
+                        * argv array, e.g., to remove some arguments.
+                        * If that has happened, break out before
+                        * trying to call strlen on a NULL pointer.
+                        */
+                       if (oargv[i] == NULL) {
+                               oargc = i;
+                               break;
                        }
+                       snprintf(obuf + len, SPT_BUFSIZE - len, "%s%s",
+                           len != 0 ? " " : "", oargv[i]);
+                       if (len != 0)
+                               len++;
+                       len += strlen(oargv[i]);
+                       if (len >= SPT_BUFSIZE)
+                               break;
                }
-               ps_strings->ps_nargvstr = nargc;
-               ps_strings->ps_argvstr = nargvp;
-       } else {
-               /* style #2 - we can only restore our first arg :-( */
-               if (*obuf == '\0')
-                       strncpy(obuf, OLD_PS_STRINGS->old_ps_argvstr,
-                           SPT_BUFSIZE - 1);
-               OLD_PS_STRINGS->old_ps_nargvstr = 1;
-               OLD_PS_STRINGS->old_ps_argvstr = nargvp[0];
        }
+       ps_strings->ps_nargvstr = nargc;
+       ps_strings->ps_argvstr = nargvp;
 }
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to