Author: brooks
Date: Wed Apr 15 20:28:20 2020
New Revision: 359991
URL: https://svnweb.freebsd.org/changeset/base/359991

Log:
  Attempt to use AT_PS_STRINGS to get the ps_strings pointer.
  
  This saves a system call and avoids one of the (relatively rare) cases
  of the kernel exporting pointers via sysctl.
  
  As a temporary measure, keep the sysctl support to allow limited
  compatability with old kernels.
  
  Fail gracefully if ps_strings can't be found (should never happen).
  
  Reviewed by:  kib
  Obtained from:        CheriBSD
  Sponsored by: DARPA
  Differential Revision:        https://reviews.freebsd.org/D24407

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

Modified: head/lib/libc/gen/setproctitle.c
==============================================================================
--- head/lib/libc/gen/setproctitle.c    Wed Apr 15 20:26:41 2020        
(r359990)
+++ head/lib/libc/gen/setproctitle.c    Wed Apr 15 20:28:20 2020        
(r359991)
@@ -20,6 +20,7 @@ __FBSDID("$FreeBSD$");
 
 #include "namespace.h"
 #include <sys/param.h>
+#include <sys/elf_common.h>
 #include <sys/exec.h>
 #include <sys/sysctl.h>
 
@@ -112,6 +113,10 @@ setproctitle_internal(const char *fmt, va_list ap)
                /* Nothing to restore */
                return (NULL);
 
+       if (ps_strings == NULL)
+               (void)_elf_aux_info(AT_PS_STRINGS, &ps_strings,
+                   sizeof(ps_strings));
+
        if (ps_strings == NULL) {
                len = sizeof(ul_ps_strings);
                if (sysctlbyname("kern.ps_strings", &ul_ps_strings, &len, NULL,
@@ -119,6 +124,9 @@ setproctitle_internal(const char *fmt, va_list ap)
                        return (NULL);
                ps_strings = (struct ps_strings *)ul_ps_strings;
        }
+
+       if (ps_strings == NULL)
+               return (NULL);
 
        /*
         * PS_STRINGS points to zeroed memory on a style #2 kernel.
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to