On Mon, Oct 29, 2012 at 03:52:19AM +0000, Eitan Adler wrote:
> 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)
According to svn mail, r241855 was not merged.

> 
> 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_

Attachment: pgpfRCVH2nMc2.pgp
Description: PGP signature

Reply via email to