From: Xin Long <lucien.xin@xxxxxxxxx> Date: Fri, 15 Sep 2017 11:02:21 +0800 > Commit 86fdb3448cc1 ("sctp: ensure ep is not destroyed before doing the > dump") tried to fix an use-after-free issue by checking !sctp_sk(sk)->ep > with holding sock and sock lock. > > But Paolo noticed that endpoint could be destroyed in sctp_rcv without > sock lock protection. It means the use-after-free issue still could be > triggered when sctp_rcv put and destroy ep after sctp_sock_dump checks > !ep, although it's pretty hard to reproduce. > > I could reproduce it by mdelay in sctp_rcv while msleep in sctp_close > and sctp_sock_dump long time. > > This patch is to add another param cb_done to sctp_for_each_transport > and dump ep->assocs with holding tsp after jumping out of transport's > traversal in it to avoid this issue. > > It can also improve sctp diag dump to make it run faster, as no need > to save sk into cb->args[5] and keep calling sctp_for_each_transport > any more. > > This patch is also to use int * instead of int for the pos argument > in sctp_for_each_transport, which could make postion increment only > in sctp_for_each_transport and no need to keep changing cb->args[2] > in sctp_sock_filter and sctp_sock_dump any more. > > Fixes: 86fdb3448cc1 ("sctp: ensure ep is not destroyed before doing the dump") > Reported-by: Paolo Abeni <pabeni@xxxxxxxxxx> > Signed-off-by: Xin Long <lucien.xin@xxxxxxxxx> Applied. -- 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