[Mauiusers] Patch to fix a possible double free

Ole Holm Nielsen Ole.H.Nielsen at fysik.dtu.dk
Sat Aug 11 08:06:49 MDT 2007


Ronny T. Lampert wrote:
>> I'm not sure I understand what you mean by "daemon should duplicate 
>> all standard descriptors to
>> /dev/null." Perhaps you can help me in my ignorance.
> 
> Ah, yes. Usually, fully background daemons close 0, 1 and 2 (stdin, out 
> and err) and dup() them to /dev/null, and also do a setsid().
> 
> This prevents accidentially opened ttys (and sessions) to be held open 
> or msgs (e.g. perror()) going somewhere where they possibly shouldn't.
> One also could dup() them to a file, so all output goes there in case 
> some library functions really wants to use stdout or -err.
> 
> I think closing stdin is quite crucial to correct operation, else the 
> daemon could accidentially get blocked.

I've also noticed that if I restart the maui daemon, my interactive
SSH-login shell to the central server refuses to terminate.  I have
to kill the shell from adifferent window.  Fortunately, the maui
daemon has always survived this harsh treatment of its open file
descriptors.

I have a (possibly naive) snippet of code from another type of
daemon process where the files are properly closed:

         /* Become a daemon */
         pid = fork();
         if (pid > 0) {          /* Parent */
     	        /* Close parent's streams */
    	        fclose (stdin);
    	        fclose (stdout);
    	        fclose (stderr);
                 return(0);
         } else if (pid < 0) {   /* Error */
                 printf("%s: Could not fork child process\n", argv[0]);
                 return(-1);
         }

The Maui code in src/server/OServer.c doesn't close file descriptors,
which IMHO it ought to do.  Ronny has even more detailed suggestions
above which I don't claim to understand fully.

Best regards,
Ole Holm Nielsen
Technical University of Denmark


More information about the mauiusers mailing list