aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/sctp_auth.c
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@FreeBSD.org>2015-03-25 22:45:54 +0000
committerMichael Tuexen <tuexen@FreeBSD.org>2015-03-25 22:45:54 +0000
commita756ffc9312f32cfb3a704c5ce0523652e4aeccf (patch)
treea8d81786a1fa81ea57affc3476ab8d8da7d20f65 /sys/netinet/sctp_auth.c
parent6fb3faab63f8e63e85abffaab6e59c81e49e2e2e (diff)
downloadsrc-a756ffc9312f32cfb3a704c5ce0523652e4aeccf.tar.gz
src-a756ffc9312f32cfb3a704c5ce0523652e4aeccf.zip
Make sure that we don't free an SCTP shared key too early.
Thanks to Pouyan Sepehrdad from Qualcomm Product Security Initiative for reporting the issue. MFC after: 3 days
Notes
Notes: svn path=/head/; revision=280642
Diffstat (limited to 'sys/netinet/sctp_auth.c')
-rw-r--r--sys/netinet/sctp_auth.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/netinet/sctp_auth.c b/sys/netinet/sctp_auth.c
index 8ce2aab4f936..7c2e194e1d2f 100644
--- a/sys/netinet/sctp_auth.c
+++ b/sys/netinet/sctp_auth.c
@@ -576,13 +576,12 @@ sctp_auth_key_release(struct sctp_tcb *stcb, uint16_t key_id, int so_locked
/* decrement the ref count */
if (skey) {
- sctp_free_sharedkey(skey);
SCTPDBG(SCTP_DEBUG_AUTH2,
"%s: stcb %p key %u refcount release to %d\n",
__FUNCTION__, (void *)stcb, key_id, skey->refcount);
/* see if a notification should be generated */
- if ((skey->refcount <= 1) && (skey->deactivated)) {
+ if ((skey->refcount <= 2) && (skey->deactivated)) {
/* notify ULP that key is no longer used */
sctp_ulp_notify(SCTP_NOTIFY_AUTH_FREE_KEY, stcb,
key_id, 0, so_locked);
@@ -590,6 +589,7 @@ sctp_auth_key_release(struct sctp_tcb *stcb, uint16_t key_id, int so_locked
"%s: stcb %p key %u no longer used, %d\n",
__FUNCTION__, (void *)stcb, key_id, skey->refcount);
}
+ sctp_free_sharedkey(skey);
}
}