Re: [patch] skip posix open if nameidata is null

Shirish Pargaonkar <[email protected]>
Newsgroups gmane.linux.file-systems.cifs
Message-ID <[email protected]>
On Fri, Apr 2, 2010 at 5:44 PM, Jeff Layton <[email protected]> wrote:
> On Fri,  2 Apr 2010 12:32:58 -0500
> [email protected] wrote:
>
>> While creating a file on a server which supports unix extensions
>> such as Samba, if a file is being created which does not supply
>> nameidata (i.e. nd is null), cifs client can oops when calling
>> cifs_posix_open.
>>
>> The simplest solution is, do not open a file using posix semantics
>> if nameidata parameter is NULL even if server supports posix semantics.
>>
>> I do not see a way to reach vfsmount (structure) field if nameidata
>> is not supplied to call posix open (cifs_posix_open).
>>
>>
>> Signed-off-by: Shirish Pargaonkar <[email protected]>
>> Reported-by: Eugene Teo <[email protected]>
>> ---
>>
>> diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
>> index e9f7ecc..eef8d83 100644
>> --- a/fs/cifs/dir.c
>> +++ b/fs/cifs/dir.c
>> @@ -317,7 +317,7 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
>>       else
>>               oflags = FMODE_READ;
>>
>> -     if (tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) &&
>> +     if (nd && tcon->unix_ext && (tcon->ses->capabilities & CAP_UNIX) &&
>>           (CIFS_UNIX_POSIX_PATH_OPS_CAP &
>>                       le64_to_cpu(tcon->fsUnixInfo.Capability))) {
>>               rc = cifs_posix_open(full_path, &newinode, nd->path.mnt,
>
> There's nothing inherently special about posix opens that prevents them
> from working when nd is NULL. Instead of doing this, it would probably
> be preferable to have posix opens do what "regular" opens do when nd is
> NULL -- close the file before returning from cifs_create.
>
> --
> Jeff Layton <[email protected]>
>

Agree that just because nd is null, caller should not miss out on
posix semantics, but the way code is written
now, there is no way to access super_block within cifs_posix_open if
nd is NULL, will have to modify
cifs_posix_open to expect both vfsmount and super_block when invoked
and handle null nd/vfsmount case
within.

Regards,

Shirish
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.