cvs commit: src/sys/dev/streams streams.csrc/sys/kernkern_descrip.csrc/sys/opencrypto cryptodev.c

Scott Long scottl at freebsd.org
Sun Oct 19 18:41:20 PDT 2003


Alan L. Cox wrote:
> David Malone wrote:
> 
>>dwmalone    2003/10/19 13:41:07 PDT
>>
>>  FreeBSD src repository
>>
>>  Modified files:
>>    sys/dev/streams      streams.c
>>    sys/kern             kern_descrip.c kern_event.c sys_pipe.c
>>                         uipc_syscalls.c vfs_syscalls.c
>>    sys/opencrypto       cryptodev.c
>>  Log:
>>  falloc allocates a file structure and adds it to the file descriptor
>>  table, acquiring the necessary locks as it works. It usually returns
>>  two references to the new descriptor: one in the descriptor table
>>  and one via a pointer argument.
>>
>>  As falloc releases the FILEDESC lock before returning, there is a
>>  potential for a process to close the reference in the file descriptor
>>  table before falloc's caller gets to use the file. I don't think this
>>  can happen in practice at the moment, because Giant indirectly protects
>>  closes.
>>
>>  To stop the file being completly closed in this situation, this change
>>  makes falloc set the refcount to two when both references are returned.
>>  This makes life easier for several of falloc's callers, because the
>>  first thing they previously did was grab an extra reference on the
>>  file.
>>
> 
> 
> This reminds me that we still hold Giant around pipe(2) because it isn't
> declared MPSAFE in the syscall table.  Is this still necessary?

I've been suspicious of this too, and I was hoping that you would have
an answer.  Can we go ahead and correct this?

> 
> Additionally, we declare dup2(2) to be MPSAFE, but not dup(2).  Given
> their implementations that seems odd.

We likely need to do a review through the syscalls and weed out problems
like this.  Any volunteers?

Scott




More information about the cvs-src mailing list