Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Oct 2021 20:04:46 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: f833ab9dd187 - main - procctl(2): add consistent shortcut P_ID:0 as curproc
Message-ID:  <202110192004.19JK4kxU069868@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=f833ab9dd187328306fa1601330fbc8332392abe

commit f833ab9dd187328306fa1601330fbc8332392abe
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-10-15 19:01:42 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-10-19 20:04:34 +0000

    procctl(2): add consistent shortcut P_ID:0 as curproc
    
    Reported by:    bdrewery, emaste
    Reviewed by:    emaste, markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D32513
---
 lib/libc/sys/procctl.2  |  2 ++
 sys/kern/kern_procctl.c | 16 +++++++++++-----
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/lib/libc/sys/procctl.2 b/lib/libc/sys/procctl.2
index 30933875ccbc..7412c2ee9d56 100644
--- a/lib/libc/sys/procctl.2
+++ b/lib/libc/sys/procctl.2
@@ -62,6 +62,8 @@ The following identifier types are supported:
 .It Dv P_PID
 Control the process with the process ID
 .Fa id .
+.Fa id
+zero is a shortcut for the calling process ID.
 .It Dv P_PGID
 Control processes belonging to the process group with the ID
 .Fa id .
diff --git a/sys/kern/kern_procctl.c b/sys/kern/kern_procctl.c
index 90c5e63c7219..613fabc4ca34 100644
--- a/sys/kern/kern_procctl.c
+++ b/sys/kern/kern_procctl.c
@@ -904,12 +904,18 @@ kern_procctl(struct thread *td, idtype_t idtype, id_t id, int com, void *data)
 
 	switch (idtype) {
 	case P_PID:
-		p = pfind(id);
-		if (p == NULL) {
-			error = ESRCH;
-			break;
+		if (id == 0) {
+			p = td->td_proc;
+			error = 0;
+			PROC_LOCK(p);
+		} else {
+			p = pfind(id);
+			if (p == NULL) {
+				error = ESRCH;
+				break;
+			}
+			error = p_cansee(td, p);
 		}
-		error = p_cansee(td, p);
 		if (error == 0)
 			error = kern_procctl_single(td, p, com, data);
 		PROC_UNLOCK(p);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202110192004.19JK4kxU069868>