[linux-cifs-client] [patch] skip posix open if nameidata is null

Jeff Layton jlayton at samba.org
Fri Apr 2 16:44:15 MDT 2010


On Fri,  2 Apr 2010 12:32:58 -0500
shirishpargaonkar at gmail.com 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 <shirishpargaonkar at gmail.com>
> Reported-by: Eugene Teo <eugeneteo at kernel.sg>
> ---
> 
> 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 <jlayton at samba.org>


More information about the linux-cifs-client mailing list