On Wed, Jan 11, 2012 at 04:35:26PM +0000, Guy Helmer wrote:
> Author: ghelmer
> Date: Wed Jan 11 16:35:26 2012
> New Revision: 229966
> URL: http://svn.freebsd.org/changeset/base/229966
> 
> Log:
>   jilles pointed out that O_CLOEXEC could be used in the open(2) flags
>   rather than using fcntl(2) later, and in addition to saving a system
>   call, removes a possible race with fork/exec from threads or signal
>   handlers.

So now we can remove fcntl() as the source of possible pidfile_open()
errnos from the manual page.:)

> Modified:
>   head/lib/libutil/pidfile.c
> 
> Modified: head/lib/libutil/pidfile.c
> ==============================================================================
> --- head/lib/libutil/pidfile.c        Wed Jan 11 15:00:16 2012        
> (r229965)
> +++ head/lib/libutil/pidfile.c        Wed Jan 11 16:35:26 2012        
> (r229966)
> @@ -117,7 +117,7 @@ pidfile_open(const char *path, mode_t mo
>        * pidfile_write() can be called multiple times.
>        */
>       fd = flopen(pfh->pf_path,
> -         O_WRONLY | O_CREAT | O_TRUNC | O_NONBLOCK, mode);
> +         O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NONBLOCK, mode);
>       if (fd == -1) {
>               if (errno == EWOULDBLOCK && pidptr != NULL) {
>                       count = 20;
> @@ -139,19 +139,6 @@ pidfile_open(const char *path, mode_t mo
>       }
>  
>       /*
> -      * Prevent the file descriptor from escaping to other
> -      * programs via exec(3).
> -      */
> -     if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
> -             error = errno;
> -             unlink(pfh->pf_path);
> -             close(fd);
> -             free(pfh);
> -             errno = error;
> -             return (NULL);
> -     }
> -
> -     /*
>        * Remember file information, so in pidfile_write() we are sure we write
>        * to the proper descriptor.
>        */

-- 
Pawel Jakub Dawidek                       http://www.wheelsystems.com
FreeBSD committer                         http://www.FreeBSD.org
Am I Evil? Yes, I Am!                     http://yomoli.com

Attachment: pgpW6Entf9saW.pgp
Description: PGP signature

Reply via email to