Author: eadler
Date: Mon Oct 29 03:52:18 2012
New Revision: 242283
URL: http://svn.freebsd.org/changeset/base/242283

Log:
  MFC r241855,r241859:
        Update the kill(2) and killpg(2) man pages to the modern permission
        checks. Also indicate killpg(2) is POSIX compliant.
  
        Correct the killpg(2) return values:
  
        Return EPERM if processes were found but they
        were unable to be signaled.
  
        Return the first error from p_cansignal if no signal was successful.
  
  Discussed with:       jilles
  Approved by:  cperciva (implicit)

Modified:
  stable/9/sys/kern/kern_sig.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/kern/kern_sig.c
==============================================================================
--- stable/9/sys/kern/kern_sig.c        Mon Oct 29 03:52:18 2012        
(r242282)
+++ stable/9/sys/kern/kern_sig.c        Mon Oct 29 03:52:18 2012        
(r242283)
@@ -1599,8 +1599,10 @@ killpg1(struct thread *td, int sig, int 
 {
        struct proc *p;
        struct pgrp *pgrp;
-       int nfound = 0;
+       int err;
+       int ret;
 
+       ret = ESRCH;
        if (all) {
                /*
                 * broadcast
@@ -1613,11 +1615,14 @@ killpg1(struct thread *td, int sig, int 
                                PROC_UNLOCK(p);
                                continue;
                        }
-                       if (p_cansignal(td, p, sig) == 0) {
-                               nfound++;
+                       err = p_cansignal(td, p, sig);
+                       if (err == 0) {
                                if (sig)
                                        pksignal(p, sig, ksi);
+                               ret = err;
                        }
+                       else if (ret == ESRCH)
+                               ret = err;
                        PROC_UNLOCK(p);
                }
                sx_sunlock(&allproc_lock);
@@ -1644,16 +1649,19 @@ killpg1(struct thread *td, int sig, int 
                                PROC_UNLOCK(p);
                                continue;
                        }
-                       if (p_cansignal(td, p, sig) == 0) {
-                               nfound++;
+                       err = p_cansignal(td, p, sig);
+                       if (err == 0) {
                                if (sig)
                                        pksignal(p, sig, ksi);
+                               ret = err;
                        }
+                       else if (ret == ESRCH)
+                               ret = err;
                        PROC_UNLOCK(p);
                }
                PGRP_UNLOCK(pgrp);
        }
-       return (nfound ? 0 : ESRCH);
+       return (ret);
 }
 
 #ifndef _SYS_SYSPROTO_H_
_______________________________________________
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-unsubscr...@freebsd.org"

Reply via email to