From 9162bb319e8a057f1ef7ed093f2e4f6dbb5e5cd0 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Sat, 7 Feb 2004 16:32:34 +0100 Subject: [PATCH] RPCSEC_GSS: Fix yet more memory leaks. --- net/sunrpc/auth_gss/auth_gss.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 97bcb1f1aa5a1..3e014068e5ae8 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c @@ -720,6 +720,7 @@ gss_marshal(struct rpc_task *task, u32 *p, int ruid) goto out_put_ctx; } p = xdr_encode_netobj(p, &bufout); + gss_put_ctx(ctx); kfree(bufout.data); return p; out_put_ctx: @@ -758,13 +759,13 @@ gss_validate(struct rpc_task *task, u32 *p) flav = ntohl(*p++); if ((len = ntohl(*p++)) > RPC_MAX_AUTH_SIZE) { printk("RPC: giant verf size: %ld\n", (unsigned long) len); - return NULL; + goto out_bad; } dprintk("RPC: gss_validate: verifier flavor %d, len %d\n", flav, len); if (flav != RPC_AUTH_GSS) { printk("RPC: bad verf flavor: %ld\n", (unsigned long)flav); - return NULL; + goto out_bad; } seq = htonl(task->tk_gss_seqno); bufin.data = (u8 *) &seq; @@ -773,10 +774,14 @@ gss_validate(struct rpc_task *task, u32 *p) bufout.len = len; if (gss_verify_mic(ctx->gc_gss_ctx, &bufin, &bufout, &qop_state) != 0) - return NULL; + goto out_bad; task->tk_auth->au_rslack = XDR_QUADLEN(len) + 2; dprintk("RPC: GSS gss_validate: gss_verify_mic succeeded.\n"); + gss_put_ctx(ctx); return p + XDR_QUADLEN(len); +out_bad: + gss_put_ctx(ctx); + return NULL; } static struct rpc_authops authgss_ops = { -- 2.53.0