From: J.Bruce Fields The memory leak here is embarassingly obvious. This fixes a problem that causes the kernel to leak a small amount of memory every time it receives a integrity-protected request. Thanks to Aim Le Rouzic for the bug report. Signed-off-by: J. Bruce Fields Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- net/sunrpc/auth_gss/svcauth_gss.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff -puN net/sunrpc/auth_gss/svcauth_gss.c~knfsd-svcrpc-fix-gss-krb5i-memory-leak net/sunrpc/auth_gss/svcauth_gss.c --- a/net/sunrpc/auth_gss/svcauth_gss.c~knfsd-svcrpc-fix-gss-krb5i-memory-leak +++ a/net/sunrpc/auth_gss/svcauth_gss.c @@ -818,19 +818,19 @@ unwrap_integ_data(struct xdr_buf *buf, u integ_len = svc_getnl(&buf->head[0]); if (integ_len & 3) - goto out; + return stat; if (integ_len > buf->len) - goto out; + return stat; if (xdr_buf_subsegment(buf, &integ_buf, 0, integ_len)) BUG(); /* copy out mic... */ if (read_u32_from_xdr_buf(buf, integ_len, &mic.len)) BUG(); if (mic.len > RPC_MAX_AUTH_SIZE) - goto out; + return stat; mic.data = kmalloc(mic.len, GFP_KERNEL); if (!mic.data) - goto out; + return stat; if (read_bytes_from_xdr_buf(buf, integ_len + 4, mic.data, mic.len)) goto out; maj_stat = gss_verify_mic(ctx, &integ_buf, &mic); @@ -840,6 +840,7 @@ unwrap_integ_data(struct xdr_buf *buf, u goto out; stat = 0; out: + kfree(mic.data); return stat; } _