From: Vlad Yasevich Date: Sat, 19 Jul 2008 06:06:07 +0000 (-0700) Subject: sctp: Do not leak memory on multiple listen() calls X-Git-Url: http://git.osdn.net/view?p=linux-kernel-docs%2Flinux-2.4.36.git;a=commitdiff_plain;h=457b8910e4deb9f83b821ae25ae03a0d593df625 sctp: Do not leak memory on multiple listen() calls [backport of 2.6 commit 23b29ed80bd7184398317a111dc488605cb66c7f] SCTP permits multiple listen call and on subsequent calls we leak he memory allocated for the crypto transforms. Signed-off-by: Vlad Yasevich Signed-off-by: David S. Miller Signed-off-by: Willy Tarreau --- diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 8d13849e..6e9c1952 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -3985,7 +3985,7 @@ int sctp_inet_listen(struct socket *sock, int backlog) goto out; /* Allocate HMAC for generating cookie. */ - if (sctp_hmac_alg) { + if (!sctp_sk(sk)->hmac && sctp_hmac_alg) { tfm = sctp_crypto_alloc_tfm(sctp_hmac_alg, 0); if (!tfm) { err = -ENOSYS; @@ -4007,7 +4007,8 @@ int sctp_inet_listen(struct socket *sock, int backlog) goto cleanup; /* Store away the transform reference. */ - sctp_sk(sk)->hmac = tfm; + if (!sctp_sk(sk)->hmac) + sctp_sk(sk)->hmac = tfm; out: sctp_release_sock(sk); return err;