Commit 0f38b873 authored by Trond Myklebust's avatar Trond Myklebust

SUNRPC: Use GFP_NOFS when allocating credentials

Since the credentials may be allocated during the call to rpc_new_task(),
which again may be called by a memory allocator...
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 7e5f6146
...@@ -146,7 +146,7 @@ simple_get_netobj(const void *p, const void *end, struct xdr_netobj *dest) ...@@ -146,7 +146,7 @@ simple_get_netobj(const void *p, const void *end, struct xdr_netobj *dest)
q = (const void *)((const char *)p + len); q = (const void *)((const char *)p + len);
if (unlikely(q > end || q < p)) if (unlikely(q > end || q < p))
return ERR_PTR(-EFAULT); return ERR_PTR(-EFAULT);
dest->data = kmemdup(p, len, GFP_KERNEL); dest->data = kmemdup(p, len, GFP_NOFS);
if (unlikely(dest->data == NULL)) if (unlikely(dest->data == NULL))
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
dest->len = len; dest->len = len;
...@@ -171,7 +171,7 @@ gss_alloc_context(void) ...@@ -171,7 +171,7 @@ gss_alloc_context(void)
{ {
struct gss_cl_ctx *ctx; struct gss_cl_ctx *ctx;
ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); ctx = kzalloc(sizeof(*ctx), GFP_NOFS);
if (ctx != NULL) { if (ctx != NULL) {
ctx->gc_proc = RPC_GSS_PROC_DATA; ctx->gc_proc = RPC_GSS_PROC_DATA;
ctx->gc_seq = 1; /* NetApp 6.4R1 doesn't accept seq. no. 0 */ ctx->gc_seq = 1; /* NetApp 6.4R1 doesn't accept seq. no. 0 */
...@@ -341,7 +341,7 @@ gss_alloc_msg(struct gss_auth *gss_auth, uid_t uid) ...@@ -341,7 +341,7 @@ gss_alloc_msg(struct gss_auth *gss_auth, uid_t uid)
{ {
struct gss_upcall_msg *gss_msg; struct gss_upcall_msg *gss_msg;
gss_msg = kzalloc(sizeof(*gss_msg), GFP_KERNEL); gss_msg = kzalloc(sizeof(*gss_msg), GFP_NOFS);
if (gss_msg != NULL) { if (gss_msg != NULL) {
INIT_LIST_HEAD(&gss_msg->list); INIT_LIST_HEAD(&gss_msg->list);
rpc_init_wait_queue(&gss_msg->rpc_waitqueue, "RPCSEC_GSS upcall waitq"); rpc_init_wait_queue(&gss_msg->rpc_waitqueue, "RPCSEC_GSS upcall waitq");
...@@ -503,7 +503,7 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen) ...@@ -503,7 +503,7 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
if (mlen > MSG_BUF_MAXSIZE) if (mlen > MSG_BUF_MAXSIZE)
goto out; goto out;
err = -ENOMEM; err = -ENOMEM;
buf = kmalloc(mlen, GFP_KERNEL); buf = kmalloc(mlen, GFP_NOFS);
if (!buf) if (!buf)
goto out; goto out;
...@@ -806,7 +806,7 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) ...@@ -806,7 +806,7 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
dprintk("RPC: gss_create_cred for uid %d, flavor %d\n", dprintk("RPC: gss_create_cred for uid %d, flavor %d\n",
acred->uid, auth->au_flavor); acred->uid, auth->au_flavor);
if (!(cred = kzalloc(sizeof(*cred), GFP_KERNEL))) if (!(cred = kzalloc(sizeof(*cred), GFP_NOFS)))
goto out_err; goto out_err;
rpcauth_init_cred(&cred->gc_base, acred, auth, &gss_credops); rpcauth_init_cred(&cred->gc_base, acred, auth, &gss_credops);
......
...@@ -70,7 +70,7 @@ simple_get_netobj(const void *p, const void *end, struct xdr_netobj *res) ...@@ -70,7 +70,7 @@ simple_get_netobj(const void *p, const void *end, struct xdr_netobj *res)
q = (const void *)((const char *)p + len); q = (const void *)((const char *)p + len);
if (unlikely(q > end || q < p)) if (unlikely(q > end || q < p))
return ERR_PTR(-EFAULT); return ERR_PTR(-EFAULT);
res->data = kmemdup(p, len, GFP_KERNEL); res->data = kmemdup(p, len, GFP_NOFS);
if (unlikely(res->data == NULL)) if (unlikely(res->data == NULL))
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
res->len = len; res->len = len;
...@@ -131,7 +131,7 @@ gss_import_sec_context_kerberos(const void *p, ...@@ -131,7 +131,7 @@ gss_import_sec_context_kerberos(const void *p,
struct krb5_ctx *ctx; struct krb5_ctx *ctx;
int tmp; int tmp;
if (!(ctx = kzalloc(sizeof(*ctx), GFP_KERNEL))) if (!(ctx = kzalloc(sizeof(*ctx), GFP_NOFS)))
goto out_err; goto out_err;
p = simple_get_bytes(p, end, &ctx->initiate, sizeof(ctx->initiate)); p = simple_get_bytes(p, end, &ctx->initiate, sizeof(ctx->initiate));
......
...@@ -76,7 +76,7 @@ simple_get_netobj(const void *p, const void *end, struct xdr_netobj *res) ...@@ -76,7 +76,7 @@ simple_get_netobj(const void *p, const void *end, struct xdr_netobj *res)
q = (const void *)((const char *)p + len); q = (const void *)((const char *)p + len);
if (unlikely(q > end || q < p)) if (unlikely(q > end || q < p))
return ERR_PTR(-EFAULT); return ERR_PTR(-EFAULT);
res->data = kmemdup(p, len, GFP_KERNEL); res->data = kmemdup(p, len, GFP_NOFS);
if (unlikely(res->data == NULL)) if (unlikely(res->data == NULL))
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
return q; return q;
...@@ -90,7 +90,7 @@ gss_import_sec_context_spkm3(const void *p, size_t len, ...@@ -90,7 +90,7 @@ gss_import_sec_context_spkm3(const void *p, size_t len,
struct spkm3_ctx *ctx; struct spkm3_ctx *ctx;
int version; int version;
if (!(ctx = kzalloc(sizeof(*ctx), GFP_KERNEL))) if (!(ctx = kzalloc(sizeof(*ctx), GFP_NOFS)))
goto out_err; goto out_err;
p = simple_get_bytes(p, end, &version, sizeof(version)); p = simple_get_bytes(p, end, &version, sizeof(version));
......
...@@ -90,7 +90,7 @@ asn1_bitstring_len(struct xdr_netobj *in, int *enclen, int *zerobits) ...@@ -90,7 +90,7 @@ asn1_bitstring_len(struct xdr_netobj *in, int *enclen, int *zerobits)
int int
decode_asn1_bitstring(struct xdr_netobj *out, char *in, int enclen, int explen) decode_asn1_bitstring(struct xdr_netobj *out, char *in, int enclen, int explen)
{ {
if (!(out->data = kzalloc(explen,GFP_KERNEL))) if (!(out->data = kzalloc(explen,GFP_NOFS)))
return 0; return 0;
out->len = explen; out->len = explen;
memcpy(out->data, in, enclen); memcpy(out->data, in, enclen);
......
...@@ -66,7 +66,7 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags) ...@@ -66,7 +66,7 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
dprintk("RPC: allocating UNIX cred for uid %d gid %d\n", dprintk("RPC: allocating UNIX cred for uid %d gid %d\n",
acred->uid, acred->gid); acred->uid, acred->gid);
if (!(cred = kmalloc(sizeof(*cred), GFP_KERNEL))) if (!(cred = kmalloc(sizeof(*cred), GFP_NOFS)))
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
rpcauth_init_cred(&cred->uc_base, acred, auth, &unix_credops); rpcauth_init_cred(&cred->uc_base, acred, auth, &unix_credops);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment