From: David M. <da...@da...> - 2019-05-16 19:26:09
|
From: hujunwei <huj...@hu...> Date: Thu, 16 May 2019 10:51:15 +0800 > From: Junwei Hu <huj...@hu...> > > When tipc is loaded while many processes try to create a TIPC socket, > a crash occurs: > PANIC: Unable to handle kernel paging request at virtual > address "dfff20000000021d" > pc : tipc_sk_create+0x374/0x1180 [tipc] > lr : tipc_sk_create+0x374/0x1180 [tipc] > Exception class = DABT (current EL), IL = 32 bits > Call trace: > tipc_sk_create+0x374/0x1180 [tipc] > __sock_create+0x1cc/0x408 > __sys_socket+0xec/0x1f0 > __arm64_sys_socket+0x74/0xa8 > ... > > This is due to race between sock_create and unfinished > register_pernet_device. tipc_sk_insert tries to do > "net_generic(net, tipc_net_id)". > but tipc_net_id is not initialized yet. > > So switch the order of the two to close the race. > > This can be reproduced with multiple processes doing socket(AF_TIPC, ...) > and one process doing module removal. > > Fixes: a62fbccecd62 ("tipc: make subscriber server support net namespace") > Signed-off-by: Junwei Hu <huj...@hu...> > Reported-by: Wang Wang <wan...@hu...> > Reviewed-by: Xiaogang Wang <wan...@hu...> Applied and queued up for -stable. |