Instead of having gss_get_mic allocate memory for the mic, require the caller to pass an output buffer whose data pointer already points to preallocated memory. diff -puN net/sunrpc/auth_gss/auth_gss.c~gss-kmalloc-elimination net/sunrpc/auth_gss/auth_gss.c --- linux-2.5.74/net/sunrpc/auth_gss/auth_gss.c~gss-kmalloc-elimination 2003-07-03 17:51:57.000000000 -0400 +++ linux-2.5.74-bfields/net/sunrpc/auth_gss/auth_gss.c 2003-07-03 17:55:14.000000000 -0400 @@ -644,6 +644,7 @@ gss_marshal(struct rpc_task *task, u32 * /* set verifier flavor*/ *p++ = htonl(RPC_AUTH_GSS); + mic.data = (u8 *)(p + 1); maj_stat = gss_get_mic(ctx->gc_gss_ctx, GSS_C_QOP_DEFAULT, &bufin, &bufout); @@ -652,7 +653,8 @@ gss_marshal(struct rpc_task *task, u32 * maj_stat); goto out_put_ctx; } - p = xdr_encode_netobj(p, &bufout); + *p++ = htonl(mic.len); + p += XDR_QUADLEN(mic.len); return p; out_put_ctx: gss_put_ctx(ctx); diff -puN net/sunrpc/auth_gss/gss_krb5_seal.c~gss-kmalloc-elimination net/sunrpc/auth_gss/gss_krb5_seal.c --- linux-2.5.74/net/sunrpc/auth_gss/gss_krb5_seal.c~gss-kmalloc-elimination 2003-07-03 17:56:27.000000000 -0400 +++ linux-2.5.74-bfields/net/sunrpc/auth_gss/gss_krb5_seal.c 2003-07-03 17:57:06.000000000 -0400 @@ -93,8 +93,6 @@ krb5_make_token(struct krb5_ctx *ctx, in now = jiffies; - token->data = NULL; - if (qop_req != 0) goto out_err; @@ -122,8 +120,6 @@ krb5_make_token(struct krb5_ctx *ctx, in } token->len = g_token_size(&ctx->mech_used, 22 + tmsglen); - if ((token->data = kmalloc(token->len, GFP_KERNEL)) == NULL) - goto out_err; ptr = token->data; g_make_token_header(&ctx->mech_used, 22 + tmsglen, &ptr, toktype); _