|
|
@@ -2600,6 +2600,8 @@ do_addr_param:
|
|
|
case SCTP_PARAM_STATE_COOKIE:
|
|
|
asoc->peer.cookie_len =
|
|
|
ntohs(param.p->length) - sizeof(struct sctp_paramhdr);
|
|
|
+ if (asoc->peer.cookie)
|
|
|
+ kfree(asoc->peer.cookie);
|
|
|
asoc->peer.cookie = kmemdup(param.cookie->body, asoc->peer.cookie_len, gfp);
|
|
|
if (!asoc->peer.cookie)
|
|
|
retval = 0;
|
|
|
@@ -2664,6 +2666,8 @@ do_addr_param:
|
|
|
goto fall_through;
|
|
|
|
|
|
/* Save peer's random parameter */
|
|
|
+ if (asoc->peer.peer_random)
|
|
|
+ kfree(asoc->peer.peer_random);
|
|
|
asoc->peer.peer_random = kmemdup(param.p,
|
|
|
ntohs(param.p->length), gfp);
|
|
|
if (!asoc->peer.peer_random) {
|
|
|
@@ -2677,6 +2681,8 @@ do_addr_param:
|
|
|
goto fall_through;
|
|
|
|
|
|
/* Save peer's HMAC list */
|
|
|
+ if (asoc->peer.peer_hmacs)
|
|
|
+ kfree(asoc->peer.peer_hmacs);
|
|
|
asoc->peer.peer_hmacs = kmemdup(param.p,
|
|
|
ntohs(param.p->length), gfp);
|
|
|
if (!asoc->peer.peer_hmacs) {
|
|
|
@@ -2692,6 +2698,8 @@ do_addr_param:
|
|
|
if (!ep->auth_enable)
|
|
|
goto fall_through;
|
|
|
|
|
|
+ if (asoc->peer.peer_chunks)
|
|
|
+ kfree(asoc->peer.peer_chunks);
|
|
|
asoc->peer.peer_chunks = kmemdup(param.p,
|
|
|
ntohs(param.p->length), gfp);
|
|
|
if (!asoc->peer.peer_chunks)
|