xfrm: Fix aevent generation for each received packet
commitcd808fc9a6c7cd3a4311d9d2cffc4adbeaef5f6c
authorThomas Egerer <thomas.egerer@secunet.com>
Thu, 19 Sep 2013 11:19:19 +0000 (19 13:19 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Wed, 25 Sep 2013 05:32:48 +0000 (25 07:32 +0200)
tree82279120c03e0980a1da1f22beba85ee97a228f2
parent33fce60d6a6e137035f8e23a89d7fd55f3a24cda
xfrm: Fix aevent generation for each received packet

If asynchronous events are enabled for a particular netlink socket,
the notify function is called by the advance function. The notify
function creates and dispatches a km_event if a replay timeout occurred,
or at least replay_maxdiff packets have been received since the last
asynchronous event has been sent. The function is supposed to return if
neither of the two events were detected for a state, or replay_maxdiff
is equal to zero.
Replay_maxdiff is initialized in xfrm_state_construct to the value of
the xfrm.sysctl_aevent_rseqth (2 by default), and updated if for a state
if the netlink attribute XFRMA_REPLAY_THRESH is set.
If, however, replay_maxdiff is set to zero, then all of the three notify
implementations perform a break from the switch statement instead of
checking whether a timeout occurred, and -- if not -- return.  As a
result an asynchronous event is generated for every replay update of a
state that has a zero replay_maxdiff value.
This patch modifies the notify functions such that they immediately
return if replay_maxdiff has the value zero, unless a timeout occurred.

Signed-off-by: Thomas Egerer <thomas.egerer@secunet.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/xfrm/xfrm_replay.c