The branch stable/12 has been updated by emaste:

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

commit b6f04039d96c24d37c87e5e8f84c13521f9b6b8e
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2021-10-15 19:01:42 +0000
Commit:     Ed Maste <[email protected]>
CommitDate: 2022-02-14 20:26:47 +0000

    procctl(2): add consistent shortcut P_ID:0 as curproc
    
    (cherry picked from commit f833ab9dd187328306fa1601330fbc8332392abe)
    (cherry picked from commit 2e69ba48b97dffa244a4d2d47382b6fbcf6e78f4)
---
 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 80408b73d616..18d3273bfbd6 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 c87f2bd060ca..b4bbfce9349c 100644
--- a/sys/kern/kern_procctl.c
+++ b/sys/kern/kern_procctl.c
@@ -740,12 +740,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);

Reply via email to