summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/gen/setproctitle.c27
-rw-r--r--lib/libkvm/kvm_proc.c19
-rw-r--r--lib/libutil/setproctitle.c27
3 files changed, 51 insertions, 22 deletions
diff --git a/lib/libc/gen/setproctitle.c b/lib/libc/gen/setproctitle.c
index 2faf976..08efa99 100644
--- a/lib/libc/gen/setproctitle.c
+++ b/lib/libc/gen/setproctitle.c
@@ -11,19 +11,16 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. This work was done expressly for inclusion into FreeBSD. Other use
- * is permitted provided this notation is included.
- * 4. Absolutely no warranty of function or purpose is made by the author
+ * 3. Absolutely no warranty of function or purpose is made by the author
* Peter Wemm.
- * 5. Modifications may be freely made to this file providing the above
- * conditions are met.
*
- * $Id$
+ * $Id: setproctitle.c,v 1.1 1995/12/26 22:50:08 peter Exp $
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/exec.h>
+#include <sys/sysctl.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
@@ -71,10 +68,12 @@ setproctitle(fmt, va_alist)
#endif
{
char *p;
- int len;
static char buf[SPT_BUFSIZE];
static char *ps_argv[2];
va_list ap;
+ int mib[2];
+ struct ps_strings *ps_strings;
+ size_t len;
#if defined(__STDC__)
va_start(ap, fmt);
@@ -104,13 +103,21 @@ setproctitle(fmt, va_alist)
va_end(ap);
+ ps_strings = NULL;
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PS_STRINGS;
+ len = sizeof(ps_strings);
+ if (sysctl(mib, 2, &ps_strings, &len, NULL, 0) < 0 ||
+ ps_strings == NULL)
+ ps_strings = PS_STRINGS;
+
/* PS_STRINGS points to zeroed memory on a style #2 kernel */
- if (PS_STRINGS->ps_argvstr) {
+ if (ps_strings->ps_argvstr) {
/* style #3 */
ps_argv[0] = buf;
ps_argv[1] = NULL;
- PS_STRINGS->ps_nargvstr = 1;
- PS_STRINGS->ps_argvstr = ps_argv;
+ ps_strings->ps_nargvstr = 1;
+ ps_strings->ps_argvstr = ps_argv;
} else {
/* style #2 */
OLD_PS_STRINGS->old_ps_nargvstr = 1;
diff --git a/lib/libkvm/kvm_proc.c b/lib/libkvm/kvm_proc.c
index c26e680..47773e7 100644
--- a/lib/libkvm/kvm_proc.c
+++ b/lib/libkvm/kvm_proc.c
@@ -599,13 +599,23 @@ kvm_doargv(kd, kp, nchr, info)
register char **ap;
u_long addr;
int cnt;
- struct ps_strings arginfo;
+ struct ps_strings arginfo, *ps_strings;
+ int mib[2];
+ size_t len;
+
+ ps_strings = NULL;
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PS_STRINGS;
+ len = sizeof(ps_strings);
+ if (sysctl(mib, 2, &ps_strings, &len, NULL, 0) < 0 ||
+ ps_strings == NULL)
+ ps_strings = PS_STRINGS;
/*
* Pointers are stored at the top of the user stack.
*/
if (p->p_stat == SZOMB ||
- kvm_uread(kd, p, USRSTACK - sizeof(arginfo), (char *)&arginfo,
+ kvm_uread(kd, p, ps_strings, (char *)&arginfo,
sizeof(arginfo)) != sizeof(arginfo))
return (0);
@@ -659,6 +669,11 @@ kvm_uread(kd, p, uva, buf, len)
ssize_t amount;
int fd;
+ if (!ISALIVE(kd)) {
+ _kvm_err(kd, kd->program, "cannot read user space from dead kernel");
+ return(0);
+ }
+
cp = buf;
sprintf(procfile, "/proc/%d/mem", p->p_pid);
diff --git a/lib/libutil/setproctitle.c b/lib/libutil/setproctitle.c
index 2faf976..08efa99 100644
--- a/lib/libutil/setproctitle.c
+++ b/lib/libutil/setproctitle.c
@@ -11,19 +11,16 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. This work was done expressly for inclusion into FreeBSD. Other use
- * is permitted provided this notation is included.
- * 4. Absolutely no warranty of function or purpose is made by the author
+ * 3. Absolutely no warranty of function or purpose is made by the author
* Peter Wemm.
- * 5. Modifications may be freely made to this file providing the above
- * conditions are met.
*
- * $Id$
+ * $Id: setproctitle.c,v 1.1 1995/12/26 22:50:08 peter Exp $
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/exec.h>
+#include <sys/sysctl.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
@@ -71,10 +68,12 @@ setproctitle(fmt, va_alist)
#endif
{
char *p;
- int len;
static char buf[SPT_BUFSIZE];
static char *ps_argv[2];
va_list ap;
+ int mib[2];
+ struct ps_strings *ps_strings;
+ size_t len;
#if defined(__STDC__)
va_start(ap, fmt);
@@ -104,13 +103,21 @@ setproctitle(fmt, va_alist)
va_end(ap);
+ ps_strings = NULL;
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PS_STRINGS;
+ len = sizeof(ps_strings);
+ if (sysctl(mib, 2, &ps_strings, &len, NULL, 0) < 0 ||
+ ps_strings == NULL)
+ ps_strings = PS_STRINGS;
+
/* PS_STRINGS points to zeroed memory on a style #2 kernel */
- if (PS_STRINGS->ps_argvstr) {
+ if (ps_strings->ps_argvstr) {
/* style #3 */
ps_argv[0] = buf;
ps_argv[1] = NULL;
- PS_STRINGS->ps_nargvstr = 1;
- PS_STRINGS->ps_argvstr = ps_argv;
+ ps_strings->ps_nargvstr = 1;
+ ps_strings->ps_argvstr = ps_argv;
} else {
/* style #2 */
OLD_PS_STRINGS->old_ps_nargvstr = 1;
OpenPOWER on IntegriCloud