sctp: add SCTP_AUTH_FREE_KEY type for AUTHENTICATION_EVENT
This patch is to add SCTP_AUTH_FREE_KEY type for AUTHENTICATION_EVENT, as described in section 6.1.8 of RFC6458. SCTP_AUTH_FREE_KEY: This report indicates that the SCTP implementation will no longer use the key identifier specified in auth_keynumber. After deactivating a key, it would never be used again, which means it's refcnt can't be held/increased by new chunks. But there may be some chunks in out queue still using it. So only when refcnt is 1, which means no chunk in outqueue is using/holding this key either, this EVENT would be sent. When users receive this notification, they could do DEL_KEY sockopt to remove this shkey, and also tell the peer that this key won't be used in any chunk thoroughly from now on, then the peer can remove it as well safely. Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
601590ec15
commit
ec2e506c68
@@ -992,6 +992,20 @@ int sctp_auth_deact_key_id(struct sctp_endpoint *ep,
|
||||
if (!found)
|
||||
return -EINVAL;
|
||||
|
||||
/* refcnt == 1 and !list_empty mean it's not being used anywhere
|
||||
* and deactivated will be set, so it's time to notify userland
|
||||
* that this shkey can be freed.
|
||||
*/
|
||||
if (asoc && !list_empty(&key->key_list) &&
|
||||
refcount_read(&key->refcnt) == 1) {
|
||||
struct sctp_ulpevent *ev;
|
||||
|
||||
ev = sctp_ulpevent_make_authkey(asoc, key->key_id,
|
||||
SCTP_AUTH_FREE_KEY, GFP_KERNEL);
|
||||
if (ev)
|
||||
asoc->stream.si->enqueue_event(&asoc->ulpq, ev);
|
||||
}
|
||||
|
||||
key->deactivated = 1;
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user