]> git.hungrycats.org Git - linux/commitdiff
RPCSEC_GSS: Fix yet more memory leaks.
authorTrond Myklebust <trond.myklebust@fys.uio.no>
Sat, 7 Feb 2004 15:32:34 +0000 (16:32 +0100)
committerTrond Myklebust <trond.myklebust@fys.uio.no>
Sat, 7 Feb 2004 15:32:34 +0000 (16:32 +0100)
net/sunrpc/auth_gss/auth_gss.c

index 97bcb1f1aa5a18e4fb079bc00fa5380f1f8aa571..3e014068e5ae8ee040a2c4fb87da594104670447 100644 (file)
@@ -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 = {