--- /dev/null
+From f06bc03339ad4c1baa964a5f0606247ac1c3c50b Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.com>
+Date: Mon, 3 Dec 2018 11:30:30 +1100
+Subject: cred: allow get_cred() and put_cred() to be given NULL.
+
+From: NeilBrown <neilb@suse.com>
+
+commit f06bc03339ad4c1baa964a5f0606247ac1c3c50b upstream.
+
+It is common practice for helpers like this to silently,
+accept a NULL pointer.
+get_rpccred() and put_rpccred() used by NFS act this way
+and using the same interface will ease the conversion
+for NFS, and simplify the resulting code.
+
+Signed-off-by: NeilBrown <neilb@suse.com>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Cc: Eric Dumazet <edumazet@google.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ include/linux/cred.h | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+--- a/include/linux/cred.h
++++ b/include/linux/cred.h
+@@ -234,7 +234,7 @@ static inline struct cred *get_new_cred(
+ * @cred: The credentials to reference
+ *
+ * Get a reference on the specified set of credentials. The caller must
+- * release the reference.
++ * release the reference. If %NULL is passed, it is returned with no action.
+ *
+ * This is used to deal with a committed set of credentials. Although the
+ * pointer is const, this will temporarily discard the const and increment the
+@@ -245,6 +245,8 @@ static inline struct cred *get_new_cred(
+ static inline const struct cred *get_cred(const struct cred *cred)
+ {
+ struct cred *nonconst_cred = (struct cred *) cred;
++ if (!cred)
++ return cred;
+ validate_creds(cred);
+ nonconst_cred->non_rcu = 0;
+ return get_new_cred(nonconst_cred);
+@@ -255,7 +257,7 @@ static inline const struct cred *get_cre
+ * @cred: The credentials to release
+ *
+ * Release a reference to a set of credentials, deleting them when the last ref
+- * is released.
++ * is released. If %NULL is passed, nothing is done.
+ *
+ * This takes a const pointer to a set of credentials because the credentials
+ * on task_struct are attached by const pointers to prevent accidental
+@@ -265,9 +267,11 @@ static inline void put_cred(const struct
+ {
+ struct cred *cred = (struct cred *) _cred;
+
+- validate_creds(cred);
+- if (atomic_dec_and_test(&(cred)->usage))
+- __put_cred(cred);
++ if (cred) {
++ validate_creds(cred);
++ if (atomic_dec_and_test(&(cred)->usage))
++ __put_cred(cred);
++ }
+ }
+
+ /**