cvs commit: src/bin/mv mv.c

Diomidis Spinellis dds at aueb.gr
Mon Dec 17 01:06:04 PST 2007


Alfred Perlstein wrote:
> * Diomidis Spinellis <dds at FreeBSD.org> [071216 09:47] wrote:
>> dds         2007-12-16 17:47:34 UTC
>>
>>   FreeBSD src repository
>>
>>   Modified files:
>>     bin/mv               mv.c 
>>   Log:
>>   Eliminate gcc "variable clobbered" warnings by declaring the variables
>>   living across the vfork as volatile.
>>   
>>   Noted by:       kan
>>   
>>   Revision  Changes    Path
>>   1.48      +2 -1      src/bin/mv/mv.c
> 
> I'm pretty sure that calling warn(3) under vfork() is not allowed
> as it can clobber stdio state.
> 
> To fix this, have the parent catch a return value from the child
> and emit the warning.

This has been there since (at least) 1994, but you're absolutely right. 
  POSIX states: "[...] the behavior is undefined if the process created 
by vfork() either modifies any data other than a variable of type pid_t 
used to store the return value from vfork(), or returns from the 
function in which vfork() was called, or calls any other function before 
successfully calling _exit() or one of the exec family of functions."

I've fixed it in the way you suggested.
-- 
Diomidis Spinellis


More information about the cvs-all mailing list