blob: 7dab9681d886127a49d0dea2033b62cbdb8524c7 [file] [log] [blame]
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