Re: [PATCH] cifs: Use file_dentry()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Looks correct.

Acked-by: Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx>

On Mon, Apr 18, 2016 at 6:41 AM, Goldwyn Rodrigues <rgoldwyn@xxxxxxx> wrote:
> From: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx>
>
> CIFS may be used as lower layer of overlayfs and accessing f_path.dentry can
> lead to a crash.
>
> Fix by replacing direct access of file->f_path.dentry with the
> file_dentry() accessor, which will always return a native object.
>
> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx>
>
> diff --git a/fs/cifs/file.c b/fs/cifs/file.c
> index c03d074..489ddc7 100644
> --- a/fs/cifs/file.c
> +++ b/fs/cifs/file.c
> @@ -271,7 +271,7 @@ struct cifsFileInfo *
>  cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
>                   struct tcon_link *tlink, __u32 oplock)
>  {
> -       struct dentry *dentry = file->f_path.dentry;
> +       struct dentry *dentry = file_dentry(file);
>         struct inode *inode = d_inode(dentry);
>         struct cifsInodeInfo *cinode = CIFS_I(inode);
>         struct cifsFileInfo *cfile;
> @@ -461,7 +461,7 @@ int cifs_open(struct inode *inode, struct file *file)
>         tcon = tlink_tcon(tlink);
>         server = tcon->ses->server;
>
> -       full_path = build_path_from_dentry(file->f_path.dentry);
> +       full_path = build_path_from_dentry(file_dentry(file));
>         if (full_path == NULL) {
>                 rc = -ENOMEM;
>                 goto out;
> diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
> index b30a4a6..8806584 100644
> --- a/fs/cifs/readdir.c
> +++ b/fs/cifs/readdir.c
> @@ -300,7 +300,7 @@ initiate_cifs_search(const unsigned int xid, struct file *file)
>         cifsFile->invalidHandle = true;
>         cifsFile->srch_inf.endOfSearch = false;
>
> -       full_path = build_path_from_dentry(file->f_path.dentry);
> +       full_path = build_path_from_dentry(file_dentry(file));
>         if (full_path == NULL) {
>                 rc = -ENOMEM;
>                 goto error_exit;
> @@ -759,7 +759,7 @@ static int cifs_filldir(char *find_entry, struct file *file,
>                  */
>                 fattr.cf_flags |= CIFS_FATTR_NEED_REVAL;
>
> -       cifs_prime_dcache(file->f_path.dentry, &name, &fattr);
> +       cifs_prime_dcache(file_dentry(file), &name, &fattr);
>
>         ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid);
>         return !dir_emit(ctx, name.name, name.len, ino, fattr.cf_dtype);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux