aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/include/linux/cred.h
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2018-12-03 11:30:30 +1100
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2018-12-19 13:52:44 -0500
commit97d0fb239c041f5f99655af74812c3ab75cc4346 (patch)
tree767e0ff0ed918579b3afb8d9fcd1e37d4143d12b /include/linux/cred.h
parentcred: add cred_fscmp() for comparing creds. (diff)
downloadwireguard-linux-97d0fb239c041f5f99655af74812c3ab75cc4346.tar.xz
wireguard-linux-97d0fb239c041f5f99655af74812c3ab75cc4346.zip
cred: add get_cred_rcu()
Sometimes we want to opportunistically get a ref to a cred in an rcu_read_lock protected section. get_task_cred() does this, and NFS does as similar thing with its own credential structures. To prepare for NFS converting to use 'struct cred' more uniformly, define get_cred_rcu(), and use it in get_task_cred(). Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'include/linux/cred.h')
-rw-r--r--include/linux/cred.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/cred.h b/include/linux/cred.h
index f1085767e1b3..48979fcb95cf 100644
--- a/include/linux/cred.h
+++ b/include/linux/cred.h
@@ -252,6 +252,17 @@ static inline const struct cred *get_cred(const struct cred *cred)
return get_new_cred(nonconst_cred);
}
+static inline const struct cred *get_cred_rcu(const struct cred *cred)
+{
+ struct cred *nonconst_cred = (struct cred *) cred;
+ if (!cred)
+ return NULL;
+ if (!atomic_inc_not_zero(&nonconst_cred->usage))
+ return NULL;
+ validate_creds(cred);
+ return cred;
+}
+
/**
* put_cred - Release a reference to a set of credentials
* @cred: The credentials to release