From: Marcelo Ricardo Leitner <marcelo.leitner@xxxxxxxxx> Date: Fri, 8 Sep 2017 11:35:21 -0300 > Commit fb586f25300f ("sctp: delay calls to sk_data_ready() as much as > possible") minimized the number of wake ups that are triggered in case > the association receives a packet with multiple data chunks on it and/or > when io_events are enabled and then commit 0970f5b36659 ("sctp: signal > sk_data_ready earlier on data chunks reception") moved the wake up to as > soon as possible. It thus relies on the state machine running later to > clean the flag that the event was already generated. > > The issue is that there are 2 call paths that calls > sctp_ulpq_tail_event() outside of the state machine, causing the flag to > linger and possibly omitting a needed wake up in the sequence. > > One of the call paths is when enabling SCTP_SENDER_DRY_EVENTS via > setsockopt(SCTP_EVENTS), as noticed by Harald Welte. The other is when > partial reliability triggers removal of chunks from the send queue when > the application calls sendmsg(). > > This commit fixes it by not setting the flag in case the socket is not > owned by the user, as it won't be cleaned later. This works for > user-initiated calls and also for rx path processing. > > Fixes: fb586f25300f ("sctp: delay calls to sk_data_ready() as much as possible") > Reported-by: Harald Welte <laforge@xxxxxxxxxxxx> > Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@xxxxxxxxx> Applied and queued up for -stable, th anks. -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html