From nobody@FreeBSD.org  Tue Jun 14 10:24:19 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 52F84106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 14 Jun 2011 10:24:19 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 42BBD8FC08
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 14 Jun 2011 10:24:19 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p5EAOImt037445
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 14 Jun 2011 10:24:18 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id p5EAOIQ1037415;
	Tue, 14 Jun 2011 10:24:18 GMT
	(envelope-from nobody)
Message-Id: <201106141024.p5EAOIQ1037415@red.freebsd.org>
Date: Tue, 14 Jun 2011 10:24:18 GMT
From: Petr Salinger <Petr.Salinger@seznam.cz>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [patch] linprocfs: cmdline/environ for kernel-only processes returns EFAULT instead of empty string
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         157871
>Category:       kern
>Synopsis:       [linprocfs] [patch] linprocfs: cmdline/environ for kernel-only processes returns EFAULT instead of empty string
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pluknet
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jun 14 10:30:11 UTC 2011
>Closed-Date:    Fri Jul 01 10:27:07 UTC 2011
>Last-Modified:  Fri Jul  1 10:30:08 UTC 2011
>Originator:     Petr Salinger
>Release:        8.2
>Organization:
>Environment:
GNU/kFreeBSD debian 8.2-1-amd64
>Description:
Between 8.1 and 8.2 have been in linprocfs added support for $PID/environ and changed implementation of $PID/cmdline. Now it for kernel-only processes returns EFAULT instead of empty string. It breaks at least "pstree -a".

See Debian GNU/kFreeBSD bug #630104
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=630104
>How-To-Repeat:

>Fix:
--- a/sys/compat/linprocfs/linprocfs.c
+++ b/sys/compat/linprocfs/linprocfs.c
@@ -1044,6 +1044,10 @@
                PROC_UNLOCK(p);
                return (ret);
        }
+       if (p->p_flag & P_KTHREAD) {
+               PROC_UNLOCK(p);
+               return (0);
+       }
        if (p->p_args != NULL) {
                sbuf_bcpy(sb, p->p_args->ar_args, p->p_args->ar_length);
                PROC_UNLOCK(p);
@@ -1068,6 +1072,10 @@
                PROC_UNLOCK(p);
                return (ret);
        }
+       if (p->p_flag & P_KTHREAD) {
+               PROC_UNLOCK(p);
+               return (0);
+       }
        PROC_UNLOCK(p);

        ret = linprocfs_doargv(td, p, sb, ps_string_env);


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-emulation 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Tue Jun 14 14:33:20 UTC 2011 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=157871 
Responsible-Changed-From-To: freebsd-emulation->pluknet 
Responsible-Changed-By: pluknet 
Responsible-Changed-When: Tue Jun 14 15:14:31 UTC 2011 
Responsible-Changed-Why:  
I'll take it. 

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

From: Sergey Kandaurov <pluknet@freebsd.org>
To: bug-followup@FreeBSD.org, Petr.Salinger@seznam.cz
Cc:  
Subject: Re: kern/157871: [linprocfs] [patch] linprocfs: cmdline/environ for
 kernel-only processes returns EFAULT instead of empty string
Date: Wed, 15 Jun 2011 11:44:16 +0400

 --90e6ba10a47dc75b1204a5bb51d4
 Content-Type: text/plain; charset=ISO-8859-1
 
 Hi.
 
 Checking for P_KTHREAD doesn't work for kernel process 0, so it can't serve
 as a kernel process indicator. It's not obvious how to find a way to separate
 processes with such present usermode attributes as environ and cmdline.
 [Kernel threads/procs have cmdline however it doesn't work in linux /proc]
 Please try the attached patch and report your results.
 
 -- 
 wbr,
 pluknet
 
 --90e6ba10a47dc75b1204a5bb51d4
 Content-Type: application/octet-stream; name="linprocfs.diff"
 Content-Disposition: attachment; filename="linprocfs.diff"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_goxz3zha0
 
 SW5kZXg6IHN5cy9jb21wYXQvbGlucHJvY2ZzL2xpbnByb2Nmcy5jCj09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5
 cy9jb21wYXQvbGlucHJvY2ZzL2xpbnByb2Nmcy5jCShyZXZpc2lvbiAyMjMwNzMpCisrKyBzeXMv
 Y29tcGF0L2xpbnByb2Nmcy9saW5wcm9jZnMuYwkod29ya2luZyBjb3B5KQpAQCAtMTA0OSw2ICsx
 MDQ5LDE1IEBACiAJCVBST0NfVU5MT0NLKHApOwogCQlyZXR1cm4gKHJldCk7CiAJfQorCisJLyoK
 KwkgKiBNaW1pYyBsaW51eCBiZWhhdmlvciBhbmQgcGFzcyBvbmx5IHByb2Nlc3NlcyB3aXRoIHVz
 ZXJtb2RlCisJICogYWRkcmVzcyBzcGFjZSBhcyB2YWxpZC4gIFJldHVybiB6ZXJvIHNpbGVudGx5
 IG90aGVyd2l6ZS4KKwkgKi8KKwlpZiAocC0+cF92bXNwYWNlID09ICZ2bXNwYWNlMCkgeworCQlQ
 Uk9DX1VOTE9DSyhwKTsKKwkJcmV0dXJuICgwKTsKKwl9CiAJaWYgKHAtPnBfYXJncyAhPSBOVUxM
 KSB7CiAJCXNidWZfYmNweShzYiwgcC0+cF9hcmdzLT5hcl9hcmdzLCBwLT5wX2FyZ3MtPmFyX2xl
 bmd0aCk7CiAJCVBST0NfVU5MT0NLKHApOwpAQCAtMTA3Myw2ICsxMDgyLDE1IEBACiAJCVBST0Nf
 VU5MT0NLKHApOwogCQlyZXR1cm4gKHJldCk7CiAJfQorCisJLyoKKwkgKiBNaW1pYyBsaW51eCBi
 ZWhhdmlvciBhbmQgcGFzcyBvbmx5IHByb2Nlc3NlcyB3aXRoIHVzZXJtb2RlCisJICogYWRkcmVz
 cyBzcGFjZSBhcyB2YWxpZC4gIFJldHVybiB6ZXJvIHNpbGVudGx5IG90aGVyd2l6ZS4KKwkgKi8K
 KwlpZiAocC0+cF92bXNwYWNlID09ICZ2bXNwYWNlMCkgeworCQlQUk9DX1VOTE9DSyhwKTsKKwkJ
 cmV0dXJuICgwKTsKKwl9CiAJUFJPQ19VTkxPQ0socCk7CiAKIAlyZXQgPSBsaW5wcm9jZnNfZG9h
 cmd2KHRkLCBwLCBzYiwgcHNfc3RyaW5nX2Vudik7Cg==
 --90e6ba10a47dc75b1204a5bb51d4--

From: Petr Salinger <Petr.Salinger@seznam.cz>
To: Sergey Kandaurov <pluknet@freebsd.org>
Cc: bug-followup@freebsd.org
Subject: Re: kern/157871: [linprocfs] [patch] linprocfs: cmdline/environ for
 kernel-only processes returns EFAULT instead of empty string
Date: Wed, 15 Jun 2011 19:53:18 +0200 (CEST)

 Hi.
 
 > Checking for P_KTHREAD doesn't work for kernel process 0, so it can't serve
 > as a kernel process indicator. It's not obvious how to find a way to separate
 > processes with such present usermode attributes as environ and cmdline.
 > [Kernel threads/procs have cmdline however it doesn't work in linux /proc]
 > Please try the attached patch and report your results.
 
 It works correctly, thanks.
 
 Petr
State-Changed-From-To: open->patched 
State-Changed-By: pluknet 
State-Changed-When: Fri Jun 17 07:31:59 UTC 2011 
State-Changed-Why:  
Committed to HEAD, thanks! 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/157871: commit references a PR
Date: Fri, 17 Jun 2011 07:31:11 +0000 (UTC)

 Author: pluknet
 Date: Fri Jun 17 07:30:56 2011
 New Revision: 223182
 URL: http://svn.freebsd.org/changeset/base/223182
 
 Log:
   Return empty cmdline/environ string for processes with kernel address
   space. This is consistent with the behavior in linux.
   
   PR:		kern/157871
   Reported by:	Petr Salinger <Petr Salinger att seznam cz>
   Verified on:	GNU/kFreeBSD debian 8.2-1-amd64 (by reporter)
   Reviewed by:	kib (some time ago)
   MFC after:	2 weeks
 
 Modified:
   head/sys/compat/linprocfs/linprocfs.c
 
 Modified: head/sys/compat/linprocfs/linprocfs.c
 ==============================================================================
 --- head/sys/compat/linprocfs/linprocfs.c	Fri Jun 17 07:07:26 2011	(r223181)
 +++ head/sys/compat/linprocfs/linprocfs.c	Fri Jun 17 07:30:56 2011	(r223182)
 @@ -1049,6 +1049,15 @@ linprocfs_doproccmdline(PFS_FILL_ARGS)
  		PROC_UNLOCK(p);
  		return (ret);
  	}
 +
 +	/*
 +	 * Mimic linux behavior and pass only processes with usermode
 +	 * address space as valid.  Return zero silently otherwize.
 +	 */
 +	if (p->p_vmspace == &vmspace0) {
 +		PROC_UNLOCK(p);
 +		return (0);
 +	}
  	if (p->p_args != NULL) {
  		sbuf_bcpy(sb, p->p_args->ar_args, p->p_args->ar_length);
  		PROC_UNLOCK(p);
 @@ -1073,6 +1082,15 @@ linprocfs_doprocenviron(PFS_FILL_ARGS)
  		PROC_UNLOCK(p);
  		return (ret);
  	}
 +
 +	/*
 +	 * Mimic linux behavior and pass only processes with usermode
 +	 * address space as valid.  Return zero silently otherwize.
 +	 */
 +	if (p->p_vmspace == &vmspace0) {
 +		PROC_UNLOCK(p);
 +		return (0);
 +	}
  	PROC_UNLOCK(p);
  
  	ret = linprocfs_doargv(td, p, sb, ps_string_env);
 _______________________________________________
 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"
 
State-Changed-From-To: patched->closed 
State-Changed-By: pluknet 
State-Changed-When: Fri Jul 1 10:26:49 UTC 2011 
State-Changed-Why:  
Merged to stable/8. 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/157871: commit references a PR
Date: Fri,  1 Jul 2011 10:26:02 +0000 (UTC)

 Author: pluknet
 Date: Fri Jul  1 10:25:48 2011
 New Revision: 223707
 URL: http://svn.freebsd.org/changeset/base/223707
 
 Log:
   MFC r223182:
   
    Return empty cmdline/environ string for processes with kernel address
    space. This is consistent with the behavior in linux.
   
   PR:		kern/157871
 
 Modified:
   stable/8/sys/compat/linprocfs/linprocfs.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/compat/linprocfs/linprocfs.c
 ==============================================================================
 --- stable/8/sys/compat/linprocfs/linprocfs.c	Fri Jul  1 08:27:03 2011	(r223706)
 +++ stable/8/sys/compat/linprocfs/linprocfs.c	Fri Jul  1 10:25:48 2011	(r223707)
 @@ -1046,6 +1046,15 @@ linprocfs_doproccmdline(PFS_FILL_ARGS)
  		PROC_UNLOCK(p);
  		return (ret);
  	}
 +
 +	/*
 +	 * Mimic linux behavior and pass only processes with usermode
 +	 * address space as valid.  Return zero silently otherwize.
 +	 */
 +	if (p->p_vmspace == &vmspace0) {
 +		PROC_UNLOCK(p);
 +		return (0);
 +	}
  	if (p->p_args != NULL) {
  		sbuf_bcpy(sb, p->p_args->ar_args, p->p_args->ar_length);
  		PROC_UNLOCK(p);
 @@ -1070,6 +1079,15 @@ linprocfs_doprocenviron(PFS_FILL_ARGS)
  		PROC_UNLOCK(p);
  		return (ret);
  	}
 +
 +	/*
 +	 * Mimic linux behavior and pass only processes with usermode
 +	 * address space as valid.  Return zero silently otherwize.
 +	 */
 +	if (p->p_vmspace == &vmspace0) {
 +		PROC_UNLOCK(p);
 +		return (0);
 +	}
  	PROC_UNLOCK(p);
  
  	ret = linprocfs_doargv(td, p, sb, ps_string_env);
 _______________________________________________
 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"
 
>Unformatted:
