From emaste@FreeBSD.org  Thu Nov 13 15:20:50 2008
Return-Path: <emaste@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 0FB17106564A
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 13 Nov 2008 15:20:50 +0000 (UTC)
	(envelope-from emaste@FreeBSD.org)
Received: from ref8-amd64.freebsd.org (ref8-amd64.freebsd.org [IPv6:2001:4f8:fff6::5f])
	by mx1.freebsd.org (Postfix) with ESMTP id 021718FC0C
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 13 Nov 2008 15:20:50 +0000 (UTC)
	(envelope-from emaste@FreeBSD.org)
Received: from ref8-amd64.freebsd.org (localhost [127.0.0.1])
	by ref8-amd64.freebsd.org (8.14.3/8.14.3) with ESMTP id mADFKnIR044377
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 13 Nov 2008 15:20:49 GMT
	(envelope-from emaste@ref8-amd64.freebsd.org)
Received: (from emaste@localhost)
	by ref8-amd64.freebsd.org (8.14.3/8.14.3/Submit) id mADFKnXx044376;
	Thu, 13 Nov 2008 15:20:49 GMT
	(envelope-from emaste)
Message-Id: <200811131520.mADFKnXx044376@ref8-amd64.freebsd.org>
Date: Thu, 13 Nov 2008 15:20:49 GMT
From: Ed Maste <emaste@FreeBSD.org>
Reply-To: Ed Maste <emaste@FreeBSD.org>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: ps(1) PADDR (and others?) field width insufficient for 64 bit pointers
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         128841
>Category:       bin
>Synopsis:       ps(1) PADDR (and others?) field width insufficient for 64 bit pointers
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    attilio
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Nov 13 15:30:01 UTC 2008
>Closed-Date:    Fri Jul 15 13:22:07 UTC 2011
>Last-Modified:  Fri Jul 15 13:22:07 UTC 2011
>Originator:     Ed Maste
>Release:        FreeBSD 8.0-CURRENT amd64
>Organization:
FreeBSD
>Environment:
System: FreeBSD ref8-amd64.freebsd.org 8.0-CURRENT FreeBSD 8.0-CURRENT #0 r184542: Sun Nov 2 00:26:55 UTC 2008 peter@ref8-amd64.freebsd.org:/scratch/src/sys/amd64/compile/REF8-AMD64 amd64


>Description:

Run ps with paddr as a -o argument.  ps provides only 8 spaces for the
output, too small for a 64 bit pointer.

[emaste@ref8-amd64 ~]$ ps -o pid,paddr,comm
  PID    PADDR COMMAND
44289 ffffff0004e13860 bash
44292 ffffff019be1d860 ps

There are other pointers that ps displays that have the same issue I suspect.

>How-To-Repeat:
run ps -o pid,paddr,comm on a 64 bit os.

>Fix:
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->emaste 
Responsible-Changed-By: emaste 
Responsible-Changed-When: Thu Nov 13 15:31:20 UTC 2008 
Responsible-Changed-Why:  
Hang on to my PR 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128841 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/128841: commit references a PR
Date: Thu, 26 Feb 2009 18:01:21 +0000 (UTC)

 Author: attilio
 Date: Thu Feb 26 18:01:07 2009
 New Revision: 189078
 URL: http://svn.freebsd.org/changeset/base/189078
 
 Log:
   [1]	When showing threads, the thread name just appears if the comm
   	label is choosen as last printout (ucomm suffers of this such bug
   	too).  That bug is caused by the fact that the fixed size of
   	printout doesn't leave enough space for them to be printed out.
   	Implement ucomm and comm commands with a dynamic size lenght for
   	buffers.
   
   [2]	On AMD64 architecture pointers don't have enough chars space to
   	be shown (8 chars while they need 16).  Fix them by providing
   	a variadic space so that it fits well on both 64 and 32 bits
   	architectures.
   
   [3]	Check a return value of malloc() that wasn't checked before.
   
   PR:		bin/128841, bin/128842
   Reviewed by:	jhb, emaste
   Sponsored by:	Sandvine Incorporated
 
 Modified:
   head/bin/ps/extern.h
   head/bin/ps/keyword.c
   head/bin/ps/print.c
 
 Modified: head/bin/ps/extern.h
 ==============================================================================
 --- head/bin/ps/extern.h	Thu Feb 26 17:46:54 2009	(r189077)
 +++ head/bin/ps/extern.h	Thu Feb 26 18:01:07 2009	(r189078)
 @@ -71,6 +71,7 @@ void	 priorityr(KINFO *, VARENT *);
  void	 rgroupname(KINFO *, VARENT *);
  void	 runame(KINFO *, VARENT *);
  void	 rvar(KINFO *, VARENT *);
 +int	 s_comm(KINFO *);
  int	 s_label(KINFO *);
  int	 s_rgroupname(KINFO *);
  int	 s_runame(KINFO *);
 
 Modified: head/bin/ps/keyword.c
 ==============================================================================
 --- head/bin/ps/keyword.c	Thu Feb 26 17:46:54 2009	(r189077)
 +++ head/bin/ps/keyword.c	Thu Feb 26 18:01:07 2009	(r189078)
 @@ -79,8 +79,8 @@ static VAR var[] = {
  		CHAR, NULL, 0},
  	{"blocked", "", "sigmask", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
  	{"caught", "", "sigcatch", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 -	{"comm", "COMMAND", NULL, LJUST, ucomm, NULL, MAXCOMLEN, 0, CHAR,
 -		NULL, 0},
 +	{"comm", "COMMAND", NULL, LJUST|DSIZ, ucomm, s_comm,
 +		COMMLEN + OCOMMLEN + 1, 0, CHAR, NULL, 0},
  	{"command", "COMMAND", NULL, COMM|LJUST|USER, command, NULL, 16, 0,
  		CHAR, NULL, 0},
  	{"cpu", "CPU", NULL, 0, kvar, NULL, 3, KOFF(ki_estcpu), UINT, "d",
 @@ -135,12 +135,13 @@ static VAR var[] = {
  		LONG, "ld", 0},
  	{"nvcsw", "NVCSW", NULL, USER, rvar, NULL, 5, ROFF(ru_nvcsw),
  		LONG, "ld", 0},
 -	{"nwchan", "NWCHAN", NULL, LJUST, nwchan, NULL, 8, 0, CHAR, NULL, 0},
 +	{"nwchan", "NWCHAN", NULL, LJUST, nwchan, NULL, sizeof(void *) * 2, 0,
 +		CHAR, NULL, 0},
  	{"oublk", "OUBLK", NULL, USER, rvar, NULL, 4, ROFF(ru_oublock),
  		LONG, "ld", 0},
  	{"oublock", "", "oublk", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 -	{"paddr", "PADDR", NULL, 0, kvar, NULL, 8, KOFF(ki_paddr), KPTR,
 -		"lx", 0},
 +	{"paddr", "PADDR", NULL, 0, kvar, NULL, sizeof(void *) * 2,
 +		KOFF(ki_paddr), KPTR, "lx", 0},
  	{"pagein", "PAGEIN", NULL, USER, pagein, NULL, 6, 0, CHAR, NULL, 0},
  	{"pcpu", "", "%cpu", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
  	{"pending", "", "sig", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 @@ -195,13 +196,13 @@ static VAR var[] = {
  	{"tsiz", "TSIZ", NULL, 0, kvar, NULL, 4, KOFF(ki_tsize), PGTOK, "ld", 0},
  	{"tt", "TT ", NULL, 0, tname, NULL, 4, 0, CHAR, NULL, 0},
  	{"tty", "TTY", NULL, LJUST, longtname, NULL, 8, 0, CHAR, NULL, 0},
 -	{"ucomm", "UCOMM", NULL, LJUST, ucomm, NULL, MAXCOMLEN, 0, CHAR, NULL,
 -		0},
 +	{"ucomm", "UCOMM", NULL, LJUST|DSIZ, ucomm, s_comm,
 +		COMMLEN + OCOMMLEN + 1, 0, CHAR, NULL, 0},
  	{"uid", "UID", NULL, 0, kvar, NULL, UIDLEN, KOFF(ki_uid), UINT,
  		UIDFMT, 0},
  	{"upr", "UPR", NULL, 0, upr, NULL, 3, 0, CHAR, NULL, 0},
 -	{"uprocp", "UPROCP", NULL, 0, kvar, NULL, 8, KOFF(ki_paddr), KPTR,
 -		"lx", 0},
 +	{"uprocp", "UPROCP", NULL, 0, kvar, NULL, sizeof(void *) * 2,
 +		KOFF(ki_paddr), KPTR, "lx", 0},
  	{"user", "USER", NULL, LJUST|DSIZ, uname, s_uname, USERLEN, 0, CHAR,
  		NULL, 0},
  	{"usrpri", "", "upr", 0, NULL, NULL, 0, 0, CHAR, NULL, 0},
 @@ -325,6 +326,8 @@ findvar(char *p, int user, char **header
  			 */
  			rflen = strlen(v->alias) + strlen(hp) + 2;
  			realfmt = malloc(rflen);
 +			if (realfmt == NULL)
 +				errx(1, "malloc failed");
  			snprintf(realfmt, rflen, "%s=%s", v->alias, hp);
  			parsefmt(realfmt, user);
  		}
 
 Modified: head/bin/ps/print.c
 ==============================================================================
 --- head/bin/ps/print.c	Thu Feb 26 17:46:54 2009	(r189077)
 +++ head/bin/ps/print.c	Thu Feb 26 18:01:07 2009	(r189078)
 @@ -177,6 +177,7 @@ command(KINFO *k, VARENT *ve)
  void
  ucomm(KINFO *k, VARENT *ve)
  {
 +	char tmpbuff[COMMLEN + OCOMMLEN + 2];
  	VAR *v;
  
  	v = ve->var;
 @@ -184,8 +185,15 @@ ucomm(KINFO *k, VARENT *ve)
  		(void)printf("%s", k->ki_p->ki_comm);
  		if (showthreads && k->ki_p->ki_numthreads > 1)
  			printf("/%s", k->ki_p->ki_ocomm);
 -	} else
 -		(void)printf("%-*s", v->width, k->ki_p->ki_comm);
 +	} else {
 +		bzero(tmpbuff, sizeof(tmpbuff));
 +		if (showthreads && k->ki_p->ki_numthreads > 1)
 +			sprintf(tmpbuff, "%s/%s", k->ki_p->ki_comm,
 +			    k->ki_p->ki_ocomm);
 +		else
 +			sprintf(tmpbuff, "%s", k->ki_p->ki_comm);
 +		(void)printf("%-*s", v->width, tmpbuff);
 +	}
  }
  
  void
 @@ -821,6 +829,20 @@ out:
  }
  
  int
 +s_comm(KINFO *k)
 +{
 +	char tmpbuff[COMMLEN + OCOMMLEN + 2];
 +
 +	bzero(tmpbuff, sizeof(tmpbuff));
 +	if (showthreads && k->ki_p->ki_numthreads > 1)
 +		sprintf(tmpbuff, "%s/%s", k->ki_p->ki_comm,
 +		    k->ki_p->ki_ocomm);
 +	else
 +		sprintf(tmpbuff, "%s", k->ki_p->ki_comm);
 +	return (strlen(tmpbuff));
 +}
 +
 +int
  s_label(KINFO *k)
  {
  	char *string = NULL;
 _______________________________________________
 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-unsubscribe@freebsd.org"
 
Responsible-Changed-From-To: emaste->attilio 
Responsible-Changed-By: emaste 
Responsible-Changed-When: Mon Mar 9 17:16:33 UTC 2009 
Responsible-Changed-Why:  
Attilio is working on these ps(1) issues for me. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128841 
State-Changed-From-To: open->patched 
State-Changed-By: gavin 
State-Changed-When: Thu Mar 26 12:38:26 UTC 2009 
State-Changed-Why:  
THis is fixed in HEAD but not yet MFC'd 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128841 
State-Changed-From-To: patched->closed 
State-Changed-By: pluknet 
State-Changed-When: Fri Jul 15 13:18:42 UTC 2011 
State-Changed-Why:  
Merged to stable/7 and stable/6. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=128841 
>Unformatted:
