From: Hoang Le Date: Fri, 13 Mar 2020 03:18:03 +0000 (+0700) Subject: tipc: add NULL pointer check to prevent kernel oops X-Git-Tag: v5.15~4200^2~163 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=746a1eda682cb7b5cd22f1b437da2121af64fbfe;p=platform%2Fkernel%2Flinux-starfive.git tipc: add NULL pointer check to prevent kernel oops Calling: tipc_node_link_down()-> - tipc_node_write_unlock()->tipc_mon_peer_down() - tipc_mon_peer_down() just after disabling bearer could be caused kernel oops. Fix this by adding a sanity check to make sure valid memory access. Acked-by: Jon Maloy Signed-off-by: Hoang Le Signed-off-by: David S. Miller --- diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c index 58708b4..6dce2ab 100644 --- a/net/tipc/monitor.c +++ b/net/tipc/monitor.c @@ -322,9 +322,13 @@ static void mon_assign_roles(struct tipc_monitor *mon, struct tipc_peer *head) void tipc_mon_remove_peer(struct net *net, u32 addr, int bearer_id) { struct tipc_monitor *mon = tipc_monitor(net, bearer_id); - struct tipc_peer *self = get_self(net, bearer_id); + struct tipc_peer *self; struct tipc_peer *peer, *prev, *head; + if (!mon) + return; + + self = get_self(net, bearer_id); write_lock_bh(&mon->lock); peer = get_peer(mon, addr); if (!peer) @@ -407,11 +411,15 @@ exit: void tipc_mon_peer_down(struct net *net, u32 addr, int bearer_id) { struct tipc_monitor *mon = tipc_monitor(net, bearer_id); - struct tipc_peer *self = get_self(net, bearer_id); + struct tipc_peer *self; struct tipc_peer *peer, *head; struct tipc_mon_domain *dom; int applied; + if (!mon) + return; + + self = get_self(net, bearer_id); write_lock_bh(&mon->lock); peer = get_peer(mon, addr); if (!peer) {