| From 1a9a84ba816ba4a7c0ed25ae8e01be9980c517b6 Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <trond.myklebust@hammerspace.com> |
| Date: Fri, 7 Feb 2020 19:32:49 -0500 |
| Subject: [PATCH] NFS: alloc_nfs_open_context() must use the file cred when |
| available |
| |
| commit 1d179d6bd67369a52edea8562154b31ee20be1cc upstream. |
| |
| If we're creating a nfs_open_context() for a specific file pointer, |
| we must use the cred assigned to that file. |
| |
| Fixes: a52458b48af1 ("NFS/NFSD/SUNRPC: replace generic creds with 'struct cred'.") |
| Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c |
| index 53777813ca95..2c9b7bbf0fac 100644 |
| --- a/fs/nfs/inode.c |
| +++ b/fs/nfs/inode.c |
| @@ -957,16 +957,16 @@ struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, |
| struct file *filp) |
| { |
| struct nfs_open_context *ctx; |
| - const struct cred *cred = get_current_cred(); |
| |
| ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); |
| - if (!ctx) { |
| - put_cred(cred); |
| + if (!ctx) |
| return ERR_PTR(-ENOMEM); |
| - } |
| nfs_sb_active(dentry->d_sb); |
| ctx->dentry = dget(dentry); |
| - ctx->cred = cred; |
| + if (filp) |
| + ctx->cred = get_cred(filp->f_cred); |
| + else |
| + ctx->cred = get_current_cred(); |
| ctx->ll_cred = NULL; |
| ctx->state = NULL; |
| ctx->mode = f_mode; |
| -- |
| 2.7.4 |
| |